1; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s 2 3; Integer vector select 4 5define <vscale x 16 x i8> @sel_nxv16i8(<vscale x 16 x i1> %p, 6 <vscale x 16 x i8> %dst, 7 <vscale x 16 x i8> %a) { 8; CHECK-LABEL: sel_nxv16i8: 9; CHECK: mov z0.b, p0/m, z1.b 10; CHECK-NEXT: ret 11 %sel = select <vscale x 16 x i1> %p, <vscale x 16 x i8> %a, <vscale x 16 x i8> %dst 12 ret <vscale x 16 x i8> %sel 13} 14 15define <vscale x 8 x i16> @sel_nxv8i16(<vscale x 8 x i1> %p, 16 <vscale x 8 x i16> %dst, 17 <vscale x 8 x i16> %a) { 18; CHECK-LABEL: sel_nxv8i16: 19; CHECK: mov z0.h, p0/m, z1.h 20; CHECK-NEXT: ret 21 %sel = select <vscale x 8 x i1> %p, <vscale x 8 x i16> %a, <vscale x 8 x i16> %dst 22 ret <vscale x 8 x i16> %sel 23} 24 25define <vscale x 4 x i32> @sel_nxv4i32(<vscale x 4 x i1> %p, 26 <vscale x 4 x i32> %dst, 27 <vscale x 4 x i32> %a) { 28; CHECK-LABEL: sel_nxv4i32: 29; CHECK: mov z0.s, p0/m, z1.s 30; CHECK-NEXT: ret 31 %sel = select <vscale x 4 x i1> %p, <vscale x 4 x i32> %a, <vscale x 4 x i32> %dst 32 ret <vscale x 4 x i32> %sel 33} 34 35define <vscale x 2 x i64> @sel_nxv2i64(<vscale x 2 x i1> %p, 36 <vscale x 2 x i64> %dst, 37 <vscale x 2 x i64> %a) { 38; CHECK-LABEL: sel_nxv2i64: 39; CHECK: mov z0.d, p0/m, z1.d 40; CHECK-NEXT: ret 41 %sel = select <vscale x 2 x i1> %p, <vscale x 2 x i64> %a, <vscale x 2 x i64> %dst 42 ret <vscale x 2 x i64> %sel 43} 44 45; Floating point vector select 46 47define <vscale x 8 x half> @sel_nxv8f16(<vscale x 8 x i1> %p, 48 <vscale x 8 x half> %dst, 49 <vscale x 8 x half> %a) { 50; CHECK-LABEL: sel_nxv8f16: 51; CHECK: mov z0.h, p0/m, z1.h 52; CHECK-NEXT: ret 53 %sel = select <vscale x 8 x i1> %p, <vscale x 8 x half> %a, <vscale x 8 x half> %dst 54 ret <vscale x 8 x half> %sel 55} 56 57define <vscale x 4 x float> @sel_nxv4f32(<vscale x 4 x i1> %p, 58 <vscale x 4 x float> %dst, 59 <vscale x 4 x float> %a) { 60; CHECK-LABEL: sel_nxv4f32: 61; CHECK: mov z0.s, p0/m, z1.s 62; CHECK-NEXT: ret 63 %sel = select <vscale x 4 x i1> %p, <vscale x 4 x float> %a, <vscale x 4 x float> %dst 64 ret <vscale x 4 x float> %sel 65} 66 67define <vscale x 2 x float> @sel_nxv2f32(<vscale x 2 x i1> %p, 68 <vscale x 2 x float> %dst, 69 <vscale x 2 x float> %a) { 70; CHECK-LABEL: sel_nxv2f32: 71; CHECK: mov z0.d, p0/m, z1.d 72; CHECK-NEXT: ret 73 %sel = select <vscale x 2 x i1> %p, <vscale x 2 x float> %a, <vscale x 2 x float> %dst 74 ret <vscale x 2 x float> %sel 75} 76 77define <vscale x 2 x double> @sel_nxv8f64(<vscale x 2 x i1> %p, 78 <vscale x 2 x double> %dst, 79 <vscale x 2 x double> %a) { 80; CHECK-LABEL: sel_nxv8f64: 81; CHECK: mov z0.d, p0/m, z1.d 82; CHECK-NEXT: ret 83 %sel = select <vscale x 2 x i1> %p, <vscale x 2 x double> %a, <vscale x 2 x double> %dst 84 ret <vscale x 2 x double> %sel 85} 86