LLVM  8.0.1
Macros | Functions | Variables
SimplifyCFGPass.cpp File Reference
#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/GlobalsModRef.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Scalar/SimplifyCFG.h"
#include <utility>
Include dependency graph for SimplifyCFGPass.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "simplifycfg"
 

Functions

 STATISTIC (NumSimpl, "Number of blocks simplified")
 
static bool mergeEmptyReturnBlocks (Function &F)
 If we have more than one empty (other than phi node) return blocks, merge them together to promote recursive block merging. More...
 
static bool iterativelySimplifyCFG (Function &F, const TargetTransformInfo &TTI, const SimplifyCFGOptions &Options)
 Call SimplifyCFG on all the blocks in the function, iterating until no more changes are made. More...
 
static bool simplifyFunctionCFG (Function &F, const TargetTransformInfo &TTI, const SimplifyCFGOptions &Options)
 
 INITIALIZE_PASS_BEGIN (CFGSimplifyPass, "simplifycfg", "Simplify the CFG", false, false) INITIALIZE_PASS_END(CFGSimplifyPass
 

Variables

static cl::opt< unsignedUserBonusInstThreshold ("bonus-inst-threshold", cl::Hidden, cl::init(1), cl::desc("Control the number of bonus instructions (default = 1)"))
 
static cl::opt< boolUserKeepLoops ("keep-loops", cl::Hidden, cl::init(true), cl::desc("Preserve canonical loop structure (default = true)"))
 
static cl::opt< boolUserSwitchToLookup ("switch-to-lookup", cl::Hidden, cl::init(false), cl::desc("Convert switches to lookup tables (default = false)"))
 
static cl::opt< boolUserForwardSwitchCond ("forward-switch-cond", cl::Hidden, cl::init(false), cl::desc("Forward switch condition to phi ops (default = false)"))
 
static cl::opt< boolUserSinkCommonInsts ("sink-common-insts", cl::Hidden, cl::init(false), cl::desc("Sink common instructions (default = false)"))
 
 simplifycfg
 
Simplify the CFG
 
Simplify the false
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "simplifycfg"

Definition at line 46 of file SimplifyCFGPass.cpp.

Function Documentation

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( CFGSimplifyPass  ,
"simplifycfg"  ,
"Simplify the CFG ,
false  ,
false   
)

◆ iterativelySimplifyCFG()

static bool iterativelySimplifyCFG ( Function F,
const TargetTransformInfo TTI,
const SimplifyCFGOptions Options 
)
static

Call SimplifyCFG on all the blocks in the function, iterating until no more changes are made.

Definition at line 148 of file SimplifyCFGPass.cpp.

References llvm::Function::begin(), llvm::Function::end(), llvm::FindFunctionBackedges(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::simplifyCFG(), and llvm::SmallVectorBase::size().

Referenced by simplifyFunctionCFG().

◆ mergeEmptyReturnBlocks()

static bool mergeEmptyReturnBlocks ( Function F)
static

◆ simplifyFunctionCFG()

static bool simplifyFunctionCFG ( Function F,
const TargetTransformInfo TTI,
const SimplifyCFGOptions Options 
)
static

◆ STATISTIC()

STATISTIC ( NumSimpl  ,
"Number of blocks simplified"   
)

Variable Documentation

◆ CFG

Simplify the CFG

Definition at line 285 of file SimplifyCFGPass.cpp.

◆ false

Simplify the false

Definition at line 285 of file SimplifyCFGPass.cpp.

◆ simplifycfg

simplifycfg

Definition at line 285 of file SimplifyCFGPass.cpp.

◆ UserBonusInstThreshold

cl::opt<unsigned> UserBonusInstThreshold("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)"))
static

◆ UserKeepLoops

cl::opt<bool> UserKeepLoops("keep-loops", cl::Hidden, cl::init(true), cl::desc("Preserve canonical loop structure (default = true)"))
static

◆ UserSinkCommonInsts

cl::opt<bool> UserSinkCommonInsts("sink-common-insts", cl::Hidden, cl::init(false), cl::desc("Sink common instructions (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)"))
static