LLVM  16.0.0git
Macros | Functions | Variables
SCCP.cpp File Reference
#include "llvm/Transforms/Scalar/SCCP.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/DomTreeUpdater.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/ValueLattice.h"
#include "llvm/Analysis/ValueLatticeUtils.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/SCCPSolver.h"
#include <cassert>
#include <utility>
#include <vector>
Include dependency graph for SCCP.cpp:

Go to the source code of this file.


#define DEBUG_TYPE   "sccp"


 STATISTIC (NumInstRemoved, "Number of instructions removed")
 STATISTIC (NumDeadBlocks, "Number of basic blocks unreachable")
 STATISTIC (NumInstReplaced, "Number of instructions replaced with (simpler) instruction")
 STATISTIC (IPNumInstRemoved, "Number of instructions removed by IPSCCP")
 STATISTIC (IPNumArgsElimed,"Number of arguments constant propagated by IPSCCP")
 STATISTIC (IPNumGlobalConst, "Number of globals found to be constant by IPSCCP")
 STATISTIC (IPNumInstReplaced, "Number of instructions replaced with (simpler) instruction by IPSCCP")
static bool isConstant (const ValueLatticeElement &LV)
static bool isOverdefined (const ValueLatticeElement &LV)
static bool canRemoveInstruction (Instruction *I)
static bool tryToReplaceWithConstant (SCCPSolver &Solver, Value *V)
static bool replaceSignedInst (SCCPSolver &Solver, SmallPtrSetImpl< Value * > &InsertedValues, Instruction &Inst)
 Try to replace signed instructions with their unsigned equivalent. More...
static bool simplifyInstsInBlock (SCCPSolver &Solver, BasicBlock &BB, SmallPtrSetImpl< Value * > &InsertedValues, Statistic &InstRemovedStat, Statistic &InstReplacedStat)
static bool removeNonFeasibleEdges (const SCCPSolver &Solver, BasicBlock *BB, DomTreeUpdater &DTU, BasicBlock *&NewUnreachableBB)
static bool runSCCP (Function &F, const DataLayout &DL, const TargetLibraryInfo *TLI, DomTreeUpdater &DTU)
 INITIALIZE_PASS_BEGIN (SCCPLegacyPass, "sccp", "Sparse Conditional Constant Propagation", false, false) INITIALIZE_PASS_END(SCCPLegacyPass
static void findReturnsToZap (Function &F, SmallVector< ReturnInst *, 8 > &ReturnsToZap, SCCPSolver &Solver)


Sparse Conditional Constant Propagation
Sparse Conditional Constant false

Macro Definition Documentation


#define DEBUG_TYPE   "sccp"

Definition at line 63 of file SCCP.cpp.

Function Documentation

◆ canRemoveInstruction()

static bool canRemoveInstruction ( Instruction I)

Definition at line 94 of file SCCP.cpp.

References I, and llvm::wouldInstructionBeTriviallyDead().

Referenced by simplifyInstsInBlock(), and tryToReplaceWithConstant().

◆ findReturnsToZap()

static void findReturnsToZap ( Function F,
SmallVector< ReturnInst *, 8 > &  ReturnsToZap,
SCCPSolver Solver 


"sccp"  ,
"Sparse Conditional Constant Propagation ,
false  ,

◆ isConstant()

static bool isConstant ( const ValueLatticeElement LV)

◆ isOverdefined()

static bool isOverdefined ( const ValueLatticeElement LV)

◆ removeNonFeasibleEdges()

static bool removeNonFeasibleEdges ( const SCCPSolver Solver,
BasicBlock BB,
DomTreeUpdater DTU,
BasicBlock *&  NewUnreachableBB 

◆ replaceSignedInst()

static bool replaceSignedInst ( SCCPSolver Solver,
SmallPtrSetImpl< Value * > &  InsertedValues,
Instruction Inst 

◆ runSCCP()

static bool runSCCP ( Function F,
const DataLayout DL,
const TargetLibraryInfo TLI,
DomTreeUpdater DTU 

◆ simplifyInstsInBlock()

static bool simplifyInstsInBlock ( SCCPSolver Solver,
BasicBlock BB,
SmallPtrSetImpl< Value * > &  InsertedValues,
Statistic InstRemovedStat,
Statistic InstReplacedStat 

◆ STATISTIC() [1/7]

STATISTIC ( IPNumArgsElimed  ,
"Number of arguments constant propagated by IPSCCP"   

◆ STATISTIC() [2/7]

STATISTIC ( IPNumGlobalConst  ,
"Number of globals found to be constant by IPSCCP"   

◆ STATISTIC() [3/7]

STATISTIC ( IPNumInstRemoved  ,
"Number of instructions removed by IPSCCP"   

◆ STATISTIC() [4/7]

STATISTIC ( IPNumInstReplaced  ,
"Number of instructions replaced with (simpler) instruction by IPSCCP"   

◆ STATISTIC() [5/7]

STATISTIC ( NumDeadBlocks  ,
"Number of basic blocks unreachable"   

◆ STATISTIC() [6/7]

STATISTIC ( NumInstRemoved  ,
"Number of instructions removed  

◆ STATISTIC() [7/7]

STATISTIC ( NumInstReplaced  ,
"Number of instructions replaced with (simpler) instruction  

◆ tryToReplaceWithConstant()

static bool tryToReplaceWithConstant ( SCCPSolver Solver,
Value V 

Variable Documentation

◆ false

Sparse Conditional Constant false

Definition at line 365 of file SCCP.cpp.

◆ Propagation

Sparse Conditional Constant Propagation

Definition at line 365 of file SCCP.cpp.

◆ sccp


Definition at line 364 of file SCCP.cpp.