Go to the source code of this file.
|
| STATISTIC (NumSimpl, "Number of blocks simplified") |
|
static bool | performBlockTailMerging (Function &F, ArrayRef< BasicBlock * > BBs, std::vector< DominatorTree::UpdateType > *Updates) |
|
static bool | tailMergeBlocksWithSimilarFunctionTerminators (Function &F, DomTreeUpdater *DTU) |
|
static bool | iterativelySimplifyCFG (Function &F, const TargetTransformInfo &TTI, DomTreeUpdater *DTU, const SimplifyCFGOptions &Options) |
| Call SimplifyCFG on all the blocks in the function, iterating until no more changes are made.
|
|
static bool | simplifyFunctionCFGImpl (Function &F, const TargetTransformInfo &TTI, DominatorTree *DT, const SimplifyCFGOptions &Options) |
|
static bool | simplifyFunctionCFG (Function &F, const TargetTransformInfo &TTI, DominatorTree *DT, const SimplifyCFGOptions &Options) |
|
static void | applyCommandLineOverridesToOptions (SimplifyCFGOptions &Options) |
|
| INITIALIZE_PASS_BEGIN (CFGSimplifyPass, "simplifycfg", "Simplify the CFG", false, false) INITIALIZE_PASS_END(CFGSimplifyPass |
|
|
static cl::opt< unsigned > | UserBonusInstThreshold ("bonus-inst-threshold", cl::Hidden, cl::init(1), cl::desc("Control the number of bonus instructions (default = 1)")) |
|
static cl::opt< bool > | UserKeepLoops ("keep-loops", cl::Hidden, cl::init(true), cl::desc("Preserve canonical loop structure (default = true)")) |
|
static cl::opt< bool > | UserSwitchRangeToICmp ("switch-range-to-icmp", cl::Hidden, cl::init(false), cl::desc("Convert switches into an integer range comparison (default = false)")) |
|
static cl::opt< bool > | UserSwitchToLookup ("switch-to-lookup", cl::Hidden, cl::init(false), cl::desc("Convert switches to lookup tables (default = false)")) |
|
static cl::opt< bool > | UserForwardSwitchCond ("forward-switch-cond", cl::Hidden, cl::init(false), cl::desc("Forward switch condition to phi ops (default = false)")) |
|
static cl::opt< bool > | UserHoistCommonInsts ("hoist-common-insts", cl::Hidden, cl::init(false), cl::desc("hoist common instructions (default = false)")) |
|
static cl::opt< bool > | UserSinkCommonInsts ("sink-common-insts", cl::Hidden, cl::init(false), cl::desc("Sink common instructions (default = false)")) |
|
| simplifycfg |
|
Simplify the | CFG |
|
Simplify the | false |
|
◆ DEBUG_TYPE
#define DEBUG_TYPE "simplifycfg" |
◆ applyCommandLineOverridesToOptions()
◆ INITIALIZE_PASS_BEGIN()
INITIALIZE_PASS_BEGIN |
( |
CFGSimplifyPass |
, |
|
|
"simplifycfg" |
, |
|
|
"Simplify the CFG" |
, |
|
|
false |
, |
|
|
false |
|
|
) |
| |
◆ iterativelySimplifyCFG()
Call SimplifyCFG on all the blocks in the function, iterating until no more changes are made.
Definition at line 222 of file SimplifyCFGPass.cpp.
References assert(), llvm::SmallPtrSetImpl< PtrType >::begin(), llvm::SmallPtrSetImpl< PtrType >::end(), F, llvm::FindFunctionBackedges(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::DomTreeUpdater::isBBPendingDeletion(), Options, llvm::simplifyCFG(), and llvm::SmallVectorBase< Size_T >::size().
Referenced by simplifyFunctionCFGImpl().
◆ performBlockTailMerging()
Definition at line 84 of file SimplifyCFGPass.cpp.
References assert(), llvm::BranchInst::Create(), llvm::BasicBlock::Create(), llvm::PHINode::Create(), llvm::BasicBlock::end(), F, llvm::DILocation::getMergedLocation(), llvm::Value::getName(), llvm::Instruction::getOpcode(), getType(), I, llvm::Instruction::insertInto(), llvm::User::operands(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorImpl< T >::resize(), llvm::Instruction::setDebugLoc(), llvm::ArrayRef< T >::size(), and llvm::zip().
Referenced by tailMergeBlocksWithSimilarFunctionTerminators().
◆ simplifyFunctionCFG()
◆ simplifyFunctionCFGImpl()
◆ STATISTIC()
STATISTIC |
( |
NumSimpl |
, |
|
|
"Number of blocks simplified" |
|
|
) |
| |
◆ tailMergeBlocksWithSimilarFunctionTerminators()
◆ CFG
◆ false
◆ simplifycfg
◆ UserBonusInstThreshold
cl::opt< unsigned > UserBonusInstThreshold("bonus-inst-threshold", cl::Hidden, cl::init(1), cl::desc("Control the number of bonus instructions (default = 1)")) |
( |
"bonus-inst-threshold" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(1) |
, |
|
|
cl::desc("Control the number of bonus instructions (default = 1)") |
|
|
) |
| |
|
static |
◆ UserForwardSwitchCond
cl::opt< bool > UserForwardSwitchCond("forward-switch-cond", cl::Hidden, cl::init(false), cl::desc("Forward switch condition to phi ops (default = false)")) |
( |
"forward-switch-cond" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
, |
|
|
cl::desc("Forward switch condition to phi ops (default = false)") |
|
|
) |
| |
|
static |
◆ UserHoistCommonInsts
cl::opt< bool > UserHoistCommonInsts("hoist-common-insts", cl::Hidden, cl::init(false), cl::desc("hoist common instructions (default = false)")) |
( |
"hoist-common-insts" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
, |
|
|
cl::desc("hoist common instructions (default = false)") |
|
|
) |
| |
|
static |
◆ UserKeepLoops
cl::opt< bool > UserKeepLoops("keep-loops", cl::Hidden, cl::init(true), cl::desc("Preserve canonical loop structure (default = true)")) |
( |
"keep-loops" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(true) |
, |
|
|
cl::desc("Preserve canonical loop structure (default = true)") |
|
|
) |
| |
|
static |
◆ UserSinkCommonInsts
◆ UserSwitchRangeToICmp
cl::opt< bool > UserSwitchRangeToICmp("switch-range-to-icmp", cl::Hidden, cl::init(false), cl::desc( "Convert switches into an integer range comparison (default = false)")) |
( |
"switch-range-to-icmp" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
, |
|
|
cl::desc( "Convert switches into an integer range comparison (default = false)") |
|
|
) |
| |
|
static |
◆ UserSwitchToLookup
cl::opt< bool > UserSwitchToLookup("switch-to-lookup", cl::Hidden, cl::init(false), cl::desc("Convert switches to lookup tables (default = false)")) |
( |
"switch-to-lookup" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
, |
|
|
cl::desc("Convert switches to lookup tables (default = false)") |
|
|
) |
| |
|
static |