@@ -154,6 +154,27 @@ Exit: ; preds = %Loop
154154 ret i32 0
155155}
156156
157+ define i32 @test_dead_UnaryOp_cycle (double %A , i1 %cond ) {
158+ ; CHECK-LABEL: @test_dead_UnaryOp_cycle(
159+ ; CHECK-NEXT: BB0:
160+ ; CHECK-NEXT: br label [[LOOP:%.*]]
161+ ; CHECK: Loop:
162+ ; CHECK-NEXT: br i1 [[COND:%.*]], label [[LOOP]], label [[EXIT:%.*]]
163+ ; CHECK: Exit:
164+ ; CHECK-NEXT: ret i32 0
165+ ;
166+ BB0:
167+ br label %Loop
168+
169+ Loop: ; preds = %Loop, %BB0
170+ %B = phi double [ %A , %BB0 ], [ %C , %Loop ]
171+ %C = fneg double %B
172+ br i1 %cond , label %Loop , label %Exit
173+
174+ Exit: ; preds = %Loop
175+ ret i32 0
176+ }
177+
157178define i32 @test_dead_cycle_two_insts (i32 %A , i1 %cond ) {
158179; CHECK-LABEL: @test_dead_cycle_two_insts(
159180; CHECK-NEXT: BB0:
@@ -901,14 +922,14 @@ define i1 @test26(i32 %n) {
901922; CHECK: one:
902923; CHECK-NEXT: [[C:%.*]] = call i1 @test26a()
903924; CHECK-NEXT: switch i32 [[N:%.*]], label [[END:%.*]] [
904- ; CHECK-NEXT: i32 2, label [[TWO:%.*]]
905- ; CHECK-NEXT: i32 3, label [[THREE:%.*]]
925+ ; CHECK-NEXT: i32 2, label [[TWO:%.*]]
926+ ; CHECK-NEXT: i32 3, label [[THREE:%.*]]
906927; CHECK-NEXT: ]
907928; CHECK: two:
908929; CHECK-NEXT: [[D:%.*]] = call i1 @test26a()
909930; CHECK-NEXT: switch i32 [[N]], label [[END]] [
910- ; CHECK-NEXT: i32 10, label [[ONE]]
911- ; CHECK-NEXT: i32 30, label [[THREE]]
931+ ; CHECK-NEXT: i32 10, label [[ONE]]
932+ ; CHECK-NEXT: i32 30, label [[THREE]]
912933; CHECK-NEXT: ]
913934; CHECK: three:
914935; CHECK-NEXT: [[E:%.*]] = call i1 @test26a()
@@ -977,8 +998,8 @@ define i1 @PR24766(i8 %x1, i8 %x2, i8 %condition) {
977998; CHECK-NEXT: entry:
978999; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
9791000; CHECK-NEXT: switch i32 [[CONV]], label [[EPILOG:%.*]] [
980- ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
981- ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
1001+ ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
1002+ ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
9821003; CHECK-NEXT: ]
9831004; CHECK: sw1:
9841005; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[X1:%.*]], [[X2:%.*]]
@@ -1021,8 +1042,8 @@ define i1 @PR24766_no_constants(i8 %x1, i8 %x2, i8 %condition, i1 %another_condi
10211042; CHECK-NEXT: entry:
10221043; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
10231044; CHECK-NEXT: switch i32 [[CONV]], label [[EPILOG:%.*]] [
1024- ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
1025- ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
1045+ ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
1046+ ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
10261047; CHECK-NEXT: ]
10271048; CHECK: sw1:
10281049; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[X1:%.*]], [[X2:%.*]]
@@ -1066,8 +1087,8 @@ define i1 @PR24766_two_constants(i8 %x1, i8 %x2, i8 %condition) {
10661087; CHECK-NEXT: entry:
10671088; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
10681089; CHECK-NEXT: switch i32 [[CONV]], label [[EPILOG:%.*]] [
1069- ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
1070- ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
1090+ ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
1091+ ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
10711092; CHECK-NEXT: ]
10721093; CHECK: sw1:
10731094; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[X1:%.*]], [[X2:%.*]]
@@ -1109,9 +1130,9 @@ define i1 @PR24766_two_constants_two_var(i8 %x1, i8 %x2, i8 %condition) {
11091130; CHECK-NEXT: entry:
11101131; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
11111132; CHECK-NEXT: switch i32 [[CONV]], label [[EPILOG:%.*]] [
1112- ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
1113- ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
1114- ; CHECK-NEXT: i32 2, label [[SW3:%.*]]
1133+ ; CHECK-NEXT: i32 0, label [[SW1:%.*]]
1134+ ; CHECK-NEXT: i32 1, label [[SW2:%.*]]
1135+ ; CHECK-NEXT: i32 2, label [[SW3:%.*]]
11151136; CHECK-NEXT: ]
11161137; CHECK: sw1:
11171138; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[X1:%.*]], [[X2:%.*]]
0 commit comments