[llvm] 7ee4111 - [LV] Add test for over-eager load scalarization (NFC). (#206283)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 27 13:31:55 PDT 2026
Author: Florian Hahn
Date: 2026-06-27T20:31:50Z
New Revision: 7ee4111c94807b483a83e96b6cd24fddf31280ec
URL: https://github.com/llvm/llvm-project/commit/7ee4111c94807b483a83e96b6cd24fddf31280ec
DIFF: https://github.com/llvm/llvm-project/commit/7ee4111c94807b483a83e96b6cd24fddf31280ec.diff
LOG: [LV] Add test for over-eager load scalarization (NFC). (#206283)
Add test showing over-eager load scalarization after f2459f9e
(https://github.com/llvm/llvm-project/pull/196842), when a load is only
used as mask of another load.
Added:
Modified:
llvm/test/Transforms/LoopVectorize/VPlan/X86/scalarize-wide-load-for-address-use.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/LoopVectorize/VPlan/X86/scalarize-wide-load-for-address-use.ll b/llvm/test/Transforms/LoopVectorize/VPlan/X86/scalarize-wide-load-for-address-use.ll
index 4039e8f235884..b5636476e350e 100644
--- a/llvm/test/Transforms/LoopVectorize/VPlan/X86/scalarize-wide-load-for-address-use.ll
+++ b/llvm/test/Transforms/LoopVectorize/VPlan/X86/scalarize-wide-load-for-address-use.ll
@@ -177,6 +177,77 @@ exit:
ret void
}
+; The load's value feeds the loop mask (via fcmp), and the mask reaches an
+; address computation only through the mask operand
+define void @load_feeds_mask_reaching_address(ptr noalias %src, ptr noalias %dst) {
+; CHECK-LABEL: VPlan for loop in 'load_feeds_mask_reaching_address'
+; CHECK: VPlan ' for UF>=1' {
+; CHECK-NEXT: Live-in vp<[[VP0:%[0-9]+]]> = VF
+; CHECK-NEXT: Live-in vp<[[VP1:%[0-9]+]]> = VF * UF
+; CHECK-NEXT: Live-in vp<[[VP2:%[0-9]+]]> = vector-trip-count
+; CHECK-NEXT: Live-in ir<1024> = original trip-count
+; CHECK-EMPTY:
+; CHECK-NEXT: ir-bb<entry>:
+; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
+; CHECK-EMPTY:
+; CHECK-NEXT: vector.ph:
+; CHECK-NEXT: Successor(s): vector loop
+; CHECK-EMPTY:
+; CHECK-NEXT: <x1> vector loop: {
+; CHECK-NEXT: vp<[[VP3:%[0-9]+]]> = CANONICAL-IV
+; CHECK-EMPTY:
+; CHECK-NEXT: vector.body:
+; CHECK-NEXT: ir<%iv> = WIDEN-INDUCTION ir<0>, ir<1>, vp<[[VP0]]>
+; CHECK-NEXT: EMIT ir<%gep> = getelementptr ir<%src>, ir<%iv>
+; CHECK-NEXT: REPLICATE ir<%val> = load ir<%gep>
+; CHECK-NEXT: EMIT ir<%cmp> = fcmp ole ir<0.000000e+00>, ir<%val>
+; CHECK-NEXT: Successor(s): then
+; CHECK-EMPTY:
+; CHECK-NEXT: then:
+; CHECK-NEXT: EMIT ir<%idx> = add ir<%iv>, ir<1>, ir<%cmp>
+; CHECK-NEXT: EMIT ir<%gep2> = getelementptr ir<@tbl.a>, ir<%idx>
+; CHECK-NEXT: vp<[[VP4:%[0-9]+]]> = vector-pointer ir<%gep2>, ir<1>
+; CHECK-NEXT: WIDEN ir<%val2> = load vp<[[VP4]]>, ir<%cmp>
+; CHECK-NEXT: REPLICATE store ir<%val2>, ir<%dst>, ir<%cmp>
+; CHECK-NEXT: Successor(s): latch
+; CHECK-EMPTY:
+; CHECK-NEXT: latch:
+; CHECK-NEXT: EMIT ir<%iv.next> = add ir<%iv>, ir<1>
+; CHECK-NEXT: EMIT ir<%ec> = icmp eq ir<%iv.next>, ir<1024>
+; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<[[VP3]]>, vp<[[VP1]]>
+; CHECK-NEXT: EMIT branch-on-count vp<%index.next>, vp<[[VP2]]>
+; CHECK-NEXT: No successors
+; CHECK-NEXT: }
+; CHECK-NEXT: Successor(s): middle.block
+; CHECK-EMPTY:
+; CHECK-NEXT: middle.block:
+;
+entry:
+ br label %loop
+
+loop:
+ %iv = phi i64 [ 0, %entry ], [ %iv.next, %latch ]
+ %gep = getelementptr double, ptr %src, i64 %iv
+ %val = load double, ptr %gep, align 8
+ %cmp = fcmp ole double 0.000000e+00, %val
+ br i1 %cmp, label %then, label %latch
+
+then:
+ %idx = add i64 %iv, 1
+ %gep2 = getelementptr double, ptr @tbl.a, i64 %idx
+ %val2 = load double, ptr %gep2, align 8
+ store double %val2, ptr %dst, align 8
+ br label %latch
+
+latch:
+ %iv.next = add i64 %iv, 1
+ %ec = icmp eq i64 %iv.next, 1024
+ br i1 %ec, label %exit, label %loop
+
+exit:
+ ret void
+}
+
; Load with symbolic stride that PSE versions to 1 at runtime.
define void @symbolic_stride_versioned_to_one(ptr noalias %src, ptr noalias %dst, i64 %n, i64 %stride) {
; CHECK-LABEL: VPlan for loop in 'symbolic_stride_versioned_to_one'
More information about the llvm-commits
mailing list