[llvm] c586d97 - [GVN][NFC] Precommit intrinsic bug test case, see D141190

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 9 16:04:16 PST 2023


Author: Johannes Doerfert
Date: 2023-01-09T16:03:51-08:00
New Revision: c586d973105d80da0c4d8e8f27f3ee0792beac15

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

LOG: [GVN][NFC] Precommit intrinsic bug test case, see D141190

Added: 
    llvm/test/Transforms/GVN/intrinsics_in_cg.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/GVN/intrinsics_in_cg.ll b/llvm/test/Transforms/GVN/intrinsics_in_cg.ll
new file mode 100644
index 000000000000..19e490718231
--- /dev/null
+++ b/llvm/test/Transforms/GVN/intrinsics_in_cg.ll
@@ -0,0 +1,67 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
+; RUN: opt < %s -passes='require<globals-aa>,gvn' -S | FileCheck %s
+
+; Ensure we do not hoist the load over the call.
+; FIXME: Currently broken until D141190 or similar lands.
+
+ at G1 = internal global i32 1
+ at G2 = internal global i32 1
+
+define i32 @direct_intrinsic(i1 %c) {
+; CHECK-LABEL: define {{[^@]+}}@direct_intrinsic
+; CHECK-SAME: (i1 [[C:%.*]]) {
+; CHECK-NEXT:    br i1 [[C]], label [[INIT:%.*]], label [[CHECK:%.*]]
+; CHECK:       init:
+; CHECK-NEXT:    store i32 0, ptr @G1, align 4
+; CHECK-NEXT:    br label [[CHECK]]
+; CHECK:       check:
+; CHECK-NEXT:    call void @llvm.unknown()
+; CHECK-NEXT:    [[V:%.*]] = load i32, ptr @G1, align 4
+; CHECK-NEXT:    ret i32 [[V]]
+;
+  br i1 %c, label %init, label %check
+init:
+  store i32 0, ptr @G1
+  br label %check
+check:
+  call void @llvm.unknown()
+  %v = load i32, ptr @G1
+  ret i32 %v
+}
+
+define i32 @indirect_intrinsic(i1 %c) {
+; CHECK-LABEL: define {{[^@]+}}@indirect_intrinsic
+; CHECK-SAME: (i1 [[C:%.*]]) {
+; CHECK-NEXT:    br i1 [[C]], label [[INIT:%.*]], label [[DOTCHECK_CRIT_EDGE:%.*]]
+; CHECK:       .check_crit_edge:
+; CHECK-NEXT:    [[V_PRE:%.*]] = load i32, ptr @G2, align 4
+; CHECK-NEXT:    br label [[CHECK:%.*]]
+; CHECK:       init:
+; CHECK-NEXT:    store i32 0, ptr @G2, align 4
+; CHECK-NEXT:    br label [[CHECK]]
+; CHECK:       check:
+; CHECK-NEXT:    [[V:%.*]] = phi i32 [ [[V_PRE]], [[DOTCHECK_CRIT_EDGE]] ], [ 0, [[INIT]] ]
+; CHECK-NEXT:    call void @intrinsic_caller()
+; CHECK-NEXT:    ret i32 [[V]]
+;
+  br i1 %c, label %init, label %check
+init:
+  store i32 0, ptr @G2
+  br label %check
+check:
+  call void @intrinsic_caller()
+  %v = load i32, ptr @G2
+  ret i32 %v
+}
+
+define fastcc void @intrinsic_caller() {
+; CHECK-LABEL: define {{[^@]+}}@intrinsic_caller() {
+; CHECK-NEXT:    call void @llvm.unknown()
+; CHECK-NEXT:    ret void
+;
+  call void @llvm.unknown()
+  ret void
+}
+
+declare void @llvm.unknown()
+


        


More information about the llvm-commits mailing list