[llvm] e781451 - [JITLink] Relax zero-fill edge assertions.

Sunho Kim via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 30 16:34:18 PDT 2022


Author: Sunho Kim
Date: 2022-07-31T08:34:10+09:00
New Revision: e781451140febc2038ab652bd54d948eb588dbb9

URL: https://github.com/llvm/llvm-project/commit/e781451140febc2038ab652bd54d948eb588dbb9
DIFF: https://github.com/llvm/llvm-project/commit/e781451140febc2038ab652bd54d948eb588dbb9.diff

LOG: [JITLink] Relax zero-fill edge assertions.

Relax zero-fill edge assertions to only consider relocation edges. Keep-alive edges to zero-fill blocks can cause this assertion which is too strict.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D130450

Added: 
    

Modified: 
    llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
    llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
index 897808c0ee835..dae4ccddfaf5f 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -303,7 +303,8 @@ class Block : public Addressable {
   /// Add an edge to this block.
   void addEdge(Edge::Kind K, Edge::OffsetT Offset, Symbol &Target,
                Edge::AddendT Addend) {
-    assert(!isZeroFill() && "Adding edge to zero-fill block?");
+    assert((K == Edge::KeepAlive || !isZeroFill()) &&
+           "Adding edge to zero-fill block?");
     Edges.push_back(Edge(K, Offset, Target, Addend));
   }
 

diff  --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h
index 1095fa5ce7014..2c92445265364 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h
@@ -128,8 +128,12 @@ template <typename LinkerImpl> class JITLinker : public JITLinkerBase {
 
       // Copy Block data and apply fixups.
       LLVM_DEBUG(dbgs() << "    Applying fixups.\n");
-      assert((!B->isZeroFill() || B->edges_size() == 0) &&
-             "Edges in zero-fill block?");
+      assert((!B->isZeroFill() || all_of(B->edges(),
+                                         [](const Edge &E) {
+                                           return E.getKind() ==
+                                                  Edge::KeepAlive;
+                                         })) &&
+             "Non-KeepAlive edges in zero-fill block?");
       for (auto &E : B->edges()) {
 
         // Skip non-relocation edges.


        


More information about the llvm-commits mailing list