class NaryReassociatePass

Declaration

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

Description

A CRTP mix-in to automatically provide informational APIs needed for passes. This provides some boilerplate for types that are passes.

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

Inherits from: PassInfoMixin

Member Variables

private llvm::AssumptionCache* AC
private const llvm::DataLayout* DL
private llvm::DominatorTree* DT
private llvm::ScalarEvolution* SE
private llvm::TargetLibraryInfo* TLI
private llvm::TargetTransformInfo* TTI
private DenseMap<const llvm::SCEV*, SmallVector<llvm::WeakTrackingVH, 2>> SeenExprs

Method Overview

  • private bool doOneIteration(llvm::Function & F)
  • private llvm::Instruction * findClosestMatchingDominator(const llvm::SCEV * CandidateExpr, llvm::Instruction * Dominatee)
  • private const llvm::SCEV * getBinarySCEV(llvm::BinaryOperator * I, const llvm::SCEV * LHS, const llvm::SCEV * RHS)
  • private template <typename PredT>llvm::Instruction * matchAndReassociateMinOrMax(llvm::Instruction * I, const llvm::SCEV *& OrigSCEV)
  • private bool matchTernaryOp(llvm::BinaryOperator * I, llvm::Value * V, llvm::Value *& Op1, llvm::Value *& Op2)
  • private bool requiresSignExtension(llvm::Value * Index, llvm::GetElementPtrInst * GEP)
  • public llvm::PreservedAnalyses run(llvm::Function & F, llvm::FunctionAnalysisManager & AM)
  • public bool runImpl(llvm::Function & F, llvm::AssumptionCache * AC_, llvm::DominatorTree * DT_, llvm::ScalarEvolution * SE_, llvm::TargetLibraryInfo * TLI_, llvm::TargetTransformInfo * TTI_)
  • private llvm::Instruction * tryReassociate(llvm::Instruction * I, const llvm::SCEV *& OrigSCEV)
  • private llvm::Instruction * tryReassociateBinaryOp(llvm::BinaryOperator * I)
  • private llvm::Instruction * tryReassociateBinaryOp(llvm::Value * LHS, llvm::Value * RHS, llvm::BinaryOperator * I)
  • private llvm::Instruction * tryReassociateGEP(llvm::GetElementPtrInst * GEP)
  • private llvm::GetElementPtrInst * tryReassociateGEPAtIndex(llvm::GetElementPtrInst * GEP, unsigned int I, llvm::Type * IndexedType)
  • private llvm::GetElementPtrInst * tryReassociateGEPAtIndex(llvm::GetElementPtrInst * GEP, unsigned int I, llvm::Value * LHS, llvm::Value * RHS, llvm::Type * IndexedType)
  • private template <typename MaxMinT>llvm::Value * tryReassociateMinOrMax(llvm::Instruction * I, MaxMinT MaxMinMatch, llvm::Value * LHS, llvm::Value * RHS)
  • private llvm::Instruction * tryReassociatedBinaryOp(const llvm::SCEV * LHS, llvm::Value * RHS, llvm::BinaryOperator * I)

Methods

bool doOneIteration(llvm::Function& F)

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

Parameters

llvm::Function& F

llvm::Instruction* findClosestMatchingDominator(
    const llvm::SCEV* CandidateExpr,
    llvm::Instruction* Dominatee)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:158

Parameters

const llvm::SCEV* CandidateExpr
llvm::Instruction* Dominatee

const llvm::SCEV* getBinarySCEV(
    llvm::BinaryOperator* I,
    const llvm::SCEV* LHS,
    const llvm::SCEV* RHS)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:153

Parameters

llvm::BinaryOperator* I
const llvm::SCEV* LHS
const llvm::SCEV* RHS

template <typename PredT>
llvm::Instruction* matchAndReassociateMinOrMax(
    llvm::Instruction* I,
    const llvm::SCEV*& OrigSCEV)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:166

Templates

PredT

Parameters

llvm::Instruction* I
const llvm::SCEV*& OrigSCEV

bool matchTernaryOp(llvm::BinaryOperator* I,
                    llvm::Value* V,
                    llvm::Value*& Op1,
                    llvm::Value*& Op2)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:150

Parameters

llvm::BinaryOperator* I
llvm::Value* V
llvm::Value*& Op1
llvm::Value*& Op2

bool requiresSignExtension(
    llvm::Value* Index,
    llvm::GetElementPtrInst* GEP)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:178

Parameters

llvm::Value* Index
llvm::GetElementPtrInst* GEP

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

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

Parameters

llvm::Function& F
llvm::FunctionAnalysisManager& AM

bool runImpl(llvm::Function& F,
             llvm::AssumptionCache* AC_,
             llvm::DominatorTree* DT_,
             llvm::ScalarEvolution* SE_,
             llvm::TargetLibraryInfo* TLI_,
             llvm::TargetTransformInfo* TTI_)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:107

Parameters

llvm::Function& F
llvm::AssumptionCache* AC_
llvm::DominatorTree* DT_
llvm::ScalarEvolution* SE_
llvm::TargetLibraryInfo* TLI_
llvm::TargetTransformInfo* TTI_

llvm::Instruction* tryReassociate(
    llvm::Instruction* I,
    const llvm::SCEV*& OrigSCEV)

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

Parameters

llvm::Instruction* I
const llvm::SCEV*& OrigSCEV

llvm::Instruction* tryReassociateBinaryOp(
    llvm::BinaryOperator* I)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:139

Parameters

llvm::BinaryOperator* I

llvm::Instruction* tryReassociateBinaryOp(
    llvm::Value* LHS,
    llvm::Value* RHS,
    llvm::BinaryOperator* I)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:143

Parameters

llvm::Value* LHS
llvm::Value* RHS
llvm::BinaryOperator* I

llvm::Instruction* tryReassociateGEP(
    llvm::GetElementPtrInst* GEP)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:120

Parameters

llvm::GetElementPtrInst* GEP

llvm::GetElementPtrInst* tryReassociateGEPAtIndex(
    llvm::GetElementPtrInst* GEP,
    unsigned int I,
    llvm::Type* IndexedType)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:129

Parameters

llvm::GetElementPtrInst* GEP
unsigned int I
llvm::Type* IndexedType

llvm::GetElementPtrInst* tryReassociateGEPAtIndex(
    llvm::GetElementPtrInst* GEP,
    unsigned int I,
    llvm::Value* LHS,
    llvm::Value* RHS,
    llvm::Type* IndexedType)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:134

Parameters

llvm::GetElementPtrInst* GEP
unsigned int I
llvm::Value* LHS
llvm::Value* RHS
llvm::Type* IndexedType

template <typename MaxMinT>
llvm::Value* tryReassociateMinOrMax(
    llvm::Instruction* I,
    MaxMinT MaxMinMatch,
    llvm::Value* LHS,
    llvm::Value* RHS)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:171

Templates

MaxMinT

Parameters

llvm::Instruction* I
MaxMinT MaxMinMatch
llvm::Value* LHS
llvm::Value* RHS

llvm::Instruction* tryReassociatedBinaryOp(
    const llvm::SCEV* LHS,
    llvm::Value* RHS,
    llvm::BinaryOperator* I)

Declared at: llvm/include/llvm/Transforms/Scalar/NaryReassociate.h:146

Parameters

const llvm::SCEV* LHS
llvm::Value* RHS
llvm::BinaryOperator* I