Skip to content

Commit afde142

Browse files
fhahntru
authored andcommitted
[LV] Add test for incorrect runtime check generation #57315.
Test for PR57315 based on a test provided by @kpdev42. (cherry picked from commit 6e56779)
1 parent 4bb006d commit afde142

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

llvm/test/Transforms/LoopVectorize/runtime-checks-difference.ll

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,44 @@ loop:
171171
exit:
172172
ret void
173173
}
174+
175+
; FIXME: Full no-overlap checks are required instead of difference checks, as
176+
; one of the add-recs used is invariant in the inner loop.
177+
; Test case for PR57315.
178+
define void @nested_loop_outer_iv_addrec_invariant_in_inner(ptr %a, ptr %b, i64 %n) {
179+
; CHECK-LABEL: @nested_loop_outer_iv_addrec_invariant_in_inner(
180+
; CHECK: entry:
181+
; CHECK-NEXT: [[B2:%.*]] = ptrtoint ptr [[B:%.*]] to i64
182+
; CHECK-NEXT: [[A1:%.*]] = ptrtoint ptr [[A:%.*]] to i64
183+
; CHECK: vector.memcheck:
184+
; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[A1]], [[B2]]
185+
; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP1]], 16
186+
; CHECK-NEXT: br i1 [[DIFF_CHECK]], label %scalar.ph, label %vector.ph
187+
;
188+
entry:
189+
br label %outer.header
190+
191+
outer.header:
192+
%outer.iv = phi i64 [ %outer.iv.next, %outer.latch ], [ 0, %entry ]
193+
%gep.a = getelementptr inbounds i32, ptr %a, i64 %outer.iv
194+
br label %inner.body
195+
196+
inner.body:
197+
%red = phi i32 [ 0, %outer.header ], [ %red.next, %inner.body ]
198+
%inner.iv = phi i64 [ 0, %outer.header ], [ %inner.iv.next, %inner.body ]
199+
%gep.b = getelementptr inbounds i32, ptr %b, i64 %inner.iv
200+
%l = load i32, ptr %gep.b, align 4
201+
%red.next = sub i32 %red, %l
202+
store i32 %red.next, ptr %gep.a, align 4
203+
%inner.iv.next = add nuw nsw i64 %inner.iv, 1
204+
%inner.cond = icmp eq i64 %inner.iv.next, %n
205+
br i1 %inner.cond, label %outer.latch, label %inner.body
206+
207+
outer.latch:
208+
%outer.iv.next = add nuw nsw i64 %outer.iv, 1
209+
%outer.cond = icmp eq i64 %outer.iv.next, %n
210+
br i1 %outer.cond, label %exit, label %outer.header
211+
212+
exit:
213+
ret void
214+
}

0 commit comments

Comments
 (0)