LLVM 20.0.0git
|
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/CFG.h"
#include "llvm/Analysis/DomTreeUpdater.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/ValueHandle.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Scalar/SimplifyCFG.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/SimplifyCFGOptions.h"
#include <utility>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "simplifycfg" |
Functions | |
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 | |
Variables | |
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 > | UserHoistLoadsStoresWithCondFaulting ("hoist-loads-stores-with-cond-faulting", cl::Hidden, cl::init(false), cl::desc("Hoist loads/stores if the target supports conditional faulting " "(default = false)")) |
static cl::opt< bool > | UserSinkCommonInsts ("sink-common-insts", cl::Hidden, cl::init(false), cl::desc("Sink common instructions (default = false)")) |
static cl::opt< bool > | UserSpeculateUnpredictables ("speculate-unpredictables", cl::Hidden, cl::init(false), cl::desc("Speculate unpredictable branches (default = false)")) |
simplifycfg | |
Simplify the | CFG |
Simplify the | false |
#define DEBUG_TYPE "simplifycfg" |
Definition at line 48 of file SimplifyCFGPass.cpp.
|
static |
Definition at line 320 of file SimplifyCFGPass.cpp.
References Options, UserBonusInstThreshold, UserForwardSwitchCond, UserHoistCommonInsts, UserHoistLoadsStoresWithCondFaulting, UserKeepLoops, UserSinkCommonInsts, UserSpeculateUnpredictables, UserSwitchRangeToICmp, and UserSwitchToLookup.
Referenced by llvm::SimplifyCFGPass::SimplifyCFGPass().
INITIALIZE_PASS_BEGIN | ( | CFGSimplifyPass | , |
"simplifycfg" | , | ||
"Simplify the CFG" | , | ||
false | , | ||
false | |||
) |
|
static |
Call SimplifyCFG on all the blocks in the function, iterating until no more changes are made.
Definition at line 231 of file SimplifyCFGPass.cpp.
References assert(), llvm::SmallPtrSetImpl< PtrType >::begin(), llvm::SmallPtrSetImpl< PtrType >::end(), F, llvm::FindFunctionBackedges(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::GenericDomTreeUpdater< DerivedT, DomTreeT, PostDomTreeT >::isBBPendingDeletion(), Options, and llvm::simplifyCFG().
Referenced by simplifyFunctionCFGImpl().
|
static |
Definition at line 91 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().
|
static |
Definition at line 303 of file SimplifyCFGPass.cpp.
References assert(), F, Options, llvm::RequireAndPreserveDomTree, simplifyFunctionCFGImpl(), and llvm::DominatorTreeBase< NodeT, IsPostDom >::verify().
Referenced by llvm::SimplifyCFGPass::run().
|
static |
Definition at line 274 of file SimplifyCFGPass.cpp.
References F, iterativelySimplifyCFG(), Options, llvm::removeUnreachableBlocks(), and tailMergeBlocksWithSimilarFunctionTerminators().
Referenced by simplifyFunctionCFG().
STATISTIC | ( | NumSimpl | , |
"Number of blocks simplified" | |||
) |
|
static |
Definition at line 165 of file SimplifyCFGPass.cpp.
References llvm::any_of(), llvm::GenericDomTreeUpdater< DerivedT, DomTreeT, PostDomTreeT >::applyUpdates(), F, llvm::GenericDomTreeUpdater< DerivedT, DomTreeT, PostDomTreeT >::isBBPendingDeletion(), llvm::make_second_range(), performBlockTailMerging(), and llvm::succ_empty().
Referenced by simplifyFunctionCFGImpl().
Simplify the CFG |
Definition at line 435 of file SimplifyCFGPass.cpp.
Simplify the false |
Definition at line 435 of file SimplifyCFGPass.cpp.
simplifycfg |
Definition at line 435 of file SimplifyCFGPass.cpp.
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().
|
static |
Referenced by applyCommandLineOverridesToOptions().