Skip to content

Commit 3d11b3d

Browse files
committed
[ConstraintElim] Add test for mis-compile due to #94610.
Additional test coverage for a miscompile in earlier versions of #94610.
1 parent 6ba764a commit 3d11b3d

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

llvm/test/Transforms/ConstraintElimination/induction-condition-in-loop-exit.ll

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,45 @@ exit:
364364
ret i1 %t
365365
}
366366

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+
367406
define i1 @multi_exiting_loop_ne_same_unique_exit_const_compare_known(ptr %s) {
368407
; CHECK-LABEL: define i1 @multi_exiting_loop_ne_same_unique_exit_const_compare_known(
369408
; CHECK-SAME: ptr [[S:%.*]]) {
@@ -441,3 +480,5 @@ exit:
441480
%u = icmp ult i32 %iv, 1235
442481
ret i1 %u
443482
}
483+
484+

0 commit comments

Comments
 (0)