Go to the documentation of this file.
80 cl::desc(
"Leave out unnecessary information when printing MIR"));
83 cl::desc(
"Print MIR debug-locations"));
88 struct FrameIndexOperand {
98 return FrameIndexOperand(
Name,
ID,
false);
102 static FrameIndexOperand createFixed(
unsigned ID) {
103 return FrameIndexOperand(
"",
ID,
true);
160 : OS(OS), MST(MST), RegisterMaskIds(RegisterMaskIds),
161 StackObjectOperandMapping(StackObjectOperandMapping) {}
169 bool ShouldPrintRegisterTies,
LLT TypeToPrint,
170 bool PrintDef =
true);
179 template <>
struct BlockScalarTraits<
Module> {
181 Mod.print(OS,
nullptr);
200 initRegisterMaskIds(MF);
234 std::unique_ptr<yaml::MachineFunctionInfo>(
TM.convertFuncInfoToYAML(MF));
237 bool IsNewlineNeeded =
false;
238 for (
const auto &
MBB : MF) {
241 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
243 IsNewlineNeeded =
true;
246 yaml::Output Out(OS);
248 Out.setWriteDefaultValues(
true);
254 assert(RegMask &&
"Can't print an empty register mask");
257 bool IsRegInRegMaskFound =
false;
260 if (RegMask[
I / 32] & (1u << (
I % 32))) {
261 if (IsRegInRegMaskFound)
264 IsRegInRegMaskFound =
true;
278 template <
typename T>
282 std::array<std::string *, 3> Outputs{{&
Object.DebugVar.Value,
285 std::array<const Metadata *, 3> Metas{{DebugVar.
Var,
288 for (
unsigned i = 0;
i < 3; ++
i) {
290 Metas[
i]->printAsOperand(StrOS, MST);
314 for (std::pair<unsigned, unsigned> LI : RegInfo.
liveins()) {
325 std::vector<yaml::FlowStringValue> CalleeSavedRegisters;
329 CalleeSavedRegisters.push_back(
Reg);
377 FixedStackObjectsIdx.
reserve(-BeginIdx);
380 for (
int I = BeginIdx;
I < 0; ++
I, ++
ID) {
381 FixedStackObjectsIdx.push_back(-1);
399 StackObjectOperandMapping.
insert(
400 std::make_pair(
I, FrameIndexOperand::createFixed(
ID)));
408 StackObjectsIdx.
reserve(EndIdx);
410 for (
int I = 0;
I < EndIdx; ++
I, ++
ID) {
411 StackObjectsIdx.push_back(-1);
419 Alloca->hasName() ? Alloca->getName() :
"");
433 StackObjectOperandMapping.
insert(std::make_pair(
434 I, FrameIndexOperand::create(YamlObject.
Name.
Value,
ID)));
438 const int FrameIdx = CSInfo.getFrameIdx();
444 if (!CSInfo.isSpilledToReg()) {
447 "Invalid stack object index");
453 Object.CalleeSavedRestored = CSInfo.isRestored();
457 Object.CalleeSavedRestored = CSInfo.isRestored();
463 assert(LocalObject.first >= 0 &&
"Expected a locally mapped stack object");
464 YMF.
StackObjects[StackObjectsIdx[LocalObject.first]].LocalOffset =
472 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
481 "Invalid stack object index");
482 if (DebugVar.Slot < 0) {
504 CallLocation.
BlockNum = CallI->getParent()->getNumber();
507 std::distance(CallI->getParent()->instr_begin(), CallI);
510 for (
auto ArgReg : CSInfo.second) {
512 YmlArgReg.
ArgNo = ArgReg.ArgNo;
522 if (A.CallLocation.BlockNum == B.CallLocation.BlockNum)
523 return A.CallLocation.Offset < B.CallLocation.Offset;
524 return A.CallLocation.BlockNum < B.CallLocation.BlockNum;
534 if (
Constant.isMachineConstantPoolEntry()) {
541 YamlConstant.
ID =
ID++;
559 for (
const auto *
MBB : Table.MBBs) {
562 Entry.Blocks.push_back(StrOS.
str());
565 YamlJTI.
Entries.push_back(Entry);
578 bool &IsFallthrough) {
590 Result.push_back(Succ);
594 IsFallthrough =
I ==
MBB.
end() || !
I->isBarrier();
611 return std::equal(Normalized.begin(), Normalized.end(),
Equal.begin());
616 bool GuessedFallthrough;
618 if (GuessedFallthrough) {
621 if (NextI != MF.
end()) {
624 GuessedSuccs.push_back(Next);
640 bool HasLineAttributes =
false;
642 bool canPredictProbs = canPredictBranchProbabilities(
MBB);
650 !canPredictSuccessors(
MBB)) {
651 OS.
indent(2) <<
"successors: ";
662 HasLineAttributes =
true;
669 OS.
indent(2) <<
"liveins: ";
676 if (!LI.LaneMask.all())
680 HasLineAttributes =
true;
683 if (HasLineAttributes)
685 bool IsInBundle =
false;
688 if (IsInBundle && !
MI.isInsideBundle()) {
692 OS.
indent(IsInBundle ? 4 : 2);
705 const auto *MF =
MI.getMF();
708 const auto *
TRI = SubTarget.getRegisterInfo();
709 assert(
TRI &&
"Expected target register info");
710 const auto *
TII = SubTarget.getInstrInfo();
711 assert(
TII &&
"Expected target instruction info");
712 if (
MI.isCFIInstruction())
713 assert(
MI.getNumOperands() == 1 &&
"Expected 1 operand in CFI instruction");
716 bool ShouldPrintRegisterTies =
MI.hasComplexRegisterTies();
717 unsigned I = 0,
E =
MI.getNumOperands();
718 for (;
I <
E &&
MI.getOperand(
I).
isReg() &&
MI.getOperand(
I).isDef() &&
719 !
MI.getOperand(
I).isImplicit();
724 MI.getTypeToPrint(
I, PrintedTypes,
MRI),
731 OS <<
"frame-setup ";
733 OS <<
"frame-destroy ";
759 OS <<
TII->getName(
MI.getOpcode());
763 bool NeedComma =
false;
768 MI.getTypeToPrint(
I, PrintedTypes,
MRI));
774 if (
MCSymbol *PreInstrSymbol =
MI.getPreInstrSymbol()) {
777 OS <<
" pre-instr-symbol ";
781 if (
MCSymbol *PostInstrSymbol =
MI.getPostInstrSymbol()) {
784 OS <<
" post-instr-symbol ";
788 if (
MDNode *HeapAllocMarker =
MI.getHeapAllocMarker()) {
791 OS <<
" heap-alloc-marker ";
792 HeapAllocMarker->printAsOperand(OS, MST);
796 if (
auto Num =
MI.peekDebugInstrNum()) {
799 OS <<
" debug-instr-number " << Num;
807 OS <<
" debug-location ";
812 if (!
MI.memoperands_empty()) {
816 bool NeedComma =
false;
817 for (
const auto *
Op :
MI.memoperands()) {
828 assert(ObjectInfo != StackObjectOperandMapping.
end() &&
829 "Invalid frame index");
830 const FrameIndexOperand &Operand = ObjectInfo->second;
838 return std::string(
" /* " + Comment +
" */");
844 bool ShouldPrintRegisterTies,
LLT TypeToPrint,
847 std::string MOComment =
TII->createMIROperandComment(
MI,
Op, OpIdx,
TRI);
849 switch (
Op.getType()) {
851 if (
MI.isOperandSubregIdx(OpIdx)) {
874 unsigned TiedOperandIdx = 0;
875 if (ShouldPrintRegisterTies &&
Op.isReg() &&
Op.isTied() && !
Op.isDef())
876 TiedOperandIdx =
Op.getParent()->findTiedOperandIdx(OpIdx);
878 Op.print(OS, MST, TypeToPrint, OpIdx, PrintDef,
false,
879 ShouldPrintRegisterTies, TiedOperandIdx,
TRI,
TII);
887 auto RegMaskInfo = RegisterMaskIds.
find(
Op.getRegMask());
888 if (RegMaskInfo != RegisterMaskIds.
end())
899 if (isa<GlobalValue>(V)) {
903 if (isa<Constant>(V)) {
920 yaml::Output Out(OS);
921 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.
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...
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...
LLVMContext & getContext() const
getContext - Return a reference to the LLVMContext associated with this function.
iterator_range< livein_iterator > liveins() const
@ MO_CFIIndex
MCCFIInstruction index.
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.
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.
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.
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)
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.
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.
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.
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...
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.
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.
std::map< DebugInstrOperandPair, DebugInstrOperandPair > DebugValueSubstitutions
Substitution map: from one <inst,operand> pair to another.
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.
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
iterator getLastNonDebugInstr(bool SkipPseudoOp=false)
Returns an iterator to the last non-debug instruction in the basic block, or end().
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ Mod
The access may modify the value stored in memory.
@ MO_MachineBasicBlock
MachineBasicBlock reference.
self_iterator getIterator()
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
@ 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
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 isSpillSlotObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to a spill slot.
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.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
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()
Flushes the stream contents to the target string and returns the string's reference.
LLVM Value Representation.
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
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.