; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve < %s | FileCheck %s ; ; Masked Additions ; define @masked_add_nxv16i8( %a, %b, %mask) { ; CHECK-LABEL: masked_add_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: add z0.b, p0/m, z0.b, z1.b ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = add %a, %select ret %ret } define @masked_add_nxv8i16( %a, %b, %mask) { ; CHECK-LABEL: masked_add_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: add z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = add %a, %select ret %ret } define @masked_add_nxv4i32( %a, %b, %mask) { ; CHECK-LABEL: masked_add_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: add z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = add %a, %select ret %ret } define @masked_add_nxv2i64( %a, %b, %mask) { ; CHECK-LABEL: masked_add_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: add z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = add %a, %select ret %ret } ; ; Masked Subtractions ; define @masked_sub_nxv16i8( %a, %b, %mask) { ; CHECK-LABEL: masked_sub_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: sub z0.b, p0/m, z0.b, z1.b ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = sub %a, %select ret %ret } define @masked_sub_nxv8i16( %a, %b, %mask) { ; CHECK-LABEL: masked_sub_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: sub z0.h, p0/m, z0.h, z1.h ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = sub %a, %select ret %ret } define @masked_sub_nxv4i32( %a, %b, %mask) { ; CHECK-LABEL: masked_sub_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: sub z0.s, p0/m, z0.s, z1.s ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = sub %a, %select ret %ret } define @masked_sub_nxv2i64( %a, %b, %mask) { ; CHECK-LABEL: masked_sub_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: sub z0.d, p0/m, z0.d, z1.d ; CHECK-NEXT: ret %select = select %mask, %b, zeroinitializer %ret = sub %a, %select ret %ret } ; ; Masked multiply-add ; define @masked_mla_nxv16i8( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mla_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: mla z0.b, p0/m, z1.b, z2.b ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %add = add %a, %sel ret %add } define @masked_mla_nxv8i16( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mla_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: mla z0.h, p0/m, z1.h, z2.h ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %add = add %a, %sel ret %add } define @masked_mla_nxv4i32( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mla_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: mla z0.s, p0/m, z1.s, z2.s ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %add = add %a, %sel ret %add } define @masked_mla_nxv2i64( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mla_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: mla z0.d, p0/m, z1.d, z2.d ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %add = add %a, %sel ret %add } ; ; Masked multiply-subtract ; define @masked_mls_nxv16i8( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mls_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: mls z0.b, p0/m, z1.b, z2.b ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %sub = sub %a, %sel ret %sub } define @masked_mls_nxv8i16( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mls_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: mls z0.h, p0/m, z1.h, z2.h ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %sub = sub %a, %sel ret %sub } define @masked_mls_nxv4i32( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mls_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: mls z0.s, p0/m, z1.s, z2.s ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %sub = sub %a, %sel ret %sub } define @masked_mls_nxv2i64( %a, %b, %c, %mask) { ; CHECK-LABEL: masked_mls_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: mls z0.d, p0/m, z1.d, z2.d ; CHECK-NEXT: ret %mul = mul nsw %b, %c %sel = select %mask, %mul, zeroinitializer %sub = sub %a, %sel ret %sub }