[llvm] [SLP][NFC]Add a test with non-profitable vectorization, NFC (PR #217679)

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 20 09:05:37 PDT 2026


https://github.com/alexey-bataev created https://github.com/llvm/llvm-project/pull/217679

None

>From a8e8cfab97b4623c6858f42084e6d22f49cb1ffe Mon Sep 17 00:00:00 2001
From: Alexey Bataev <a.bataev at outlook.com>
Date: Thu, 20 Aug 2026 09:05:23 -0700
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?=
 =?UTF-8?q?l=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.7
---
 .../AArch64/reduction-extract-fusion-cost.ll  | 66 +++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 llvm/test/Transforms/SLPVectorizer/AArch64/reduction-extract-fusion-cost.ll

diff --git a/llvm/test/Transforms/SLPVectorizer/AArch64/reduction-extract-fusion-cost.ll b/llvm/test/Transforms/SLPVectorizer/AArch64/reduction-extract-fusion-cost.ll
new file mode 100644
index 0000000000000..24f6344989280
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/AArch64/reduction-extract-fusion-cost.ll
@@ -0,0 +1,66 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -S -passes=slp-vectorizer -mcpu=neoverse-v2 -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
+
+define double @test(double %a, <2 x double> %v0, <2 x double> %v1) {
+; CHECK-LABEL: define double @test(
+; CHECK-SAME: double [[A:%.*]], <2 x double> [[V0:%.*]], <2 x double> [[V1:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:    [[E1:%.*]] = extractelement <2 x double> [[V1]], i64 1
+; CHECK-NEXT:    [[M0:%.*]] = fmul double [[A]], [[E1]]
+; CHECK-NEXT:    [[E0:%.*]] = extractelement <2 x double> [[V1]], i64 0
+; CHECK-NEXT:    [[M1:%.*]] = fmul double [[E0]], 0.000000e+00
+; CHECK-NEXT:    [[R:%.*]] = fadd reassoc double [[M0]], [[M1]]
+; CHECK-NEXT:    [[X0:%.*]] = extractelement <2 x double> [[V0]], i64 1
+; CHECK-NEXT:    [[X1:%.*]] = fmul double [[X0]], [[E1]]
+; CHECK-NEXT:    [[SUM:%.*]] = fadd double [[R]], [[X1]]
+; CHECK-NEXT:    [[RES:%.*]] = fsub double [[E0]], [[SUM]]
+; CHECK-NEXT:    ret double [[RES]]
+;
+  %e1 = extractelement <2 x double> %v1, i64 1
+  %m0 = fmul double %a, %e1
+  %e0 = extractelement <2 x double> %v1, i64 0
+  %m1 = fmul double %e0, 0.000000e+00
+  %r = fadd reassoc double %m0, %m1
+  %x0 = extractelement <2 x double> %v0, i64 1
+  %x1 = fmul double %x0, %e1
+  %sum = fadd double %r, %x1
+  %res = fsub double %e0, %sum
+  ret double %res
+}
+
+define double @test1(double %x) {
+; CHECK-LABEL: define double @test1(
+; CHECK-SAME: double [[X:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[M0:%.*]] = fmul double 0.000000e+00, 0.000000e+00
+; CHECK-NEXT:    [[M0_USE:%.*]] = fmul double [[M0]], 0.000000e+00
+; CHECK-NEXT:    call void @use(double [[M0_USE]])
+; CHECK-NEXT:    [[M1:%.*]] = fmul double [[X]], 0.000000e+00
+; CHECK-NEXT:    [[M1_USE:%.*]] = fmul double [[M1]], 0.000000e+00
+; CHECK-NEXT:    call void @use(double [[M1_USE]])
+; CHECK-NEXT:    [[R0:%.*]] = fmul contract double [[M0]], 0.000000e+00
+; CHECK-NEXT:    [[R1:%.*]] = fmul double [[M1]], 0.000000e+00
+; CHECK-NEXT:    [[A0:%.*]] = fadd reassoc contract double [[R0]], [[R1]]
+; CHECK-NEXT:    [[M2:%.*]] = fmul double 0.000000e+00, 0.000000e+00
+; CHECK-NEXT:    [[R2:%.*]] = fmul double [[M2]], 0.000000e+00
+; CHECK-NEXT:    [[A1:%.*]] = fadd reassoc double [[A0]], [[R2]]
+; CHECK-NEXT:    [[A2:%.*]] = fadd reassoc double [[A1]], 0.000000e+00
+; CHECK-NEXT:    ret double [[A2]]
+;
+entry:
+  %m0 = fmul double 0.000000e+00, 0.000000e+00
+  %m0.use = fmul double %m0, 0.000000e+00
+  call void @use(double %m0.use)
+  %m1 = fmul double %x, 0.000000e+00
+  %m1.use = fmul double %m1, 0.000000e+00
+  call void @use(double %m1.use)
+  %r0 = fmul contract double %m0, 0.000000e+00
+  %r1 = fmul double %m1, 0.000000e+00
+  %a0 = fadd reassoc contract double %r0, %r1
+  %m2 = fmul double 0.000000e+00, 0.000000e+00
+  %r2 = fmul double %m2, 0.000000e+00
+  %a1 = fadd reassoc double %a0, %r2
+  %a2 = fadd reassoc double %a1, 0.000000e+00
+  ret double %a2
+}
+
+declare void @use(double)



More information about the llvm-commits mailing list