class ReassociatePass

Declaration

class ReassociatePass : public PassInfoMixin { /* full declaration omitted */ };

Description

Reassociate commutative expressions.

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:71

Inherits from: PassInfoMixin

Member Variables

protected DenseMap<llvm::BasicBlock*, unsigned int> RankMap
protected DenseMap<AssertingVH<llvm::Value>, unsigned int> ValueRankMap
protected llvm::ReassociatePass::OrderedSet RedoInsts
protected DenseMap<std::pair<Value*, Value*>, llvm::ReassociatePass::PairMapValue>[18] PairMap
protected bool MadeChange
protected static const unsigned int GlobalReassociateLimit = 10
protected static const unsigned int NumBinaryOps = Instruction::BinaryOpsEnd - Instruction::BinaryOpsBegin

Method Overview

  • private void BuildPairMap(ReversePostOrderTraversal<llvm::Function *> & RPOT)
  • private void BuildRankMap(llvm::Function & F, ReversePostOrderTraversal<llvm::Function *> & RPOT)
  • private bool CombineXorOpnd(llvm::Instruction * I, reassociate::XorOpnd * Opnd1, llvm::APInt & ConstOpnd, llvm::Value *& Res)
  • private bool CombineXorOpnd(llvm::Instruction * I, reassociate::XorOpnd * Opnd1, reassociate::XorOpnd * Opnd2, llvm::APInt & ConstOpnd, llvm::Value *& Res)
  • private void EraseInst(llvm::Instruction * I)
  • private llvm::Value * OptimizeAdd(llvm::Instruction * I, SmallVectorImpl<reassociate::ValueEntry> & Ops)
  • private llvm::Value * OptimizeExpression(llvm::BinaryOperator * I, SmallVectorImpl<reassociate::ValueEntry> & Ops)
  • private void OptimizeInst(llvm::Instruction * I)
  • private llvm::Value * OptimizeMul(llvm::BinaryOperator * I, SmallVectorImpl<reassociate::ValueEntry> & Ops)
  • private llvm::Value * OptimizeXor(llvm::Instruction * I, SmallVectorImpl<reassociate::ValueEntry> & Ops)
  • private void ReassociateExpression(llvm::BinaryOperator * I)
  • private void RecursivelyEraseDeadInsts(llvm::Instruction * I, llvm::ReassociatePass::OrderedSet & Insts)
  • private llvm::Value * RemoveFactorFromExpression(llvm::Value * V, llvm::Value * Factor)
  • private void RewriteExprTree(llvm::BinaryOperator * I, SmallVectorImpl<reassociate::ValueEntry> & Ops)
  • private llvm::Value * buildMinimalMultiplyDAG(llvm::IRBuilderBase & Builder, SmallVectorImpl<reassociate::Factor> & Factors)
  • private llvm::Instruction * canonicalizeNegFPConstants(llvm::Instruction * I)
  • private llvm::Instruction * canonicalizeNegFPConstantsForOp(llvm::Instruction * I, llvm::Instruction * Op, llvm::Value * OtherOp)
  • private void canonicalizeOperands(llvm::Instruction * I)
  • private unsigned int getRank(llvm::Value * V)
  • public llvm::PreservedAnalyses run(llvm::Function & F, llvm::FunctionAnalysisManager &)

Methods

void BuildPairMap(
    ReversePostOrderTraversal<llvm::Function*>&
        RPOT)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:128

Parameters

ReversePostOrderTraversal<llvm::Function*>& RPOT

void BuildRankMap(
    llvm::Function& F,
    ReversePostOrderTraversal<llvm::Function*>&
        RPOT)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:100

Parameters

llvm::Function& F
ReversePostOrderTraversal<llvm::Function*>& RPOT

bool CombineXorOpnd(llvm::Instruction* I,
                    reassociate::XorOpnd* Opnd1,
                    llvm::APInt& ConstOpnd,
                    llvm::Value*& Res)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:112

