[llvm] 89a99ec - [GVN] Bug fix to reportMayClobberedLoad remark

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 6 17:42:35 PDT 2022


Author: Vir Narula
Date: 2022-07-06T17:42:05-07:00
New Revision: 89a99ec900d50d579629083c6400d24bd6ef6dab

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

LOG: [GVN] Bug fix to reportMayClobberedLoad remark

Bug fix to avoid assert crashing when generating remarks for GVN crashing.

Intention of assert is correct but ignores edge case of instructions being equivalent.

Reduced input that causes crash when remarks are turned on:
```
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx12.0.0"

define ptr @ReplaceWithTidy(ptr %zz_hold) {
cond.end480.us:
  %0 = load ptr, ptr null, align 8
  store ptr %0, ptr %0, align 8
  store ptr null, ptr %zz_hold, align 8
  %1 = load ptr, ptr %0, align 8
  store ptr %1, ptr null, align 8
  ret ptr null
}
```

Reviewed By: fhahn

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

Added: 
    llvm/test/Transforms/GVN/remarks-selfdomination.ll

Modified: 
    llvm/lib/Transforms/Scalar/GVN.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp
index 783301fe589ea..913034f0c8305 100644
--- a/llvm/lib/Transforms/Scalar/GVN.cpp
+++ b/llvm/lib/Transforms/Scalar/GVN.cpp
@@ -1059,8 +1059,8 @@ static void reportMayClobberedLoad(LoadInst *Load, MemDepResult DepInfo,
         if (DT->dominates(cast<Instruction>(OtherAccess), cast<Instruction>(U)))
           OtherAccess = U;
         else
-          assert(DT->dominates(cast<Instruction>(U),
-                               cast<Instruction>(OtherAccess)));
+          assert(U == OtherAccess || DT->dominates(cast<Instruction>(U),
+                                                   cast<Instruction>(OtherAccess)));
       } else
         OtherAccess = U;
     }

diff  --git a/llvm/test/Transforms/GVN/remarks-selfdomination.ll b/llvm/test/Transforms/GVN/remarks-selfdomination.ll
new file mode 100644
index 0000000000000..b4ffaa4108300
--- /dev/null
+++ b/llvm/test/Transforms/GVN/remarks-selfdomination.ll
@@ -0,0 +1,21 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -gvn -pass-remarks-analysis=gvn -S < %s | FileCheck %s
+
+define ptr @ReplaceWithTidy(ptr %one, ptr %two, ptr %three) {
+; CHECK-LABEL: @ReplaceWithTidy(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ONE:%.*]], align 8
+; CHECK-NEXT:    store ptr [[TMP0]], ptr [[TMP0]], align 8
+; CHECK-NEXT:    store ptr null, ptr [[TWO:%.*]], align 8
+; CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
+; CHECK-NEXT:    store ptr [[TMP1]], ptr [[THREE:%.*]], align 8
+; CHECK-NEXT:    ret ptr null
+;
+entry:
+  %0 = load ptr, ptr %one, align 8
+  store ptr %0, ptr %0, align 8
+  store ptr null, ptr %two, align 8
+  %1 = load ptr, ptr %0, align 8
+  store ptr %1, ptr %three, align 8
+  ret ptr null
+}


        


More information about the llvm-commits mailing list