17#ifndef LLVM_CODEGEN_MACHINEFUNCTION_H
18#define LLVM_CODEGEN_MACHINEFUNCTION_H
55class GISelChangeObserver;
57class LLVMTargetMachine;
58class MachineConstantPool;
59class MachineFrameInfo;
61class MachineJumpTableInfo;
62class MachineModuleInfo;
63class MachineRegisterInfo;
69class PseudoSourceValueManager;
73class TargetRegisterClass;
74class TargetSubtargetInfo;
86 template <
class Iterator>
88 assert(
this == &OldList &&
"never transfer MBBs between functions");
103 template <
typename FuncInfoTy,
typename SubtargetTy = TargetSubtargetInfo>
105 const SubtargetTy *STI) {
106 return new (
Allocator.Allocate<FuncInfoTy>()) FuncInfoTy(
F, STI);
109 template <
typename Ty>
111 return new (
Allocator.Allocate<Ty>()) Ty(MFI);
195 return Properties[
static_cast<unsigned>(
P)];
199 Properties.
set(
static_cast<unsigned>(
P));
204 Properties.
reset(
static_cast<unsigned>(
P));
215 Properties |= MFP.Properties;
220 Properties.
reset(MFP.Properties);
227 return !V.Properties.test(Properties);
297 std::vector<MachineBasicBlock*> MBBNumbering;
318 unsigned FunctionNumber;
328 bool ExposesReturnsTwice =
false;
331 bool HasInlineAsm =
false;
334 bool HasWinCFI =
false;
341 std::unique_ptr<PseudoSourceValueManager> PSVManager;
345 std::vector<MCCFIInstruction> FrameInstructions;
349 std::vector<MCSymbol *> LongjmpTargets;
353 std::vector<MCSymbol *> CatchretTargets;
359 std::vector<LandingPadInfo> LandingPads;
371 std::vector<std::pair<MCSymbol *, MDNode *>> CodeViewAnnotations;
373 bool CallsEHReturn =
false;
374 bool CallsUnwindInit =
false;
375 bool HasEHCatchret =
false;
376 bool HasEHScopes =
false;
377 bool HasEHFunclets =
false;
378 bool IsOutlined =
false;
381 unsigned NextBBID = 0;
387 std::vector<const GlobalValue *> TypeInfos;
390 std::vector<unsigned> FilterIds;
393 std::vector<unsigned> FilterEnds;
416 std::variant<int, MCRegister> Address;
425 : Address(Slot), Var(Var), Expr(Expr), Loc(Loc) {}
429 : Address(EntryValReg), Var(Var), Expr(Expr), Loc(Loc) {}
432 bool inStackSlot()
const {
return std::holds_alternative<int>(Address); }
436 return std::holds_alternative<MCRegister>(Address);
446 return std::get<MCRegister>(Address);
458 virtual void anchor();
481 assert(Arg < (1 << 16) &&
"Arg out of range");
515 unsigned DebugInstrNumberingCount = 0;
519 void setDebugInstrNumberingCount(
unsigned Num);
541 : Src(Src), Dest(Dest), Subreg(Subreg) {}
546 return Src <
Other.Src;
576 bool UseDebugInstrRef =
false;
592 unsigned MaxOperand = UINT_MAX);
616 void finalizeDebugInstrRefs();
620 bool shouldUseDebugInstrRef()
const;
624 bool useDebugInstrRef()
const;
627 void setUseDebugInstrRef(
bool UseInstrRef);
648 assert(TheDelegate == delegate &&
649 "Only the current delegate can perform reset!");
650 TheDelegate =
nullptr;
656 assert(delegate && !TheDelegate &&
657 "Attempted to set delegate to null, or to change it without "
658 "first resetting it!");
660 TheDelegate = delegate;
695 return (BBSectionsType == BasicBlockSection::All ||
696 BBSectionsType == BasicBlockSection::List ||
697 BBSectionsType == BasicBlockSection::Preset);
702 return BBSectionsType == BasicBlockSection::Labels;
709 void assignBeginEndSections();
722 return *
static_cast<const STC *
>(STI);
779 return ExposesReturnsTwice;
785 ExposesReturnsTwice =
B;
804 bool needsFrameMoves()
const;
813 template<
typename Ty>
815 return static_cast<Ty*
>(MFInfo);
818 template<
typename Ty>
820 return static_cast<const Ty *
>(MFInfo);
825 MFInfo = Ty::template create<Ty>(
Allocator, Old);
826 return static_cast<Ty *
>(MFInfo);
835 assert(!MFInfo &&
"new function already has MachineFunctionInfo");
850 assert(
N < MBBNumbering.size() &&
"Illegal block number");
851 assert(MBBNumbering[
N] &&
"Block was removed from the machine function!");
852 return MBBNumbering[
N];
856 bool shouldSplitStack()
const;
884 void viewCFGOnly()
const;
892 bool verify(
Pass *p =
nullptr,
const char *Banner =
nullptr,
893 bool AbortOnError =
true)
const;
899 const char *Banner =
nullptr,
bool AbortOnError =
true)
const;
910 return &MachineFunction::BasicBlocks;
930 unsigned size()
const {
return (
unsigned)BasicBlocks.size();}
931 bool empty()
const {
return BasicBlocks.empty(); }
943 BasicBlocks.
splice(InsertPt, BasicBlocks,
MBBI);
946 BasicBlocks.
splice(InsertPt, BasicBlocks,
MBB);
949 BasicBlocks.
splice(InsertPt, BasicBlocks,
MBBI, MBBE);
957 template <
typename Comp>
959 BasicBlocks.sort(comp);
976 MBBNumbering.push_back(
MBB);
977 return (
unsigned)MBBNumbering.size()-1;
984 assert(
N < MBBNumbering.size() &&
"Illegal basic block #");
985 MBBNumbering[
N] =
nullptr;
991 bool NoImplicit =
false);
1019 CreateMachineBasicBlock(
const BasicBlock *BB =
nullptr,
1020 std::optional<UniqueBBID> BBID = std::nullopt);
1101 MachineInstr::ExtraInfo *createMIExtraInfo(
1103 MCSymbol *PostInstrSymbol =
nullptr,
MDNode *HeapAllocMarker =
nullptr,
1116 bool isLinkerPrivate =
false)
const;
1120 MCSymbol *getPICBaseSymbol()
const;
1126 return FrameInstructions;
1135 return LongjmpTargets;
1145 return CatchretTargets;
1151 CatchretTargets.push_back(
Target);
1204 return !WasmLPadToIndexMap.
empty();
1209 WasmLPadToIndexMap[LPad] =
Index;
1214 return WasmLPadToIndexMap.
count(LPad);
1219 assert(hasWasmLandingPadIndex(LPad));
1220 return WasmLPadToIndexMap.
lookup(LPad);
1224 return !LPadToCallSiteMap.
empty();
1230 "missing call site number for landing pad!");
1231 return LPadToCallSiteMap[
Sym];
1236 return !LPadToCallSiteMap[
Sym].
empty();
1240 return !CallSiteMap.
empty();
1245 CallSiteMap[BeginLabel] = Site;
1250 assert(hasCallSiteBeginLabel(BeginLabel) &&
1251 "Missing call site number for EH_LABEL!");
1252 return CallSiteMap.
lookup(BeginLabel);
1257 return CallSiteMap.
count(BeginLabel);
1262 CodeViewAnnotations.push_back({Label, MD});
1266 return CodeViewAnnotations;
1298 return VariableDbgInfos;
1305 return VarInfo.inStackSlot();
1313 return VarInfo.inStackSlot();
1321 return VarInfo.inEntryValueRegister();
1332 assert(Inserted &&
"Call site info not unique");
1336 return CallSitesInfo;
1358 return ++DebugInstrNumberingCount;
1416 return &
G.Graph->front();
1422 return &
G.Graph->front();
1426class MachineFunctionAnalysisManager;
1428 const std::string &Banner,
1429 const MachineFunction &MF);
aarch64 AArch64 CCMP Pass
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
MachineBasicBlock MachineBasicBlock::iterator MBBI
This file defines the BumpPtrAllocator interface.
static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val)
Atomic ordering constants.
This file implements the BitVector class.
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static void viewCFG(Function &F, const BlockFrequencyInfo *BFI, const BranchProbabilityInfo *BPI, uint64_t MaxFreq, bool CFGOnly=false)
#define LLVM_EXTERNAL_VISIBILITY
static void clear(coro::Shape &Shape)
static unsigned InstrCount
This file defines the DenseMap class.
std::optional< std::vector< StOtherPiece > > Other
This file defines the little GraphTraits<X> template class that should be specialized by classes that...
static unsigned addLiveIn(MachineFunction &MF, unsigned PReg, const TargetRegisterClass *RC)
static StringRef getName(Value *V)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This file defines the SmallVector class.
static MachineMemOperand * getMachineMemOperand(MachineFunction &MF, FrameIndexSDNode &FI)
The size of an allocated array is represented by a Capacity instance.
Recycle small arrays allocated from a BumpPtrAllocator.
T * allocate(Capacity Cap, AllocatorType &Allocator)
Allocate an array of at least the requested capacity.
void deallocate(Capacity Cap, T *Ptr)
Deallocate an array with the specified Capacity.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
LLVM Basic Block Representation.
The address of a basic block.
Allocate memory in an ever growing pool, as if by bump-pointer.
A parsed version of the target data layout string in and methods for querying it.
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...
std::pair< iterator, bool > try_emplace(KeyT &&Key, Ts &&... Args)
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Abstract class that contains various methods for clients to notify about changes.
This class describes a target machine that is implemented with the LLVM target-independent code gener...
Context object for machine code objects.
Describe properties that are true of each instruction in the target description file.
Wrapper class representing physical registers. Should be passed by value.
Instances of this class represent a uniqued identifier for a section in the current translation unit.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
The MachineConstantPool class keeps track of constants referenced by a function which must be spilled...
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.
Properties which a MachineFunction may have at a given point in time.
MachineFunctionProperties & reset()
Reset all the properties.
MachineFunctionProperties & set(const MachineFunctionProperties &MFP)
void print(raw_ostream &OS) const
Print the MachineFunctionProperties in human-readable form.
bool verifyRequiredProperties(const MachineFunctionProperties &V) const
MachineFunctionProperties & reset(const MachineFunctionProperties &MFP)
MachineFunctionProperties & set(Property P)
bool hasProperty(Property P) const
MachineFunctionProperties & reset(Property P)
Location of a PHI instruction that is also a debug-info variable value, for the duration of register ...
DebugPHIRegallocPos(MachineBasicBlock *MBB, Register Reg, unsigned SubReg)
Register Reg
VReg where the control-flow-merge happens.
unsigned SubReg
Optional subreg qualifier within Reg.
MachineBasicBlock * MBB
Block where this PHI was originally located.
Replacement definition for a debug instruction reference.
bool operator<(const DebugSubstitution &Other) const
Order only by source instruction / operand pair: there should never be duplicate entries for the same...
DebugInstrOperandPair Dest
Replacement instruction / operand pair.
DebugInstrOperandPair Src
Source instruction / operand pair.
DebugSubstitution(const DebugInstrOperandPair &Src, const DebugInstrOperandPair &Dest, unsigned Subreg)
unsigned Subreg
Qualifier for which part of Dest is read.
virtual void MF_HandleChangeDesc(MachineInstr &MI, const MCInstrDesc &TID)
Callback before changing MCInstrDesc.
virtual void MF_HandleRemoval(MachineInstr &MI)=0
Callback before a removal. This should not modify the MI directly.
virtual void MF_HandleInsertion(MachineInstr &MI)=0
Callback after an insertion. This should not modify the MI directly.
virtual ~Delegate()=default
Description of the location of a variable whose Address is valid and unchanging during function execu...
bool inStackSlot() const
Return true if this variable is in a stack slot.
void updateStackSlot(int NewSlot)
Updates the stack slot of this variable, assuming inStackSlot() is true.
MCRegister getEntryValueRegister() const
Returns the MCRegister of this variable, assuming inEntryValueRegister() is true.
bool inEntryValueRegister() const
Return true if this variable is in the entry value of a register.
const DILocalVariable * Var
VariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr, int Slot, const DILocation *Loc)
int getStackSlot() const
Returns the stack slot of this variable, assuming inStackSlot() is true.
const DIExpression * Expr
VariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr, MCRegister EntryValReg, const DILocation *Loc)
unsigned getInstructionCount() const
Return the number of MachineInstrs in this MachineFunction.
auto getEntryValueVariableDbgInfo() const
Returns the collection of variables for which we have debug info and that have been assigned an entry...
void setBBSectionsType(BasicBlockSection V)
MachineJumpTableInfo * getJumpTableInfo()
const WinEHFuncInfo * getWinEHFuncInfo() const
getWinEHFuncInfo - Return information about how the current function uses Windows exception handling.
void setCallsUnwindInit(bool b)
unsigned addToMBBNumbering(MachineBasicBlock *MBB)
Adds the MBB to the internal numbering.
void addLongjmpTarget(MCSymbol *Target)
Add the specified symbol to the list of valid longjmp targets for Windows Control Flow Guard.
const MachineConstantPool * getConstantPool() const
const MachineFrameInfo & getFrameInfo() const
void setHasEHFunclets(bool V)
std::pair< unsigned, unsigned > DebugInstrOperandPair
Pair of instruction number and operand number.
ArrayRecycler< MachineOperand >::Capacity OperandCapacity
void setExposesReturnsTwice(bool B)
setCallsSetJmp - Set a flag that indicates if there's a call to a "returns twice" function.
void removeFromMBBNumbering(unsigned N)
removeFromMBBNumbering - Remove the specific machine basic block from our tracker,...
SmallVector< DebugSubstitution, 8 > DebugValueSubstitutions
Debug value substitutions: a collection of DebugSubstitution objects, recording changes in where a va...
unsigned getFunctionNumber() const
getFunctionNumber - Return a unique ID for the current function.
void setHasInlineAsm(bool B)
Set a flag that indicates that the function contains inline assembly.
bool hasAnyCallSiteLabel() const
PseudoSourceValueManager & getPSVManager() const
void setCallSiteBeginLabel(MCSymbol *BeginLabel, unsigned Site)
Map the begin label for a call site.
void setHasWinCFI(bool v)
void setWasmLandingPadIndex(const MachineBasicBlock *LPad, unsigned Index)
Map the landing pad to its index. Used for Wasm exception handling.
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
const std::vector< MCCFIInstruction > & getFrameInstructions() const
Returns a reference to a list of cfi instructions in the function's prologue.
unsigned getNewDebugInstrNum()
void setHasEHCatchret(bool V)
MachineFunction & operator=(const MachineFunction &)=delete
bool hasInlineAsm() const
Returns true if the function contains any inline assembly.
void setCallsEHReturn(bool b)
bool hasEHCatchret() const
BasicBlockListType::reverse_iterator reverse_iterator
void setAlignment(Align A)
setAlignment - Set the alignment of the function.
WinEHFuncInfo * getWinEHFuncInfo()
bool exposesReturnsTwice() const
exposesReturnsTwice - Returns true if the function calls setjmp or any other similar functions with a...
MachineFunctionProperties & getProperties()
GISelChangeObserver * getObserver() const
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
void deallocateOperandArray(OperandCapacity Cap, MachineOperand *Array)
Dellocate an array of MachineOperands and recycle the memory.
void setSection(MCSection *S)
Indicates the Section this function belongs to.
bool callsUnwindInit() const
MachineMemOperand * getMachineMemOperand(const MachineMemOperand *MMO, int64_t Offset, uint64_t Size)
void push_front(MachineBasicBlock *MBB)
const std::vector< unsigned > & getFilterIds() const
Return a reference to the typeids encoding filters used in the current function.
const std::vector< const GlobalValue * > & getTypeInfos() const
Return a reference to the C++ typeinfo for the current function.
auto getInStackSlotVariableDbgInfo() const
Returns the collection of variables for which we have debug info and that have been assigned a stack ...
bool hasAnyWasmLandingPadIndex() const
Return if there is any wasm exception handling.
const CallSiteInfoMap & getCallSitesInfo() const
void ensureAlignment(Align A)
ensureAlignment - Make sure the function is at least A bytes aligned.
void push_back(MachineBasicBlock *MBB)
reverse_iterator rbegin()
bool hasBBSections() const
Returns true if this function has basic block sections enabled.
MCContext & getContext() const
bool callsEHReturn() const
void setVariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr, MCRegister Reg, const DILocation *Loc)
Collect information used to emit debugging information of a variable in the entry value of a register...
const Function & getFunction() const
Return the LLVM function that this machine code represents.
MachineOperand * allocateOperandArray(OperandCapacity Cap)
Allocate an array of MachineOperands.
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
MachineBasicBlock * getBlockNumbered(unsigned N) const
getBlockNumbered - MachineBasicBlocks are automatically numbered when they are inserted into the mach...
auto getInStackSlotVariableDbgInfo()
Returns the collection of variables for which we have debug info and that have been assigned a stack ...
Align getAlignment() const
getAlignment - Return the alignment of the function.
void splice(iterator InsertPt, iterator MBBI, iterator MBBE)
void addCatchretTarget(MCSymbol *Target)
Add the specified symbol to the list of valid catchret targets for Windows EHCont Guard.
unsigned getWasmLandingPadIndex(const MachineBasicBlock *LPad) const
Get the index in wasm EH for a given landing pad.
const_iterator end() const
static const unsigned int DebugOperandMemNumber
A reserved operand number representing the instructions memory operand, for instructions that have a ...
void setObserver(GISelChangeObserver *O)
void addCallArgsForwardingRegs(const MachineInstr *CallI, CallSiteInfoImpl &&CallInfo)
Start tracking the arguments passed to the call CallI.
void resetDelegate(Delegate *delegate)
Reset the currently registered delegate - otherwise assert.
void addCodeViewAnnotation(MCSymbol *Label, MDNode *MD)
Record annotations associated with a particular label.
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
void erase(MachineBasicBlock *MBBI)
unsigned getNumBlockIDs() const
getNumBlockIDs - Return the number of MBB ID's allocated.
const_iterator begin() const
void remove(MachineBasicBlock *MBBI)
void setIsOutlined(bool V)
const std::vector< MCSymbol * > & getLongjmpTargets() const
Returns a reference to a list of symbols immediately following calls to _setjmp in the function.
const std::vector< LandingPadInfo > & getLandingPads() const
Return a reference to the landing pad info for the current function.
MCSection * getSection() const
Returns the Section this function belongs to.
const VariableDbgInfoMapTy & getVariableDbgInfo() const
const MachineBasicBlock & back() const
MachineModuleInfo & getMMI() const
const_reverse_iterator rbegin() const
const STC & getSubtarget() const
getSubtarget - This method returns a pointer to the specified type of TargetSubtargetInfo.
BasicBlockListType::const_reverse_iterator const_reverse_iterator
unsigned getCallSiteBeginLabel(MCSymbol *BeginLabel) const
Get the call site number for a begin label.
void remove(iterator MBBI)
VariableDbgInfoMapTy & getVariableDbgInfo()
Ty * getInfo()
getInfo - Keep track of various per-function pieces of information for backends that would like to do...
MachineConstantPool * getConstantPool()
getConstantPool - Return the constant pool object for the current function.
const MachineRegisterInfo & getRegInfo() const
const WasmEHFuncInfo * getWasmEHFuncInfo() const
getWasmEHFuncInfo - Return information about how the current function uses Wasm exception handling.
bool hasCallSiteBeginLabel(MCSymbol *BeginLabel) const
Return true if the begin label has a call site number associated with it.
void splice(iterator InsertPt, MachineBasicBlock *MBB)
static BasicBlockListType MachineFunction::* getSublistAccess(MachineBasicBlock *)
Support for MachineBasicBlock::getNextNode().
bool hasWasmLandingPadIndex(const MachineBasicBlock *LPad) const
Returns true if the landing pad has an associate index in wasm EH.
const MachineFunctionProperties & getProperties() const
Get the function properties.
Ty * cloneInfo(const Ty &Old)
const std::vector< MCSymbol * > & getCatchretTargets() const
Returns a reference to a list of symbols that we have catchrets.
bool hasCallSiteLandingPad(MCSymbol *Sym)
Return true if the landing pad Eh symbol has an associated call site.
void setVariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr, int Slot, const DILocation *Loc)
Collect information used to emit debugging information of a variable in a stack slot.
void setDelegate(Delegate *delegate)
Set the delegate.
void reset()
Reset the instance as if it was just created.
DenseMap< unsigned, DebugPHIRegallocPos > DebugPHIPositions
Map of debug instruction numbers to the position of their PHI instructions during register allocation...
const MachineBasicBlock & front() const
void setHasEHScopes(bool V)
bool hasBBLabels() const
Returns true if basic block labels are to be generated for this function.
const Ty * getInfo() const
bool hasEHFunclets() const
const MachineJumpTableInfo * getJumpTableInfo() const
getJumpTableInfo - Return the jump table info object for the current function.
const_reverse_iterator rend() const
bool hasAnyCallSiteLandingPad() const
WasmEHFuncInfo * getWasmEHFuncInfo()
void splice(iterator InsertPt, iterator MBBI)
void erase(iterator MBBI)
ArrayRef< std::pair< MCSymbol *, MDNode * > > getCodeViewAnnotations() const
VariableDbgInfoMapTy VariableDbgInfos
MachineFunction(const MachineFunction &)=delete
void insert(iterator MBBI, MachineBasicBlock *MBB)
MachineBasicBlock & back()
BasicBlockListType::const_iterator const_iterator
MachineFunctionInfo * cloneInfoFrom(const MachineFunction &OrigMF, const DenseMap< MachineBasicBlock *, MachineBasicBlock * > &Src2DstMBB)
MachineBasicBlock & front()
SmallVectorImpl< unsigned > & getCallSiteLandingPad(MCSymbol *Sym)
Get the call site indexes for a landing pad EH symbol.
Representation of each machine instruction.
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...
A description of a memory reference used in the backend.
Flags
Flags values. These may be or'd together.
This class contains meta information specific to a module.
MachineOperand class - Representation of each machine instruction operand.
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Pass interface - Implemented by all 'passes'.
Manages creation of pseudo source values.
Recycler - This class manages a linked-list of deallocated nodes and facilitates reusing deallocated ...
Wrapper class representing virtual and physical registers.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
reference emplace_back(ArgTypes &&... Args)
std::reverse_iterator< const_iterator > const_reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
TargetSubtargetInfo - Generic base class for all target subtargets.
Target - Wrapper for Target specific information.
void splice(iterator where, iplist_impl &L2)
void push_back(pointer val)
iterator erase(iterator where)
pointer remove(iterator &IT)
void push_front(pointer val)
iterator insert(iterator where, pointer New)
An intrusive list with ownership and callbacks specified/controlled by ilist_traits,...
This class implements an extremely fast bulk output stream that can only output to a stream.
This file defines classes to implement an intrusive doubly linked list class (i.e.
@ BasicBlock
Various leaf nodes.
This is an optimization pass for GlobalISel generic memory operations.
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
iterator_range< filter_iterator< detail::IterOfRange< RangeT >, PredicateT > > make_filter_range(RangeT &&Range, PredicateT Pred)
Convenience function that takes a range of elements and a predicate, and return a new filter_iterator...
AtomicOrdering
Atomic ordering for LLVM's memory model.
void verifyMachineFunction(MachineFunctionAnalysisManager *, const std::string &Banner, const MachineFunction &MF)
A collection of metadata nodes that might be associated with a memory access used by the alias-analys...
This struct is a compact representation of a valid (non-zero power of two) alignment.
Represent subnormal handling kind for floating point instruction inputs and outputs.
static NodeRef getEntryNode(Inverse< MachineFunction * > G)
static NodeRef getEntryNode(Inverse< const MachineFunction * > G)
static unsigned size(MachineFunction *F)
static nodes_iterator nodes_begin(MachineFunction *F)
static nodes_iterator nodes_end(MachineFunction *F)
static NodeRef getEntryNode(MachineFunction *F)
static nodes_iterator nodes_begin(const MachineFunction *F)
static nodes_iterator nodes_end(const MachineFunction *F)
static unsigned size(const MachineFunction *F)
static NodeRef getEntryNode(const MachineFunction *F)
This structure is used to retain landing pad info for the current function.
SmallVector< MCSymbol *, 1 > EndLabels
MCSymbol * LandingPadLabel
SmallVector< SEHHandler, 1 > SEHHandlers
LandingPadInfo(MachineBasicBlock *MBB)
MachineBasicBlock * LandingPadBlock
SmallVector< MCSymbol *, 1 > BeginLabels
std::vector< int > TypeIds
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
static FuncInfoTy * create(BumpPtrAllocator &Allocator, const Function &F, const SubtargetTy *STI)
Factory function: default behavior is to call new using the supplied allocator.
virtual ~MachineFunctionInfo()
virtual MachineFunctionInfo * clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF, const DenseMap< MachineBasicBlock *, MachineBasicBlock * > &Src2DstMBB) const
Make a functionally equivalent copy of this MachineFunctionInfo in MF.
static Ty * create(BumpPtrAllocator &Allocator, const Ty &MFI)
Structure used to represent pair of argument number after call lowering and register used to transfer...
ArgRegPair(Register R, unsigned Arg)
This class contains a discriminated union of information about pointers in memory operands,...
const BlockAddress * RecoverBA
Address of block to recover at. Null for a finally handler.
const Function * FilterOrFinally
Filter or finally function. Null indicates a catch-all.
Use delete by default for iplist and ilist.
static void deleteNode(NodeTy *V)
void transferNodesFromList(ilist_callback_traits &OldList, Iterator, Iterator)
Callbacks do nothing by default in iplist and ilist.
void removeNodeFromList(NodeTy *)
void addNodeToList(NodeTy *)
Template traits for intrusive list.