[llvm] 461cc86 - [LAA] Add test where stride is also used for BTC.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu May 30 21:08:01 PDT 2024
Author: Florian Hahn
Date: 2024-05-30T21:05:31-07:00
New Revision: 461cc8612f563fadba2d9db157a0e17e2b463e4e
URL: https://github.com/llvm/llvm-project/commit/461cc8612f563fadba2d9db157a0e17e2b463e4e
DIFF: https://github.com/llvm/llvm-project/commit/461cc8612f563fadba2d9db157a0e17e2b463e4e.diff
LOG: [LAA] Add test where stride is also used for BTC.
Add missing test coverage for follow-up to
https://github.com/llvm/llvm-project/pull/93499.
Added:
Modified:
llvm/test/Analysis/LoopAccessAnalysis/symbolic-stride.ll
Removed:
################################################################################
diff --git a/llvm/test/Analysis/LoopAccessAnalysis/symbolic-stride.ll b/llvm/test/Analysis/LoopAccessAnalysis/symbolic-stride.ll
index 3da0f543c5c1c..e9aeac7ac2bc5 100644
--- a/llvm/test/Analysis/LoopAccessAnalysis/symbolic-stride.ll
+++ b/llvm/test/Analysis/LoopAccessAnalysis/symbolic-stride.ll
@@ -264,3 +264,42 @@ loop:
exit:
ret void
}
+
+define void @single_stride_used_for_trip_count(ptr noalias %A, ptr noalias %B, i64 %N, i64 %stride) {
+; CHECK-LABEL: 'single_stride_used_for_trip_count'
+; CHECK-NEXT: loop:
+; 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
+; CHECK-NEXT: Unknown data dependence.
+; CHECK-NEXT: Dependences:
+; CHECK-NEXT: Unknown:
+; CHECK-NEXT: %load = load i32, ptr %gep.A, align 4 ->
+; CHECK-NEXT: store i32 %add, ptr %gep.A.next, align 4
+; CHECK-EMPTY:
+; CHECK-NEXT: Run-time memory checks:
+; CHECK-NEXT: Grouped accesses:
+; CHECK-EMPTY:
+; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
+; CHECK-NEXT: SCEV assumptions:
+; CHECK-EMPTY:
+; CHECK-NEXT: Expressions re-written:
+;
+entry:
+ br label %loop
+
+loop:
+ %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
+ %mul = mul i64 %iv, %stride
+ %gep.A = getelementptr inbounds i32, ptr %A, i64 %mul
+ %load = load i32, ptr %gep.A, align 4
+ %gep.B = getelementptr inbounds i32, ptr %B, i64 %iv
+ %load_1 = load i32, ptr %gep.B, align 4
+ %add = add i32 %load_1, %load
+ %iv.next = add nuw nsw i64 %iv, 1
+ %gep.A.next = getelementptr inbounds i32, ptr %A, i64 %iv.next
+ store i32 %add, ptr %gep.A.next, align 4
+ %exitcond = icmp eq i64 %iv.next, %stride
+ br i1 %exitcond, label %exit, label %loop
+
+exit: ; preds = %loop
+ ret void
+}
More information about the llvm-commits
mailing list