[PATCH] D125879: [MC] [Win64EH] Wrap the epilog instructions in a struct. NFC.
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 18 05:08:40 PDT 2022
mstorsjo created this revision.
mstorsjo added reviewers: efriedma, zzheng.
Herald added subscribers: hiraditya, kristof.beyls.
Herald added a project: All.
mstorsjo requested review of this revision.
Herald added a project: LLVM.
For ARM SEH, the epilogs will need a little more associated data than
just the plain list of opcodes.
This is a preparatory refactoring for D125645 <https://reviews.llvm.org/D125645>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D125879
Files:
llvm/include/llvm/MC/MCWinEH.h
llvm/lib/MC/MCWin64EH.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp
Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp
===================================================================
--- llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp
+++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp
@@ -74,7 +74,7 @@
return;
auto Inst = WinEH::Instruction(UnwindCode, /*Label=*/nullptr, Reg, Offset);
if (InEpilogCFI)
- CurFrame->EpilogMap[CurrentEpilog].push_back(Inst);
+ CurFrame->EpilogMap[CurrentEpilog].Instructions.push_back(Inst);
else
CurFrame->Instructions.push_back(Inst);
}
@@ -201,7 +201,7 @@
InEpilogCFI = false;
WinEH::Instruction Inst =
WinEH::Instruction(Win64EH::UOP_End, /*Label=*/nullptr, -1, 0);
- CurFrame->EpilogMap[CurrentEpilog].push_back(Inst);
+ CurFrame->EpilogMap[CurrentEpilog].Instructions.push_back(Inst);
CurrentEpilog = nullptr;
}
Index: llvm/lib/MC/MCWin64EH.cpp
===================================================================
--- llvm/lib/MC/MCWin64EH.cpp
+++ llvm/lib/MC/MCWin64EH.cpp
@@ -525,7 +525,7 @@
auto InstrsIter = info->EpilogMap.find(EpilogStart);
assert(InstrsIter != info->EpilogMap.end() &&
"Epilog not found in EpilogMap");
- const auto &Instrs = InstrsIter->second;
+ const auto &Instrs = InstrsIter->second.Instructions;
if (Instrs.size() != EpilogInstrs.size())
continue;
@@ -633,7 +633,7 @@
return -1;
const std::vector<WinEH::Instruction> &Epilog =
- info->EpilogMap.begin()->second;
+ info->EpilogMap.begin()->second.Instructions;
// Check that the epilog actually is at the very end of the function,
// otherwise it can't be packed.
@@ -931,7 +931,7 @@
simplifyOpcodes(info->Instructions, false);
for (auto &I : info->EpilogMap)
- simplifyOpcodes(I.second, true);
+ simplifyOpcodes(I.second.Instructions, true);
MCContext &context = streamer.getContext();
MCSymbol *Label = context.createTempSymbol();
@@ -1003,7 +1003,7 @@
for (auto &I : info->EpilogMap) {
MCSymbol *EpilogStart = I.first;
- auto &EpilogInstrs = I.second;
+ auto &EpilogInstrs = I.second.Instructions;
uint32_t CodeBytes = ARM64CountOfUnwindCodes(EpilogInstrs);
MCSymbol* MatchingEpilog =
@@ -1085,7 +1085,7 @@
// Emit epilog unwind instructions
for (auto &I : info->EpilogMap) {
- auto &EpilogInstrs = I.second;
+ auto &EpilogInstrs = I.second.Instructions;
for (const WinEH::Instruction &inst : EpilogInstrs)
ARM64EmitUnwindCode(streamer, inst);
}
Index: llvm/include/llvm/MC/MCWinEH.h
===================================================================
--- llvm/include/llvm/MC/MCWinEH.h
+++ llvm/include/llvm/MC/MCWinEH.h
@@ -54,7 +54,10 @@
int LastFrameInst = -1;
const FrameInfo *ChainedParent = nullptr;
std::vector<Instruction> Instructions;
- MapVector<MCSymbol*, std::vector<Instruction>> EpilogMap;
+ struct Epilog {
+ std::vector<Instruction> Instructions;
+ };
+ MapVector<MCSymbol *, Epilog> EpilogMap;
FrameInfo() = default;
FrameInfo(const MCSymbol *Function, const MCSymbol *BeginFuncEHLabel)
@@ -68,7 +71,7 @@
if (!Instructions.empty())
return false;
for (const auto &E : EpilogMap)
- if (!E.second.empty())
+ if (!E.second.Instructions.empty())
return false;
return true;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D125879.430336.patch
Type: text/x-patch
Size: 3363 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220518/76785f29/attachment.bin>
More information about the llvm-commits
mailing list