LLVM 22.0.0git
llvm::SCCPSolver Class Reference

SCCPSolver - This interface class is a general purpose solver for Sparse Conditional Constant Propagation (SCCP). More...

#include "llvm/Transforms/Utils/SCCPSolver.h"

Public Member Functions

LLVM_ABI SCCPSolver (const DataLayout &DL, std::function< const TargetLibraryInfo &(Function &)> GetTLI, LLVMContext &Ctx)
LLVM_ABI ~SCCPSolver ()
LLVM_ABI void addPredicateInfo (Function &F, DominatorTree &DT, AssumptionCache &AC)
LLVM_ABI void removeSSACopies (Function &F)
LLVM_ABI bool markBlockExecutable (BasicBlock *BB)
 markBlockExecutable - This method can be used by clients to mark all of the blocks that are known to be intrinsically live in the processed unit.
LLVM_ABI const PredicateBasegetPredicateInfoFor (Instruction *I)
LLVM_ABI void trackValueOfGlobalVariable (GlobalVariable *GV)
 trackValueOfGlobalVariable - Clients can use this method to inform the SCCPSolver that it should track loads and stores to the specified global variable if it can.
LLVM_ABI void addTrackedFunction (Function *F)
 addTrackedFunction - If the SCCP solver is supposed to track calls into and out of the specified function (which cannot have its address taken), this method must be called.
LLVM_ABI void addToMustPreserveReturnsInFunctions (Function *F)
 Add function to the list of functions whose return cannot be modified.
LLVM_ABI bool mustPreserveReturn (Function *F)
 Returns true if the return of the given function cannot be modified.
LLVM_ABI void addArgumentTrackedFunction (Function *F)
LLVM_ABI bool isArgumentTrackedFunction (Function *F)
 Returns true if the given function is in the solver's set of argument-tracked functions.
LLVM_ABI const SmallPtrSetImpl< Function * > & getArgumentTrackedFunctions () const
LLVM_ABI void solve ()
 Solve - Solve for constants and executable blocks.
LLVM_ABI bool resolvedUndefsIn (Function &F)
 resolvedUndefsIn - While solving the dataflow for a function, we assume that branches on undef values cannot reach any of their successors.
LLVM_ABI void solveWhileResolvedUndefsIn (Module &M)
LLVM_ABI void solveWhileResolvedUndefsIn (SmallVectorImpl< Function * > &WorkList)
LLVM_ABI void solveWhileResolvedUndefs ()
LLVM_ABI bool isBlockExecutable (BasicBlock *BB) const
LLVM_ABI bool isEdgeFeasible (BasicBlock *From, BasicBlock *To) const
LLVM_ABI std::vector< ValueLatticeElementgetStructLatticeValueFor (Value *V) const
LLVM_ABI void removeLatticeValueFor (Value *V)
LLVM_ABI void resetLatticeValueFor (CallBase *Call)
 Invalidate the Lattice Value of Call and its users after specializing the call.
LLVM_ABI const ValueLatticeElementgetLatticeValueFor (Value *V) const
LLVM_ABI const MapVector< Function *, ValueLatticeElement > & getTrackedRetVals () const
 getTrackedRetVals - Get the inferred return value map.
LLVM_ABI const DenseMap< GlobalVariable *, ValueLatticeElement > & getTrackedGlobals () const
 getTrackedGlobals - Get and return the set of inferred initializers for global variables.
LLVM_ABI const SmallPtrSet< Function *, 16 > & getMRVFunctionsTracked () const
 getMRVFunctionsTracked - Get the set of functions which return multiple values tracked by the pass.
LLVM_ABI void markOverdefined (Value *V)
 markOverdefined - Mark the specified value overdefined.
LLVM_ABI void trackValueOfArgument (Argument *V)
 trackValueOfArgument - Mark the specified argument overdefined unless it have range attribute.
LLVM_ABI bool isStructLatticeConstant (Function *F, StructType *STy)
LLVM_ABI ConstantgetConstant (const ValueLatticeElement &LV, Type *Ty) const
 Helper to return a Constant if LV is either a constant or a constant range with a single element.
