[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