10 #ifndef LLVM_STACKMAPS
11 #define LLVM_STACKMAPS
49 bool hasDef()
const {
return HasDef; }
52 assert(Pos <
MetaEnd &&
"Meta operand index out of range.");
53 return (HasDef ? 1 : 0) + Pos;
92 : LocType(LocType), Size(Size), Reg(Reg), Offset(Offset) {}
97 typedef std::pair<Location, MachineInstr::const_mop_iterator>
107 : AP(AP), OpParser(OpParser) {}
125 struct CallsiteInfo {
126 const MCExpr *CSOffsetExpr;
128 LocationVec Locations;
129 CallsiteInfo() : CSOffsetExpr(0),
ID(0) {}
130 CallsiteInfo(
const MCExpr *CSOffsetExpr,
unsigned ID,
131 LocationVec Locations)
132 : CSOffsetExpr(CSOffsetExpr), ID(ID), Locations(Locations) {}
135 typedef std::vector<CallsiteInfo> CallsiteInfoList;
139 typedef std::map<int64_t, size_t> ConstantsMap;
140 std::vector<int64_t> ConstantsList;
141 ConstantsMap ConstantIndexes;
144 size_t getNumConstants()
const {
return ConstantsList.size(); }
145 int64_t getConstant(
size_t Idx)
const {
return ConstantsList[Idx]; }
146 size_t getConstantIndex(int64_t ConstVal) {
147 size_t NextIdx = ConstantsList.size();
148 ConstantsMap::const_iterator
I =
149 ConstantIndexes.insert(ConstantIndexes.end(),
150 std::make_pair(ConstVal, NextIdx));
151 if (I->second == NextIdx)
152 ConstantsList.push_back(ConstVal);
159 CallsiteInfoList CSInfos;
167 void recordStackMapOpers(
const MachineInstr &
MI, uint32_t
ID,
170 bool recordResult =
false);
175 #endif // LLVM_STACKMAPS
std::pair< Location, MachineInstr::const_mop_iterator >(* OperandParser)(MachineInstr::const_mop_iterator, MachineInstr::const_mop_iterator, const TargetMachine &)
unsigned getVarIdx() const
ID
LLVM Calling Convention Representation.
PatchPointOpers(const MachineInstr *MI)
unsigned getArgIdx() const
const MachineOperand & getOperand(unsigned i) const
MI-level patchpoint operands.
unsigned getStackMapStartIdx() const
void recordPatchPoint(const MachineInstr &MI)
Generate a stackmap record for a patchpoint instruction.
void serializeToStackMapSection()
Location(LocationType LocType, unsigned Size, unsigned Reg, int64_t Offset)
unsigned getNextScratchIdx(unsigned StartIdx=0) const
Get the next scratch register operand index.
void recordStackMap(const MachineInstr &MI)
Generate a stackmap record for a stackmap instruction.
const MachineOperand & getMetaOper(unsigned Pos)
unsigned getMetaIdx(unsigned Pos=0) const
const MachineOperand * const_mop_iterator
StackMaps(AsmPrinter &AP, OperandParser OpParser)