; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc -mattr=+sve2 < %s | FileCheck %s --check-prefixes=CHECK,SVE2 ; RUN: llc -global-isel -global-isel-abort=2 -mattr=+sve2 < %s | FileCheck %s --check-prefixes=CHECK,SVE2 ; RUN: llc -mattr=+sve2p1 < %s | FileCheck %s --check-prefixes=CHECK,SVE2P1 ; RUN: llc -global-isel -global-isel-abort=2 -mattr=+sve2p1 < %s | FileCheck %s --check-prefixes=CHECK,SVE2P1 target triple = "aarch64-linux-gnu" define @fdot_wide_nxv4f32( %acc, %a, %b) { ; SVE2-LABEL: fdot_wide_nxv4f32: ; SVE2: // %bb.0: // %entry ; SVE2-NEXT: fmlalb z0.s, z1.h, z2.h ; SVE2-NEXT: fmlalt z0.s, z1.h, z2.h ; SVE2-NEXT: ret ; ; SVE2P1-LABEL: fdot_wide_nxv4f32: ; SVE2P1: // %bb.0: // %entry ; SVE2P1-NEXT: fdot z0.s, z1.h, z2.h ; SVE2P1-NEXT: ret entry: %a.wide = fpext %a to %b.wide = fpext %b to %mult = fmul %a.wide, %b.wide %partial.reduce = call @llvm.vector.partial.reduce.fadd( %acc, %mult) ret %partial.reduce } define @fdot_splat_nxv4f32( %acc, %a) { ; SVE2-LABEL: fdot_splat_nxv4f32: ; SVE2: // %bb.0: // %entry ; SVE2-NEXT: fmov z2.h, #1.00000000 ; SVE2-NEXT: fmlalb z0.s, z1.h, z2.h ; SVE2-NEXT: fmlalt z0.s, z1.h, z2.h ; SVE2-NEXT: ret ; ; SVE2P1-LABEL: fdot_splat_nxv4f32: ; SVE2P1: // %bb.0: // %entry ; SVE2P1-NEXT: fmov z2.h, #1.00000000 ; SVE2P1-NEXT: fdot z0.s, z1.h, z2.h ; SVE2P1-NEXT: ret entry: %a.wide = fpext %a to %partial.reduce = call @llvm.vector.partial.reduce.fadd( %acc, %a.wide) ret %partial.reduce } define @partial_reduce_nxv8f16( %acc, %a) { ; CHECK-LABEL: partial_reduce_nxv8f16: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: fadd z0.h, z0.h, z1.h ; CHECK-NEXT: fadd z0.h, z0.h, z2.h ; CHECK-NEXT: ret entry: %partial.reduce = call @llvm.vector.partial.reduce.fadd( %acc, %a) ret %partial.reduce } define @partial_reduce_nxv4f32( %acc, %a) { ; CHECK-LABEL: partial_reduce_nxv4f32: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: fadd z0.s, z0.s, z1.s ; CHECK-NEXT: fadd z0.s, z0.s, z2.s ; CHECK-NEXT: ret entry: %partial.reduce = call @llvm.vector.partial.reduce.fadd( %acc, %a) ret %partial.reduce } define @partial_reduce_nxv2f64( %acc, %a) { ; CHECK-LABEL: partial_reduce_nxv2f64: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: fadd z0.d, z0.d, z1.d ; CHECK-NEXT: fadd z0.d, z0.d, z2.d ; CHECK-NEXT: ret entry: %partial.reduce = call @llvm.vector.partial.reduce.fadd( %acc, %a) ret %partial.reduce }