[llvm] [LV] Use SCEV loop-uniformity for outer-loop branch legality (PR #199632)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 30 04:09:30 PDT 2026
================
@@ -122,6 +122,67 @@ for.end19:
ret void
}
+; Case 3: Three-level loop nest with a triangular innermost loop.
+;
+; #pragma clang loop vectorize(enable) vectorize_width(8)
+; for (size_t i = 0; i < M; ++i)
+; for (size_t j = 0; j < N; ++j)
+; for (size_t k = 0; k < j; ++k)
+; a[i * N * N + j * N + k] = b[i * N * N + j * N + k];
+;
+; The innermost loop latch condition depends on the middle loop IV, but is
+; uniform with respect to the vectorized outer loop.
+
+; CHECK-LABEL: uniform_triangular_inner_loop
+; CHECK: LV: We can vectorize this outer loop!
+
+define void @uniform_triangular_inner_loop(ptr nocapture %a, ptr nocapture readonly %b, i64 %M, i64 %N) {
+entry:
+ %cmp.m = icmp eq i64 %M, 0
+ br i1 %cmp.m, label %exit, label %outer.ph
+
+outer.ph:
+ %cmp.n = icmp eq i64 %N, 0
+ br label %outer.body
+
+outer.body:
----------------
fhahn wrote:
would be good to use LLVM loop terminology, i.e. outer.header/outer.latch
https://github.com/llvm/llvm-project/pull/199632
More information about the llvm-commits
mailing list