@@ -1094,4 +1094,56 @@ exit:
1094
1094
ret i32 %iv
1095
1095
}
1096
1096
1097
+ define i32 @func_28 (i32 %start ) {
1098
+ ; CHECK-LABEL: @func_28(
1099
+ ; CHECK-NEXT: entry:
1100
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
1101
+ ; CHECK: loop:
1102
+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[START:%.*]], [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ]
1103
+ ; CHECK-NEXT: [[C1:%.*]] = icmp ne i32 [[IV]], 0
1104
+ ; CHECK-NEXT: [[C2:%.*]] = icmp ne i32 [[IV]], 0
1105
+ ; CHECK-NEXT: [[C3:%.*]] = icmp ne i32 [[IV]], 0
1106
+ ; CHECK-NEXT: br i1 [[C1]], label [[CHECKED_1:%.*]], label [[FAIL:%.*]]
1107
+ ; CHECK: checked.1:
1108
+ ; CHECK-NEXT: br i1 [[C2]], label [[CHECKED_2:%.*]], label [[FAIL]]
1109
+ ; CHECK: checked.2:
1110
+ ; CHECK-NEXT: br i1 [[C3]], label [[BACKEDGE]], label [[FAIL]]
1111
+ ; CHECK: backedge:
1112
+ ; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 758394
1113
+ ; CHECK-NEXT: [[LOOP_COND:%.*]] = call i1 @cond_func()
1114
+ ; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[EXIT:%.*]]
1115
+ ; CHECK: fail:
1116
+ ; CHECK-NEXT: unreachable
1117
+ ; CHECK: exit:
1118
+ ; CHECK-NEXT: [[IV_LCSSA1:%.*]] = phi i32 [ [[IV]], [[BACKEDGE]] ]
1119
+ ; CHECK-NEXT: ret i32 [[IV_LCSSA1]]
1120
+ ;
1121
+ entry:
1122
+ br label %loop
1123
+
1124
+ loop:
1125
+ %iv = phi i32 [%start , %entry ], [%iv.next , %backedge ]
1126
+ %c1 = icmp ne i32 %iv , 0
1127
+ %c2 = icmp ne i32 %iv , 0
1128
+ %c3 = icmp ne i32 %iv , 0
1129
+ br i1 %c1 , label %checked.1 , label %fail
1130
+
1131
+ checked.1 :
1132
+ br i1 %c2 , label %checked.2 , label %fail
1133
+
1134
+ checked.2 :
1135
+ br i1 %c3 , label %backedge , label %fail
1136
+
1137
+ backedge:
1138
+ %iv.next = add i32 %iv , 758394
1139
+ %loop.cond = call i1 @cond_func ()
1140
+ br i1 %loop.cond , label %loop , label %exit
1141
+
1142
+ fail:
1143
+ unreachable
1144
+
1145
+ exit:
1146
+ ret i32 %iv
1147
+ }
1148
+
1097
1149
!0 = !{i32 0 , i32 2147483647 }
0 commit comments