forked from OSchip/llvm-project
[Stackmaps] Replace the custom ConstantPool class with a MapVector.
llvm-svn: 207803
This commit is contained in:
parent
a665de8f38
commit
f01e809383
|
@ -133,6 +133,7 @@ public:
|
|||
private:
|
||||
typedef SmallVector<Location, 8> LocationVec;
|
||||
typedef SmallVector<LiveOutReg, 8> LiveOutVec;
|
||||
typedef MapVector<int64_t, int64_t> ConstantPool;
|
||||
typedef MapVector<const MCSymbol *, uint64_t> FnStackSizeMap;
|
||||
|
||||
struct CallsiteInfo {
|
||||
|
@ -149,26 +150,6 @@ private:
|
|||
|
||||
typedef std::vector<CallsiteInfo> CallsiteInfoList;
|
||||
|
||||
struct ConstantPool {
|
||||
private:
|
||||
typedef std::map<int64_t, size_t> ConstantsMap;
|
||||
std::vector<int64_t> ConstantsList;
|
||||
ConstantsMap ConstantIndexes;
|
||||
|
||||
public:
|
||||
size_t getNumConstants() const { return ConstantsList.size(); }
|
||||
int64_t getConstant(size_t Idx) const { return ConstantsList[Idx]; }
|
||||
size_t getConstantIndex(int64_t ConstVal) {
|
||||
size_t NextIdx = ConstantsList.size();
|
||||
ConstantsMap::const_iterator I =
|
||||
ConstantIndexes.insert(ConstantIndexes.end(),
|
||||
std::make_pair(ConstVal, NextIdx));
|
||||
if (I->second == NextIdx)
|
||||
ConstantsList.push_back(ConstVal);
|
||||
return I->second;
|
||||
}
|
||||
};
|
||||
|
||||
AsmPrinter &AP;
|
||||
CallsiteInfoList CSInfos;
|
||||
ConstantPool ConstPool;
|
||||
|
|
|
@ -209,7 +209,8 @@ void StackMaps::recordStackMapOpers(const MachineInstr &MI, uint64_t ID,
|
|||
if (I->LocType == Location::Constant &&
|
||||
((I->Offset + (int64_t(1)<<31)) >> 32) != 0) {
|
||||
I->LocType = Location::ConstantIndex;
|
||||
I->Offset = ConstPool.getConstantIndex(I->Offset);
|
||||
auto Result = ConstPool.insert(std::make_pair(I->Offset, I->Offset));
|
||||
I->Offset = Result.first - ConstPool.begin();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -334,9 +335,9 @@ void StackMaps::serializeToStackMapSection() {
|
|||
DEBUG(dbgs() << WSMP << "#functions = " << FnStackSize.size() << '\n');
|
||||
AP.OutStreamer.EmitIntValue(FnStackSize.size(), 4);
|
||||
// Num constants.
|
||||
DEBUG(dbgs() << WSMP << "#constants = " << ConstPool.getNumConstants()
|
||||
DEBUG(dbgs() << WSMP << "#constants = " << ConstPool.size()
|
||||
<< '\n');
|
||||
AP.OutStreamer.EmitIntValue(ConstPool.getNumConstants(), 4);
|
||||
AP.OutStreamer.EmitIntValue(ConstPool.size(), 4);
|
||||
// Num callsites.
|
||||
DEBUG(dbgs() << WSMP << "#callsites = " << CSInfos.size() << '\n');
|
||||
AP.OutStreamer.EmitIntValue(CSInfos.size(), 4);
|
||||
|
@ -349,8 +350,8 @@ void StackMaps::serializeToStackMapSection() {
|
|||
}
|
||||
|
||||
// Constant pool entries.
|
||||
for (unsigned i = 0; i < ConstPool.getNumConstants(); ++i)
|
||||
AP.OutStreamer.EmitIntValue(ConstPool.getConstant(i), 8);
|
||||
for (auto Constant : ConstPool)
|
||||
AP.OutStreamer.EmitIntValue(Constant.second, 8);
|
||||
|
||||
// Callsite entries.
|
||||
for (CallsiteInfoList::const_iterator CSII = CSInfos.begin(),
|
||||
|
@ -473,4 +474,5 @@ void StackMaps::serializeToStackMapSection() {
|
|||
AP.OutStreamer.AddBlankLine();
|
||||
|
||||
CSInfos.clear();
|
||||
ConstPool.clear();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue