; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mattr=+sve,+bf16 < %s | FileCheck %s ; RUN: llc -mattr=+sme2 -force-streaming < %s | FileCheck %s target triple = "aarch64-unknown-linux-gnu" define @abs_nxv16i8( %pg, %a, %b) { ; CHECK-LABEL: abs_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = call @llvm.abs.nxv16i8( %b, i1 0) %res = select %pg, %b.op, %a ret %res } define @abs_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: abs_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.abs.nxv8i16( %b, i1 0) %res = select %pg, %b.op, %a ret %res } define @abs_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: abs_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.abs.nxv4i32( %b, i1 0) %res = select %pg, %b.op, %a ret %res } define @abs_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: abs_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.abs.nxv2i64( %b, i1 0) %res = select %pg, %b.op, %a ret %res } define @clz_nxv16i8( %pg, %a, %b) { ; CHECK-LABEL: clz_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: clz z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = call @llvm.ctlz.nxv16i8( %b) %res = select %pg, %b.op, %a ret %res } define @clz_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: clz_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: clz z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.ctlz.nxv8i16( %b) %res = select %pg, %b.op, %a ret %res } define @clz_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: clz_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: clz z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.ctlz.nxv4i32( %b) %res = select %pg, %b.op, %a ret %res } define @clz_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: clz_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: clz z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.ctlz.nxv2i64( %b) %res = select %pg, %b.op, %a ret %res } define @cnt_nxv16i8( %pg, %a, %b) { ; CHECK-LABEL: cnt_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: cnt z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = call @llvm.ctpop.nxv16i8( %b) %res = select %pg, %b.op, %a ret %res } define @cnt_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: cnt_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: cnt z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.ctpop.nxv8i16( %b) %res = select %pg, %b.op, %a ret %res } define @cnt_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: cnt_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: cnt z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.ctpop.nxv4i32( %b) %res = select %pg, %b.op, %a ret %res } define @cnt_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: cnt_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: cnt z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.ctpop.nxv2i64( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv2bf16( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv2bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv2bf16( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv4bf16( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv4bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv4bf16( %b) %res = select %pg, %b.op, %a ret %res } define @fabs_nxv8bf16( %pg, %a, %b) { ; CHECK-LABEL: fabs_nxv8bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: fabs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.fabs.nxv8bf16( %b) %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f16_to_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2f16_to_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.s, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fpext %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f16_to_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2f16_to_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.d, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fpext %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv4f16_to_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv4f16_to_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.s, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fpext %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f32_to_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2f32_to_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptrunc %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f32_to_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2f32_to_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.d, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fpext %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f32_to_nxv2bf16( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2f32_to_nxv2bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: bfcvt z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptrunc %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv4f32_to_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv4f32_to_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptrunc %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv4f32_to_nxv4bf16( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv4f32_to_nxv4bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: bfcvt z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptrunc %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f64_to_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2f64_to_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.h, p0/m, z1.d ; CHECK-NEXT: ret %b.op = fptrunc %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f64_to_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2f64_to_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvt z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptrunc %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2f64_to_nxv2bf16( %pg, %a, %b) "target-features"="+sve2" { ; CHECK-LABEL: fcvt_nxv2f64_to_nxv2bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: fcvtx z1.s, p1/m, z1.d ; CHECK-NEXT: bfcvt z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptrunc %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2bf16_to_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2bf16_to_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: lsl z1.s, z1.s, #16 ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = fpext %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv2bf16_to_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv2bf16_to_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: lsl z1.s, z1.s, #16 ; CHECK-NEXT: fcvt z0.d, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fpext %b to %res = select %pg, %b.op, %a ret %res } define @fcvt_nxv4bf16_to_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: fcvt_nxv4bf16_to_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: lsl z1.s, z1.s, #16 ; CHECK-NEXT: mov z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fpext %b to %res = select %pg, %b.op, %a ret %res } define @fcvtsu_nxv2f16_to_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: fcvtsu_nxv2f16_to_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fptosi %b to %res = select %pg, %b.op, %a ret %res } define @fcvtsu_nxv4f16_to_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: fcvtsu_nxv4f16_to_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fptosi %b to %res = select %pg, %b.op, %a ret %res } define @fcvtsu_nxv8f16_to_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: fcvtsu_nxv8f16_to_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzs z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fptosi %b to %res = select %pg, %b.op, %a ret %res } define @fcvtsu_nxv2f32_to_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: fcvtsu_nxv2f32_to_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptosi %b to %res = select %pg, %b.op, %a ret %res } define @fcvtsu_nxv4f32_to_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: fcvtsu_nxv4f32_to_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptosi %b to %res = select %pg, %b.op, %a ret %res } define @fcvtsu_nxv2f64_to_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: fcvtsu_nxv2f64_to_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = fptosi %b to %res = select %pg, %b.op, %a ret %res } define @fcvtzu_nxv2f16_to_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: fcvtzu_nxv2f16_to_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fptoui %b to %res = select %pg, %b.op, %a ret %res } define @fcvtzu_nxv4f16_to_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: fcvtzu_nxv4f16_to_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fptoui %b to %res = select %pg, %b.op, %a ret %res } define @fcvtzu_nxv8f16_to_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: fcvtzu_nxv8f16_to_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzu z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fptoui %b to %res = select %pg, %b.op, %a ret %res } define @fcvtzu_nxv2f32_to_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: fcvtzu_nxv2f32_to_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptoui %b to %res = select %pg, %b.op, %a ret %res } define @fcvtzu_nxv4f32_to_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: fcvtzu_nxv4f32_to_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fptoui %b to %res = select %pg, %b.op, %a ret %res } define @fcvtzu_nxv2f64_to_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: fcvtzu_nxv2f64_to_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = fptoui %b to %res = select %pg, %b.op, %a ret %res } define @fneg_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv2bf16( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv2bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv4bf16( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv4bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @fneg_nxv8bf16( %pg, %a, %b) { ; CHECK-LABEL: fneg_nxv8bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: fneg z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = fneg %b %res = select %pg, %b.op, %a ret %res } define @frinta_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: frinta_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frinta z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.round.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @frinta_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: frinta_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frinta z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.round.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @frinta_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: frinta_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frinta z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.round.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @frinta_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: frinta_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frinta z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.round.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @frinta_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: frinta_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frinta z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.round.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @frinta_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: frinta_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: frinta z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.round.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @frinti_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: frinti_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frinti z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.nearbyint.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @frinti_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: frinti_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frinti z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.nearbyint.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @frinti_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: frinti_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frinti z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.nearbyint.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @frinti_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: frinti_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frinti z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.nearbyint.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @frinti_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: frinti_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frinti z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.nearbyint.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @frinti_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: frinti_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: frinti z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.nearbyint.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @frintm_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: frintm_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintm z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.floor.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintm_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: frintm_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintm z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.floor.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintm_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: frintm_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintm z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.floor.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintm_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: frintm_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintm z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.floor.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintm_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: frintm_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintm z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.floor.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintm_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: frintm_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: frintm z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.floor.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @frintn_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: frintn_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintn z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.roundeven.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintn_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: frintn_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintn z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.roundeven.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintn_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: frintn_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintn z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.roundeven.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintn_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: frintn_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintn z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.roundeven.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintn_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: frintn_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintn z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.roundeven.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintn_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: frintn_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: frintn z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.roundeven.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @frintp_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: frintp_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintp z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.ceil.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintp_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: frintp_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintp z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.ceil.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintp_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: frintp_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintp z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.ceil.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintp_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: frintp_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintp z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.ceil.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintp_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: frintp_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintp z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.ceil.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintp_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: frintp_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: frintp z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.ceil.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @frintx_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: frintx_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintx z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.rint.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintx_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: frintx_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintx z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.rint.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintx_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: frintx_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintx z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.rint.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintx_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: frintx_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintx z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.rint.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintx_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: frintx_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintx z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.rint.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintx_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: frintx_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: frintx z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.rint.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @frintz_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: frintz_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintz z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.trunc.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintz_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: frintz_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintz z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.trunc.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintz_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: frintz_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: frintz z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.trunc.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @frintz_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: frintz_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintz z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.trunc.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintz_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: frintz_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: frintz z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.trunc.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @frintz_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: frintz_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: frintz z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.trunc.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @fsqrt_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: fsqrt_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.sqrt.nxv2f16( %b) %res = select %pg, %b.op, %a ret %res } define @fsqrt_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: fsqrt_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.sqrt.nxv4f16( %b) %res = select %pg, %b.op, %a ret %res } define @fsqrt_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: fsqrt_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.sqrt.nxv8f16( %b) %res = select %pg, %b.op, %a ret %res } define @fsqrt_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: fsqrt_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.sqrt.nxv2f32( %b) %res = select %pg, %b.op, %a ret %res } define @fsqrt_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: fsqrt_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.sqrt.nxv4f32( %b) %res = select %pg, %b.op, %a ret %res } define @fsqrt_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: fsqrt_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: fsqrt z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.sqrt.nxv2f64( %b) %res = select %pg, %b.op, %a ret %res } define @neg_nxv16i8( %pg, %a, %b) { ; CHECK-LABEL: neg_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: subr z1.b, z1.b, #0 // =0x0 ; CHECK-NEXT: mov z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = sub zeroinitializer, %b %res = select %pg, %b.op, %a ret %res } define @neg_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: neg_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: subr z1.h, z1.h, #0 // =0x0 ; CHECK-NEXT: mov z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = sub zeroinitializer, %b %res = select %pg, %b.op, %a ret %res } define @neg_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: neg_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: subr z1.s, z1.s, #0 // =0x0 ; CHECK-NEXT: mov z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = sub zeroinitializer, %b %res = select %pg, %b.op, %a ret %res } define @neg_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: neg_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: subr z1.d, z1.d, #0 // =0x0 ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = sub zeroinitializer, %b %res = select %pg, %b.op, %a ret %res } define @rbit_nxv16i8( %pg, %a, %b) { ; CHECK-LABEL: rbit_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: rbit z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = call @llvm.bitreverse.nxv16i8( %b) %res = select %pg, %b.op, %a ret %res } define @rbit_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: rbit_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: rbit z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.bitreverse.nxv8i16( %b) %res = select %pg, %b.op, %a ret %res } define @rbit_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: rbit_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: rbit z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.bitreverse.nxv4i32( %b) %res = select %pg, %b.op, %a ret %res } define @rbit_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: rbit_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: rbit z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.bitreverse.nxv2i64( %b) %res = select %pg, %b.op, %a ret %res } define @revb_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: revb_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: revb z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = call @llvm.bswap.nxv8i16( %b) %res = select %pg, %b.op, %a ret %res } define @revb_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: revb_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: revb z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = call @llvm.bswap.nxv4i32( %b) %res = select %pg, %b.op, %a ret %res } define @revb_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: revb_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: revb z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = call @llvm.bswap.nxv2i64( %b) %res = select %pg, %b.op, %a ret %res } define @scvtf_nxv8i16_to_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: scvtf_nxv8i16_to_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: scvtf z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = sitofp %b to %res = select %pg, %b.op, %a ret %res } define @scvtf_nxv4i32_to_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: scvtf_nxv4i32_to_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: scvtf z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = sitofp %b to %res = select %pg, %b.op, %a ret %res } define @scvtf_nxv4i32_to_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: scvtf_nxv4i32_to_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: scvtf z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = sitofp %b to %res = select %pg, %b.op, %a ret %res } define @scvtf_nxv2i64_to_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: scvtf_nxv2i64_to_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: scvtf z0.h, p0/m, z1.d ; CHECK-NEXT: ret %b.op = sitofp %b to %res = select %pg, %b.op, %a ret %res } define @scvtf_nxv2i64_to_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: scvtf_nxv2i64_to_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: scvtf z0.s, p0/m, z1.d ; CHECK-NEXT: ret %b.op = sitofp %b to %res = select %pg, %b.op, %a ret %res } define @scvtf_nxv2i64_to_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: scvtf_nxv2i64_to_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: scvtf z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = sitofp %b to %res = select %pg, %b.op, %a ret %res } define @sxtb_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: sxtb_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.h ; CHECK-NEXT: sxtb z1.h, p1/m, z1.h ; CHECK-NEXT: mov z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = sext %b to %res = select %pg, %b.op, %a ret %res } define @sxtb_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: sxtb_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.s ; CHECK-NEXT: sxtb z1.s, p1/m, z1.s ; CHECK-NEXT: mov z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = sext %b to %res = select %pg, %b.op, %a ret %res } define @sxtb_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: sxtb_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: sxtb z1.d, p1/m, z1.d ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = sext %b to %res = select %pg, %b.op, %a ret %res } define @sxth_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: sxth_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.s ; CHECK-NEXT: sxth z1.s, p1/m, z1.s ; CHECK-NEXT: mov z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = sext %b to %res = select %pg, %b.op, %a ret %res } define @sxth_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: sxth_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: sxth z1.d, p1/m, z1.d ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = sext %b to %res = select %pg, %b.op, %a ret %res } define @sxtw_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: sxtw_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: sxtw z1.d, p1/m, z1.d ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = sext %b to %res = select %pg, %b.op, %a ret %res } define @ucvtf_nxv8i16_to_nxv8f16( %pg, %a, %b) { ; CHECK-LABEL: ucvtf_nxv8i16_to_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ucvtf z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = uitofp %b to %res = select %pg, %b.op, %a ret %res } define @ucvtf_nxv4i32_to_nxv4f16( %pg, %a, %b) { ; CHECK-LABEL: ucvtf_nxv4i32_to_nxv4f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ucvtf z0.h, p0/m, z1.s ; CHECK-NEXT: ret %b.op = uitofp %b to %res = select %pg, %b.op, %a ret %res } define @ucvtf_nxv4i32_to_nxv4f32( %pg, %a, %b) { ; CHECK-LABEL: ucvtf_nxv4i32_to_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ucvtf z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = uitofp %b to %res = select %pg, %b.op, %a ret %res } define @ucvtf_nxv2i64_to_nxv2f16( %pg, %a, %b) { ; CHECK-LABEL: ucvtf_nxv2i64_to_nxv2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: ucvtf z0.h, p0/m, z1.d ; CHECK-NEXT: ret %b.op = uitofp %b to %res = select %pg, %b.op, %a ret %res } define @ucvtf_nxv2i64_to_nxv2f32( %pg, %a, %b) { ; CHECK-LABEL: ucvtf_nxv2i64_to_nxv2f32: ; CHECK: // %bb.0: ; CHECK-NEXT: ucvtf z0.s, p0/m, z1.d ; CHECK-NEXT: ret %b.op = uitofp %b to %res = select %pg, %b.op, %a ret %res } define @ucvtf_nxv2i64_to_nxv2f64( %pg, %a, %b) { ; CHECK-LABEL: ucvtf_nxv2i64_to_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: ucvtf z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = uitofp %b to %res = select %pg, %b.op, %a ret %res } define @uxtb_nxv8i16( %pg, %a, %b) { ; CHECK-LABEL: uxtb_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: and z1.h, z1.h, #0xff ; CHECK-NEXT: mov z0.h, p0/m, z1.h ; CHECK-NEXT: ret %b.op = zext %b to %res = select %pg, %b.op, %a ret %res } define @uxtb_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: uxtb_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: and z1.s, z1.s, #0xff ; CHECK-NEXT: mov z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = zext %b to %res = select %pg, %b.op, %a ret %res } define @uxtb_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: uxtb_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: and z1.d, z1.d, #0xff ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = zext %b to %res = select %pg, %b.op, %a ret %res } define @uxth_nxv4i32( %pg, %a, %b) { ; CHECK-LABEL: uxth_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: and z1.s, z1.s, #0xffff ; CHECK-NEXT: mov z0.s, p0/m, z1.s ; CHECK-NEXT: ret %b.op = zext %b to %res = select %pg, %b.op, %a ret %res } define @uxth_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: uxth_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: and z1.d, z1.d, #0xffff ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = zext %b to %res = select %pg, %b.op, %a ret %res } define @uxtw_nxv2i64( %pg, %a, %b) { ; CHECK-LABEL: uxtw_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: and z1.d, z1.d, #0xffffffff ; CHECK-NEXT: mov z0.d, p0/m, z1.d ; CHECK-NEXT: ret %b.op = zext %b to %res = select %pg, %b.op, %a ret %res } define @abs_nxv16i8_all_active_predicate( %pg, %a, %b, %c) { ; CHECK-LABEL: abs_nxv16i8_all_active_predicate: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = call @llvm.aarch64.sve.abs.nxv16i8( %c, splat(i1 true), %b) %res = select %pg, %b.op, %a ret %res } define @abs_nxv16i8_same_predicate( %pg, %a, %b, %c) { ; CHECK-LABEL: abs_nxv16i8_same_predicate: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = call @llvm.aarch64.sve.abs.nxv16i8( %c, %pg, %b) %res = select %pg, %b.op, %a ret %res } define @abs_nxv16i8_inactive_lanes_are_not_defined( %sel_pg, %op_pg, %a, %b) { ; CHECK-LABEL: abs_nxv16i8_inactive_lanes_are_not_defined: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z0.b, p0/m, z1.b ; CHECK-NEXT: ret %b.op = call @llvm.aarch64.sve.abs.nxv16i8( poison, %op_pg, %b) %res = select %sel_pg, %b.op, %a ret %res } ; Merging op has multiple users. declare void @use(,) define void @abs_nxv16i8_multi_use( %pg, %a, %b) { ; CHECK-LABEL: abs_nxv16i8_multi_use: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p1.b ; CHECK-NEXT: abs z1.b, p1/m, z1.b ; CHECK-NEXT: mov z0.b, p0/m, z1.b ; CHECK-NEXT: b use %b.op = tail call @llvm.abs.nxv16i8( %b, i1 0) %res = select %pg, %b.op, %a tail call void @use( %res, %b.op) ret void } ; Inactive lanes of the merging op remain live after the select. define @abs_nxv16i8_predicate_mismatch( %sel_pg, %op_pg, %a, %b, %c) { ; CHECK-LABEL: abs_nxv16i8_predicate_mismatch: ; CHECK: // %bb.0: ; CHECK-NEXT: abs z2.b, p1/m, z1.b ; CHECK-NEXT: mov z0.b, p0/m, z2.b ; CHECK-NEXT: ret %b.op = call @llvm.aarch64.sve.abs.nxv16i8( %c, %op_pg, %b) %res = select %sel_pg, %b.op, %a ret %res } declare @llvm.abs.nxv16i8(, i1) declare @llvm.abs.nxv8i16(, i1) declare @llvm.abs.nxv4i32(, i1) declare @llvm.abs.nxv2i64(, i1) declare @llvm.bitreverse.nxv16i8() declare @llvm.bitreverse.nxv8i16() declare @llvm.bitreverse.nxv4i32() declare @llvm.bitreverse.nxv2i64() declare @llvm.bswap.nxv8i16() declare @llvm.bswap.nxv4i32() declare @llvm.bswap.nxv2i64() declare @llvm.ceil.nxv2f16() declare @llvm.ceil.nxv4f16() declare @llvm.ceil.nxv8f16() declare @llvm.ceil.nxv2f32() declare @llvm.ceil.nxv4f32() declare @llvm.ceil.nxv2f64() declare @llvm.ctlz.nxv16i8() declare @llvm.ctlz.nxv8i16() declare @llvm.ctlz.nxv4i32() declare @llvm.ctlz.nxv2i64() declare @llvm.ctpop.nxv16i8() declare @llvm.ctpop.nxv8i16() declare @llvm.ctpop.nxv4i32() declare @llvm.ctpop.nxv2i64() declare @llvm.fabs.nxv2f16() declare @llvm.fabs.nxv4f16() declare @llvm.fabs.nxv8f16() declare @llvm.fabs.nxv2f32() declare @llvm.fabs.nxv4f32() declare @llvm.fabs.nxv2f64() declare @llvm.fabs.nxv2bf16() declare @llvm.fabs.nxv4bf16() declare @llvm.fabs.nxv8bf16() declare @llvm.floor.nxv2f16() declare @llvm.floor.nxv4f16() declare @llvm.floor.nxv8f16() declare @llvm.floor.nxv2f32() declare @llvm.floor.nxv4f32() declare @llvm.floor.nxv2f64() declare @llvm.nearbyint.nxv4f16() declare @llvm.nearbyint.nxv8f16() declare @llvm.nearbyint.nxv2f32() declare @llvm.nearbyint.nxv4f32() declare @llvm.nearbyint.nxv2f64() declare @llvm.rint.nxv2f16() declare @llvm.rint.nxv4f16() declare @llvm.rint.nxv8f16() declare @llvm.rint.nxv2f32() declare @llvm.rint.nxv4f32() declare @llvm.rint.nxv2f64() declare @llvm.round.nxv2f16() declare @llvm.round.nxv4f16() declare @llvm.round.nxv8f16() declare @llvm.round.nxv2f32() declare @llvm.round.nxv4f32() declare @llvm.round.nxv2f64() declare @llvm.nearbyint.nxv2f16() declare @llvm.roundeven.nxv2f16() declare @llvm.roundeven.nxv4f16() declare @llvm.roundeven.nxv8f16() declare @llvm.roundeven.nxv2f32() declare @llvm.roundeven.nxv4f32() declare @llvm.roundeven.nxv2f64() declare @llvm.sqrt.nxv2f16() declare @llvm.sqrt.nxv4f16() declare @llvm.sqrt.nxv8f16() declare @llvm.sqrt.nxv2f32() declare @llvm.sqrt.nxv4f32() declare @llvm.sqrt.nxv2f64() declare @llvm.trunc.nxv2f16() declare @llvm.trunc.nxv4f16() declare @llvm.trunc.nxv8f16() declare @llvm.trunc.nxv2f32() declare @llvm.trunc.nxv4f32() declare @llvm.trunc.nxv2f64()