@@ -154,6 +154,27 @@ Exit: ; preds = %Loop
154
154
ret i32 0
155
155
}
156
156
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
+
157
178
define i32 @test_dead_cycle_two_insts (i32 %A , i1 %cond ) {
158
179
; CHECK-LABEL: @test_dead_cycle_two_insts(
159
180
; CHECK-NEXT: BB0:
@@ -901,14 +922,14 @@ define i1 @test26(i32 %n) {
901
922
; CHECK: one:
902
923
; CHECK-NEXT: [[C:%.*]] = call i1 @test26a()
903
924
; 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:%.*]]
906
927
; CHECK-NEXT: ]
907
928
; CHECK: two:
908
929
; CHECK-NEXT: [[D:%.*]] = call i1 @test26a()
909
930
; 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]]
912
933
; CHECK-NEXT: ]
913
934
; CHECK: three:
914
935
; CHECK-NEXT: [[E:%.*]] = call i1 @test26a()
@@ -977,8 +998,8 @@ define i1 @PR24766(i8 %x1, i8 %x2, i8 %condition) {
977
998
; CHECK-NEXT: entry:
978
999
; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
979
1000
; 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:%.*]]
982
1003
; CHECK-NEXT: ]
983
1004
; CHECK: sw1:
984
1005
; 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
1021
1042
; CHECK-NEXT: entry:
1022
1043
; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
1023
1044
; 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:%.*]]
1026
1047
; CHECK-NEXT: ]
1027
1048
; CHECK: sw1:
1028
1049
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[X1:%.*]], [[X2:%.*]]
@@ -1066,8 +1087,8 @@ define i1 @PR24766_two_constants(i8 %x1, i8 %x2, i8 %condition) {
1066
1087
; CHECK-NEXT: entry:
1067
1088
; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
1068
1089
; 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:%.*]]
1071
1092
; CHECK-NEXT: ]
1072
1093
; CHECK: sw1:
1073
1094
; 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) {
1109
1130
; CHECK-NEXT: entry:
1110
1131
; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[CONDITION:%.*]] to i32
1111
1132
; 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:%.*]]
1115
1136
; CHECK-NEXT: ]
1116
1137
; CHECK: sw1:
1117
1138
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[X1:%.*]], [[X2:%.*]]
0 commit comments