Go to the documentation of this file.
67 cl::desc(
"Leave out unnecessary information when printing MIR"));
70 cl::desc(
"Print MIR debug-locations"));
75 struct FrameIndexOperand {
85 return FrameIndexOperand(
Name,
ID,
false);
89 static FrameIndexOperand createFixed(
unsigned ID) {
90 return FrameIndexOperand(
"",
ID,
true);
150 : OS(OS), MST(MST), RegisterMaskIds(RegisterMaskIds),
151 StackObjectOperandMapping(StackObjectOperandMapping) {}
159 bool ShouldPrintRegisterTies,
LLT TypeToPrint,
160 bool PrintDef =
true);
169 template <>
struct BlockScalarTraits<
Module> {
190 initRegisterMaskIds(MF);
224 const auto &SubSrc = Sub.Src;
225 const auto &SubDest = Sub.Dest;
238 std::unique_ptr<yaml::MachineFunctionInfo>(
TM.convertFuncInfoToYAML(MF));
241 bool IsNewlineNeeded =
false;
242 for (
const auto &
MBB : MF) {
245 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
247 IsNewlineNeeded =
true;
254 yaml::Output Out(OS);
256 Out.setWriteDefaultValues(
true);
262 assert(RegMask &&
"Can't print an empty register mask");
265 bool IsRegInRegMaskFound =
false;
268 if (RegMask[
I / 32] & (1u << (
I % 32))) {
269 if (IsRegInRegMaskFound)
272 IsRegInRegMaskFound =
true;
286 template <
typename T>
290 std::array<std::string *, 3> Outputs{{&
Object.DebugVar.Value,
293 std::array<const Metadata *, 3> Metas{{DebugVar.
Var,
296 for (
unsigned i = 0;
i < 3; ++
i) {
298 Metas[
i]->printAsOperand(StrOS, MST);
322 for (std::pair<unsigned, unsigned> LI : RegInfo.
liveins()) {
333 std::vector<yaml::FlowStringValue> CalleeSavedRegisters;
337 CalleeSavedRegisters.push_back(
Reg);
385 FixedStackObjectsIdx.
reserve(-BeginIdx);
388 for (
int I = BeginIdx;
I < 0; ++
I, ++
ID) {
389 FixedStackObjectsIdx.push_back(-1);
407 StackObjectOperandMapping.
insert(
408 std::make_pair(
I, FrameIndexOperand::createFixed(
ID)));
416 StackObjectsIdx.
reserve(EndIdx);
418 for (
int I = 0;
I < EndIdx; ++
I, ++
ID) {
419 StackObjectsIdx.push_back(-1);
427 Alloca->hasName() ? Alloca->getName() :
"");
441 StackObjectOperandMapping.
insert(std::make_pair(
442 I, FrameIndexOperand::create(YamlObject.
Name.
Value,
ID)));
446 const int FrameIdx = CSInfo.getFrameIdx();
452 if (!CSInfo.isSpilledToReg()) {
455 "Invalid stack object index");
461 Object.CalleeSavedRestored = CSInfo.isRestored();
465 Object.CalleeSavedRestored = CSInfo.isRestored();
471 assert(LocalObject.first >= 0 &&
"Expected a locally mapped stack object");
472 YMF.
StackObjects[StackObjectsIdx[LocalObject.first]].LocalOffset =
480 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
486 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
495 "Invalid stack object index");
496 if (DebugVar.Slot < 0) {
518 CallLocation.
BlockNum = CallI->getParent()->getNumber();
521 std::distance(CallI->getParent()->instr_begin(), CallI);
524 for (
auto ArgReg : CSInfo.second) {
526 YmlArgReg.
ArgNo = ArgReg.ArgNo;
536 if (A.CallLocation.BlockNum == B.CallLocation.BlockNum)
537 return A.CallLocation.Offset < B.CallLocation.Offset;
538 return A.CallLocation.BlockNum < B.CallLocation.BlockNum;
547 for (
auto &MD : MDList) {
561 if (
Constant.isMachineConstantPoolEntry()) {
568 YamlConstant.
ID =
ID++;
586 for (
const auto *
MBB : Table.MBBs) {
589 Entry.Blocks.push_back(StrOS.
str());
592 YamlJTI.
Entries.push_back(Entry);
605 bool &IsFallthrough) {
617 Result.push_back(Succ);
621 IsFallthrough =
I ==
MBB.
end() || !
I->isBarrier();
638 return std::equal(Normalized.begin(), Normalized.end(),
Equal.begin());
643 bool GuessedFallthrough;
645 if (GuessedFallthrough) {
648 if (NextI != MF.
end()) {
651 GuessedSuccs.push_back(Next);
667 bool HasLineAttributes =
false;
669 bool canPredictProbs = canPredictBranchProbabilities(
MBB);
677 !canPredictSuccessors(
MBB)) {
678 OS.
indent(2) <<
"successors: ";
689 HasLineAttributes =
true;
696 OS.
indent(2) <<
"liveins: ";
703 if (!LI.LaneMask.all())
707 HasLineAttributes =
true;
710 if (HasLineAttributes)
712 bool IsInBundle =
false;
715 if (IsInBundle && !
MI.isInsideBundle()) {
719 OS.
indent(IsInBundle ? 4 : 2);
732 const auto *MF =
MI.getMF();
735 const auto *
TRI = SubTarget.getRegisterInfo();
736 assert(
TRI &&
"Expected target register info");
737 const auto *
TII = SubTarget.getInstrInfo();
738 assert(
TII &&
"Expected target instruction info");
739 if (
MI.isCFIInstruction())
740 assert(
MI.getNumOperands() == 1 &&
"Expected 1 operand in CFI instruction");
743 bool ShouldPrintRegisterTies =
MI.hasComplexRegisterTies();
744 unsigned I = 0,
E =
MI.getNumOperands();
745 for (;
I <
E &&
MI.getOperand(
I).
isReg() &&
MI.getOperand(
I).isDef() &&
746 !
MI.getOperand(
I).isImplicit();
751 MI.getTypeToPrint(
I, PrintedTypes,
MRI),
758 OS <<
"frame-setup ";
760 OS <<
"frame-destroy ";
786 OS <<
TII->getName(
MI.getOpcode());
790 bool NeedComma =
false;
795 MI.getTypeToPrint(
I, PrintedTypes,
MRI));
801 if (
MCSymbol *PreInstrSymbol =
MI.getPreInstrSymbol()) {
804 OS <<
" pre-instr-symbol ";
808 if (
MCSymbol *PostInstrSymbol =
MI.getPostInstrSymbol()) {
811 OS <<
" post-instr-symbol ";
815 if (
MDNode *HeapAllocMarker =
MI.getHeapAllocMarker()) {
818 OS <<
" heap-alloc-marker ";
819 HeapAllocMarker->printAsOperand(OS, MST);
823 if (
auto Num =
MI.peekDebugInstrNum()) {
826 OS <<
" debug-instr-number " << Num;
834 OS <<
" debug-location ";
839 if (!
MI.memoperands_empty()) {
843 bool NeedComma =
false;
844 for (
const auto *
Op :
MI.memoperands()) {
855 assert(ObjectInfo != StackObjectOperandMapping.
end() &&
856 "Invalid frame index");
857 const FrameIndexOperand &Operand = ObjectInfo->second;
865 return std::string(
" /* " + Comment +
" */");
871 bool ShouldPrintRegisterTies,
LLT TypeToPrint,
874 std::string MOComment =
TII->createMIROperandComment(
MI,
Op, OpIdx,
TRI);
876 switch (
Op.getType()) {
878 if (
MI.isOperandSubregIdx(OpIdx)) {
901 unsigned TiedOperandIdx = 0;
902 if (ShouldPrintRegisterTies &&
Op.isReg() &&
Op.isTied() && !
Op.isDef())
903 TiedOperandIdx =
Op.getParent()->findTiedOperandIdx(OpIdx);
905 Op.print(OS, MST, TypeToPrint, OpIdx, PrintDef,
false,
906 ShouldPrintRegisterTies, TiedOperandIdx,
TRI,
TII);
914 auto RegMaskInfo = RegisterMaskIds.
find(
Op.getRegMask());
915 if (RegMaskInfo != RegisterMaskIds.
end())
926 if (isa<GlobalValue>(V)) {
930 if (isa<Constant>(V)) {
947 yaml::Output Out(OS);
948 Out << const_cast<Module &>(
M);
bool isMaxCallFrameSizeComputed() const
unsigned succ_size() const
@ MO_BlockAddress
Address of a basic block.
bool hasProperty(Property P) const
std::vector< ArgRegPair > ArgForwardingRegs
@ MO_Immediate
Immediate operand.
int getLocalSlot(const Value *V)
Return the slot number of the specified local value.
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 ...
We currently emits eax Perhaps this is what we really should generate is Is imull three or four cycles eax eax The current instruction priority is based on pattern complexity The former is more complex because it folds a load so the latter will not be emitted Perhaps we should use AddedComplexity to give LEA32r a higher priority We should always try to match LEA first since the LEA matching code does some estimate to determine whether the match is profitable if we care more about code then imull is better It s two bytes shorter than movl leal On a Pentium M
bool hasVAStart() const
Returns true if the function calls the llvm.va_start intrinsic.
VariableDbgInfoMapTy & getVariableDbgInfo()
unsigned getNumFixedObjects() const
Return the number of fixed objects.
StringRef getVRegName(Register Reg) const
@ MO_ShuffleMask
Other IR Constant for ISel (shuffle masks)
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
@ MO_RegisterLiveOut
Mask of live-out registers.
uint32_t getNumerator() const
MachineJumpTable JumpTableInfo
A raw_ostream that writes to an std::string.
static void printStackObjectReference(raw_ostream &OS, unsigned FrameIndex, bool IsFixed, StringRef Name)
Print a stack object reference.
static void printIRSlotNumber(raw_ostream &OS, int Slot)
Print an IRSlotNumber.
virtual ArrayRef< const char * > getRegMaskNames() const =0
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
void printLLVMNameWithoutPrefix(raw_ostream &OS, StringRef Name)
Print out a name of an LLVM value without any prefixes.
StringValue PreferredRegister
Printable printMBBReference(const MachineBasicBlock &MBB)
Prints a machine basic block reference.
unsigned getCVBytesOfCalleeSavedRegisters() const
Returns how many bytes of callee-saved registers the target pushed in the prologue.
std::vector< MachineStackObject > StackObjects
const Function * getCurrentFunction() const
bool exposesReturnsTwice() const
exposesReturnsTwice - Returns true if the function calls setjmp or any other similar functions with a...
unsigned getNumRegs() const
Return the number of registers this target has (useful for sizing arrays holding per register informa...
Reg
All possible values of the reg field in the ModR/M byte.
const TargetRegisterInfo * getTargetRegisterInfo() const
Serializable representation of stack object from the MachineFrameInfo class.
int getOffsetAdjustment() const
Return the correction for frame offsets.
void convert(yaml::MachineFunction &MF, const MachineRegisterInfo &RegInfo, const TargetRegisterInfo *TRI)
virtual const TargetRegisterInfo * getRegisterInfo() const
getRegisterInfo - If register information is available, return it.
void convertStackObjects(yaml::MachineFunction &YMF, const MachineFunction &MF, ModuleSlotTracker &MST)
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
bool hasFunctionContextIndex() const
LLVMContext & getContext() const
getContext - Return a reference to the LLVMContext associated with this function.
iterator_range< livein_iterator > liveins() const
@ MO_CFIIndex
MCCFIInstruction index.
bool callsUnwindInit() const
unsigned getNumVirtRegs() const
getNumVirtRegs - Return the number of virtual registers created.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
static void printRegMIR(unsigned Reg, yaml::StringValue &Dest, const TargetRegisterInfo *TRI)
static Register index2VirtReg(unsigned Index)
Convert a 0-based index to a virtual register number.
void incorporateFunction(const Function &F)
Incorporate the given function.
int getObjectIndexEnd() const
Return one past the maximum frame object index.
Serializable representation of CallSiteInfo.
Manage lifetime of a slot tracker for printing IR.
unsigned const TargetRegisterInfo * TRI
unsigned CVBytesOfCalleeSavedRegisters
unsigned getMaxCallFrameSize() const
Return the maximum size of a call frame that must be allocated for an outgoing function call.
TargetStackID::Value StackID
static cl::opt< bool > PrintLocations("mir-debug-loc", cl::Hidden, cl::init(true), cl::desc("Print MIR debug-locations"))
@ MO_Register
Register operand.
static void printSymbol(raw_ostream &OS, MCSymbol &Sym)
Print a MCSymbol as an operand.
TargetIntrinsicInfo - Interface to description of machine instruction set.
bool tracksLiveness() const
tracksLiveness - Returns true when tracking register liveness accurately.
JTEntryKind getEntryKind() const
void printName(raw_ostream &os, unsigned printNameFlags=PrintNameIr, ModuleSlotTracker *moduleSlotTracker=nullptr) const
Print the basic block's name as:
static cl::opt< bool > SimplifyMIR("simplify-mir", cl::Hidden, cl::desc("Leave out unnecessary information when printing MIR"))
This is a 'bitvector' (really, a variable-sized bit array), optimized for the case when the array is ...
static void printSubRegIdx(raw_ostream &OS, uint64_t Index, const TargetRegisterInfo *TRI)
Print a subreg index operand.
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.
print alias Alias Set Printer
This class prints out the machine functions using the MIR serialization format.
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
TargetInstrInfo - Interface to description of machine instruction set.
void print(const MachineFunction &MF)
@ MO_GlobalAddress
Address of a global value.
bool isReturnAddressTaken() const
This method may be called any time after instruction selection is complete to determine if there is a...
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
MIPrinter(raw_ostream &OS, ModuleSlotTracker &MST, const DenseMap< const uint32_t *, unsigned > &RegisterMaskIds, const DenseMap< int, FrameIndexOperand > &StackObjectOperandMapping)
bool isUpdatedCSRsInitialized() const
Returns true if the updated CSR list was initialized and false otherwise.
MachineInstrLoc CallLocation
std::unique_ptr< MachineFunctionInfo > MachineFuncInfo
Constant pool.
@ MO_FrameIndex
Abstract Stack Frame Index.
void guessSuccessors(const MachineBasicBlock &MBB, SmallVectorImpl< MachineBasicBlock * > &Result, bool &IsFallthrough)
Determine a possible list of successors of a basic block based on the basic block machine operand bei...
static StringRef input(StringRef Str, void *Ctxt, Module &Mod)
const MachineFunctionProperties & getProperties() const
Get the function properties.
const HexagonInstrInfo * TII
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
into llvm powi allowing the code generator to produce balanced multiplication trees First
MachineOperand class - Representation of each machine instruction operand.
void printStackObjectReference(int FrameIndex)
bool hasEHCatchret() const
TargetStackID::Value StackID
MachineBasicBlock * getRestorePoint() const
uint8_t getStackID(int ObjectIdx) const
This class implements an extremely fast bulk output stream that can only output to a stream.
Printable PrintLaneMask(LaneBitmask LaneMask)
Create Printable object to print LaneBitmasks on a raw_ostream.
bool isAliasedObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to an object that might be pointed to by an LLVM IR v...
Optional< std::vector< FlowStringValue > > CalleeSavedRegisters
static void printStackObjectDbgInfo(const MachineFunction::VariableDbgInfo &DebugVar, T &Object, ModuleSlotTracker &MST)
uint64_t getStackSize() const
Return the number of bytes that must be allocated to hold all of the fixed size frame objects.
bool hasMustTailInVarArgFunc() const
Returns true if the function is variadic and contains a musttail call.
MachineFrameInfo FrameInfo
int64_t getObjectOffset(int ObjectIdx) const
Return the assigned stack offset of the specified object from the incoming stack pointer.
void printMIR(raw_ostream &OS, const Module &M)
Print LLVM IR using the MIR serialization format to the given output stream.
int getObjectIndexBegin() const
Return the minimum frame object index.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
bool isDeadObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to a dead object.
const DIExpression * Expr
Serializable representation of the fixed stack object from the MachineFrameInfo class.
StringValue StackProtector
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
BranchProbability getSuccProbability(const_succ_iterator Succ) const
Return probability of the edge from this block to MBB.
std::pair< int, int64_t > getLocalFrameObjectMap(int i) const
Get the local offset mapping for a for an object.
bool hasSuccessorProbabilities() const
Return true if any of the successors have probabilities attached to them.
@ MO_Metadata
Metadata reference (for debug info)
const std::vector< MachineJumpTableEntry > & getJumpTables() const
This is an important base class in LLVM.
void printAsOperand(raw_ostream &OS, bool PrintType=true) const
int64_t getLocalFrameSize() const
Get the size of the local object blob.
Representation of each machine instruction.
bool callsEHReturn() const
int64_t getObjectSize(int ObjectIdx) const
Return the size of the specified object.
Module * getParent()
Get the module that this global value is contained inside of...
StringValue FunctionContext
bool hasStackProtectorIndex() const
This is an important class for using LLVM in a threaded context.
const MCPhysReg * getCalleeSavedRegs() const
Returns list of callee saved registers.
The MachineConstantPool class keeps track of constants referenced by a function which must be spilled...
@ MO_Predicate
Generic predicate for ISel.
const CallSiteInfoMap & getCallSitesInfo() const
Align getObjectAlign(int ObjectIdx) const
Return the alignment of the specified stack object.
@ MO_MCSymbol
MCSymbol reference (for debug/eh info)
initializer< Ty > init(const Ty &Val)
LLVM_NODISCARD std::string lower() const
bool is_contained(R &&Range, const E &Element)
Wrapper function around std::find to detect if an element exists in a container.
ArrayRef< std::pair< MCRegister, Register > > liveins() const
void print(raw_ostream &O, bool IsForDebug=false) const
Implement operator<< on Value.
iterator getLastNonDebugInstr(bool SkipPseudoOp=true)
Returns an iterator to the last non-debug instruction in the basic block, or end().
StringValue VirtualRegister
iterator find(const_arg_type_t< KeyT > Val)
StringRef getName() const
getName - Return the name of the corresponding LLVM function.
std::vector< FixedMachineStackObject > FixedStackObjects
This class prints out the machine instructions using the MIR serialization format.
MachineConstantPool * getConstantPool()
getConstantPool - Return the constant pool object for the current function.
static void printCustomRegMask(const uint32_t *RegMask, raw_ostream &OS, const TargetRegisterInfo *TRI)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Primary interface to the complete machine description for the target machine.
succ_iterator succ_begin()
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
const MachineFunction * getParent() const
Return the MachineFunction containing this basic block.
@ MO_TargetIndex
Target-dependent index+offset operand.
@ MO_FPImmediate
Floating-point immediate operand.
A Module instance is used to store all the information related to an LLVM module.
instr_iterator instr_begin()
A wrapper around std::string which contains a source range that's being set during parsing.
static bool isReg(const MCInst &MI, unsigned OpNo)
void printAsOperand(raw_ostream &O, bool PrintType=true, const Module *M=nullptr) const
Print the name of this Value out to the specified raw_ostream.
void print(raw_ostream &OS, AssemblyAnnotationWriter *AAW, bool ShouldPreserveUseListOrder=false, bool IsForDebug=false) const
Print the module to an output stream with an optional AssemblyAnnotationWriter.
instr_iterator instr_end()
bool HasOpaqueSPAdjustment
@ MO_JumpTableIndex
Address of indexed Jump Table for switch.
@ PrintNameIr
Add IR name where available.
const std::vector< CalleeSavedInfo > & getCalleeSavedInfo() const
Returns a reference to call saved info vector for the current function.
@ MO_CImmediate
Immediate >64bit operand.
Printable printRegClassOrBank(Register Reg, const MachineRegisterInfo &RegInfo, const TargetRegisterInfo *TRI)
Create Printable object to print register classes or register banks on a raw_ostream.
std::vector< Entry > Entries
unsigned MaxCallFrameSize
~0u means: not computed yet.
bool hasPatchPoint() const
This method may be called any time after instruction selection is complete to determine if there is a...
int getNumber() const
MachineBasicBlocks are uniquely numbered at the function level, unless they're not in a MachineFuncti...
static void output(const Module &Mod, void *Ctxt, raw_ostream &OS)
@ PrintNameAttributes
Print attributes.
StringRef - Represent a constant reference to a string, i.e.
MachineJumpTableInfo::JTEntryKind Kind
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ MO_MachineBasicBlock
MachineBasicBlock reference.
self_iterator getIterator()
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
std::vector< std::pair< unsigned, const MDNode * > > MachineMDNodeListType
@ MO_IntrinsicID
Intrinsic ID for ISel.
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
void print(const MachineBasicBlock &MBB)
#define LLVM_FALLTHROUGH
LLVM_FALLTHROUGH - Mark fallthrough cases in switch statements.
StringRef getName() const
Return a constant reference to the value's name.
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
int64_t getLocalFrameObjectCount() const
Return the number of objects allocated into the local object block.
unsigned const MachineRegisterInfo * MRI
Align getMaxAlign() const
Return the alignment in bytes that this function must be aligned to, which is greater than the defaul...
Serializable representation of MachineFrameInfo.
bool isFrameAddressTaken() const
This method may be called any time after instruction selection is complete to determine if there is a...
bool hasCalls() const
Return true if the current function has any function calls.
std::vector< DebugValueSubstitution > DebugValueSubstitutions
void convertMachineMetadataNodes(yaml::MachineFunction &YMF, const MachineFunction &MF, MachineModuleSlotTracker &MST)
std::vector< VirtualRegisterDefinition > VirtualRegisters
static void printTargetFlags(raw_ostream &OS, const MachineOperand &Op)
Print operand target flags.
MachineBasicBlock * getSavePoint() const
static std::string formatOperandComment(std::string Comment)
Register getSimpleHint(Register VReg) const
getSimpleHint - same as getRegAllocationHint except it will only return a target independent hint.
bool IsReturnAddressTaken
This class is a data container for one entry in a MachineConstantPool.
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
MIRPrinter(raw_ostream &OS)
bool isVariableSizedObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to a variable sized object.
Iterator for intrusive lists based on ilist_node.
uint64_t value() const
This is a hole in the type system and should not be abused.
@ MO_ExternalSymbol
Name of external global symbol.
void sort(IteratorTy Start, IteratorTy End)
bool TracksDebugUserValues
bool isSpillSlotObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to a spill slot.
bool hasEHFunclets() const
bool livein_empty() const
std::vector< MachineFunctionLiveIn > LiveIns
bool isImmutableObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to an immutable object.
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.
static void normalizeProbabilities(ProbabilityIter Begin, ProbabilityIter End)
bool HasMustTailInVarArgFunc
raw_ostream & indent(unsigned NumSpaces)
indent - Insert 'NumSpaces' spaces.
SmallVector< DebugSubstitution, 8 > DebugValueSubstitutions
Debug value substitutions: a collection of DebugSubstitution objects, recording changes in where a va...
std::vector< StringValue > MachineMetadataNodes
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
const char LLVMTargetMachineRef TM
bool hasOpaqueSPAdjustment() const
Returns true if the function contains opaque dynamic stack adjustments.
Identifies call instruction location in machine function.
const DILocalVariable * Var
int getStackProtectorIndex() const
Return the index for the stack protector object.
bool hasStackMap() const
This method may be called any time after instruction selection is complete to determine if there is a...
const MachineJumpTableInfo * getJumpTableInfo() const
getJumpTableInfo - Return the jump table info object for the current function.
bool adjustsStack() const
Return true if this function adjusts the stack – e.g., when calling another function.
@ MO_RegisterMask
Mask of preserved registers.
bool hasTailCall() const
Returns true if the function contains a tail call.
std::vector< CallSiteInfo > CallSitesInfo
Printable printReg(Register Reg, const TargetRegisterInfo *TRI=nullptr, unsigned SubIdx=0, const MachineRegisterInfo *MRI=nullptr)
Prints virtual and physical registers with or without a TRI instance.
void reserve(size_type N)
Align getAlignment() const
getAlignment - Return the alignment of the function.
std::string & str()
Returns the string's reference.
LLVM Value Representation.
void collectMachineMDNodes(MachineMDNodeListType &L) const
void convertCallSiteObjects(yaml::MachineFunction &YMF, const MachineFunction &MF, ModuleSlotTracker &MST)
virtual ArrayRef< const uint32_t * > getRegMasks() const =0
Return all the call-preserved register masks defined for this target.
std::vector< MachineConstantPoolValue > Constants
int getFunctionContextIndex() const
Return the index for the function context object.
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
@ MO_ConstantPoolIndex
Address of indexed Constant in Constant Pool.
const AllocaInst * getObjectAllocation(int ObjectIdx) const
Return the underlying Alloca of the specified stack object if it exists.