LLVM_ABI ConstantgetConstantOrNull (Value *V) const
 Return either a Constant or nullptr for a given Value.
LLVM_ABI void setLatticeValueForSpecializationArguments (Function *F, const SmallVectorImpl< ArgInfo > &Args)
 Set the Lattice Value for the arguments of a specialization F.
LLVM_ABI void markFunctionUnreachable (Function *F)
 Mark all of the blocks in function F non-executable.
LLVM_ABI void visit (Instruction *I)
LLVM_ABI void visitCall (CallInst &I)
LLVM_ABI bool simplifyInstsInBlock (BasicBlock &BB, SmallPtrSetImpl< Value * > &InsertedValues, Statistic &InstRemovedStat, Statistic &InstReplacedStat)
LLVM_ABI bool removeNonFeasibleEdges (BasicBlock *BB, DomTreeUpdater &DTU, BasicBlock *&NewUnreachableBB) const
LLVM_ABI void inferReturnAttributes () const
LLVM_ABI void inferArgAttributes () const
LLVM_ABI bool tryToReplaceWithConstant (Value *V)

Static Public Member Functions

static LLVM_ABI bool isConstant (const ValueLatticeElement &LV)
static LLVM_ABI bool isOverdefined (const ValueLatticeElement &LV)

Detailed Description

SCCPSolver - This interface class is a general purpose solver for Sparse Conditional Constant Propagation (SCCP).

Definition at line 66 of file SCCPSolver.h.

Constructor & Destructor Documentation

◆ SCCPSolver()

SCCPSolver::SCCPSolver ( const DataLayout & DL,
std::function< const TargetLibraryInfo &(Function &)> GetTLI,
LLVMContext & Ctx )

Definition at line 2239 of file SCCPSolver.cpp.

References DL, and llvm::move().

◆ ~SCCPSolver()

SCCPSolver::~SCCPSolver ( )
default

References Call, F, I, and LLVM_ABI.

Member Function Documentation

◆ addArgumentTrackedFunction()

void SCCPSolver::addArgumentTrackedFunction ( Function * F)

Definition at line 2280 of file SCCPSolver.cpp.

References F.

Referenced by runIPSCCP().

◆ addPredicateInfo()

void SCCPSolver::addPredicateInfo ( Function & F,
DominatorTree & DT,
AssumptionCache & AC )

Definition at line 2247 of file SCCPSolver.cpp.

References F.

Referenced by runIPSCCP(), and runSCCP().

◆ addToMustPreserveReturnsInFunctions()

void SCCPSolver::addToMustPreserveReturnsInFunctions ( Function * F)

Add function to the list of functions whose return cannot be modified.

Definition at line 2272 of file SCCPSolver.cpp.

References F.

Referenced by tryToReplaceWithConstant().

◆ addTrackedFunction()

void SCCPSolver::addTrackedFunction ( Function * F)

addTrackedFunction - If the SCCP solver is supposed to track calls into and out of the specified function (which cannot have its address taken), this method must be called.

Definition at line 2268 of file SCCPSolver.cpp.

References F.

Referenced by runIPSCCP(), and runSCCP().

◆ getArgumentTrackedFunctions()

const SmallPtrSetImpl< Function * > & SCCPSolver::getArgumentTrackedFunctions ( ) const

Definition at line 2289 of file SCCPSolver.cpp.

Referenced by inferArgAttributes().

◆ getConstant()

Constant * SCCPSolver::getConstant ( const ValueLatticeElement & LV,
Type * Ty ) const

Helper to return a Constant if LV is either a constant or a constant range with a single element.

Definition at line 2361 of file SCCPSolver.cpp.

◆ getConstantOrNull()

Constant * SCCPSolver::getConstantOrNull ( Value * V) const

Return either a Constant or nullptr for a given Value.

Definition at line 2366 of file SCCPSolver.cpp.

Referenced by tryToReplaceWithConstant().

◆ getLatticeValueFor()

const ValueLatticeElement & SCCPSolver::getLatticeValueFor ( Value * V) const

