; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s 2>%t | FileCheck %s ; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t ; If this check fails please read test/CodeGen/AArch64/README for instructions on how to resolve it. ; WARN-NOT: warning define @fadd_nxv8f16( %a, %b) { ; CHECK-LABEL: fadd_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fadd z0.h, z0.h, z1.h ; CHECK-NEXT: ret %res = fadd %a, %b ret %res } define @fadd_nxv4f16( %a, %b) { ; CHECK-LABEL: fadd_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fadd %a, %b ret %res } define @fadd_nxv2f16( %a, %b) { ; CHECK-LABEL: fadd_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fadd %a, %b ret %res } define @fadd_nxv4f32( %a, %b) { ; CHECK-LABEL: fadd_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fadd z0.s, z0.s, z1.s ; CHECK-NEXT: ret %res = fadd %a, %b ret %res } define @fadd_nxv2f32( %a, %b) { ; CHECK-LABEL: fadd_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fadd z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = fadd %a, %b ret %res } define @fadd_nxv2f64( %a, %b) { ; CHECK-LABEL: fadd_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fadd z0.d, z0.d, z1.d ; CHECK-NEXT: ret %res = fadd %a, %b ret %res } define @fdiv_nxv8f16( %a, %b) { ; CHECK-LABEL: fdiv_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fdiv z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fdiv %a, %b ret %res } define @fdiv_nxv4f16( %a, %b) { ; CHECK-LABEL: fdiv_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fdiv z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fdiv %a, %b ret %res } define @fdiv_nxv2f16( %a, %b) { ; CHECK-LABEL: fdiv_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fdiv z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fdiv %a, %b ret %res } define @fdiv_nxv4f32( %a, %b) { ; CHECK-LABEL: fdiv_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fdiv z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = fdiv %a, %b ret %res } define @fdiv_nxv2f32( %a, %b) { ; CHECK-LABEL: fdiv_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fdiv z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = fdiv %a, %b ret %res } define @fdiv_nxv2f64( %a, %b) { ; CHECK-LABEL: fdiv_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fdiv z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %res = fdiv %a, %b ret %res } define @fsub_nxv8f16( %a, %b) { ; CHECK-LABEL: fsub_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fsub z0.h, z0.h, z1.h ; CHECK-NEXT: ret %res = fsub %a, %b ret %res } define @fsub_nxv4f16( %a, %b) { ; CHECK-LABEL: fsub_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fsub z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fsub %a, %b ret %res } define @fsub_nxv2f16( %a, %b) { ; CHECK-LABEL: fsub_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fsub z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fsub %a, %b ret %res } define @fsub_nxv4f32( %a, %b) { ; CHECK-LABEL: fsub_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fsub z0.s, z0.s, z1.s ; CHECK-NEXT: ret %res = fsub %a, %b ret %res } define @fsub_nxv2f32( %a, %b) { ; CHECK-LABEL: fsub_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fsub z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = fsub %a, %b ret %res } define @fsub_nxv2f64( %a, %b) { ; CHECK-LABEL: fsub_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fsub z0.d, z0.d, z1.d ; CHECK-NEXT: ret %res = fsub %a, %b ret %res } define @fmul_nxv8f16( %a, %b) { ; CHECK-LABEL: fmul_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fmul z0.h, z0.h, z1.h ; CHECK-NEXT: ret %res = fmul %a, %b ret %res } define @fmul_nxv4f16( %a, %b) { ; CHECK-LABEL: fmul_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fmul %a, %b ret %res } define @fmul_nxv2f16( %a, %b) { ; CHECK-LABEL: fmul_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = fmul %a, %b ret %res } define @fmul_nxv4f32( %a, %b) { ; CHECK-LABEL: fmul_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fmul z0.s, z0.s, z1.s ; CHECK-NEXT: ret %res = fmul %a, %b ret %res } define @fmul_nxv2f32( %a, %b) { ; CHECK-LABEL: fmul_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmul z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = fmul %a, %b ret %res } define @fmul_nxv2f64( %a, %b) { ; CHECK-LABEL: fmul_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fmul z0.d, z0.d, z1.d ; CHECK-NEXT: ret %res = fmul %a, %b ret %res } define @fma_nxv8f16( %a, %b, %c) { ; CHECK-LABEL: fma_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fmla z2.h, p0/m, z0.h, z1.h ; CHECK-NEXT: mov z0.d, z2.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv8f16( %a, %b, %c) ret %r } define @fma_nxv4f16( %a, %b, %c) { ; CHECK-LABEL: fma_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fmla z2.h, p0/m, z0.h, z1.h ; CHECK-NEXT: mov z0.d, z2.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv4f16( %a, %b, %c) ret %r } define @fma_nxv2f16( %a, %b, %c) { ; CHECK-LABEL: fma_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmla z2.h, p0/m, z0.h, z1.h ; CHECK-NEXT: mov z0.d, z2.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv2f16( %a, %b, %c) ret %r } define @fma_nxv4f32( %a, %b, %c) { ; CHECK-LABEL: fma_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fmla z2.s, p0/m, z0.s, z1.s ; CHECK-NEXT: mov z0.d, z2.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv4f32( %a, %b, %c) ret %r } define @fma_nxv2f32( %a, %b, %c) { ; CHECK-LABEL: fma_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmla z2.s, p0/m, z0.s, z1.s ; CHECK-NEXT: mov z0.d, z2.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv2f32( %a, %b, %c) ret %r } define @fma_nxv2f64_1( %a, %b, %c) { ; CHECK-LABEL: fma_nxv2f64_1: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmla z2.d, p0/m, z0.d, z1.d ; CHECK-NEXT: mov z0.d, z2.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv2f64( %a, %b, %c) ret %r } define @fma_nxv2f64_2( %a, %b, %c) { ; CHECK-LABEL: fma_nxv2f64_2: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmla z2.d, p0/m, z1.d, z0.d ; CHECK-NEXT: mov z0.d, z2.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv2f64( %b, %a, %c) ret %r } define @fma_nxv2f64_3( %a, %b, %c) { ; CHECK-LABEL: fma_nxv2f64_3: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmla z0.d, p0/m, z2.d, z1.d ; CHECK-NEXT: ret %r = call @llvm.fma.nxv2f64( %c, %b, %a) ret %r } define @fneg_nxv8f16( %a) { ; CHECK-LABEL: fneg_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fneg z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = fneg %a ret %res } define @fneg_nxv4f16( %a) { ; CHECK-LABEL: fneg_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fneg z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = fneg %a ret %res } define @fneg_nxv2f16( %a) { ; CHECK-LABEL: fneg_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fneg z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = fneg %a ret %res } define @fneg_nxv4f32( %a) { ; CHECK-LABEL: fneg_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fneg z0.s, p0/m, z0.s ; CHECK-NEXT: ret %res = fneg %a ret %res } define @fneg_nxv2f32( %a) { ; CHECK-LABEL: fneg_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fneg z0.s, p0/m, z0.s ; CHECK-NEXT: ret %res = fneg %a ret %res } define @fneg_nxv2f64( %a) { ; CHECK-LABEL: fneg_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fneg z0.d, p0/m, z0.d ; CHECK-NEXT: ret %res = fneg %a ret %res } define @frecps_h( %a, %b) { ; CHECK-LABEL: frecps_h: ; CHECK: // %bb.0: ; CHECK-NEXT: frecps z0.h, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.frecps.x.nxv8f16( %a, %b) ret %res } define @frecps_s( %a, %b) { ; CHECK-LABEL: frecps_s: ; CHECK: // %bb.0: ; CHECK-NEXT: frecps z0.s, z0.s, z1.s ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.frecps.x.nxv4f32( %a, %b) ret %res } define @frecps_d( %a, %b) { ; CHECK-LABEL: frecps_d: ; CHECK: // %bb.0: ; CHECK-NEXT: frecps z0.d, z0.d, z1.d ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.frecps.x.nxv2f64( %a, %b) ret %res } define @frsqrts_h( %a, %b) { ; CHECK-LABEL: frsqrts_h: ; CHECK: // %bb.0: ; CHECK-NEXT: frsqrts z0.h, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.frsqrts.x.nxv8f16( %a, %b) ret %res } define @frsqrts_s( %a, %b) { ; CHECK-LABEL: frsqrts_s: ; CHECK: // %bb.0: ; CHECK-NEXT: frsqrts z0.s, z0.s, z1.s ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.frsqrts.x.nxv4f32( %a, %b) ret %res } define @frsqrts_d( %a, %b) { ; CHECK-LABEL: frsqrts_d: ; CHECK: // %bb.0: ; CHECK-NEXT: frsqrts z0.d, z0.d, z1.d ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.frsqrts.x.nxv2f64( %a, %b) ret %res } %complex = type { { double, double } } define void @scalar_to_vector(%complex* %outval, %pred, %in1, %in2) { ; CHECK-LABEL: scalar_to_vector: ; CHECK: // %bb.0: ; CHECK-NEXT: faddv d0, p0, z0.d ; CHECK-NEXT: faddv d1, p0, z1.d ; CHECK-NEXT: mov v0.d[1], v1.d[0] ; CHECK-NEXT: str q0, [x0] ; CHECK-NEXT: ret %realp = getelementptr inbounds %complex, %complex* %outval, i64 0, i32 0, i32 0 %imagp = getelementptr inbounds %complex, %complex* %outval, i64 0, i32 0, i32 1 %1 = call double @llvm.aarch64.sve.faddv.nxv2f64( %pred, %in1) %2 = call double @llvm.aarch64.sve.faddv.nxv2f64( %pred, %in2) store double %1, double* %realp, align 8 store double %2, double* %imagp, align 8 ret void } define void @float_copy(* %P1, * %P2) { ; CHECK-LABEL: float_copy: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] ; CHECK-NEXT: st1w { z0.s }, p0, [x1] ; CHECK-NEXT: ret %A = load , * %P1, align 16 store %A, * %P2, align 16 ret void } ; FSQRT define @fsqrt_nxv8f16( %a) { ; CHECK-LABEL: fsqrt_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = call @llvm.sqrt.nxv8f16( %a) ret %res } define @fsqrt_nxv4f16( %a) { ; CHECK-LABEL: fsqrt_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = call @llvm.sqrt.nxv4f16( %a) ret %res } define @fsqrt_nxv2f16( %a) { ; CHECK-LABEL: fsqrt_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = call @llvm.sqrt.nxv2f16( %a) ret %res } define @fsqrt_nxv4f32( %a) { ; CHECK-LABEL: fsqrt_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fsqrt z0.s, p0/m, z0.s ; CHECK-NEXT: ret %res = call @llvm.sqrt.nxv4f32( %a) ret %res } define @fsqrt_nxv2f32( %a) { ; CHECK-LABEL: fsqrt_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fsqrt z0.s, p0/m, z0.s ; CHECK-NEXT: ret %res = call @llvm.sqrt.nxv2f32( %a) ret %res } define @fsqrt_nxv2f64( %a) { ; CHECK-LABEL: fsqrt_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fsqrt z0.d, p0/m, z0.d ; CHECK-NEXT: ret %res = call @llvm.sqrt.nxv2f64( %a) ret %res } ; FABS define @fabs_nxv8f16( %a) { ; CHECK-LABEL: fabs_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fabs z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = call @llvm.fabs.nxv8f16( %a) ret %res } define @fabs_nxv4f16( %a) { ; CHECK-LABEL: fabs_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fabs z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = call @llvm.fabs.nxv4f16( %a) ret %res } define @fabs_nxv2f16( %a) { ; CHECK-LABEL: fabs_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fabs z0.h, p0/m, z0.h ; CHECK-NEXT: ret %res = call @llvm.fabs.nxv2f16( %a) ret %res } define @fabs_nxv4f32( %a) { ; CHECK-LABEL: fabs_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fabs z0.s, p0/m, z0.s ; CHECK-NEXT: ret %res = call @llvm.fabs.nxv4f32( %a) ret %res } define @fabs_nxv2f32( %a) { ; CHECK-LABEL: fabs_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fabs z0.s, p0/m, z0.s ; CHECK-NEXT: ret %res = call @llvm.fabs.nxv2f32( %a) ret %res } define @fabs_nxv2f64( %a) { ; CHECK-LABEL: fabs_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fabs z0.d, p0/m, z0.d ; CHECK-NEXT: ret %res = call @llvm.fabs.nxv2f64( %a) ret %res } ; maxnum minnum define @maxnum_nxv16f16( %a, %b) { ; CHECK-LABEL: maxnum_nxv16f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z2.h ; CHECK-NEXT: fmaxnm z1.h, p0/m, z1.h, z3.h ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv16f16( %a, %b) ret %res } define @maxnum_nxv8f16( %a, %b) { ; CHECK-LABEL: maxnum_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv8f16( %a, %b) ret %res } define @maxnum_nxv4f16( %a, %b) { ; CHECK-LABEL: maxnum_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv4f16( %a, %b) ret %res } define @maxnum_nxv2f16( %a, %b) { ; CHECK-LABEL: maxnum_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv2f16( %a, %b) ret %res } define @maxnum_nxv8f32( %a, %b) { ; CHECK-LABEL: maxnum_nxv8f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, z2.s ; CHECK-NEXT: fmaxnm z1.s, p0/m, z1.s, z3.s ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv8f32( %a, %b) ret %res } define @maxnum_nxv4f32( %a, %b) { ; CHECK-LABEL: maxnum_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv4f32( %a, %b) ret %res } define @maxnum_nxv2f32( %a, %b) { ; CHECK-LABEL: maxnum_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv2f32( %a, %b) ret %res } define @maxnum_nxv4f64( %a, %b) { ; CHECK-LABEL: maxnum_nxv4f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmaxnm z0.d, p0/m, z0.d, z2.d ; CHECK-NEXT: fmaxnm z1.d, p0/m, z1.d, z3.d ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv4f64( %a, %b) ret %res } define @maxnum_nxv2f64( %a, %b) { ; CHECK-LABEL: maxnum_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fmaxnm z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %res = call @llvm.maxnum.nxv2f64( %a, %b) ret %res } define @minnum_nxv16f16( %a, %b) { ; CHECK-LABEL: minnum_nxv16f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z2.h ; CHECK-NEXT: fminnm z1.h, p0/m, z1.h, z3.h ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv16f16( %a, %b) ret %res } define @minnum_nxv8f16( %a, %b) { ; CHECK-LABEL: minnum_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.h ; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv8f16( %a, %b) ret %res } define @minnum_nxv4f16( %a, %b) { ; CHECK-LABEL: minnum_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv4f16( %a, %b) ret %res } define @minnum_nxv2f16( %a, %b) { ; CHECK-LABEL: minnum_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv2f16( %a, %b) ret %res } define @minnum_nxv8f32( %a, %b) { ; CHECK-LABEL: minnum_nxv8f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, z2.s ; CHECK-NEXT: fminnm z1.s, p0/m, z1.s, z3.s ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv8f32( %a, %b) ret %res } define @minnum_nxv4f32( %a, %b) { ; CHECK-LABEL: minnum_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv4f32( %a, %b) ret %res } define @minnum_nxv2f32( %a, %b) { ; CHECK-LABEL: minnum_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv2f32( %a, %b) ret %res } define @minnum_nxv4f64( %a, %b) { ; CHECK-LABEL: minnum_nxv4f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fminnm z0.d, p0/m, z0.d, z2.d ; CHECK-NEXT: fminnm z1.d, p0/m, z1.d, z3.d ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv4f64( %a, %b) ret %res } define @minnum_nxv2f64( %a, %b) { ; CHECK-LABEL: minnum_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fminnm z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %res = call @llvm.minnum.nxv2f64( %a, %b) ret %res } declare @llvm.aarch64.sve.frecps.x.nxv8f16(, ) declare @llvm.aarch64.sve.frecps.x.nxv4f32( , ) declare @llvm.aarch64.sve.frecps.x.nxv2f64(, ) declare @llvm.aarch64.sve.frsqrts.x.nxv8f16(, ) declare @llvm.aarch64.sve.frsqrts.x.nxv4f32(, ) declare @llvm.aarch64.sve.frsqrts.x.nxv2f64(, ) declare @llvm.fma.nxv2f64(, , ) declare @llvm.fma.nxv4f32(, , ) declare @llvm.fma.nxv2f32(, , ) declare @llvm.fma.nxv8f16(, , ) declare @llvm.fma.nxv4f16(, , ) declare @llvm.fma.nxv2f16(, , ) declare @llvm.sqrt.nxv8f16( ) declare @llvm.sqrt.nxv4f16( ) declare @llvm.sqrt.nxv2f16( ) declare @llvm.sqrt.nxv4f32() declare @llvm.sqrt.nxv2f32() declare @llvm.sqrt.nxv2f64() declare @llvm.fabs.nxv8f16( ) declare @llvm.fabs.nxv4f16( ) declare @llvm.fabs.nxv2f16( ) declare @llvm.fabs.nxv4f32() declare @llvm.fabs.nxv2f32() declare @llvm.fabs.nxv2f64() declare @llvm.maxnum.nxv16f16(, ) declare @llvm.maxnum.nxv8f16(, ) declare @llvm.maxnum.nxv4f16(, ) declare @llvm.maxnum.nxv2f16(, ) declare @llvm.maxnum.nxv8f32(, ) declare @llvm.maxnum.nxv4f32(, ) declare @llvm.maxnum.nxv2f32(, ) declare @llvm.maxnum.nxv4f64(, ) declare @llvm.maxnum.nxv2f64(, ) declare @llvm.minnum.nxv16f16(, ) declare @llvm.minnum.nxv8f16(, ) declare @llvm.minnum.nxv4f16(, ) declare @llvm.minnum.nxv2f16(, ) declare @llvm.minnum.nxv8f32(, ) declare @llvm.minnum.nxv4f32(, ) declare @llvm.minnum.nxv2f32(, ) declare @llvm.minnum.nxv4f64(, ) declare @llvm.minnum.nxv2f64(, ) ; Function Attrs: nounwind readnone declare double @llvm.aarch64.sve.faddv.nxv2f64(, ) #2