Skip to content

Commit 461cc86

Browse files
committed
[LAA] Add test where stride is also used for BTC.
Add missing test coverage for follow-up to #93499.
1 parent db6de1a commit 461cc86

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

llvm/test/Analysis/LoopAccessAnalysis/symbolic-stride.ll

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,3 +264,42 @@ loop:
264264
exit:
265265
ret void
266266
}
267+
268+
define void @single_stride_used_for_trip_count(ptr noalias %A, ptr noalias %B, i64 %N, i64 %stride) {
269+
; CHECK-LABEL: 'single_stride_used_for_trip_count'
270+
; CHECK-NEXT: loop:
271+
; CHECK-NEXT: Report: unsafe dependent memory operations in loop. Use #pragma clang loop distribute(enable) to allow loop distribution to attempt to isolate the offending operations into a separate loop
272+
; CHECK-NEXT: Unknown data dependence.
273+
; CHECK-NEXT: Dependences:
274+
; CHECK-NEXT: Unknown:
275+
; CHECK-NEXT: %load = load i32, ptr %gep.A, align 4 ->
276+
; CHECK-NEXT: store i32 %add, ptr %gep.A.next, align 4
277+
; CHECK-EMPTY:
278+
; CHECK-NEXT: Run-time memory checks:
279+
; CHECK-NEXT: Grouped accesses:
280+
; CHECK-EMPTY:
281+
; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
282+
; CHECK-NEXT: SCEV assumptions:
283+
; CHECK-EMPTY:
284+
; CHECK-NEXT: Expressions re-written:
285+
;
286+
entry:
287+
br label %loop
288+
289+
loop:
290+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
291+
%mul = mul i64 %iv, %stride
292+
%gep.A = getelementptr inbounds i32, ptr %A, i64 %mul
293+
%load = load i32, ptr %gep.A, align 4
294+
%gep.B = getelementptr inbounds i32, ptr %B, i64 %iv
295+
%load_1 = load i32, ptr %gep.B, align 4
296+
%add = add i32 %load_1, %load
297+
%iv.next = add nuw nsw i64 %iv, 1
298+
%gep.A.next = getelementptr inbounds i32, ptr %A, i64 %iv.next
299+
store i32 %add, ptr %gep.A.next, align 4
300+
%exitcond = icmp eq i64 %iv.next, %stride
301+
br i1 %exitcond, label %exit, label %loop
302+
303+
exit: ; preds = %loop
304+
ret void
305+
}

0 commit comments

Comments
 (0)