[llvm] [SystemZ] SLP reductions: cost functions of reductions and scalarization (PR #112491)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 22 04:31:30 PDT 2024
================
@@ -0,0 +1,88 @@
+; RUN: opt -S --passes=slp-vectorizer -mtriple=s390x-unknown-linux -mcpu=z16 < %s | FileCheck %s
+;
+; Test functions that (at least currently) only gets vectorized if the
+; insertion cost for an element load is counted as free.
+
+; This function needs the free element load to be recognized in SLP
+; getGatherCost().
+define void @fun0(ptr nocapture %0, double %1) {
+; CHECK-LABEL: define void @fun0(
+; CHECK: fmul <2 x double>
+; CHECK: call <2 x double> @llvm.fmuladd.v2f64(
+
+ %3 = fmul double %1, 2.000000e+00
+ %4 = tail call double @llvm.fmuladd.f64(double %3, double %3, double 0.000000e+00)
+ %5 = tail call double @llvm.fmuladd.f64(double %3, double %3, double %4)
+ %sqrt1 = tail call double @llvm.sqrt.f64(double %5)
+ %6 = load double, ptr %0, align 8
+ %7 = fmul double %6, 2.000000e+00
+ %8 = tail call double @llvm.fmuladd.f64(double %7, double %7, double 0.000000e+00)
+ %9 = tail call double @llvm.fmuladd.f64(double %7, double %7, double %8)
+ %sqrt = tail call double @llvm.sqrt.f64(double %9)
+ %10 = fadd double %sqrt1, %sqrt
+ store double %10, ptr %0, align 8
+ ret void
+}
+
+
+; This function needs the element-load to be recognized in SystemZ
+; getVectorInstrCost().
+define void @fun1(double %0) local_unnamed_addr {
----------------
alexey-bataev wrote:
Drop `local_unnamed_addr` attribute here
https://github.com/llvm/llvm-project/pull/112491
More information about the llvm-commits
mailing list