diff options
author | Andrew Trick <atrick@apple.com> | 2013-12-13 18:37:10 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2013-12-13 18:37:10 +0000 |
commit | cd8314d63cb065054a9d0beed94647464ffacd8d (patch) | |
tree | 9c5a2ae1fe80e01ef6aff437d999906bc729c8ae /lib/CodeGen/StackMaps.cpp | |
parent | 539e93120cdbb66f651fc55a810416f3175adc8f (diff) | |
download | llvm-cd8314d63cb065054a9d0beed94647464ffacd8d.tar.gz llvm-cd8314d63cb065054a9d0beed94647464ffacd8d.tar.bz2 llvm-cd8314d63cb065054a9d0beed94647464ffacd8d.tar.xz |
Grow the stackmap/patchpoint format to hold 64-bit IDs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197255 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/StackMaps.cpp')
-rw-r--r-- | lib/CodeGen/StackMaps.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/CodeGen/StackMaps.cpp b/lib/CodeGen/StackMaps.cpp index 892e4573b0..6d0c165c8f 100644 --- a/lib/CodeGen/StackMaps.cpp +++ b/lib/CodeGen/StackMaps.cpp @@ -183,7 +183,7 @@ StackMaps::parseRegisterLiveOutMask(const uint32_t *Mask) const { return LiveOuts; } -void StackMaps::recordStackMapOpers(const MachineInstr &MI, uint32_t ID, +void StackMaps::recordStackMapOpers(const MachineInstr &MI, uint64_t ID, MachineInstr::const_mop_iterator MOI, MachineInstr::const_mop_iterator MOE, bool recordResult) { @@ -244,7 +244,6 @@ void StackMaps::recordStackMap(const MachineInstr &MI) { assert(MI.getOpcode() == TargetOpcode::STACKMAP && "expected stackmap"); int64_t ID = MI.getOperand(0).getImm(); - assert((int32_t)ID == ID && "Stack maps hold 32-bit IDs"); recordStackMapOpers(MI, ID, llvm::next(MI.operands_begin(), 2), getStackMapEndMOP(MI.operands_begin(), MI.operands_end())); @@ -255,7 +254,7 @@ void StackMaps::recordPatchPoint(const MachineInstr &MI) { PatchPointOpers opers(&MI); int64_t ID = opers.getMetaOper(PatchPointOpers::IDPos).getImm(); - assert((int32_t)ID == ID && "Stack maps hold 32-bit IDs"); + MachineInstr::const_mop_iterator MOI = llvm::next(MI.operands_begin(), opers.getStackMapStartIdx()); recordStackMapOpers(MI, ID, MOI, getStackMapEndMOP(MOI, MI.operands_end()), @@ -280,7 +279,7 @@ void StackMaps::recordPatchPoint(const MachineInstr &MI) { /// int64 : Constants[NumConstants] /// uint32 : NumRecords /// StkMapRecord[NumRecords] { -/// uint32 : PatchPoint ID +/// uint64 : PatchPoint ID /// uint32 : Instruction Offset /// uint16 : Reserved (record flags) /// uint16 : NumLocations @@ -345,7 +344,7 @@ void StackMaps::serializeToStackMapSection() { CSIE = CSInfos.end(); CSII != CSIE; ++CSII) { - unsigned CallsiteID = CSII->ID; + uint64_t CallsiteID = CSII->ID; const LocationVec &CSLocs = CSII->Locations; const LiveOutVec &LiveOuts = CSII->LiveOuts; @@ -356,7 +355,7 @@ void StackMaps::serializeToStackMapSection() { // simple overflow checks, but we may eventually communicate other // compilation errors this way. if (CSLocs.size() > UINT16_MAX || LiveOuts.size() > UINT16_MAX) { - AP.OutStreamer.EmitIntValue(UINT32_MAX, 4); // Invalid ID. + AP.OutStreamer.EmitIntValue(UINT64_MAX, 8); // Invalid ID. AP.OutStreamer.EmitValue(CSII->CSOffsetExpr, 4); AP.OutStreamer.EmitIntValue(0, 2); // Reserved. AP.OutStreamer.EmitIntValue(0, 2); // 0 locations. @@ -364,7 +363,7 @@ void StackMaps::serializeToStackMapSection() { continue; } - AP.OutStreamer.EmitIntValue(CallsiteID, 4); + AP.OutStreamer.EmitIntValue(CallsiteID, 8); AP.OutStreamer.EmitValue(CSII->CSOffsetExpr, 4); // Reserved for flags. |