[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-masked-ldst-sext.ll
blobf7efa546bb0b6c884088c3ccae6958a1a601feea
1 ; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve < %s | FileCheck %s
4 ; Masked Loads
7 define <vscale x 2 x i64> @masked_sload_nxv2i8(<vscale x 2 x i8> *%a, <vscale x 2 x i1> %mask) {
8 ; CHECK-LABEL: masked_sload_nxv2i8:
9 ; CHECK: ld1sb { [[IN:z[0-9]+]].d }, [[PG:p[0-9]+]]/z, [x0]
10 ; CHECK-NEXT: ret
11   %load = call <vscale x 2 x i8> @llvm.masked.load.nxv2i8(<vscale x 2 x i8> *%a, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i8> undef)
12   %ext = sext <vscale x 2 x i8> %load to <vscale x 2 x i64>
13   ret <vscale x 2 x i64> %ext
16 define <vscale x 2 x i64> @masked_sload_nxv2i16(<vscale x 2 x i16> *%a, <vscale x 2 x i1> %mask) {
17 ; CHECK-LABEL: masked_sload_nxv2i16:
18 ; CHECK: ld1sh { [[IN:z[0-9]+]].d }, [[PG:p[0-9]+]]/z, [x0]
19 ; CHECK-NEXT: ret
20   %load = call <vscale x 2 x i16> @llvm.masked.load.nxv2i16(<vscale x 2 x i16> *%a, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i16> undef)
21   %ext = sext <vscale x 2 x i16> %load to <vscale x 2 x i64>
22   ret <vscale x 2 x i64> %ext
25 define <vscale x 2 x i64> @masked_sload_nxv2i32(<vscale x 2 x i32> *%a, <vscale x 2 x i1> %mask) {
26 ; CHECK-LABEL: masked_sload_nxv2i32:
27 ; CHECK: ld1sw { [[IN:z[0-9]+]].d }, [[PG:p[0-9]+]]/z, [x0]
28 ; CHECK-NEXT: ret
29   %load = call <vscale x 2 x i32> @llvm.masked.load.nxv2i32(<vscale x 2 x i32> *%a, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i32> undef)
30   %ext = sext <vscale x 2 x i32> %load to <vscale x 2 x i64>
31   ret <vscale x 2 x i64> %ext
34 define <vscale x 4 x i32> @masked_sload_nxv4i8(<vscale x 4 x i8> *%a, <vscale x 4 x i1> %mask) {
35 ; CHECK-LABEL: masked_sload_nxv4i8:
36 ; CHECK: ld1sb { [[IN:z[0-9]+]].s }, [[PG:p[0-9]+]]/z, [x0]
37 ; CHECK-NEXT: ret
38   %load = call <vscale x 4 x i8> @llvm.masked.load.nxv4i8(<vscale x 4 x i8> *%a, i32 1, <vscale x 4 x i1> %mask, <vscale x 4 x i8> undef)
39   %ext = sext <vscale x 4 x i8> %load to <vscale x 4 x i32>
40   ret <vscale x 4 x i32> %ext
43 define <vscale x 4 x i32> @masked_sload_nxv4i16(<vscale x 4 x i16> *%a, <vscale x 4 x i1> %mask) {
44 ; CHECK-LABEL: masked_sload_nxv4i16:
45 ; CHECK: ld1sh { [[IN:z[0-9]+]].s }, [[PG:p[0-9]+]]/z, [x0]
46 ; CHECK-NEXT: ret
47   %load = call <vscale x 4 x i16> @llvm.masked.load.nxv4i16(<vscale x 4 x i16> *%a, i32 1, <vscale x 4 x i1> %mask, <vscale x 4 x i16> undef)
48   %ext = sext <vscale x 4 x i16> %load to <vscale x 4 x i32>
49   ret <vscale x 4 x i32> %ext
52 define <vscale x 8 x i16> @masked_sload_nxv8i8(<vscale x 8 x i8> *%a, <vscale x 8 x i1> %mask) {
53 ; CHECK-LABEL: masked_sload_nxv8i8:
54 ; CHECK: ld1sb { [[IN:z[0-9]+]].h }, [[PG:p[0-9]+]]/z, [x0]
55 ; CHECK-NEXT: ret
56   %load = call <vscale x 8 x i8> @llvm.masked.load.nxv8i8(<vscale x 8 x i8> *%a, i32 1, <vscale x 8 x i1> %mask, <vscale x 8 x i8> undef)
57   %ext = sext <vscale x 8 x i8> %load to <vscale x 8 x i16>
58   ret <vscale x 8 x i16> %ext
61 define <vscale x 2 x i64> @masked_sload_passthru(<vscale x 2 x i32> *%a, <vscale x 2 x i1> %mask, <vscale x 2 x i32> %passthru) {
62 ; CHECK-LABEL: masked_sload_passthru:
63 ; CHECK: ld1sw { [[IN:z[0-9]+]].d }, [[PG1:p[0-9]+]]/z, [x0]
64 ; CHECK-NEXT: ptrue [[PG2:p[0-9]+]].d
65 ; CHECK-NEXT: sxtw z0.d, [[PG2]]/m, z0.d
66 ; CHECK-NEXT: mov z0.d, [[PG1]]/m, [[IN]].d
67 ; CHECK-NEXT: ret
68   %load = call <vscale x 2 x i32> @llvm.masked.load.nxv2i32(<vscale x 2 x i32> *%a, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i32> %passthru)
69   %ext = sext <vscale x 2 x i32> %load to <vscale x 2 x i64>
70   ret <vscale x 2 x i64> %ext
73 declare <vscale x 2 x i8> @llvm.masked.load.nxv2i8(<vscale x 2 x i8>*, i32, <vscale x 2 x i1>, <vscale x 2 x i8>)
74 declare <vscale x 2 x i16> @llvm.masked.load.nxv2i16(<vscale x 2 x i16>*, i32, <vscale x 2 x i1>, <vscale x 2 x i16>)
75 declare <vscale x 2 x i32> @llvm.masked.load.nxv2i32(<vscale x 2 x i32>*, i32, <vscale x 2 x i1>, <vscale x 2 x i32>)
76 declare <vscale x 4 x i8> @llvm.masked.load.nxv4i8(<vscale x 4 x i8>*, i32, <vscale x 4 x i1>, <vscale x 4 x i8>)
77 declare <vscale x 4 x i16> @llvm.masked.load.nxv4i16(<vscale x 4 x i16>*, i32, <vscale x 4 x i1>, <vscale x 4 x i16>)
78 declare <vscale x 8 x i8> @llvm.masked.load.nxv8i8(<vscale x 8 x i8>*, i32, <vscale x 8 x i1>, <vscale x 8 x i8>)