Definition at line 2333 of file SCCPSolver.cpp.

Referenced by findReturnsToZap(), llvm::getRange(), and inferArgAttributes().

◆ getMRVFunctionsTracked()

const SmallPtrSet< Function *, 16 > & SCCPSolver::getMRVFunctionsTracked ( ) const

getMRVFunctionsTracked - Get the set of functions which return multiple values tracked by the pass.

Definition at line 2347 of file SCCPSolver.cpp.

Referenced by runIPSCCP().

◆ getPredicateInfoFor()

const PredicateBase * SCCPSolver::getPredicateInfoFor ( Instruction * I)

Definition at line 2260 of file SCCPSolver.cpp.

References I.

◆ getStructLatticeValueFor()

std::vector< ValueLatticeElement > SCCPSolver::getStructLatticeValueFor ( Value * V) const

Definition at line 2321 of file SCCPSolver.cpp.

◆ getTrackedGlobals()

const DenseMap< GlobalVariable *, ValueLatticeElement > & SCCPSolver::getTrackedGlobals ( ) const

getTrackedGlobals - Get and return the set of inferred initializers for global variables.

Definition at line 2343 of file SCCPSolver.cpp.

Referenced by runIPSCCP().

◆ getTrackedRetVals()

const MapVector< Function *, ValueLatticeElement > & SCCPSolver::getTrackedRetVals ( ) const

getTrackedRetVals - Get the inferred return value map.

Definition at line 2338 of file SCCPSolver.cpp.

Referenced by inferReturnAttributes(), and runIPSCCP().

◆ inferArgAttributes()

void llvm::SCCPSolver::inferArgAttributes ( ) const

◆ inferReturnAttributes()

void llvm::SCCPSolver::inferReturnAttributes ( ) const

Definition at line 496 of file SCCPSolver.cpp.

References F, getTrackedRetVals(), and llvm::inferAttribute().

Referenced by runIPSCCP(), and runSCCP().

◆ isArgumentTrackedFunction()

bool SCCPSolver::isArgumentTrackedFunction ( Function * F)

Returns true if the given function is in the solver's set of argument-tracked functions.

Definition at line 2284 of file SCCPSolver.cpp.

References F.

Referenced by findReturnsToZap().

◆ isBlockExecutable()

bool SCCPSolver::isBlockExecutable ( BasicBlock * BB) const

Definition at line 2312 of file SCCPSolver.cpp.

Referenced by inferArgAttributes(), runIPSCCP(), and runSCCP().

◆ isConstant()

◆ isEdgeFeasible()

bool SCCPSolver::isEdgeFeasible ( BasicBlock * From,
BasicBlock * To ) const

Definition at line 2316 of file SCCPSolver.cpp.

Referenced by removeNonFeasibleEdges().

◆ isOverdefined()

◆ isStructLatticeConstant()

bool SCCPSolver::isStructLatticeConstant ( Function * F,
StructType * STy )

Definition at line 2357 of file SCCPSolver.cpp.

References F.

Referenced by runIPSCCP().

◆ markBlockExecutable()

bool SCCPSolver::markBlockExecutable ( BasicBlock * BB)

markBlockExecutable - This method can be used by clients to mark all of the blocks that are known to be intrinsically live in the processed unit.

This returns true if the block was not considered live before.

Definition at line 2256 of file SCCPSolver.cpp.

Referenced by runIPSCCP(), and runSCCP().

◆ markFunctionUnreachable()

void SCCPSolver::markFunctionUnreachable ( Function * F)

Mark all of the blocks in function F non-executable.

Clients can used this method to erase a function from the module (e.g., if it has been completely specialized and is no longer needed).

Definition at line 2375 of file SCCPSolver.cpp.

References F.

◆ markOverdefined()

void SCCPSolver::markOverdefined ( Value * V)

markOverdefined - Mark the specified value overdefined.

This works with both scalars and structs.

Definition at line 2351 of file SCCPSolver.cpp.

◆ mustPreserveReturn()

bool SCCPSolver::mustPreserveReturn ( Function * F)

