[Stackmaps] Replace the custom ConstantPool class with a MapVector.

llvm-svn: 207803
This commit is contained in:
Juergen Ributzka 2014-05-01 22:21:24 +00:00
parent a665de8f38
commit f01e809383
2 changed files with 8 additions and 25 deletions

View File

@ -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;

View File

@ -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();
}