LLVM
8.0.1
|
#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>
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< 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 > | 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 > | UserSinkCommonInsts ("sink-common-insts", cl::Hidden, cl::init(false), cl::desc("Sink common instructions (default = false)")) |
simplifycfg | |
Simplify the | CFG |
Simplify the | false |
#define DEBUG_TYPE "simplifycfg" |
Definition at line 46 of file SimplifyCFGPass.cpp.
Referenced by llvm::SimplifyCFGPass::run().
|
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().
If we have more than one empty (other than phi node) return blocks, merge them together to promote recursive block merging.
Definition at line 73 of file SimplifyCFGPass.cpp.
References llvm::PHINode::addIncoming(), llvm::BasicBlock::begin(), llvm::Function::begin(), llvm::PHINode::Create(), llvm::BranchInst::Create(), llvm::dyn_cast(), E, llvm::Function::end(), llvm::Instruction::eraseFromParent(), llvm::BasicBlock::eraseFromParent(), llvm::BasicBlock::front(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), I, llvm::pred_begin(), llvm::pred_end(), llvm::Value::replaceAllUsesWith(), llvm::MipsISD::Ret, and llvm::User::setOperand().
Referenced by simplifyFunctionCFG().
|
static |
Definition at line 174 of file SimplifyCFGPass.cpp.
References iterativelySimplifyCFG(), mergeEmptyReturnBlocks(), and llvm::removeUnreachableBlocks().
Referenced by llvm::SimplifyCFGPass::run().
STATISTIC | ( | NumSimpl | , |
"Number of blocks simplified" | |||
) |
Simplify the CFG |
Definition at line 285 of file SimplifyCFGPass.cpp.
Simplify the false |
Definition at line 285 of file SimplifyCFGPass.cpp.
simplifycfg |
Definition at line 285 of file SimplifyCFGPass.cpp.
|
static |
Referenced by llvm::SimplifyCFGPass::run(), and llvm::SimplifyCFGPass::SimplifyCFGPass().
|
static |
Referenced by llvm::SimplifyCFGPass::run(), and llvm::SimplifyCFGPass::SimplifyCFGPass().
|
static |
Referenced by llvm::SimplifyCFGPass::run(), and llvm::SimplifyCFGPass::SimplifyCFGPass().
|
static |
Referenced by llvm::SimplifyCFGPass::run(), and llvm::SimplifyCFGPass::SimplifyCFGPass().
|
static |
Referenced by llvm::SimplifyCFGPass::run(), and llvm::SimplifyCFGPass::SimplifyCFGPass().