[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