@@ -169,6 +169,34 @@ loopexit:
169
169
ret i32 %selector
170
170
}
171
171
172
+ define i32 @unroll_phi_select_constant_nonzero_large_btc (i32 %arg1 , i32 %arg2 ) {
173
+ ; CHECK-LABEL: @unroll_phi_select_constant_nonzero_large_btc(
174
+ ; CHECK-NEXT: entry:
175
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
176
+ ; CHECK: loop:
177
+ ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
178
+ ; CHECK-NEXT: [[SELECTOR:%.*]] = phi i32 [ [[ARG1:%.*]], [[ENTRY]] ], [ [[ARG2:%.*]], [[LOOP]] ]
179
+ ; CHECK-NEXT: [[I_NEXT]] = add nuw i32 [[I]], 1
180
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[I]], -42
181
+ ; CHECK-NEXT: br i1 [[C]], label [[LOOP]], label [[LOOPEXIT:%.*]]
182
+ ; CHECK: loopexit:
183
+ ; CHECK-NEXT: [[SELECTOR_LCSSA:%.*]] = phi i32 [ [[SELECTOR]], [[LOOP]] ]
184
+ ; CHECK-NEXT: ret i32 [[SELECTOR_LCSSA]]
185
+ ;
186
+ entry:
187
+ br label %loop
188
+
189
+ loop:
190
+ %i = phi i32 [ 0 , %entry ], [ %i.next , %loop ]
191
+ %selector = phi i32 [%arg1 , %entry ], [%arg2 , %loop ]
192
+ %i.next = add nuw i32 %i , 1
193
+ %c = icmp ult i32 %i , -42
194
+ br i1 %c , label %loop , label %loopexit
195
+
196
+ loopexit:
197
+ ret i32 %selector
198
+ }
199
+
172
200
declare i32 @f ()
173
201
174
202
; After LCSSA formation, there's no LCSSA phi for %f since it isn't directly
0 commit comments