[llvm] 185f2ae - [InstCombine] Add tests for phi nodes with dead edges (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 9 02:34:58 PDT 2023


Author: Nikita Popov
Date: 2023-06-09T11:34:50+02:00
New Revision: 185f2aefea84075d472b91fba2bc0dbf0b5c55dd

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

LOG: [InstCombine] Add tests for phi nodes with dead edges (NFC)

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/unreachable-code.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/unreachable-code.ll b/llvm/test/Transforms/InstCombine/unreachable-code.ll
index 7f17dfa537be9..d3674a015f3fa 100644
--- a/llvm/test/Transforms/InstCombine/unreachable-code.ll
+++ b/llvm/test/Transforms/InstCombine/unreachable-code.ll
@@ -3,69 +3,117 @@
 
 declare void @dummy()
 
-define void @br_true(i1 %x) {
-; CHECK-LABEL: define void @br_true
+define i32 @br_true(i1 %x) {
+; CHECK-LABEL: define i32 @br_true
 ; CHECK-SAME: (i1 [[X:%.*]]) {
 ; CHECK-NEXT:    br i1 true, label [[IF:%.*]], label [[ELSE:%.*]]
 ; CHECK:       if:
 ; CHECK-NEXT:    call void @dummy()
-; CHECK-NEXT:    ret void
+; CHECK-NEXT:    br label [[JOIN:%.*]]
 ; CHECK:       else:
-; CHECK-NEXT:    ret void
+; CHECK-NEXT:    br label [[JOIN]]
+; CHECK:       join:
+; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ 1, [[IF]] ], [ 2, [[ELSE]] ]
+; CHECK-NEXT:    ret i32 [[PHI]]
 ;
   %c = or i1 %x, true
   br i1 %c, label %if, label %else
 
 if:
   call void @dummy()
-  ret void
+  br label %join
 
 else:
   call void @dummy()
-  ret void
+  br label %join
+
+join:
+  %phi = phi i32 [ 1, %if ], [ 2, %else ]
+  ret i32 %phi
 }
 
-define void @br_false(i1 %x) {
-; CHECK-LABEL: define void @br_false
+define i32 @br_false(i1 %x) {
+; CHECK-LABEL: define i32 @br_false
 ; CHECK-SAME: (i1 [[X:%.*]]) {
 ; CHECK-NEXT:    br i1 false, label [[IF:%.*]], label [[ELSE:%.*]]
 ; CHECK:       if:
-; CHECK-NEXT:    ret void
+; CHECK-NEXT:    br label [[JOIN:%.*]]
 ; CHECK:       else:
 ; CHECK-NEXT:    call void @dummy()
-; CHECK-NEXT:    ret void
+; CHECK-NEXT:    br label [[JOIN]]
+; CHECK:       join:
+; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ 1, [[IF]] ], [ 2, [[ELSE]] ]
+; CHECK-NEXT:    ret i32 [[PHI]]
 ;
   %c = and i1 %x, false
   br i1 %c, label %if, label %else
 
 if:
   call void @dummy()
-  ret void
+  br label %join
 
 else:
   call void @dummy()
-  ret void
+  br label %join
+
+join:
+  %phi = phi i32 [ 1, %if ], [ 2, %else ]
+  ret i32 %phi
 }
 
-define void @br_undef(i1 %x) {
-; CHECK-LABEL: define void @br_undef
+define i32 @br_undef(i1 %x) {
+; CHECK-LABEL: define i32 @br_undef
 ; CHECK-SAME: (i1 [[X:%.*]]) {
 ; CHECK-NEXT:    br i1 undef, label [[IF:%.*]], label [[ELSE:%.*]]
 ; CHECK:       if:
-; CHECK-NEXT:    ret void
+; CHECK-NEXT:    br label [[JOIN:%.*]]
 ; CHECK:       else:
-; CHECK-NEXT:    ret void
+; CHECK-NEXT:    br label [[JOIN]]
+; CHECK:       join:
+; CHECK-NEXT:    ret i32 poison
 ;
   %c = xor i1 %x, undef
   br i1 %c, label %if, label %else
 
 if:
   call void @dummy()
-  ret void
+  br label %join
 
 else:
   call void @dummy()
-  ret void
+  br label %join
+
+join:
+  %phi = phi i32 [ 1, %if ], [ 2, %else ]
+  ret i32 %phi
+}
+
+define i32 @br_true_phi_with_repeated_preds(i1 %x) {
+; CHECK-LABEL: define i32 @br_true_phi_with_repeated_preds
+; CHECK-SAME: (i1 [[X:%.*]]) {
+; CHECK-NEXT:    br i1 true, label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK:       if:
+; CHECK-NEXT:    call void @dummy()
+; CHECK-NEXT:    br label [[JOIN:%.*]]
+; CHECK:       else:
+; CHECK-NEXT:    br i1 false, label [[JOIN]], label [[JOIN]]
+; CHECK:       join:
+; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ 1, [[IF]] ], [ 2, [[ELSE]] ], [ 2, [[ELSE]] ]
+; CHECK-NEXT:    ret i32 [[PHI]]
+;
+  %c = or i1 %x, true
+  br i1 %c, label %if, label %else
+
+if:
+  call void @dummy()
+  br label %join
+
+else:
+  br i1 false, label %join, label %join
+
+join:
+  %phi = phi i32 [ 1, %if ], [ 2, %else ], [ 2, %else ]
+  ret i32 %phi
 }
 
 define void @switch_case(i32 %x) {


        


More information about the llvm-commits mailing list