24#include "llvm/Config/llvm-config.h"
37 cl::desc(
"Number of registers to limit to when "
38 "printing regmask operands in IR dumps. "
72 MRI.removeRegOperandFromUseList(
this);
73 SmallContents.RegNo = Reg.id();
74 MRI.addRegOperandToUseList(
this);
79 SmallContents.RegNo = Reg.id();
107 assert(
isReg() &&
"Wrong MachineOperand accessor");
108 assert((!Val || !
isDebug()) &&
"Marking a debug operation as def");
111 assert(!IsDeadOrKill &&
"Changing def/use with dead/kill set not supported");
115 MRI.removeRegOperandFromUseList(
this);
117 MRI.addRegOperandToUseList(
this);
124 assert(
isReg() &&
"Wrong MachineOperand accessor");
126 "isRenamable should only be checked on physical registers");
142 assert(
isReg() &&
"Wrong MachineOperand accessor");
144 "setIsRenamable should only be called on physical registers");
150void MachineOperand::removeRegFromUses() {
151 if (!
isReg() || !isOnRegUseList())
155 MF->getRegInfo().removeRegOperandFromUseList(
this);
167 Contents.ImmVal = ImmVal;
172 unsigned TargetFlags) {
178 Contents.CFP = FPImm;
183 unsigned TargetFlags) {
185 "Cannot change a tied operand into an external symbol");
190 Contents.OffsetedInfo.Val.SymbolName = SymName;
196 unsigned TargetFlags) {
198 "Cannot change a tied operand into a global address");
203 Contents.OffsetedInfo.Val.GV = GV;
209 unsigned TargetFlags) {
211 "Cannot change a tied operand into a block address");
216 Contents.OffsetedInfo.Val.BA = BA;
222 unsigned TargetFlags) {
224 "Cannot change a tied operand into a constant pool index");
236 "Cannot change a tied operand into an MCSymbol");
247 "Cannot change a tied operand into a FrameIndex");
257 unsigned TargetFlags) {
259 "Cannot change a tied operand into a FrameIndex");
270 unsigned TargetFlags) {
272 "Cannot change a tied operand into a DbgInstrRef");
290 RegInfo = &MF->getRegInfo();
293 bool WasReg =
isReg();
294 if (RegInfo && WasReg)
295 RegInfo->removeRegOperandFromUseList(
this);
306 SmallContents.RegNo = Reg.id();
307 SubReg_TargetFlags = 0;
313 IsInternalRead =
false;
314 IsEarlyClobber =
false;
317 Contents.Reg.Prev =
nullptr;
325 RegInfo->addRegOperandToUseList(
this);
369 if (RegMask == OtherRegMask)
376 return std::equal(RegMask, RegMask + RegMaskSize, OtherRegMask);
442 std::vector<stable_hash> RegMaskHashes(RegMask, RegMask + RegMaskSize);
447 assert(0 &&
"MachineOperand not associated with any MachineFunction");
476 TRI = MF->getSubtarget().getRegisterInfo();
482 assert(
TII &&
"expected instruction info");
483 auto Indices =
TII->getSerializableTargetIndices();
484 auto Found =
find_if(Indices, [&](
const std::pair<int, const char *> &
I) {
485 return I.first == Index;
487 if (Found != Indices.end())
488 return Found->second;
498 auto Flags =
TII->getSerializableDirectMachineOperandTargetFlags();
499 for (
const auto &
I : Flags) {
510 OS <<
"%dwarfreg." << DwarfReg;
514 if (std::optional<MCRegister>
Reg =
TRI->getLLVMRegNum(DwarfReg,
true))
527 std::optional<int> Slot;
531 }
else if (
const Module *M =
F->getParent()) {
551 Context.getSyncScopeNames(SSNs);
553 OS <<
"syncscope(\"";
562 auto Flags =
TII.getSerializableMachineMemOperandTargetFlags();
563 for (
const auto &
I : Flags) {
564 if (
I.first == TMMOFlag) {
577 if (Alloca->hasName())
578 Name = Alloca->getName();
588 if (
TRI && Index != 0 && Index < TRI->getNumSubRegIndices())
589 OS <<
TRI->getSubRegIndexName(Index);
595 const MachineOperand &
Op) {
596 if (!
Op.getTargetFlags())
603 assert(
TII &&
"expected instruction info");
604 auto Flags =
TII->decomposeMachineOperandsTargetFlags(
Op.getTargetFlags());
605 OS <<
"target-flags(";
606 const bool HasDirectFlags = Flags.first;
607 const bool HasBitmaskFlags = Flags.second;
608 if (!HasDirectFlags && !HasBitmaskFlags) {
612 if (HasDirectFlags) {
616 OS <<
"<unknown target flag>";
618 if (!HasBitmaskFlags) {
622 bool IsCommaNeeded = HasDirectFlags;
623 unsigned BitMask = Flags.second;
624 auto BitMasks =
TII->getSerializableBitmaskMachineOperandTargetFlags();
625 for (
const auto &Mask : BitMasks) {
627 if ((BitMask & Mask.first) == Mask.first) {
630 IsCommaNeeded =
true;
633 BitMask &= ~(Mask.first);
641 OS <<
"<unknown bitmask target flag>";
647 OS <<
"<mcsymbol " << Sym <<
">";
654 OS <<
"%fixed-stack." << FrameIndex;
658 OS <<
"%stack." << FrameIndex;
690 OS <<
"remember_state ";
695 OS <<
"restore_state ";
707 OS <<
"def_cfa_register ";
713 OS <<
"def_cfa_offset ";
726 OS <<
"llvm_def_aspace_cfa ";
741 OS <<
"adjust_cfa_offset ";
758 for (
size_t i = 0; i < e; ++i)
779 OS <<
"window_save ";
784 OS <<
"negate_ra_sign_state ";
789 OS <<
"negate_ra_sign_state_with_pc ";
795 OS <<
"<unserializable cfi directive>";
809 print(OS, DummyMST, TypeToPrint, std::nullopt,
false,
816 LLT TypeToPrint, std::optional<unsigned>
OpIdx,
817 bool PrintDef,
bool IsStandalone,
818 bool ShouldPrintRegisterTies,
819 unsigned TiedOperandIdx,
826 OS << (
isDef() ?
"implicit-def " :
"implicit ");
827 else if (PrintDef &&
isDef())
839 OS <<
"early-clobber ";
846 if (Reg.isVirtual()) {
848 MRI = &MF->getRegInfo();
856 OS <<
'.' <<
TRI->getSubRegIndexName(
SubReg);
858 OS <<
".subreg" <<
SubReg;
861 if (Reg.isVirtual()) {
864 if (IsStandalone || !PrintDef ||
MRI.def_empty(Reg)) {
871 if (ShouldPrintRegisterTies &&
isTied() && !
isDef())
872 OS <<
"(tied-def " << TiedOperandIdx <<
")";
875 OS <<
'(' << TypeToPrint <<
')';
881 const auto *
TII = MF->getSubtarget().getInstrInfo();
882 assert(
TII &&
"expected instruction info");
883 Formatter =
TII->getMIRFormatter();
902 bool IsFixed =
false;
905 MFI = &MF->getFrameInfo();
914 OS <<
"target-index(";
915 const char *Name =
"<unknown>";
918 Name = TargetIndexName;
928 GV->printAsOperand(OS,
false, MST);
930 OS <<
"globaladdress(null)";
946 OS <<
"blockaddress(";
958 unsigned NumRegsInMask = 0;
959 unsigned NumRegsEmitted = 0;
960 for (
unsigned i = 0; i <
TRI->getNumRegs(); ++i) {
961 unsigned MaskWord = i / 32;
962 unsigned MaskBit = i % 32;
963 if (
getRegMask()[MaskWord] & (1 << MaskBit)) {
972 if (NumRegsEmitted != NumRegsInMask)
973 OS <<
" and " << (NumRegsInMask - NumRegsEmitted) <<
" more...";
986 bool IsCommaNeeded =
false;
987 for (
unsigned Reg = 0, E =
TRI->getNumRegs(); Reg < E; ++Reg) {
988 if (RegMask[Reg / 32] & (1U << (Reg % 32))) {
992 IsCommaNeeded =
true;
1014 OS <<
"<cfi directive>";
1019 if (
ID < Intrinsic::num_intrinsics)
1022 OS <<
"intrinsic(" <<
ID <<
')';
1032 OS <<
"shufflemask(";
1035 for (
int Elt : Mask) {
1037 OS << Separator <<
"undef";
1039 OS << Separator << Elt;
1056#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
1076 if (BasePtr ==
nullptr)
1093 int FI, int64_t
Offset) {
1119 : PtrInfo(ptrinfo), MemoryType(type), FlagVals(f), BaseAlign(a),
1120 AAInfo(AAInfo), Ranges(Ranges) {
1123 "invalid pointer value");
1126 AtomicInfo.SSID =
static_cast<unsigned>(SSID);
1128 AtomicInfo.Ordering =
static_cast<unsigned>(Ordering);
1130 AtomicInfo.FailureOrdering =
static_cast<unsigned>(FailureOrdering);
1142 !TS.hasValue() ?
LLT()
1144 ?
LLT::scalable_vector(1, 8 * TS.
getValue().getKnownMinValue())
1145 :
LLT::scalar(8 * TS.
getValue().getKnownMinValue()),
1146 BaseAlignment, AAInfo, Ranges, SSID, Ordering, FailureOrdering) {}
1160 PtrInfo = MMO->PtrInfo;
1179 OS <<
"non-temporal ";
1181 OS <<
"dereferenceable ";
1199 OS <<
"\"MOTargetFlag1\" ";
1201 OS <<
"\"MOTargetFlag2\" ";
1203 OS <<
"\"MOTargetFlag3\" ";
1205 OS <<
"\"MOTargetFlag4\" ";
1209 "machine memory operand must be a load or store (or both)");
1225 OS <<
"unknown-size";
1232 assert(PVal &&
"Expected a pseudo source value");
1233 switch (PVal->kind()) {
1244 OS <<
"constant-pool";
1248 bool IsFixed =
true;
1253 OS <<
"call-entry ";
1258 OS <<
"call-entry &";
1272 PVal->printCustom(OS);
1282 <<
"unknown-address";
1294 AAInfo.TBAA->printAsOperand(OS, MST);
1297 OS <<
", !alias.scope ";
1298 AAInfo.Scope->printAsOperand(OS, MST);
1300 if (AAInfo.NoAlias) {
1301 OS <<
", !noalias ";
1302 AAInfo.NoAlias->printAsOperand(OS, MST);
1304 if (AAInfo.NoAliasAddrSpace) {
1305 OS <<
", !noalias.addrspace ";
1306 AAInfo.NoAliasAddrSpace->printAsOperand(OS, MST);
1315 OS <<
", addrspace " << AS;
unsigned const MachineRegisterInfo * MRI
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
const TargetInstrInfo & TII
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
#define LLVM_DUMP_METHOD
Mark debug helper function definitions like dump() that should not be stripped from debug builds.
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file contains an interface for creating legacy passes to print out IR in various granularities.
static bool isZero(Value *V, const DataLayout &DL, DominatorTree *DT, AssumptionCache *AC)
static void tryToGetTargetInfo(const MachineInstr &MI, const TargetRegisterInfo *&TRI, const MachineRegisterInfo *&MRI, const TargetInstrInfo *&TII)
static const MachineFunction * getMFIfAvailable(const MachineInstr &MI)
static void printSyncScope(raw_ostream &OS, const LLVMContext &Context, SyncScope::ID SSID, SmallVectorImpl< StringRef > &SSNs)
static const MachineFunction * getMFIfAvailable(const MachineOperand &MO)
static const char * getTargetIndexName(const MachineFunction &MF, int Index)
static void printFrameIndex(raw_ostream &OS, int FrameIndex, bool IsFixed, const MachineFrameInfo *MFI)
static cl::opt< int > PrintRegMaskNumRegs("print-regmask-num-regs", cl::desc("Number of registers to limit to when " "printing regmask operands in IR dumps. " "unlimited = -1"), cl::init(32), cl::Hidden)
static void printIRBlockReference(raw_ostream &OS, const BasicBlock &BB, ModuleSlotTracker &MST)
static const char * getTargetFlagName(const TargetInstrInfo *TII, unsigned TF)
static void printCFIRegister(unsigned DwarfReg, raw_ostream &OS, const TargetRegisterInfo *TRI)
static const char * getTargetMMOFlagName(const TargetInstrInfo &TII, unsigned TMMOFlag)
static void printCFI(raw_ostream &OS, const MCCFIInstruction &CFI, const TargetRegisterInfo *TRI)
Register const TargetRegisterInfo * TRI
MachineInstr unsigned OpIdx
static bool isPhysical(const MachineOperand &MO)
static bool isValid(const char C)
Returns true if C is a valid mangled character: <0-9a-zA-Z_>.
Class for arbitrary precision integers.
an instruction to allocate memory on the stack
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
LLVM Basic Block Representation.
const Function * getParent() const
Return the enclosing method, or null if none.
The address of a basic block.
Function * getFunction() const
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
bool isIntPredicate() const
ConstantFP - Floating Point Values [float, double].
A parsed version of the target data layout string in and methods for querying it.
unsigned getAllocaAddrSpace() const
constexpr bool isValid() const
This is an important class for using LLVM in a threaded context.
MCSymbol * getLabel() const
unsigned getAddressSpace() const
unsigned getRegister2() const
unsigned getRegister() const
OpType getOperation() const
StringRef getValues() const
int64_t getOffset() const
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 ...
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.
const AllocaInst * getObjectAllocation(int ObjectIdx) const
Return the underlying Alloca of the specified stack object if it exists.
bool isFixedObjectIndex(int ObjectIdx) const
Returns true if the specified index corresponds to a fixed stack object.
int getObjectIndexBegin() const
Return the minimum frame object index.
PseudoSourceValueManager & getPSVManager() const
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
const DataLayout & getDataLayout() const
Return the DataLayout attached to the Module associated to this MF.
Representation of each machine instruction.
unsigned getOperandNo(const_mop_iterator I) const
Returns the number of the operand iterator I points to.
LocationSize getSize() const
Return the size in bytes of the memory reference.
AtomicOrdering getFailureOrdering() const
For cmpxchg atomic operations, return the atomic ordering requirements when store does not occur.
const PseudoSourceValue * getPseudoValue() const
LLT getMemoryType() const
Return the memory type of the memory reference.
unsigned getAddrSpace() const
LLVM_ABI void print(raw_ostream &OS, ModuleSlotTracker &MST, SmallVectorImpl< StringRef > &SSNs, const LLVMContext &Context, const MachineFrameInfo *MFI, const TargetInstrInfo *TII) const
Support for operator<<.
bool isNonTemporal() const
const MDNode * getRanges() const
Return the range tag for the memory reference.
LLVM_ABI void refineAlignment(const MachineMemOperand *MMO)
Update this MachineMemOperand to reflect the alignment of MMO, if it has a greater alignment.
SyncScope::ID getSyncScopeID() const
Returns the synchronization scope ID for this memory operation.
const void * getOpaqueValue() const
LLVM_ABI MachineMemOperand(MachinePointerInfo PtrInfo, Flags flags, LocationSize TS, Align a, const AAMDNodes &AAInfo=AAMDNodes(), const MDNode *Ranges=nullptr, SyncScope::ID SSID=SyncScope::System, AtomicOrdering Ordering=AtomicOrdering::NotAtomic, AtomicOrdering FailureOrdering=AtomicOrdering::NotAtomic)
Construct a MachineMemOperand object with the specified PtrInfo, flags, size, and base alignment.
Flags
Flags values. These may be or'd together.
AtomicOrdering getSuccessOrdering() const
Return the atomic ordering requirements for this memory operation.
Flags getFlags() const
Return the raw flags of the source value,.
LLVM_ABI Align getAlign() const
Return the minimum known alignment in bytes of the actual memory reference.
bool isDereferenceable() const
AAMDNodes getAAInfo() const
Return the AA tags for the memory reference.
const Value * getValue() const
Return the base address of the memory access.
Align getBaseAlign() const
Return the minimum known alignment in bytes of the base address, without the offset.
int64_t getOffset() const
For normal values, this is a byte offset added to the base address.
MachineOperand class - Representation of each machine instruction operand.
void setSubReg(unsigned subReg)
unsigned getSubReg() const
unsigned getInstrRefOpIndex() const
void setInstrRefInstrIndex(unsigned InstrIdx)
LLVM_ABI unsigned getOperandNo() const
Returns the index of this operand in the instruction that it belongs to.
const GlobalValue * getGlobal() const
LLVM_ABI void substVirtReg(Register Reg, unsigned SubIdx, const TargetRegisterInfo &)
substVirtReg - Substitute the current register with the virtual subregister Reg:SubReg.
LLVM_ABI void ChangeToFrameIndex(int Idx, unsigned TargetFlags=0)
Replace this operand with a frame index.
const uint32_t * getRegLiveOut() const
getRegLiveOut - Returns a bit mask of live-out registers.
void setInstrRefOpIndex(unsigned OpIdx)
const ConstantInt * getCImm() const
LLVM_ABI const char * getTargetIndexName() const
getTargetIndexName - If this MachineOperand is a TargetIndex that has a name, attempt to get the name...
static LLVM_ABI void printStackObjectReference(raw_ostream &OS, unsigned FrameIndex, bool IsFixed, StringRef Name)
Print a stack object reference.
static LLVM_ABI void printSubRegIdx(raw_ostream &OS, uint64_t Index, const TargetRegisterInfo *TRI)
Print a subreg index operand.
unsigned getInstrRefInstrIndex() const
static LLVM_ABI void printTargetFlags(raw_ostream &OS, const MachineOperand &Op)
Print operand target flags.
LLVM_ABI void ChangeToFPImmediate(const ConstantFP *FPImm, unsigned TargetFlags=0)
ChangeToFPImmediate - Replace this operand with a new FP immediate operand of the specified value.
LLVM_ABI void setIsRenamable(bool Val=true)
bool isReg() const
isReg - Tests if this is a MO_Register operand.
bool isRegMask() const
isRegMask - Tests if this is a MO_RegisterMask operand.
const MDNode * getMetadata() const
MachineBasicBlock * getMBB() const
ArrayRef< int > getShuffleMask() const
LLVM_ABI void ChangeToMCSymbol(MCSymbol *Sym, unsigned TargetFlags=0)
ChangeToMCSymbol - Replace this operand with a new MC symbol operand.
LLVM_ABI void ChangeToTargetIndex(unsigned Idx, int64_t Offset, unsigned TargetFlags=0)
Replace this operand with a target index.
LLVM_ABI void setReg(Register Reg)
Change the register this operand corresponds to.
LLVM_ABI void dump() const
LLVM_ABI void ChangeToImmediate(int64_t ImmVal, unsigned TargetFlags=0)
ChangeToImmediate - Replace this operand with a new immediate operand of the specified value.
LLVM_ABI void ChangeToES(const char *SymName, unsigned TargetFlags=0)
ChangeToES - Replace this operand with a new external symbol operand.
LLVM_ABI void ChangeToGA(const GlobalValue *GV, int64_t Offset, unsigned TargetFlags=0)
ChangeToGA - Replace this operand with a new global address operand.
LLVM_ABI void print(raw_ostream &os, const TargetRegisterInfo *TRI=nullptr) const
Print the MachineOperand to os.
LaneBitmask getLaneMask() const
unsigned getCFIIndex() const
LLVM_ABI bool isRenamable() const
isRenamable - Returns true if this register may be renamed, i.e.
LLVM_ABI void ChangeToBA(const BlockAddress *BA, int64_t Offset, unsigned TargetFlags=0)
ChangeToBA - Replace this operand with a new block address operand.
static LLVM_ABI void printOperandOffset(raw_ostream &OS, int64_t Offset)
Print the offset with explicit +/- signs.
LLVM_ABI void ChangeToDbgInstrRef(unsigned InstrIdx, unsigned OpIdx, unsigned TargetFlags=0)
Replace this operand with an Instruction Reference.
LLVM_ABI void ChangeToRegister(Register Reg, bool isDef, bool isImp=false, bool isKill=false, bool isDead=false, bool isUndef=false, bool isDebug=false)
ChangeToRegister - Replace this operand with a new register operand of the specified value.
const BlockAddress * getBlockAddress() const
MachineInstr * getParent()
getParent - Return the instruction that this operand belongs to.
LLVM_ABI void substPhysReg(MCRegister Reg, const TargetRegisterInfo &)
substPhysReg - Substitute the current register with the physical register Reg, taking any existing Su...
static unsigned getRegMaskSize(unsigned NumRegs)
Returns number of elements needed for a regmask array.
void setOffset(int64_t Offset)
static LLVM_ABI void printIRSlotNumber(raw_ostream &OS, int Slot)
Print an IRSlotNumber.
unsigned getTargetFlags() const
MachineOperandType getType() const
getType - Returns the MachineOperandType for this operand.
const char * getSymbolName() const
void setIsUndef(bool Val=true)
bool isEarlyClobber() const
Register getReg() const
getReg - Returns the register number.
Intrinsic::ID getIntrinsicID() const
bool isInternalRead() const
void setTargetFlags(unsigned F)
LLVM_ABI bool isIdenticalTo(const MachineOperand &Other) const
Returns true if this operand is identical to the specified operand except for liveness related flags ...
LLVM_ABI void ChangeToCPI(unsigned Idx, int Offset, unsigned TargetFlags=0)
ChangeToCPI - Replace this operand with a new constant pool index operand.
friend class MachineRegisterInfo
const uint32_t * getRegMask() const
getRegMask - Returns a bit mask of registers preserved by this RegMask operand.
friend class MachineInstr
LLVM_ABI void setIsDef(bool Val=true)
Change a def to a use, or a use to a def.
const ConstantFP * getFPImm() const
static LLVM_ABI void printSymbol(raw_ostream &OS, MCSymbol &Sym)
Print a MCSymbol as an operand.
unsigned getPredicate() const
MCSymbol * getMCSymbol() const
@ 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_LaneMask
Mask to represent active parts of registers.
@ 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.
int64_t getOffset() const
Return the offset from the symbol in this operand.
Manage lifetime of a slot tracker for printing IR.
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.
LLVM_ABI const PseudoSourceValue * getJumpTable()
Return a pseudo source value referencing a jump table.
LLVM_ABI const PseudoSourceValue * getFixedStack(int FI)
Return a pseudo source value referencing a fixed stack frame entry, e.g., a spill slot.
LLVM_ABI const PseudoSourceValue * getGOT()
Return a pseudo source value referencing the global offset table (or something the like).
LLVM_ABI const PseudoSourceValue * getStack()
Return a pseudo source value referencing the area below the stack frame of a function,...
LLVM_ABI const PseudoSourceValue * getConstantPool()
Return a pseudo source value referencing the constant pool.
Special value supplied for machine level alias analysis.
@ ExternalSymbolCallEntry
Wrapper class representing virtual and physical registers.
constexpr unsigned id() const
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
constexpr size_t size() const
size - Get the string size.
TargetInstrInfo - Interface to description of machine instruction set.
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
virtual const TargetInstrInfo * getInstrInfo() const
LLVM Value Representation.
LLVM_ABI 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.
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
An opaque object representing a hash code.
This class implements an extremely fast bulk output stream that can only output to a stream.
#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.
@ C
The default llvm calling convention, compatible with C.
LLVM_ABI StringRef getBaseName(ID id)
Return the LLVM name for an intrinsic, without encoded types for overloading, such as "llvm....
@ System
Synchronized with respect to all concurrently executing threads.
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
hash_code hash_value(const FixedPointSemantics &Val)
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
LLVM_ABI bool isDereferenceableAndAlignedPointer(const Value *V, Type *Ty, Align Alignment, const DataLayout &DL, const Instruction *CtxI=nullptr, AssumptionCache *AC=nullptr, const DominatorTree *DT=nullptr, const TargetLibraryInfo *TLI=nullptr)
Returns true if V is always a dereferenceable pointer with alignment greater or equal than requested.
Printable PrintLaneMask(LaneBitmask LaneMask)
Create Printable object to print LaneBitmasks on a raw_ostream.
LLVM_ABI Printable printJumpTableEntryReference(unsigned Idx)
Prints a jump table entry reference.
LLVM_ABI void printEscapedString(StringRef Name, raw_ostream &Out)
Print each character of the specified string, escaping it if it is not printable or if it is an escap...
const char * toIRString(AtomicOrdering ao)
String used by LLVM IR to represent atomic ordering.
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
LLVM_ABI Printable printRegClassOrBank(Register Reg, const MachineRegisterInfo &RegInfo, const TargetRegisterInfo *TRI)
Create Printable object to print register classes or register banks on a raw_ostream.
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
AtomicOrdering
Atomic ordering for LLVM's memory model.
DWARFExpression::Operation Op
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
auto find_if(R &&Range, UnaryPredicate P)
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.
Align commonAlignment(Align A, uint64_t Offset)
Returns the alignment that satisfies both alignments.
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
stable_hash stable_hash_combine(ArrayRef< stable_hash > Buffer)
LLVM_ABI void printLLVMNameWithoutPrefix(raw_ostream &OS, StringRef Name)
Print out a name of an LLVM value without any prefixes.
LLVM_ABI 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.
LLVM_ABI Printable printMBBReference(const MachineBasicBlock &MBB)
Prints a machine basic block reference.
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.
constexpr uint64_t value() const
This is a hole in the type system and should not be abused.
constexpr Type getAsInteger() const
This class contains a discriminated union of information about pointers in memory operands,...
static LLVM_ABI MachinePointerInfo getJumpTable(MachineFunction &MF)
Return a MachinePointerInfo record that refers to a jump table entry.
LLVM_ABI bool isDereferenceable(unsigned Size, LLVMContext &C, const DataLayout &DL) const
Return true if memory region [V, V+Offset+Size) is known to be dereferenceable.
LLVM_ABI unsigned getAddrSpace() const
Return the LLVM IR address space number that this pointer points into.
static LLVM_ABI MachinePointerInfo getStack(MachineFunction &MF, int64_t Offset, uint8_t ID=0)
Stack pointer relative access.
int64_t Offset
Offset - This is an offset from the base Value*.
PointerUnion< const Value *, const PseudoSourceValue * > V
This is the IR pointer value for the access, or it is null if unknown.
static LLVM_ABI MachinePointerInfo getConstantPool(MachineFunction &MF)
Return a MachinePointerInfo record that refers to the constant pool.
static LLVM_ABI MachinePointerInfo getUnknownStack(MachineFunction &MF)
Stack memory without other information.
static LLVM_ABI MachinePointerInfo getGOT(MachineFunction &MF)
Return a MachinePointerInfo record that refers to a GOT entry.
MachinePointerInfo(const Value *v, int64_t offset=0, uint8_t ID=0)
static LLVM_ABI MachinePointerInfo getFixedStack(MachineFunction &MF, int FI, int64_t Offset=0)
Return a MachinePointerInfo record that refers to the specified FrameIndex.