[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