[llvm] e0d0886 - [SLP][NFC]Add a test with non-profitable vectorization, NFC
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 20 09:06:57 PDT 2026
Author: Alexey Bataev
Date: 2026-08-20T12:06:52-04:00
New Revision: e0d0886c1b9a75d20d97f92b6ec129131280e5ba
URL: https://github.com/llvm/llvm-project/commit/e0d0886c1b9a75d20d97f92b6ec129131280e5ba
DIFF: https://github.com/llvm/llvm-project/commit/e0d0886c1b9a75d20d97f92b6ec129131280e5ba.diff
LOG: [SLP][NFC]Add a test with non-profitable vectorization, NFC
Reviewers:
Pull Request: https://github.com/llvm/llvm-project/pull/217679
Added:
llvm/test/Transforms/SLPVectorizer/AArch64/reduction-extract-fusion-cost.ll
Modified:
Removed:
################################################################################
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