[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