@@ -364,6 +364,45 @@ exit:
364
364
ret i1 %t
365
365
}
366
366
367
+ define i1 @multi_exiting_loop_eq_same_unique_exit_var_compare_not_known_due_to_start (ptr %s , i32 %N ) {
368
+ ; CHECK-LABEL: define i1 @multi_exiting_loop_eq_same_unique_exit_var_compare_not_known_due_to_start(
369
+ ; CHECK-SAME: ptr [[S:%.*]], i32 [[N:%.*]]) {
370
+ ; CHECK-NEXT: [[ENTRY:.*]]:
371
+ ; CHECK-NEXT: br label %[[LOOP_HEADER:.*]]
372
+ ; CHECK: [[LOOP_HEADER]]:
373
+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 1, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
374
+ ; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[IV]], [[N]]
375
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[EXIT:.*]], label %[[LOOP_LATCH]]
376
+ ; CHECK: [[LOOP_LATCH]]:
377
+ ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[S]], i32 [[IV]]
378
+ ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
379
+ ; CHECK-NEXT: [[LATCH_C:%.*]] = icmp ult i8 [[TMP0]], 10
380
+ ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
381
+ ; CHECK-NEXT: br i1 [[LATCH_C]], label %[[LOOP_HEADER]], label %[[EXIT]]
382
+ ; CHECK: [[EXIT]]:
383
+ ; CHECK-NEXT: [[C:%.*]] = icmp ule i32 [[IV]], [[N]]
384
+ ; CHECK-NEXT: ret i1 [[C]]
385
+ ;
386
+ entry:
387
+ br label %loop.header
388
+
389
+ loop.header:
390
+ %iv = phi i32 [ 1 , %entry ], [ %iv.next , %loop.latch ]
391
+ %exitcond.not = icmp eq i32 %iv , %N
392
+ br i1 %exitcond.not , label %exit , label %loop.latch
393
+
394
+ loop.latch:
395
+ %arrayidx = getelementptr inbounds i8 , ptr %s , i32 %iv
396
+ %0 = load i8 , ptr %arrayidx , align 1
397
+ %latch.c = icmp ult i8 %0 , 10
398
+ %iv.next = add nuw nsw i32 %iv , 1
399
+ br i1 %latch.c , label %loop.header , label %exit
400
+
401
+ exit:
402
+ %c = icmp ule i32 %iv , %N
403
+ ret i1 %c
404
+ }
405
+
367
406
define i1 @multi_exiting_loop_ne_same_unique_exit_const_compare_known (ptr %s ) {
368
407
; CHECK-LABEL: define i1 @multi_exiting_loop_ne_same_unique_exit_const_compare_known(
369
408
; CHECK-SAME: ptr [[S:%.*]]) {
@@ -441,3 +480,5 @@ exit:
441
480
%u = icmp ult i32 %iv , 1235
442
481
ret i1 %u
443
482
}
483
+
484
+
0 commit comments