IceString MangledName = Ctx->mangleName(getFunctionName());
for (const InstJumpTable *JumpTable : JumpTables) {
SizeT NumTargets = JumpTable->getNumTargets();
- JumpTableData &JT =
- Ctx->addJumpTable(MangledName, JumpTable->getId(), NumTargets);
+ JumpTableData::TargetList TargetList;
for (SizeT I = 0; I < NumTargets; ++I) {
SizeT Index = JumpTable->getTarget(I)->getIndex();
- JT.pushTarget(getAssembler()->getCfgNodeLabel(Index)->getPosition());
+ TargetList.emplace_back(
+ getAssembler()->getCfgNodeLabel(Index)->getPosition());
}
+ Ctx->addJumpTable(MangledName, JumpTable->getId(), TargetList);
}
} break;
case FT_Asm: {
return JumpTables;
}
-JumpTableData &GlobalContext::addJumpTable(IceString FuncName, SizeT Id,
- SizeT NumTargets) {
+JumpTableData &
+GlobalContext::addJumpTable(IceString FuncName, SizeT Id,
+ const JumpTableData::TargetList &TargetList) {
auto JumpTableList = getJumpTableList();
- JumpTableList->emplace_back(FuncName, Id, NumTargets);
+ JumpTableList->emplace_back(FuncName, Id, TargetList);
return JumpTableList->back();
}
/// Return a locked pointer to the registered jump tables.
JumpTableDataList getJumpTables();
/// Create a new jump table entry and return a reference to it.
- JumpTableData &addJumpTable(IceString FuncName, SizeT Id, SizeT NumTargets);
+ JumpTableData &addJumpTable(IceString FuncName, SizeT Id,
+ const JumpTableData::TargetList &TargetList);
const ClFlags &getFlags() const { return Flags; }
JumpTableData &operator=(const JumpTableData &) = delete;
public:
- JumpTableData(IceString FuncName, SizeT Id, SizeT NumTargets)
- : FuncName(FuncName), Id(Id) {
- TargetOffsets.reserve(NumTargets);
- }
+ using TargetList = std::vector<intptr_t>;
+
+ JumpTableData(const IceString &FuncName, SizeT Id,
+ const TargetList &TargetOffsets)
+ : FuncName(FuncName), Id(Id), TargetOffsets(TargetOffsets) {}
JumpTableData(const JumpTableData &) = default;
JumpTableData(JumpTableData &&) = default;
JumpTableData &operator=(JumpTableData &&) = default;
- void pushTarget(intptr_t Offset) { TargetOffsets.emplace_back(Offset); }
-
const IceString &getFunctionName() const { return FuncName; }
SizeT getId() const { return Id; }
- const std::vector<intptr_t> &getTargetOffsets() const {
- return TargetOffsets;
- }
+ const TargetList &getTargetOffsets() const { return TargetOffsets; }
private:
IceString FuncName;
SizeT Id;
- std::vector<intptr_t> TargetOffsets;
+ TargetList TargetOffsets;
};
using JumpTableDataList = std::vector<JumpTableData>;