[PATCH] D154115: [BOLT][NFC] Simplify postProcessJumpTables
Amir Ayupov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 29 10:34:50 PDT 2023
Amir created this revision.
Amir added a reviewer: bolt.
Herald added a reviewer: rafauler.
Herald added subscribers: treapster, ayermolo.
Herald added a reviewer: maksfb.
Herald added a project: All.
Amir requested review of this revision.
Herald added subscribers: llvm-commits, yota9.
Herald added a project: LLVM.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D154115
Files:
bolt/lib/Core/BinaryFunction.cpp
Index: bolt/lib/Core/BinaryFunction.cpp
===================================================================
--- bolt/lib/Core/BinaryFunction.cpp
+++ bolt/lib/Core/BinaryFunction.cpp
@@ -1615,39 +1615,6 @@
"detected in function "
<< *this << '\n';
}
- if (JT.Entries.empty()) {
- bool HasOneParent = (JT.Parents.size() == 1);
- for (unsigned I = 0; I < JT.EntriesAsAddress.size(); ++I) {
- uint64_t EntryAddress = JT.EntriesAsAddress[I];
- // builtin_unreachable does not belong to any function
- // Need to handle separately
- bool IsBuiltIn = false;
- for (BinaryFunction *Parent : JT.Parents) {
- if (EntryAddress == Parent->getAddress() + Parent->getSize()) {
- IsBuiltIn = true;
- // Specify second parameter as true to accept builtin_unreachable
- MCSymbol *Label = getOrCreateLocalLabel(EntryAddress, true);
- JT.Entries.push_back(Label);
- break;
- }
- }
- if (IsBuiltIn)
- continue;
- // Create local label for targets cannot be reached by other fragments
- // Otherwise, secondary entry point to target function
- BinaryFunction *TargetBF =
- BC.getBinaryFunctionContainingAddress(EntryAddress);
- if (TargetBF->getAddress() != EntryAddress) {
- MCSymbol *Label =
- (HasOneParent && TargetBF == this)
- ? getOrCreateLocalLabel(JT.EntriesAsAddress[I], true)
- : TargetBF->addEntryPointAtOffset(EntryAddress -
- TargetBF->getAddress());
- JT.Entries.push_back(Label);
- }
- }
- }
-
const uint64_t BDSize =
BC.getBinaryDataAtAddress(JT.getAddress())->getSize();
if (!BDSize) {
@@ -1656,6 +1623,33 @@
assert(BDSize >= JT.getSize() &&
"jump table cannot be larger than the containing object");
}
+ if (!JT.Entries.empty())
+ continue;
+
+ bool HasOneParent = (JT.Parents.size() == 1);
+ for (uint64_t EntryAddress : JT.EntriesAsAddress) {
+ // builtin_unreachable does not belong to any function
+ // Need to handle separately
+ bool IsBuiltinUnreachable =
+ llvm::any_of(JT.Parents, [&](const BinaryFunction *Parent) {
+ return EntryAddress == Parent->getAddress() + Parent->getSize();
+ });
+ if (IsBuiltinUnreachable) {
+ MCSymbol *Label = getOrCreateLocalLabel(EntryAddress, true);
+ JT.Entries.push_back(Label);
+ continue;
+ }
+ // Create local label for targets cannot be reached by other fragments
+ // Otherwise, secondary entry point to target function
+ BinaryFunction *TargetBF =
+ BC.getBinaryFunctionContainingAddress(EntryAddress);
+ if (uint64_t Offset = EntryAddress - TargetBF->getAddress()) {
+ MCSymbol *Label = (HasOneParent && TargetBF == this)
+ ? getOrCreateLocalLabel(EntryAddress, true)
+ : TargetBF->addEntryPointAtOffset(Offset);
+ JT.Entries.push_back(Label);
+ }
+ }
}
// Add TakenBranches from JumpTables.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D154115.535885.patch
Type: text/x-patch
Size: 3242 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230629/593980b0/attachment.bin>
More information about the llvm-commits
mailing list