[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