67 cl::desc(
"Leave out unnecessary information when printing MIR"));
70 cl::desc(
"Print MIR debug-locations"));
77struct FrameIndexOperand {
82 FrameIndexOperand(
StringRef Name,
unsigned ID,
bool IsFixed)
83 : Name(Name.str()),
ID(
ID), IsFixed(IsFixed) {}
86 static FrameIndexOperand create(
StringRef Name,
unsigned ID) {
87 return FrameIndexOperand(Name,
ID,
false);
91 static FrameIndexOperand createFixed(
unsigned ID) {
92 return FrameIndexOperand(
"",
ID,
true);
112 :
OS(
OS), MMI(MMI) {}
157 :
OS(
OS), MST(MST), RegisterMaskIds(RegisterMaskIds),
158 StackObjectOperandMapping(StackObjectOperandMapping) {}
166 bool ShouldPrintRegisterTies,
LLT TypeToPrint,
167 bool PrintDef =
true);
176template <>
struct BlockScalarTraits<
Module> {
178 Mod.print(
OS,
nullptr);
197 initRegisterMaskIds(MF);
234 const auto &SubSrc = Sub.Src;
235 const auto &SubDest = Sub.Dest;
248 std::unique_ptr<yaml::MachineFunctionInfo>(TM.convertFuncInfoToYAML(MF));
251 bool IsNewlineNeeded =
false;
252 for (
const auto &
MBB : MF) {
255 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
257 IsNewlineNeeded =
true;
264 yaml::Output Out(OS);
266 Out.setWriteDefaultValues(
true);
272 assert(RegMask &&
"Can't print an empty register mask");
275 bool IsRegInRegMaskFound =
false;
276 for (
int I = 0, E =
TRI->getNumRegs();
I < E;
I++) {
278 if (RegMask[
I / 32] & (1u << (
I % 32))) {
279 if (IsRegInRegMaskFound)
282 IsRegInRegMaskFound =
true;
300 std::array<std::string *, 3> Outputs{{&Object.DebugVar.Value,
301 &Object.DebugExpr.Value,
302 &Object.DebugLoc.Value}};
303 std::array<const Metadata *, 3> Metas{{DebugVar.
Var,
306 for (
unsigned i = 0; i < 3; ++i) {
308 Metas[i]->printAsOperand(StrOS, MST);
332 for (std::pair<unsigned, unsigned> LI : RegInfo.
liveins()) {
343 std::vector<yaml::FlowStringValue> CalleeSavedRegisters;
347 CalleeSavedRegisters.push_back(Reg);
393 MCRegister EntryValReg = DebugVar.getEntryValueRegister();
409 FixedStackObjectsIdx.
reserve(-BeginIdx);
412 for (
int I = BeginIdx;
I < 0; ++
I, ++
ID) {
431 StackObjectOperandMapping.
insert(
432 std::make_pair(
I, FrameIndexOperand::createFixed(
ID)));
440 StackObjectsIdx.
reserve(EndIdx);
442 for (
int I = 0;
I < EndIdx; ++
I, ++
ID) {
451 Alloca->hasName() ? Alloca->getName() :
"");
465 StackObjectOperandMapping.
insert(std::make_pair(
466 I, FrameIndexOperand::create(YamlObject.
Name.
Value,
ID)));
470 const int FrameIdx = CSInfo.getFrameIdx();
476 if (!CSInfo.isSpilledToReg()) {
479 "Invalid stack object index");
484 Object.CalleeSavedRegister = Reg;
485 Object.CalleeSavedRestored = CSInfo.isRestored();
487 auto &Object = YMF.
StackObjects[StackObjectsIdx[FrameIdx]];
488 Object.CalleeSavedRegister = Reg;
489 Object.CalleeSavedRestored = CSInfo.isRestored();
495 assert(LocalObject.first >= 0 &&
"Expected a locally mapped stack object");
496 YMF.
StackObjects[StackObjectsIdx[LocalObject.first]].LocalOffset =
504 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
510 MIPrinter(StrOS, MST, RegisterMaskIds, StackObjectOperandMapping)
517 int Idx = DebugVar.getStackSlot();
519 "Invalid stack object index");
542 CallLocation.
BlockNum = CallI->getParent()->getNumber();
545 std::distance(CallI->getParent()->instr_begin(), CallI);
548 for (
auto ArgReg : CSInfo.second.ArgRegPairs) {
550 YmlArgReg.
ArgNo = ArgReg.ArgNo;
560 if (A.CallLocation.BlockNum == B.CallLocation.BlockNum)
561 return A.CallLocation.Offset < B.CallLocation.Offset;
562 return A.CallLocation.BlockNum < B.CallLocation.BlockNum;
571 for (
auto &MD : MDList) {
585 if (
Constant.isMachineConstantPoolEntry()) {
592 YamlConstant.
ID =
ID++;
593 YamlConstant.
Value = Str;
610 for (
const auto *
MBB : Table.MBBs) {
613 Entry.Blocks.push_back(Str);
616 YamlJTI.
Entries.push_back(Entry);
624 RegisterMaskIds.
insert(std::make_pair(Mask,
I++));
629 bool &IsFallthrough) {
639 auto RP = Seen.
insert(Succ);
641 Result.push_back(Succ);
645 IsFallthrough =
I ==
MBB.
end() || !
I->isBarrier();
662 return std::equal(Normalized.begin(), Normalized.end(), Equal.begin());
667 bool GuessedFallthrough;
669 if (GuessedFallthrough) {
672 if (NextI != MF.
end()) {
691 bool HasLineAttributes =
false;
693 bool canPredictProbs = canPredictBranchProbabilities(
MBB);
701 !canPredictSuccessors(
MBB)) {
702 OS.
indent(2) <<
"successors:";
715 HasLineAttributes =
true;
722 OS.
indent(2) <<
"liveins: ";
729 if (!LI.LaneMask.all())
733 HasLineAttributes =
true;
736 if (HasLineAttributes && !
MBB.
empty())
738 bool IsInBundle =
false;
740 if (IsInBundle && !
MI.isInsideBundle()) {
744 OS.
indent(IsInBundle ? 4 : 2);
757 const auto *MF =
MI.getMF();
760 const auto *
TRI = SubTarget.getRegisterInfo();
761 assert(
TRI &&
"Expected target register info");
762 const auto *
TII = SubTarget.getInstrInfo();
763 assert(
TII &&
"Expected target instruction info");
764 if (
MI.isCFIInstruction())
765 assert(
MI.getNumOperands() == 1 &&
"Expected 1 operand in CFI instruction");
768 bool ShouldPrintRegisterTies =
MI.hasComplexRegisterTies();
769 unsigned I = 0, E =
MI.getNumOperands();
770 for (;
I < E &&
MI.getOperand(
I).
isReg() &&
MI.getOperand(
I).isDef() &&
771 !
MI.getOperand(
I).isImplicit();
776 MI.getTypeToPrint(
I, PrintedTypes,
MRI),
783 OS <<
"frame-setup ";
785 OS <<
"frame-destroy ";
811 OS <<
"unpredictable ";
813 OS <<
"noconvergent ";
821 OS <<
TII->getName(
MI.getOpcode());
825 bool NeedComma =
false;
830 MI.getTypeToPrint(
I, PrintedTypes,
MRI));
836 if (
MCSymbol *PreInstrSymbol =
MI.getPreInstrSymbol()) {
839 OS <<
" pre-instr-symbol ";
843 if (
MCSymbol *PostInstrSymbol =
MI.getPostInstrSymbol()) {
846 OS <<
" post-instr-symbol ";
850 if (
MDNode *HeapAllocMarker =
MI.getHeapAllocMarker()) {
853 OS <<
" heap-alloc-marker ";
854 HeapAllocMarker->printAsOperand(OS, MST);
857 if (
MDNode *PCSections =
MI.getPCSections()) {
860 OS <<
" pcsections ";
861 PCSections->printAsOperand(OS, MST);
864 if (
MDNode *MMRA =
MI.getMMRAMetadata()) {
868 MMRA->printAsOperand(OS, MST);
874 OS <<
" cfi-type " << CFIType;
878 if (
auto Num =
MI.peekDebugInstrNum()) {
881 OS <<
" debug-instr-number " << Num;
889 OS <<
" debug-location ";
894 if (!
MI.memoperands_empty()) {
898 bool NeedComma =
false;
899 for (
const auto *
Op :
MI.memoperands()) {
909 auto ObjectInfo = StackObjectOperandMapping.
find(FrameIndex);
910 assert(ObjectInfo != StackObjectOperandMapping.
end() &&
911 "Invalid frame index");
912 const FrameIndexOperand &Operand = ObjectInfo->second;
920 return std::string(
" /* " + Comment +
" */");
926 bool ShouldPrintRegisterTies,
LLT TypeToPrint,
929 std::string MOComment =
TII->createMIROperandComment(
MI,
Op, OpIdx,
TRI);
931 switch (
Op.getType()) {
933 if (
MI.isOperandSubregIdx(OpIdx)) {
957 unsigned TiedOperandIdx = 0;
958 if (ShouldPrintRegisterTies &&
Op.isReg() &&
Op.isTied() && !
Op.isDef())
959 TiedOperandIdx =
Op.getParent()->findTiedOperandIdx(OpIdx);
961 Op.
print(OS, MST, TypeToPrint, OpIdx, PrintDef,
false,
962 ShouldPrintRegisterTies, TiedOperandIdx,
TRI,
TII);
970 auto RegMaskInfo = RegisterMaskIds.
find(
Op.getRegMask());
971 if (RegMaskInfo != RegisterMaskIds.
end())
982 if (isa<GlobalValue>(V)) {
983 V.printAsOperand(
OS,
false, MST);
986 if (isa<Constant>(V)) {
989 V.printAsOperand(
OS,
true, MST);
1006 yaml::Output Out(
OS);
1007 Out << const_cast<Module &>(M);
unsigned const MachineRegisterInfo * MRI
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
dxil pretty DXIL Metadata Pretty Printer
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
This file defines the DenseMap class.
const HexagonInstrInfo * TII
This file contains an interface for creating legacy passes to print out IR in various granularities.
cl::opt< bool > WriteNewDbgInfoFormat
A common definition of LaneBitmask for use in TableGen and CodeGen.
Implement a low-level type suitable for MachineInstr level instruction selection.
static std::string formatOperandComment(std::string Comment)
static void printRegMIR(unsigned Reg, yaml::StringValue &Dest, const TargetRegisterInfo *TRI)
static cl::opt< bool > PrintLocations("mir-debug-loc", cl::Hidden, cl::init(true), cl::desc("Print MIR debug-locations"))
cl::opt< bool > WriteNewDbgInfoFormat
static void printStackObjectDbgInfo(const MachineFunction::VariableDbgInfo &DebugVar, T &Object, ModuleSlotTracker &MST)
static void printCustomRegMask(const uint32_t *RegMask, raw_ostream &OS, const TargetRegisterInfo *TRI)
static cl::opt< bool > SimplifyMIR("simplify-mir", cl::Hidden, cl::desc("Leave out unnecessary information when printing MIR"))
This file declares the MachineConstantPool class which is an abstract constant pool to keep track of ...
unsigned const TargetRegisterInfo * TRI
static bool isReg(const MCInst &MI, unsigned OpNo)
Module.h This file contains the declarations for the Module class.
if(auto Err=PB.parsePassPipeline(MPM, Passes)) return wrap(std MPM run * Mod
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This file implements the SmallBitVector class.
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
uint32_t getNumerator() const
static void normalizeProbabilities(ProbabilityIter Begin, ProbabilityIter End)
This is an important base class in LLVM.
This class represents an Operation in the Expression.
bool print(raw_ostream &OS, DIDumpOptions DumpOpts, const DWARFExpression *Expr, DWARFUnit *U) const
iterator find(const_arg_type_t< KeyT > Val)
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
LLVMContext & getContext() const
getContext - Return a reference to the LLVMContext associated with this function.
Module * getParent()
Get the module that this global value is contained inside of...
This is an important class for using LLVM in a threaded context.
Wrapper class representing physical registers. Should be passed by value.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
This class prints out the machine instructions using the MIR serialization format.
void print(const MachineBasicBlock &MBB)
MIPrinter(raw_ostream &OS, ModuleSlotTracker &MST, const DenseMap< const uint32_t *, unsigned > &RegisterMaskIds, const DenseMap< int, FrameIndexOperand > &StackObjectOperandMapping)
void printStackObjectReference(int FrameIndex)
This class prints out the machine functions using the MIR serialization format.
MIRPrinter(raw_ostream &OS, const MachineModuleInfo &MMI)
void convert(yaml::MachineFunction &MF, const MachineRegisterInfo &RegInfo, const TargetRegisterInfo *TRI)
void convertEntryValueObjects(yaml::MachineFunction &YMF, const MachineFunction &MF, ModuleSlotTracker &MST)
void convertCallSiteObjects(yaml::MachineFunction &YMF, const MachineFunction &MF, ModuleSlotTracker &MST)
void print(const MachineFunction &MF)
void convertMachineMetadataNodes(yaml::MachineFunction &YMF, const MachineFunction &MF, MachineModuleSlotTracker &MST)
void convertStackObjects(yaml::MachineFunction &YMF, const MachineFunction &MF, ModuleSlotTracker &MST)
BranchProbability getSuccProbability(const_succ_iterator Succ) const
Return probability of the edge from this block to MBB.
int getNumber() const
MachineBasicBlocks are uniquely numbered at the function level, unless they're not in a MachineFuncti...
@ PrintNameIr
Add IR name where available.
@ PrintNameAttributes
Print attributes.
succ_iterator succ_begin()
bool livein_empty() const
void printAsOperand(raw_ostream &OS, bool PrintType=true) const
unsigned succ_size() const
iterator_range< livein_iterator > liveins_dbg() const
bool hasSuccessorProbabilities() const
Return true if any of the successors have probabilities attached to them.
iterator getLastNonDebugInstr(bool SkipPseudoOp=true)
Returns an iterator to the last non-debug instruction in the basic block, or end().
Instructions::const_iterator const_instr_iterator
const MachineFunction * getParent() const
Return the MachineFunction containing this basic block.
void printName(raw_ostream &os, unsigned printNameFlags=PrintNameIr, ModuleSlotTracker *moduleSlotTracker=nullptr) const
Print the basic block's name as:
This class is a data container for one entry in a MachineConstantPool.
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.
uint64_t getStackSize() const
Return the number of bytes that must be allocated to hold all of the fixed size frame objects.
const AllocaInst * getObjectAllocation(int ObjectIdx) const
Return the underlying Alloca of the specified stack object if it exists.
bool adjustsStack() const
Return true if this function adjusts the stack – e.g., when calling another function.
bool isReturnAddressTaken() const
This method may be called any time after instruction selection is complete to determine if there is a...
int64_t getLocalFrameObjectCount() const
Return the number of objects allocated into the local object block.
bool hasCalls() const
Return true if the current function has any function calls.
bool isFrameAddressTaken() const
This method may be called any time after instruction selection is complete to determine if there is a...
Align getMaxAlign() const
Return the alignment in bytes that this function must be aligned to, which is greater than the defaul...
std::pair< int, int64_t > getLocalFrameObjectMap(int i) const
Get the local offset mapping for a for an object.
uint64_t getMaxCallFrameSize() const
Return the maximum size of a call frame that must be allocated for an outgoing function call.
bool hasPatchPoint() const
This method may be called any time after instruction selection is complete to determine if there is a...
bool hasOpaqueSPAdjustment() const
Returns true if the function contains opaque dynamic stack adjustments.
MachineBasicBlock * getRestorePoint() const
bool isImmutableObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to an immutable object.
int getStackProtectorIndex() const
Return the index for the stack protector object.
int64_t getOffsetAdjustment() const
Return the correction for frame offsets.
bool hasTailCall() const
Returns true if the function contains a tail call.
bool hasMustTailInVarArgFunc() const
Returns true if the function is variadic and contains a musttail call.
bool isCalleeSavedInfoValid() const
Has the callee saved info been calculated yet?
Align getObjectAlign(int ObjectIdx) const
Return the alignment of the specified stack object.
bool isSpillSlotObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to a spill slot.
int64_t getObjectSize(int ObjectIdx) const
Return the size of the specified object.
bool isMaxCallFrameSizeComputed() const
int64_t getLocalFrameSize() const
Get the size of the local object blob.
bool hasStackMap() const
This method may be called any time after instruction selection is complete to determine if there is a...
const std::vector< CalleeSavedInfo > & getCalleeSavedInfo() const
Returns a reference to call saved info vector for the current function.
bool hasVAStart() const
Returns true if the function calls the llvm.va_start intrinsic.
unsigned getCVBytesOfCalleeSavedRegisters() const
Returns how many bytes of callee-saved registers the target pushed in the prologue.
bool isVariableSizedObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to a variable sized object.
int getObjectIndexEnd() const
Return one past the maximum frame object index.
bool hasStackProtectorIndex() const
uint8_t getStackID(int ObjectIdx) const
unsigned getNumFixedObjects() const
Return the number of fixed objects.
int64_t getObjectOffset(int ObjectIdx) const
Return the assigned stack offset of the specified object from the incoming stack pointer.
bool hasFunctionContextIndex() const
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.
MachineBasicBlock * getSavePoint() const
int getFunctionContextIndex() const
Return the index for the function context object.
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...
bool hasProperty(Property P) const
Description of the location of a variable whose Address is valid and unchanging during function execu...
const DILocalVariable * Var
const DIExpression * Expr
auto getEntryValueVariableDbgInfo() const
Returns the collection of variables for which we have debug info and that have been assigned an entry...
bool useDebugInstrRef() const
Returns true if the function's variable locations are tracked with instruction referencing.
SmallVector< DebugSubstitution, 8 > DebugValueSubstitutions
Debug value substitutions: a collection of DebugSubstitution objects, recording changes in where a va...
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
StringRef getName() const
getName - Return the name of the corresponding LLVM function.
bool hasEHCatchret() const
bool exposesReturnsTwice() const
exposesReturnsTwice - Returns true if the function calls setjmp or any other similar functions with a...
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
bool callsUnwindInit() const
const CallSiteInfoMap & getCallSitesInfo() const
bool callsEHReturn() const
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
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.
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
MachineConstantPool * getConstantPool()
getConstantPool - Return the constant pool object for the current function.
const MachineFunctionProperties & getProperties() const
Get the function properties.
bool hasEHFunclets() const
const MachineJumpTableInfo * getJumpTableInfo() const
getJumpTableInfo - Return the jump table info object for the current function.
BasicBlockListType::const_iterator const_iterator
Representation of each machine instruction.
JTEntryKind getEntryKind() const
const std::vector< MachineJumpTableEntry > & getJumpTables() const
This class contains meta information specific to a module.
void collectMachineMDNodes(MachineMDNodeListType &L) const
MachineOperand class - Representation of each machine instruction operand.
static void printStackObjectReference(raw_ostream &OS, unsigned FrameIndex, bool IsFixed, StringRef Name)
Print a stack object reference.
static void printSubRegIdx(raw_ostream &OS, uint64_t Index, const TargetRegisterInfo *TRI)
Print a subreg index operand.
static void printTargetFlags(raw_ostream &OS, const MachineOperand &Op)
Print operand target flags.
static void printIRSlotNumber(raw_ostream &OS, int Slot)
Print an IRSlotNumber.
static void printSymbol(raw_ostream &OS, MCSymbol &Sym)
Print a MCSymbol as an operand.
@ MO_CFIIndex
MCCFIInstruction index.
@ MO_Immediate
Immediate operand.
@ MO_ConstantPoolIndex
Address of indexed Constant in Constant Pool.
@ MO_MCSymbol
MCSymbol reference (for debug/eh info)
@ MO_Predicate
Generic predicate for ISel.
@ MO_GlobalAddress
Address of a global value.
@ MO_RegisterMask
Mask of preserved registers.
@ MO_ShuffleMask
Other IR Constant for ISel (shuffle masks)
@ MO_CImmediate
Immediate >64bit operand.
@ MO_BlockAddress
Address of a basic block.
@ MO_DbgInstrRef
Integer indices referring to an instruction+operand.
@ MO_MachineBasicBlock
MachineBasicBlock reference.
@ MO_FrameIndex
Abstract Stack Frame Index.
@ MO_Register
Register operand.
@ MO_ExternalSymbol
Name of external global symbol.
@ MO_IntrinsicID
Intrinsic ID for ISel.
@ MO_JumpTableIndex
Address of indexed Jump Table for switch.
@ MO_TargetIndex
Target-dependent index+offset operand.
@ MO_Metadata
Metadata reference (for debug info)
@ MO_FPImmediate
Floating-point immediate operand.
@ MO_RegisterLiveOut
Mask of live-out registers.
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Register getSimpleHint(Register VReg) const
getSimpleHint - same as getRegAllocationHint except it will only return a target independent hint.
bool tracksLiveness() const
tracksLiveness - Returns true when tracking register liveness accurately.
bool isUpdatedCSRsInitialized() const
Returns true if the updated CSR list was initialized and false otherwise.
ArrayRef< std::pair< MCRegister, Register > > liveins() const
const MCPhysReg * getCalleeSavedRegs() const
Returns list of callee saved registers.
unsigned getNumVirtRegs() const
getNumVirtRegs - Return the number of virtual registers created.
StringRef getVRegName(Register Reg) const
Manage lifetime of a slot tracker for printing IR.
std::vector< std::pair< unsigned, const MDNode * > > MachineMDNodeListType
int getLocalSlot(const Value *V)
Return the slot number of the specified local value.
const Function * getCurrentFunction() const
void incorporateFunction(const Function &F)
Incorporate the given function.
A Module instance is used to store all the information related to an LLVM module.
Wrapper class representing virtual and physical registers.
static Register index2VirtReg(unsigned Index)
Convert a 0-based index to a virtual register number.
This is a 'bitvector' (really, a variable-sized bit array), optimized for the case when the array is ...
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void reserve(size_type N)
void push_back(const T &Elt)
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.
std::string lower() const
TargetInstrInfo - Interface to description of machine instruction set.
TargetIntrinsicInfo - Interface to description of machine instruction set.
Primary interface to the complete machine description for the target machine.
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
virtual const TargetRegisterInfo * getRegisterInfo() const
getRegisterInfo - If register information is available, return it.
LLVM Value Representation.
void print(raw_ostream &O, bool IsForDebug=false) const
Implement operator<< on Value.
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.
self_iterator getIterator()
This class implements an extremely fast bulk output stream that can only output to a stream.
raw_ostream & indent(unsigned NumSpaces)
indent - Insert 'NumSpaces' spaces.
A raw_ostream that writes to an std::string.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
Printable PrintLaneMask(LaneBitmask LaneMask)
Create Printable object to print LaneBitmasks on a raw_ostream.
void printMIR(raw_ostream &OS, const Module &M)
Print LLVM IR using the MIR serialization format to the given output stream.
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...
void sort(IteratorTy Start, IteratorTy End)
Printable printRegClassOrBank(Register Reg, const MachineRegisterInfo &RegInfo, const TargetRegisterInfo *TRI)
Create Printable object to print register classes or register banks on a raw_ostream.
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
void printLLVMNameWithoutPrefix(raw_ostream &OS, StringRef Name)
Print out a name of an LLVM value without any prefixes.
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.
Printable printMBBReference(const MachineBasicBlock &MBB)
Prints a machine basic block reference.
uint64_t value() const
This is a hole in the type system and should not be abused.
static void output(const Module &Mod, void *Ctxt, raw_ostream &OS)
static StringRef input(StringRef Str, void *Ctxt, Module &Mod)
Identifies call instruction location in machine function.
Serializable representation of CallSiteInfo.
std::vector< ArgRegPair > ArgForwardingRegs
MachineInstrLoc CallLocation
Serializable representation of the MCRegister variant of MachineFunction::VariableDbgInfo.
StringValue EntryValueRegister
Serializable representation of the fixed stack object from the MachineFrameInfo class.
TargetStackID::Value StackID
Serializable representation of MachineFrameInfo.
bool IsCalleeSavedInfoValid
unsigned MaxCallFrameSize
~0u means: not computed yet.
StringValue StackProtector
bool HasMustTailInVarArgFunc
unsigned CVBytesOfCalleeSavedRegisters
bool HasOpaqueSPAdjustment
bool IsReturnAddressTaken
StringValue FunctionContext
StringValue VirtualRegister
std::vector< MachineStackObject > StackObjects
std::vector< StringValue > MachineMetadataNodes
std::optional< std::vector< FlowStringValue > > CalleeSavedRegisters
std::vector< EntryValueObject > EntryValueObjects
bool TracksDebugUserValues
std::vector< MachineConstantPoolValue > Constants
std::vector< CallSiteInfo > CallSitesInfo
std::vector< MachineFunctionLiveIn > LiveIns
std::vector< VirtualRegisterDefinition > VirtualRegisters
std::vector< FixedMachineStackObject > FixedStackObjects
std::vector< DebugValueSubstitution > DebugValueSubstitutions
std::unique_ptr< MachineFunctionInfo > MachineFuncInfo
Constant pool.
MachineJumpTable JumpTableInfo
MachineFrameInfo FrameInfo
std::vector< Entry > Entries
MachineJumpTableInfo::JTEntryKind Kind
Serializable representation of stack object from the MachineFrameInfo class.
TargetStackID::Value StackID
A wrapper around std::string which contains a source range that's being set during parsing.
StringValue PreferredRegister