[llvm] 66e4919 - [JITLink][CompactUnwind] Express mergeability via +ve predicate. NFCI. (#176313)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 15 22:12:28 PST 2026
Author: Lang Hames
Date: 2026-01-16T17:12:24+11:00
New Revision: 66e4919b22fb0de96a922f408c8115dd5bf132fc
URL: https://github.com/llvm/llvm-project/commit/66e4919b22fb0de96a922f408c8115dd5bf132fc
DIFF: https://github.com/llvm/llvm-project/commit/66e4919b22fb0de96a922f408c8115dd5bf132fc.diff
LOG: [JITLink][CompactUnwind] Express mergeability via +ve predicate. NFCI. (#176313)
Compact unwind record merging is an optimization. Using a can-be-merged
predicate is preferrable to a "cannot-be-merged" predicate as the former
encourages conservatively correct implementations: "what is safe to
merge" is easier to reason about than "what is safe to not not merge".
Added:
Modified:
llvm/lib/ExecutionEngine/JITLink/CompactUnwindSupport.h
llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
Removed:
################################################################################
diff --git a/llvm/lib/ExecutionEngine/JITLink/CompactUnwindSupport.h b/llvm/lib/ExecutionEngine/JITLink/CompactUnwindSupport.h
index c3f8834949335..19129a9e08752 100644
--- a/llvm/lib/ExecutionEngine/JITLink/CompactUnwindSupport.h
+++ b/llvm/lib/ExecutionEngine/JITLink/CompactUnwindSupport.h
@@ -465,9 +465,9 @@ template <typename CURecTraits> class CompactUnwindManager {
auto &Last = Records.back();
bool NextNeedsDWARF = CURecTraits::encodingSpecifiesDWARF(Next.Encoding);
- bool CannotBeMerged = CURecTraits::encodingCannotBeMerged(Next.Encoding);
- if (NextNeedsDWARF || (Next.Encoding != Last.Encoding) ||
- CannotBeMerged || Next.LSDA || Last.LSDA)
+ bool CanBeMerged = CURecTraits::encodingCanBeMerged(Next.Encoding);
+ if (NextNeedsDWARF || (Next.Encoding != Last.Encoding) || !CanBeMerged ||
+ Next.LSDA || Last.LSDA)
Records.push_back(Next);
}
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
index f79478038c5cb..11f0b3be2cb17 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
@@ -645,7 +645,7 @@ struct CompactUnwindTraits_MachO_arm64
return (Encoding & EncodingModeMask) == DWARFMode;
}
- static bool encodingCannotBeMerged(uint32_t Encoding) { return false; }
+ static bool encodingCanBeMerged(uint32_t Encoding) { return true; }
};
void link_MachO_arm64(std::unique_ptr<LinkGraph> G,
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
index 27209a82eb5f4..78db07c601587 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
@@ -521,9 +521,9 @@ struct CompactUnwindTraits_MachO_x86_64
return (Encoding & EncodingModeMask) == DWARFMode;
}
- static bool encodingCannotBeMerged(uint32_t Encoding) {
+ static bool encodingCanBeMerged(uint32_t Encoding) {
constexpr uint32_t StackIndirectMode = 0x03000000;
- return (Encoding & EncodingModeMask) == StackIndirectMode;
+ return (Encoding & EncodingModeMask) != StackIndirectMode;
}
};
More information about the llvm-commits
mailing list