[llvm] 9e0f765 - [SimplifyCFG] Add test for branch on undef/poison (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 3 05:52:55 PST 2023
Author: Nikita Popov
Date: 2023-01-03T14:52:48+01:00
New Revision: 9e0f7655f2fa228eb3416302b39e42c1f3dacbba
URL: https://github.com/llvm/llvm-project/commit/9e0f7655f2fa228eb3416302b39e42c1f3dacbba
DIFF: https://github.com/llvm/llvm-project/commit/9e0f7655f2fa228eb3416302b39e42c1f3dacbba.diff
LOG: [SimplifyCFG] Add test for branch on undef/poison (NFC)
Added:
llvm/test/Transforms/SimplifyCFG/branch-on-undef.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/SimplifyCFG/branch-on-undef.ll b/llvm/test/Transforms/SimplifyCFG/branch-on-undef.ll
new file mode 100644
index 000000000000..29f4b8e143a7
--- /dev/null
+++ b/llvm/test/Transforms/SimplifyCFG/branch-on-undef.ll
@@ -0,0 +1,96 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree < %s | FileCheck %s
+
+declare void @foo(i32)
+
+define void @br_undef_simple() {
+; CHECK-LABEL: @br_undef_simple(
+; CHECK-NEXT: call void @foo(i32 0)
+; CHECK-NEXT: br i1 undef, label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK: common.ret:
+; CHECK-NEXT: ret void
+; CHECK: if:
+; CHECK-NEXT: call void @foo(i32 1)
+; CHECK-NEXT: br label [[COMMON_RET:%.*]]
+; CHECK: else:
+; CHECK-NEXT: call void @foo(i32 2)
+; CHECK-NEXT: br label [[COMMON_RET]]
+;
+ call void @foo(i32 0)
+ br i1 undef, label %if, label %else
+
+if:
+ call void @foo(i32 1)
+ ret void
+
+else:
+ call void @foo(i32 2)
+ ret void
+}
+
+define void @br_poison_simple() {
+; CHECK-LABEL: @br_poison_simple(
+; CHECK-NEXT: call void @foo(i32 0)
+; CHECK-NEXT: br i1 poison, label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK: common.ret:
+; CHECK-NEXT: ret void
+; CHECK: if:
+; CHECK-NEXT: call void @foo(i32 1)
+; CHECK-NEXT: br label [[COMMON_RET:%.*]]
+; CHECK: else:
+; CHECK-NEXT: call void @foo(i32 2)
+; CHECK-NEXT: br label [[COMMON_RET]]
+;
+ call void @foo(i32 0)
+ br i1 poison, label %if, label %else
+
+if:
+ call void @foo(i32 1)
+ ret void
+
+else:
+ call void @foo(i32 2)
+ ret void
+}
+
+define void @br_poison_succs_used(i32 %v) {
+; CHECK-LABEL: @br_poison_succs_used(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: switch i32 [[V:%.*]], label [[BR:%.*]] [
+; CHECK-NEXT: i32 1, label [[IF:%.*]]
+; CHECK-NEXT: i32 2, label [[ELSE:%.*]]
+; CHECK-NEXT: ]
+; CHECK: br:
+; CHECK-NEXT: call void @foo(i32 0)
+; CHECK-NEXT: br i1 poison, label [[IF]], label [[ELSE]]
+; CHECK: common.ret:
+; CHECK-NEXT: ret void
+; CHECK: if:
+; CHECK-NEXT: [[PHI1:%.*]] = phi i32 [ 1, [[BR]] ], [ 2, [[ENTRY:%.*]] ]
+; CHECK-NEXT: call void @foo(i32 [[PHI1]])
+; CHECK-NEXT: br label [[COMMON_RET:%.*]]
+; CHECK: else:
+; CHECK-NEXT: [[PHI2:%.*]] = phi i32 [ 3, [[BR]] ], [ 4, [[ENTRY]] ]
+; CHECK-NEXT: call void @foo(i32 [[PHI2]])
+; CHECK-NEXT: br label [[COMMON_RET]]
+;
+entry:
+ switch i32 %v, label %br [
+ i32 1, label %if
+ i32 2, label %else
+ ]
+
+br:
+ call void @foo(i32 0)
+ br i1 poison, label %if, label %else
+
+if:
+ %phi1 = phi i32 [ 1, %br ], [ 2, %entry ]
+ call void @foo(i32 %phi1)
+ ret void
+
+else:
+ %phi2 = phi i32 [ 3, %br ], [ 4, %entry ]
+ call void @foo(i32 %phi2)
+ ret void
+}
More information about the llvm-commits
mailing list