Parameters

llvm::Instruction* I
reassociate::XorOpnd* Opnd1
llvm::APInt& ConstOpnd
llvm::Value*& Res

bool CombineXorOpnd(llvm::Instruction* I,
                    reassociate::XorOpnd* Opnd1,
                    reassociate::XorOpnd* Opnd2,
                    llvm::APInt& ConstOpnd,
                    llvm::Value*& Res)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:114

Parameters

llvm::Instruction* I
reassociate::XorOpnd* Opnd1
reassociate::XorOpnd* Opnd2
llvm::APInt& ConstOpnd
llvm::Value*& Res

void EraseInst(llvm::Instruction* I)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:122

Parameters

llvm::Instruction* I

llvm::Value* OptimizeAdd(
    llvm::Instruction* I,
    SmallVectorImpl<reassociate::ValueEntry>& Ops)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:108

Parameters

llvm::Instruction* I
SmallVectorImpl<reassociate::ValueEntry>& Ops

llvm::Value* OptimizeExpression(
    llvm::BinaryOperator* I,
    SmallVectorImpl<reassociate::ValueEntry>& Ops)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:106

Parameters

llvm::BinaryOperator* I
SmallVectorImpl<reassociate::ValueEntry>& Ops

void OptimizeInst(llvm::Instruction* I)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:124

Parameters

llvm::Instruction* I

llvm::Value* OptimizeMul(
    llvm::BinaryOperator* I,
    SmallVectorImpl<reassociate::ValueEntry>& Ops)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:119

Parameters

llvm::BinaryOperator* I
SmallVectorImpl<reassociate::ValueEntry>& Ops

llvm::Value* OptimizeXor(
    llvm::Instruction* I,
    SmallVectorImpl<reassociate::ValueEntry>& Ops)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:110

Parameters

llvm::Instruction* I
SmallVectorImpl<reassociate::ValueEntry>& Ops

void ReassociateExpression(
    llvm::BinaryOperator* I)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:103

Parameters

llvm::BinaryOperator* I

void RecursivelyEraseDeadInsts(
    llvm::Instruction* I,
    llvm::ReassociatePass::OrderedSet& Insts)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:123

Parameters

llvm::Instruction* I
llvm::ReassociatePass::OrderedSet& Insts

llvm::Value* RemoveFactorFromExpression(
    llvm::Value* V,
    llvm::Value* Factor)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:121

Parameters

llvm::Value* V
llvm::Value* Factor

void RewriteExprTree(
    llvm::BinaryOperator* I,
    SmallVectorImpl<reassociate::ValueEntry>& Ops)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:104

Parameters

llvm::BinaryOperator* I
SmallVectorImpl<reassociate::ValueEntry>& Ops

llvm::Value* buildMinimalMultiplyDAG(
    llvm::IRBuilderBase& Builder,
    SmallVectorImpl<reassociate::Factor>& Factors)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:117

Parameters

llvm::IRBuilderBase& Builder
SmallVectorImpl<reassociate::Factor>& Factors

llvm::Instruction* canonicalizeNegFPConstants(
    llvm::Instruction* I)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:127

Parameters

llvm::Instruction* I

llvm::Instruction*
canonicalizeNegFPConstantsForOp(
    llvm::Instruction* I,
    llvm::Instruction* Op,
    llvm::Value* OtherOp)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:125

Parameters

llvm::Instruction* I
llvm::Instruction* Op
llvm::Value* OtherOp

void canonicalizeOperands(llvm::Instruction* I)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:102

Parameters

llvm::Instruction* I

unsigned int getRank(llvm::Value* V)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:101

Parameters

llvm::Value* V

llvm::PreservedAnalyses run(
    llvm::Function& F,
    llvm::FunctionAnalysisManager&)

Declared at: llvm/include/llvm/Transforms/Scalar/Reassociate.h:97

Parameters

llvm::Function& F
llvm::FunctionAnalysisManager&