; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s ; ; FADDP ; define @faddp_f16( %pg, %a, %b) { ; CHECK-LABEL: faddp_f16: ; CHECK: faddp z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.faddp.nxv8f16( %pg, %a, %b) ret %out } define @faddp_f32( %pg, %a, %b) { ; CHECK-LABEL: faddp_f32: ; CHECK: faddp z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.faddp.nxv4f32( %pg, %a, %b) ret %out } define @faddp_f64( %pg, %a, %b) { ; CHECK-LABEL: faddp_f64: ; CHECK: faddp z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.faddp.nxv2f64( %pg, %a, %b) ret %out } ; ; FMAXP ; define @fmaxp_f16( %pg, %a, %b) { ; CHECK-LABEL: fmaxp_f16: ; CHECK: fmaxp z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fmaxp.nxv8f16( %pg, %a, %b) ret %out } define @fmaxp_f32( %pg, %a, %b) { ; CHECK-LABEL: fmaxp_f32: ; CHECK: fmaxp z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fmaxp.nxv4f32( %pg, %a, %b) ret %out } define @fmaxp_f64( %pg, %a, %b) { ; CHECK-LABEL: fmaxp_f64: ; CHECK: fmaxp z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fmaxp.nxv2f64( %pg, %a, %b) ret %out } ; ; FMAXNMP ; define @fmaxnmp_f16( %pg, %a, %b) { ; CHECK-LABEL: fmaxnmp_f16: ; CHECK: fmaxnmp z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fmaxnmp.nxv8f16( %pg, %a, %b) ret %out } define @fmaxnmp_f32( %pg, %a, %b) { ; CHECK-LABEL: fmaxnmp_f32: ; CHECK: fmaxnmp z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fmaxnmp.nxv4f32( %pg, %a, %b) ret %out } define @fmaxnmp_f64( %pg, %a, %b) { ; CHECK-LABEL: fmaxnmp_f64: ; CHECK: fmaxnmp z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fmaxnmp.nxv2f64( %pg, %a, %b) ret %out } ; ; FMINP ; define @fminp_f16( %pg, %a, %b) { ; CHECK-LABEL: fminp_f16: ; CHECK: fminp z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fminp.nxv8f16( %pg, %a, %b) ret %out } define @fminp_f32( %pg, %a, %b) { ; CHECK-LABEL: fminp_f32: ; CHECK: fminp z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fminp.nxv4f32( %pg, %a, %b) ret %out } define @fminp_f64( %pg, %a, %b) { ; CHECK-LABEL: fminp_f64: ; CHECK: fminp z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fminp.nxv2f64( %pg, %a, %b) ret %out } ; ; FMINNMP ; define @fminnmp_f16( %pg, %a, %b) { ; CHECK-LABEL: fminnmp_f16: ; CHECK: fminnmp z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fminnmp.nxv8f16( %pg, %a, %b) ret %out } define @fminnmp_f32( %pg, %a, %b) { ; CHECK-LABEL: fminnmp_f32: ; CHECK: fminnmp z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fminnmp.nxv4f32( %pg, %a, %b) ret %out } define @fminnmp_f64( %pg, %a, %b) { ; CHECK-LABEL: fminnmp_f64: ; CHECK: fminnmp z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.fminnmp.nxv2f64( %pg, %a, %b) ret %out } declare @llvm.aarch64.sve.faddp.nxv8f16(, , ) declare @llvm.aarch64.sve.faddp.nxv4f32(, , ) declare @llvm.aarch64.sve.faddp.nxv2f64(, , ) declare @llvm.aarch64.sve.fmaxp.nxv8f16(, , ) declare @llvm.aarch64.sve.fmaxp.nxv4f32(, , ) declare @llvm.aarch64.sve.fmaxp.nxv2f64(, , ) declare @llvm.aarch64.sve.fmaxnmp.nxv8f16(, , ) declare @llvm.aarch64.sve.fmaxnmp.nxv4f32(, , ) declare @llvm.aarch64.sve.fmaxnmp.nxv2f64(, , ) declare @llvm.aarch64.sve.fminp.nxv8f16(, , ) declare @llvm.aarch64.sve.fminp.nxv4f32(, , ) declare @llvm.aarch64.sve.fminp.nxv2f64(, , ) declare @llvm.aarch64.sve.fminnmp.nxv8f16(, , ) declare @llvm.aarch64.sve.fminnmp.nxv4f32(, , ) declare @llvm.aarch64.sve.fminnmp.nxv2f64(, , )