Go to the documentation of this file.
53 if (!BlockColors.
empty()) {
55 assert(CV.
size() == 1 &&
"non-unique color for block!");
66 bool Changed =
false, CFGChanged =
false;
69 auto *
I = dyn_cast<InvokeInst>(
BB.getTerminator());
80 assert(
I->getSuccessor(0) == DestBB &&
81 "the normal dest is expected to be the first successor");
92 return std::make_pair(Changed, CFGChanged);
106 assert(Func &&
"operand isn't a Function");
107 Type *ParamTy = Func->getArg(0)->getType();
111 RVCalls[
Call] = AnnotatedCall;
116 for (
auto P : RVCalls) {
123 if (
auto *CI = dyn_cast<CallInst>(CB))
This is an optimization pass for GlobalISel generic memory operations.
bool hasAttachedCallOpBundle(const CallBase *CB)
Optional< Function * > getAttachedARCFunction(const CallBase *CB)
This function returns operand bundle clang_arc_attachedcall's argument, which is the address of the A...
void initializePAEvalPass(PassRegistry &)
struct LLVMOpaquePassRegistry * LLVMPassRegistryRef
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
The instances of the Type class are immutable: once they are created, they are never changed.
BasicBlock * SplitCriticalEdge(Instruction *TI, unsigned SuccNum, const CriticalEdgeSplittingOptions &Options=CriticalEdgeSplittingOptions(), const Twine &BBName="")
If this edge is a critical edge, insert a new node to split the critical edge.
const BasicBlock * getSinglePredecessor() const
Return the predecessor of this block if it has a single predecessor block.
LLVM Basic Block Representation.
void initializeObjCARCContractLegacyPassPass(PassRegistry &)
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Option class for critical edge splitting.
void initializeObjCARCOptLegacyPassPass(PassRegistry &)
const_iterator getFirstInsertionPt() const
Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
void initializeObjCARCOpts(PassRegistry &)
Initialize all passes linked into the ObjCARCOpts library.
Attribute unwrap(LLVMAttributeRef Attr)
CallInst * insertRVCallWithColors(Instruction *InsertPt, CallBase *AnnotatedCall, const DenseMap< BasicBlock *, ColorVector > &BlockColors)
Insert a retainRV/claimRV call with colors.
void initializeObjCARCAAWrapperPassPass(PassRegistry &)
std::pair< bool, bool > insertAfterInvokes(Function &F, DominatorTree *DT)
Insert a retainRV/claimRV call to the normal destination blocks of invokes with operand bundle "clang...
iterator find(const_arg_type_t< KeyT > Val)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
CallInst * insertRVCall(Instruction *InsertPt, CallBase *AnnotatedCall)
Insert a retainRV/claimRV call.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
void initializeObjCARCExpandPass(PassRegistry &)
LLVM_NODISCARD bool empty() const
amdgpu Simplify well known AMD library false FunctionCallee Callee
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
bool isEHPad() const
Return true if the instruction is a variety of EH-block.
static void EraseInstruction(Instruction *CI)
Erase the given instruction.
void initializeObjCARCAPElimPass(PassRegistry &)
void LLVMInitializeObjCARCOpts(LLVMPassRegistryRef R)
A global registry used in conjunction with static constructors to make pluggable components (like tar...
const BasicBlock * getParent() const
CallInst * createCallInstWithColors(FunctionCallee Func, ArrayRef< Value * > Args, const Twine &NameStr, Instruction *InsertBefore, const DenseMap< BasicBlock *, ColorVector > &BlockColors)
Create a call instruction with the correct funclet token.
A handy container for a FunctionType+Callee-pointer pair, which can be passed around as a single enti...
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
This class represents a function call, abstracting a target machine's calling convention.
Common register allocation spilling lr str ldr sxth r3 ldr mla r4 can lr mov lr str ldr sxth r3 mla r4 and then merge mul and lr str ldr sxth r3 mla r4 It also increase the likelihood the store may become dead bb27 Successors according to LLVM BB
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
TinyPtrVector - This class is specialized for cases where there are normally 0 or 1 element in a vect...
LLVM Value Representation.
Class to represent function types.
reference emplace_back(ArgTypes &&... Args)