Go to the documentation of this file.
17 #ifndef LLVM_CODEGEN_MACHINEFUNCTION_H
18 #define LLVM_CODEGEN_MACHINEFUNCTION_H
51 class DILocalVariable;
54 class GISelChangeObserver;
56 class LLVMTargetMachine;
57 class MachineConstantPool;
58 class MachineFrameInfo;
59 class MachineFunction;
60 class MachineJumpTableInfo;
61 class MachineModuleInfo;
62 class MachineRegisterInfo;
68 class PseudoSourceValueManager;
72 class TargetRegisterClass;
73 class TargetSubtargetInfo;
74 struct WasmEHFuncInfo;
85 template <
class Iterator>
87 assert(
this == &OldList &&
"never transfer MBBs between functions");
102 template<
typename Ty>
104 return new (
Allocator.Allocate<Ty>()) Ty(MF);
107 template <
typename Ty>
109 return new (
Allocator.Allocate<Ty>()) Ty(MFI);
193 return Properties[
static_cast<unsigned>(
P)];
197 Properties.
set(
static_cast<unsigned>(
P));
202 Properties.
reset(
static_cast<unsigned>(
P));
213 Properties |= MFP.Properties;
218 Properties.
reset(MFP.Properties);
225 return !V.Properties.
test(Properties);
294 std::vector<MachineBasicBlock*> MBBNumbering;
315 unsigned FunctionNumber;
325 bool ExposesReturnsTwice =
false;
328 bool HasInlineAsm =
false;
331 bool HasWinCFI =
false;
338 std::unique_ptr<PseudoSourceValueManager> PSVManager;
342 std::vector<MCCFIInstruction> FrameInstructions;
346 std::vector<MCSymbol *> LongjmpTargets;
350 std::vector<MCSymbol *> CatchretTargets;
356 std::vector<LandingPadInfo> LandingPads;
368 std::vector<std::pair<MCSymbol *, MDNode *>> CodeViewAnnotations;
370 bool CallsEHReturn =
false;
371 bool CallsUnwindInit =
false;
372 bool HasEHCatchret =
false;
373 bool HasEHScopes =
false;
374 bool HasEHFunclets =
false;
380 std::vector<const GlobalValue *> TypeInfos;
383 std::vector<unsigned> FilterIds;
386 std::vector<unsigned> FilterEnds;
413 : Var(Var), Expr(Expr), Slot(Slot), Loc(Loc) {}
417 virtual void anchor();
435 assert(
Arg < (1 << 16) &&
"Arg out of range");
466 unsigned DebugInstrNumberingCount = 0;
470 void setDebugInstrNumberingCount(
unsigned Num);
492 : Src(Src), Dest(Dest), Subreg(Subreg) {}
497 return Src <
Other.Src;
539 unsigned MaxOperand = UINT_MAX);
563 void finalizeDebugInstrRefs();
567 bool useDebugInstrRef()
const;
588 assert(TheDelegate == delegate &&
589 "Only the current delegate can perform reset!");
590 TheDelegate =
nullptr;
596 assert(delegate && !TheDelegate &&
597 "Attempted to set delegate to null, or to change it without "
598 "first resetting it!");
600 TheDelegate = delegate;
649 void assignBeginEndSections();
662 return *
static_cast<const STC *
>(STI);
719 return ExposesReturnsTwice;
725 ExposesReturnsTwice =
B;
744 bool needsFrameMoves()
const;
753 template<
typename Ty>
756 MFInfo = Ty::template create<Ty>(
Allocator, *
this);
757 return static_cast<Ty*
>(MFInfo);
760 template<
typename Ty>
767 MFInfo = Ty::template create<Ty>(
Allocator, Old);
768 return static_cast<Ty *
>(MFInfo);
774 assert(!MFInfo &&
"new function already has MachineFunctionInfo");
789 assert(
N < MBBNumbering.size() &&
"Illegal block number");
790 assert(MBBNumbering[
N] &&
"Block was removed from the machine function!");
791 return MBBNumbering[
N];
795 bool shouldSplitStack()
const;
823 void viewCFGOnly()
const;
831 bool verify(
Pass *
p =
nullptr,
const char *Banner =
nullptr,
832 bool AbortOnError =
true)
const;
843 return &MachineFunction::BasicBlocks;
863 unsigned size()
const {
return (
unsigned)BasicBlocks.size();}
864 bool empty()
const {
return BasicBlocks.empty(); }
876 BasicBlocks.
splice(InsertPt, BasicBlocks,
MBBI);
879 BasicBlocks.
splice(InsertPt, BasicBlocks,
MBB);
882 BasicBlocks.
splice(InsertPt, BasicBlocks,
MBBI, MBBE);
890 template <
typename Comp>
892 BasicBlocks.sort(comp);
909 MBBNumbering.push_back(
MBB);
910 return (
unsigned)MBBNumbering.size()-1;
917 assert(
N < MBBNumbering.size() &&
"Illegal basic block #");
918 MBBNumbering[
N] =
nullptr;
924 bool NoImplicit =
false);
977 int64_t Offset,
LLT Ty);
981 MMO, Offset, Size == ~UINT64_C(0) ?
LLT() :
LLT::scalar(8 * Size));
1031 MachineInstr::ExtraInfo *createMIExtraInfo(
1033 MCSymbol *PostInstrSymbol =
nullptr,
MDNode *HeapAllocMarker =
nullptr);
1045 bool isLinkerPrivate =
false)
const;
1049 MCSymbol *getPICBaseSymbol()
const;
1055 return FrameInstructions;
1064 return LongjmpTargets;
1074 return CatchretTargets;
1080 CatchretTargets.push_back(
Target);
1106 bool TidyIfNoBeginLabels =
true);
1138 int getFilterIDFor(std::vector<unsigned> &TyIds);
1145 return !WasmLPadToIndexMap.
empty();
1150 WasmLPadToIndexMap[LPad] =
Index;
1155 return WasmLPadToIndexMap.
count(LPad);
1160 assert(hasWasmLandingPadIndex(LPad));
1161 return WasmLPadToIndexMap.
lookup(LPad);
1165 return !LPadToCallSiteMap.
empty();
1170 assert(hasCallSiteLandingPad(Sym) &&
1171 "missing call site number for landing pad!");
1172 return LPadToCallSiteMap[Sym];
1177 return !LPadToCallSiteMap[Sym].
empty();
1181 return !CallSiteMap.
empty();
1186 CallSiteMap[BeginLabel] = Site;
1191 assert(hasCallSiteBeginLabel(BeginLabel) &&
1192 "Missing call site number for EH_LABEL!");
1193 return CallSiteMap.
lookup(BeginLabel);
1198 return CallSiteMap.
count(BeginLabel);
1203 CodeViewAnnotations.push_back({Label, MD});
1207 return CodeViewAnnotations;
1231 return VariableDbgInfos;
1241 assert(Inserted &&
"Call site info not unique");
1245 return CallSitesInfo;
1267 return ++DebugInstrNumberingCount;
1325 return &
G.Graph->front();
1331 return &
G.Graph->front();
1335 class MachineFunctionAnalysisManager;
1337 const std::string &Banner,
1338 const MachineFunction &MF);
1342 #endif // LLVM_CODEGEN_MACHINEFUNCTION_H
MachineBasicBlock * MBB
Block where this PHI was originally located.
void remove(iterator MBBI)
bool hasInlineAsm() const
Returns true if the function contains any inline assembly.
unsigned SubReg
Optional subreg qualifier within Reg.
bool hasProperty(Property P) const
static StringRef getName(Value *V)
void resetDelegate(Delegate *delegate)
Reset the currently registered delegate - otherwise assert.
const Ty * getInfo() const
This is an optimization pass for GlobalISel generic memory operations.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
MachineFunctionProperties & getProperties()
print lazy value Lazy Value Info Printer Pass
T * allocate(Capacity Cap, AllocatorType &Allocator)
Allocate an array of at least the requested capacity.
A parsed version of the target data layout string in and methods for querying it.
VariableDbgInfoMapTy & getVariableDbgInfo()
static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val)
std::pair< unsigned, unsigned > DebugInstrOperandPair
Pair of instruction number and operand number.
void print(raw_ostream &OS) const
Print the MachineFunctionProperties in human-readable form.
void push_back(pointer val)
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Context object for machine code objects.
MCContext & getContext() const
VariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr, int Slot, const DILocation *Loc)
ValueT lookup(const_arg_type_t< KeyT > Val) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
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
const STC & getSubtarget() const
getSubtarget - This method returns a pointer to the specified type of TargetSubtargetInfo.
Target - Wrapper for Target specific information.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
GISelChangeObserver * getObserver() const
MCSymbol * LandingPadLabel
void splice(iterator InsertPt, MachineBasicBlock *MBB)
SmallVector< SEHHandler, 1 > SEHHandlers
bool exposesReturnsTwice() const
exposesReturnsTwice - Returns true if the function calls setjmp or any other similar functions with a...
static void viewCFG(Function &F, const BlockFrequencyInfo *BFI, const BranchProbabilityInfo *BPI, uint64_t MaxFreq, bool CFGOnly=false)
Reg
All possible values of the reg field in the ModR/M byte.
unsigned getFunctionNumber() const
getFunctionNumber - Return a unique ID for the current function.
void setCallsUnwindInit(bool b)
const MachineBasicBlock & back() const
DebugInstrOperandPair Dest
Replacement instruction / operand pair.
Callbacks do nothing by default in iplist and ilist.
unsigned getNumBlockIDs() const
getNumBlockIDs - Return the number of MBB ID's allocated.
void ensureAlignment(Align A)
ensureAlignment - Make sure the function is at least A bytes aligned.
static unsigned InstrCount
A collection of metadata nodes that might be associated with a memory access used by the alias-analys...
void push_front(MachineBasicBlock *MBB)
unsigned Subreg
Qualifier for which part of Dest is read.
unsigned getInstructionCount() const
Return the number of MachineInstrs in this MachineFunction.
unsigned getNewDebugInstrNum()
A description of a memory reference used in the backend.
void insert(iterator MBBI, MachineBasicBlock *MBB)
PseudoSourceValueManager & getPSVManager() const
static Ty * create(BumpPtrAllocator &Allocator, const Ty &MFI)
Properties which a MachineFunction may have at a given point in time.
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
void setDelegate(Delegate *delegate)
Set the delegate.
bool callsUnwindInit() const
void addCodeViewAnnotation(MCSymbol *Label, MDNode *MD)
Record annotations associated with a particular label.
pointer remove(iterator &IT)
bool hasCallSiteLandingPad(MCSymbol *Sym)
Return true if the landing pad Eh symbol has an associated call site.
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
const Function & getFunction() const
Return the LLVM function that this machine code represents.
void setHasEHFunclets(bool V)
static Ty * create(BumpPtrAllocator &Allocator, MachineFunction &MF)
Factory function: default behavior is to call new using the supplied allocator.
the resulting code requires compare and branches when and if * p
An intrusive list with ownership and callbacks specified/controlled by ilist_traits,...
void splice(iterator where, iplist_impl &L2)
const Function * FilterOrFinally
Filter or finally function. Null indicates a catch-all.
BasicBlockListType::iterator iterator
iterator erase(iterator where)
DebugSubstitution(const DebugInstrOperandPair &Src, const DebugInstrOperandPair &Dest, unsigned Subreg)
const std::vector< MCCFIInstruction > & getFrameInstructions() const
Returns a reference to a list of cfi instructions in the function's prologue.
LLVM Basic Block Representation.
static nodes_iterator nodes_end(MachineFunction *F)
void setExposesReturnsTwice(bool B)
setCallsSetJmp - Set a flag that indicates if there's a call to a "returns twice" function.
static void clear(coro::Shape &Shape)
void setWasmLandingPadIndex(const MachineBasicBlock *LPad, unsigned Index)
Map the landing pad to its index. Used for Wasm exception handling.
amdgpu Simplify well known AMD library false FunctionCallee Value * Arg
void verifyMachineFunction(MachineFunctionAnalysisManager *, const std::string &Banner, const MachineFunction &MF)
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
static nodes_iterator nodes_begin(MachineFunction *F)
Structure used to represent pair of argument number after call lowering and register used to transfer...
static nodes_iterator nodes_end(const MachineFunction *F)
< i1 > br i1 label label bb bb
const MachineBasicBlock & front() const
ArgRegPair(Register R, unsigned Arg)
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
void setSection(MCSection *S)
Indicates the Section this function belongs to.
SmallVector< MCSymbol *, 1 > EndLabels
void push_front(pointer val)
Itanium Name Demangler i e convert the string _Z1fv into f()". You can also use the CRTP base ManglingParser to perform some simple analysis on the mangled name
void setAlignment(Align A)
setAlignment - Set the alignment of the function.
Ty * getInfo()
getInfo - Keep track of various per-function pieces of information for backends that would like to do...
const std::vector< unsigned > & getFilterIds() const
Return a reference to the typeids encoding filters used in the current function.
bool verifyRequiredProperties(const MachineFunctionProperties &V) const
static unsigned size(const MachineFunction *F)
void setObserver(GISelChangeObserver *O)
bool hasAnyWasmLandingPadIndex() const
Return if there is any wasm exception handling.
virtual ~MachineFunctionInfo()
SmallVectorImpl< unsigned > & getCallSiteLandingPad(MCSymbol *Sym)
Get the call site indexes for a landing pad EH symbol.
the resulting code requires compare and branches when and if the revised code is with conditional branches instead of More there is a byte word extend before each where there should be only and the condition codes are not remembered when the same two values are compared twice More LSR enhancements i8 and i32 load store addressing modes are identical int b
bool hasBBLabels() const
Returns true if basic block labels are to be generated for this function.
const MachineFunctionProperties & getProperties() const
Get the function properties.
void deallocate(Capacity Cap, T *Ptr)
Deallocate an array with the specified Capacity.
std::vector< int > TypeIds
Describe properties that are true of each instruction in the target description file.
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
MachineOperand class - Representation of each machine instruction operand.
static MachineMemOperand * getMachineMemOperand(MachineFunction &MF, FrameIndexSDNode &FI)
reverse_iterator rbegin()
MachineFunctionProperties & set(Property P)
const VariableDbgInfoMapTy & getVariableDbgInfo() const
bool hasEHCatchret() const
This class contains meta information specific to a module.
void transferNodesFromList(ilist_callback_traits &OldList, Iterator, Iterator)
static NodeRef getEntryNode(Inverse< const MachineFunction * > G)
This class implements an extremely fast bulk output stream that can only output to a stream.
unsigned addToMBBNumbering(MachineBasicBlock *MBB)
Adds the MBB to the internal numbering.
void setHasWinCFI(bool v)
@ System
Synchronized with respect to all concurrently executing threads.
DebugPHIRegallocPos(MachineBasicBlock *MBB, Register Reg, unsigned SubReg)
const WasmEHFuncInfo * getWasmEHFuncInfo() const
getWasmEHFuncInfo - Return information about how the current function uses Wasm exception handling.
void removeFromMBBNumbering(unsigned N)
removeFromMBBNumbering - Remove the specific machine basic block from our tracker,...
This struct is a compact representation of a valid (non-zero power of two) alignment.
MachineFunctionProperties & reset(const MachineFunctionProperties &MFP)
static NodeRef getEntryNode(MachineFunction *F)
const MachineConstantPool * getConstantPool() const
DebugInstrOperandPair Src
Source instruction / operand pair.
const DIExpression * Expr
Template traits for intrusive list.
MachineFunctionProperties & set(const MachineFunctionProperties &MFP)
MachineModuleInfo & getMMI() const
void deallocateOperandArray(OperandCapacity Cap, MachineOperand *Array)
Dellocate an array of MachineOperands and recycle the memory.
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
AtomicOrdering
Atomic ordering for LLVM's memory model.
void setHasInlineAsm(bool B)
Set a flag that indicates that the function contains inline assembly.
const_reverse_iterator rend() const
void push_back(MachineBasicBlock *MBB)
void setCallSiteBeginLabel(MCSymbol *BeginLabel, unsigned Site)
Map the begin label for a call site.
void addCallArgsForwardingRegs(const MachineInstr *CallI, CallSiteInfoImpl &&CallInfo)
Start tracking the arguments passed to the call CallI.
SmallVector< MCSymbol *, 1 > BeginLabels
Representation of each machine instruction.
MachineFunctionProperties & reset()
Reset all the properties.
bool callsEHReturn() const
MachineBasicBlock & front()
void setHasEHCatchret(bool V)
#define LLVM_EXTERNAL_VISIBILITY
MachineBasicBlock & back()
multiplies can be turned into SHL s
void splice(iterator InsertPt, iterator MBBI)
Allocate memory in an ever growing pool, as if by bump-pointer.
This class contains a discriminated union of information about pointers in memory operands,...
compiles ldr LCPI1_0 ldr ldr mov lsr tst moveq r1 ldr LCPI1_1 and r0 bx lr It would be better to do something like to fold the shift into the conditional move
The MachineConstantPool class keeps track of constants referenced by a function which must be spilled...
bool hasAnyCallSiteLabel() const
const CallSiteInfoMap & getCallSitesInfo() const
static NodeRef getEntryNode(const MachineFunction *F)
Represent subnormal handling kind for floating point instruction inputs and outputs.
initializer< Ty > init(const Ty &Val)
Use delete by default for iplist and ilist.
Flags
Flags values. These may be or'd together.
MachineConstantPool * getConstantPool()
getConstantPool - Return the constant pool object for the current function.
typename SuperClass::const_iterator const_iterator
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
MachineBasicBlock * LandingPadBlock
ArrayRef< std::pair< MCSymbol *, MDNode * > > getCodeViewAnnotations() const
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
const std::vector< LandingPadInfo > & getLandingPads() const
Return a reference to the landing pad info for the current function.
void erase(iterator MBBI)
@ BasicBlock
Various leaf nodes.
Recycler - This class manages a linked-list of deallocated nodes and facilitates reusing deallocated ...
bool operator<(const DebugSubstitution &Other) const
Order only by source instruction / operand pair: there should never be duplicate entries for the same...
const_iterator begin() const
static unsigned addLiveIn(MachineFunction &MF, unsigned PReg, const TargetRegisterClass *RC)
WasmEHFuncInfo * getWasmEHFuncInfo()
MIPS Relocation Principles In there are several elements of the llvm::ISD::NodeType enum that deal with addresses and or relocations These are defined in include llvm Target TargetSelectionDAG td ConstantPool
The address of a basic block.
ArrayRecycler< MachineOperand >::Capacity OperandCapacity
static nodes_iterator nodes_begin(const MachineFunction *F)
const_reverse_iterator rbegin() const
void splice(iterator InsertPt, iterator MBBI, iterator MBBE)
void setHasEHScopes(bool V)
StringRef - Represent a constant reference to a string, i.e.
MachineBasicBlock MachineBasicBlock::iterator MBBI
void addNodeToList(NodeTy *)
When an MBB is added to an MF, we need to update the parent pointer of the MBB, the MBB numbering,...
Location of a PHI instruction that is also a debug-info variable value, for the duration of register ...
Register Reg
VReg where the control-flow-merge happens.
static unsigned size(MachineFunction *F)
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Instances of this class represent a uniqued identifier for a section in the current translation unit.
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
bool hasBBSections() const
Returns true if this function has basic block sections enabled.
MachineFunctionProperties & reset(Property P)
Abstract class that contains various methods for clients to notify about changes.
TargetSubtargetInfo - Generic base class for all target subtargets.
bool hasAnyCallSiteLandingPad() const
Wrapper class representing virtual and physical registers.
static NodeRef getEntryNode(Inverse< MachineFunction * > G)
Replacement definition for a debug instruction reference.
LLVM_NODISCARD bool empty() const
MCSection * getSection() const
Returns the Section this function belongs to.
Ty * cloneInfo(const Ty &Old)
const_iterator end() const
const MachineFrameInfo & getFrameInfo() const
MachineBasicBlock * getBlockNumbered(unsigned N) const
getBlockNumbered - MachineBasicBlocks are automatically numbered when they are inserted into the mach...
bool test(unsigned Idx) const
Function & getFunction()
Return the LLVM function that this machine code represents.
const LLVMTargetMachine & getTarget() const
getTarget - Return the target machine this machine code is compiled with
Iterator for intrusive lists based on ilist_node.
void erase(MachineBasicBlock *MBBI)
const WinEHFuncInfo * getWinEHFuncInfo() const
getWinEHFuncInfo - Return information about how the current function uses Windows exception handling.
void addCatchretTarget(MCSymbol *Target)
Add the specified symbol to the list of valid catchret targets for Windows EHCont Guard.
MachineOperand * allocateOperandArray(OperandCapacity Cap)
Allocate an array of MachineOperands.
bool hasCallSiteBeginLabel(MCSymbol *BeginLabel) const
Return true if the begin label has a call site number associated with it.
void removeNodeFromList(NodeTy *)
#define LLVM_NODISCARD
LLVM_NODISCARD - Warn if a type or return value is discarded.
WinEHFuncInfo * getWinEHFuncInfo()
This class describes a target machine that is implemented with the LLVM target-independent code gener...
bool isCandidateForCallSiteEntry(QueryType Type=IgnoreBundle) const
Return true if this is a call instruction that may have an associated call site entry in the debug in...
bool hasEHFunclets() const
void addLongjmpTarget(MCSymbol *Target)
Add the specified symbol to the list of valid longjmp targets for Windows Control Flow Guard.
iterator insert(iterator where, pointer New)
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.
Pass interface - Implemented by all 'passes'.
bool hasWasmLandingPadIndex(const MachineBasicBlock *LPad) const
Returns true if the landing pad has an associate index in wasm EH.
void reset()
Reset the instance as if it was just created.
Manages creation of pseudo source values.
static void deleteNode(NodeTy *V)
typename SuperClass::iterator iterator
SmallVector< DebugSubstitution, 8 > DebugValueSubstitutions
Debug value substitutions: a collection of DebugSubstitution objects, recording changes in where a va...
std::pair< iterator, bool > try_emplace(KeyT &&Key, Ts &&... Args)
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
unsigned getCallSiteBeginLabel(MCSymbol *BeginLabel) const
Get the call site number for a begin label.
This structure is used to retain landing pad info for the current function.
static BasicBlockListType MachineFunction::* getSublistAccess(MachineBasicBlock *)
Support for MachineBasicBlock::getNextNode().
void remove(MachineBasicBlock *MBBI)
MachineFunctionInfo * cloneInfoFrom(const MachineFunction &OrigMF, const DenseMap< MachineBasicBlock *, MachineBasicBlock * > &Src2DstMBB)
const DILocalVariable * Var
DenseMap< unsigned, DebugPHIRegallocPos > DebugPHIPositions
Map of debug instruction numbers to the position of their PHI instructions during register allocation...
const std::vector< const GlobalValue * > & getTypeInfos() const
Return a reference to the C++ typeinfo for the current function.
const std::vector< MCSymbol * > & getCatchretTargets() const
Returns a reference to a list of symbols that we have catchrets.
unsigned getWasmLandingPadIndex(const MachineBasicBlock *LPad) const
Get the index in wasm EH for a given landing pad.
const MachineJumpTableInfo * getJumpTableInfo() const
getJumpTableInfo - Return the jump table info object for the current function.
const static unsigned int DebugOperandMemNumber
A reserved operand number representing the instructions memory operand, for instructions that have a ...
MachineJumpTableInfo * getJumpTableInfo()
VariableDbgInfoMapTy VariableDbgInfos
static LLT scalar(unsigned SizeInBits)
Get a low-level scalar or aggregate "bag of bits".
MachineMemOperand * getMachineMemOperand(const MachineMemOperand *MMO, int64_t Offset, uint64_t Size)
Align getAlignment() const
getAlignment - Return the alignment of the function.
void setBBSectionsType(BasicBlockSection V)
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
const BlockAddress * RecoverBA
Address of block to recover at. Null for a finally handler.
void setVariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr, int Slot, const DILocation *Loc)
Collect information used to emit debugging information of a variable.
LandingPadInfo(MachineBasicBlock *MBB)
void setCallsEHReturn(bool b)
const MachineRegisterInfo & getRegInfo() const
Optional< std::vector< StOtherPiece > > Other
virtual MachineFunctionInfo * clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF, const DenseMap< MachineBasicBlock *, MachineBasicBlock * > &Src2DstMBB) const
Make a functionally equivalent copy of this MachineFunctionInfo in MF.
const std::vector< MCSymbol * > & getLongjmpTargets() const
Returns a reference to a list of symbols immediately following calls to _setjmp in the function.
reference emplace_back(ArgTypes &&... Args)
Wrapper class representing physical registers. Should be passed by value.