Returns true if the return of the given function cannot be modified.

Definition at line 2276 of file SCCPSolver.cpp.

References F.

Referenced by findReturnsToZap().

◆ removeLatticeValueFor()

void SCCPSolver::removeLatticeValueFor ( Value * V)

Definition at line 2325 of file SCCPSolver.cpp.

Referenced by llvm::replaceSignedInst().

◆ removeNonFeasibleEdges()

◆ removeSSACopies()

void SCCPSolver::removeSSACopies ( Function & F)

Definition at line 2252 of file SCCPSolver.cpp.

References F.

Referenced by runIPSCCP(), and runSCCP().

◆ resetLatticeValueFor()

void SCCPSolver::resetLatticeValueFor ( CallBase * Call)

Invalidate the Lattice Value of Call and its users after specializing the call.

Then recompute it.

Definition at line 2329 of file SCCPSolver.cpp.

References Call.

◆ resolvedUndefsIn()

bool SCCPSolver::resolvedUndefsIn ( Function & F)

resolvedUndefsIn - While solving the dataflow for a function, we assume that branches on undef values cannot reach any of their successors.

However, this is not a safe assumption. After we solve dataflow, this method should be use to handle this. If this returns true, the solver should be rerun.

Definition at line 2295 of file SCCPSolver.cpp.

References F.

Referenced by runSCCP().

◆ setLatticeValueForSpecializationArguments()

void SCCPSolver::setLatticeValueForSpecializationArguments ( Function * F,
const SmallVectorImpl< ArgInfo > & Args )

Set the Lattice Value for the arguments of a specialization F.

If an argument is Constant then its lattice value is marked with the corresponding actual argument in Args. Otherwise, its lattice value is inherited (copied) from the corresponding formal argument in Args.

Definition at line 2370 of file SCCPSolver.cpp.

References F.

◆ simplifyInstsInBlock()

bool llvm::SCCPSolver::simplifyInstsInBlock ( BasicBlock & BB,
SmallPtrSetImpl< Value * > & InsertedValues,
Statistic & InstRemovedStat,
Statistic & InstReplacedStat )

◆ solve()

void SCCPSolver::solve ( )

Solve - Solve for constants and executable blocks.

Definition at line 2293 of file SCCPSolver.cpp.

Referenced by runSCCP().

◆ solveWhileResolvedUndefs()

void SCCPSolver::solveWhileResolvedUndefs ( )

Definition at line 2308 of file SCCPSolver.cpp.

◆ solveWhileResolvedUndefsIn() [1/2]

void SCCPSolver::solveWhileResolvedUndefsIn ( Module & M)

Definition at line 2299 of file SCCPSolver.cpp.

Referenced by runIPSCCP().

◆ solveWhileResolvedUndefsIn() [2/2]

void SCCPSolver::solveWhileResolvedUndefsIn ( SmallVectorImpl< Function * > & WorkList)

Definition at line 2304 of file SCCPSolver.cpp.

◆ trackValueOfArgument()

void SCCPSolver::trackValueOfArgument ( Argument * V)

trackValueOfArgument - Mark the specified argument overdefined unless it have range attribute.

This works with both scalars and structs.

Definition at line 2353 of file SCCPSolver.cpp.

Referenced by runIPSCCP(), and runSCCP().

◆ trackValueOfGlobalVariable()

void SCCPSolver::trackValueOfGlobalVariable ( GlobalVariable * GV)

trackValueOfGlobalVariable - Clients can use this method to inform the SCCPSolver that it should track loads and stores to the specified global variable if it can.

This is only legal to call if performing Interprocedural SCCP.

Definition at line 2264 of file SCCPSolver.cpp.

Referenced by runIPSCCP().

◆ tryToReplaceWithConstant()

◆ visit()

void SCCPSolver::visit ( Instruction * I)

Definition at line 2379 of file SCCPSolver.cpp.

References I.

◆ visitCall()

void SCCPSolver::visitCall ( CallInst & I)

Definition at line 2381 of file SCCPSolver.cpp.

References I.


The documentation for this class was generated from the following files: