Skip to content

Commit 8bdcd0a

Browse files
committed
[LAA] Add missing test coverage for retrying with runtime checks.
Adds extra test coverage showing change by #128045.
1 parent a243279 commit 8bdcd0a

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

llvm/test/Analysis/LoopAccessAnalysis/retry-runtime-checks-after-dependence-analysis.ll

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,3 +316,58 @@ loop:
316316
exit:
317317
ret void
318318
}
319+
320+
define void @retry_after_dep_check_with_unknown_offset(ptr %A, i32 %offset) {
321+
; CHECK-LABEL: 'retry_after_dep_check_with_unknown_offset'
322+
; CHECK-NEXT: loop:
323+
; 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
324+
; CHECK-NEXT: Unknown data dependence.
325+
; CHECK-NEXT: Dependences:
326+
; CHECK-NEXT: Unknown:
327+
; CHECK-NEXT: %l.A = load float, ptr %A, align 4 ->
328+
; CHECK-NEXT: store float 0.000000e+00, ptr %A.100.iv.offset.3, align 4
329+
; CHECK-EMPTY:
330+
; CHECK-NEXT: Unknown:
331+
; CHECK-NEXT: %l.A = load float, ptr %A, align 4 ->
332+
; CHECK-NEXT: store float %l.A, ptr %A.100.iv, align 8
333+
; CHECK-EMPTY:
334+
; CHECK-NEXT: Run-time memory checks:
335+
; CHECK-NEXT: Grouped accesses:
336+
; CHECK-NEXT: Group [[GRP16:0x[0-9a-f]+]]:
337+
; CHECK-NEXT: (Low: %A High: (4 + %A))
338+
; CHECK-NEXT: Member: %A
339+
; CHECK-NEXT: Group [[GRP17:0x[0-9a-f]+]]:
340+
; CHECK-NEXT: (Low: (100 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A) High: (96 + (16 * (zext i32 %offset to i64))<nuw><nsw> + %A))
341+
; CHECK-NEXT: Member: {(100 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A),+,8}<%loop>
342+
; CHECK-NEXT: Group [[GRP18:0x[0-9a-f]+]]:
343+
; CHECK-NEXT: (Low: (100 + %A) High: (96 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A))
344+
; CHECK-NEXT: Member: {(100 + %A),+,8}<%loop>
345+
; CHECK-EMPTY:
346+
; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
347+
; CHECK-NEXT: SCEV assumptions:
348+
; CHECK-NEXT: {(100 + %A),+,8}<%loop> Added Flags: <nusw>
349+
; CHECK-NEXT: {(100 + (8 * (zext i32 %offset to i64))<nuw><nsw> + %A),+,8}<%loop> Added Flags: <nusw>
350+
; CHECK-EMPTY:
351+
; CHECK-NEXT: Expressions re-written:
352+
;
353+
entry:
354+
%A.100 = getelementptr i8, ptr %A, i64 100
355+
%offset.ext = zext i32 %offset to i64
356+
br label %loop
357+
358+
loop:
359+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
360+
%l.A = load float, ptr %A, align 4
361+
%A.100.iv = getelementptr { float, float }, ptr %A.100, i64 %iv
362+
store float %l.A, ptr %A.100.iv, align 8
363+
%iv.offset = add i64 %iv, %offset.ext
364+
%iv.offset.3 = shl i64 %iv.offset, 3
365+
%A.100.iv.offset.3 = getelementptr i8, ptr %A.100, i64 %iv.offset.3
366+
store float 0.0, ptr %A.100.iv.offset.3, align 4
367+
%iv.next = add i64 %iv, 1
368+
%ec = icmp eq i64 %iv.next, %offset.ext
369+
br i1 %ec, label %exit, label %loop
370+
371+
exit:
372+
ret void
373+
}

0 commit comments

Comments
 (0)