[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-masked-ldst-zext.ll
blob7dbebee3d1eeca29938d93210a2eb1ce3d4e894c
1 ; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve < %s | FileCheck %s
4 ; Masked Loads
7 define <vscale x 2 x i64> @masked_zload_nxv2i8(<vscale x 2 x i8>* %src, <vscale x 2 x i1> %mask) {
8 ; CHECK-LABEL: masked_zload_nxv2i8:
9 ; CHECK-NOT: ld1sb
10 ; CHECK: ld1b { [[IN:z[0-9]+]].d }, [[PG:p[0-9]+]]/z, [x0]
11 ; CHECK-NEXT: ret
12   %load = call <vscale x 2 x i8> @llvm.masked.load.nxv2i8(<vscale x 2 x i8>* %src, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i8> undef)
13   %ext = zext <vscale x 2 x i8> %load to <vscale x 2 x i64>
14   ret <vscale x 2 x i64> %ext
17 define <vscale x 2 x i64> @masked_zload_nxv2i16(<vscale x 2 x i16>* %src, <vscale x 2 x i1> %mask) {
18 ; CHECK-LABEL: masked_zload_nxv2i16:
19 ; CHECK-NOT: ld1sh
20 ; CHECK: ld1h { [[IN:z[0-9]+]].d }, [[PG:p[0-9]+]]/z, [x0]
21 ; CHECK-NEXT: ret
22   %load = call <vscale x 2 x i16> @llvm.masked.load.nxv2i16(<vscale x 2 x i16>* %src, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i16> undef)
23   %ext = zext <vscale x 2 x i16> %load to <vscale x 2 x i64>
24   ret <vscale x 2 x i64> %ext
27 define <vscale x 2 x i64> @masked_zload_nxv2i32(<vscale x 2 x i32>* %src, <vscale x 2 x i1> %mask) {
28 ; CHECK-LABEL: masked_zload_nxv2i32:
29 ; CHECK-NOT: ld1sw
30 ; CHECK: ld1w { [[IN:z[0-9]+]].d }, [[PG:p[0-9]+]]/z, [x0]
31 ; CHECK-NEXT: ret
32   %load = call <vscale x 2 x i32> @llvm.masked.load.nxv2i32(<vscale x 2 x i32>* %src, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i32> undef)
33   %ext = zext <vscale x 2 x i32> %load to <vscale x 2 x i64>
34   ret <vscale x 2 x i64> %ext
37 define <vscale x 4 x i32> @masked_zload_nxv4i8(<vscale x 4 x i8>* %src, <vscale x 4 x i1> %mask) {
38 ; CHECK-LABEL: masked_zload_nxv4i8:
39 ; CHECK-NOT: ld1sb
40 ; CHECK: ld1b { [[IN:z[0-9]+]].s }, [[PG:p[0-9]+]]/z, [x0]
41 ; CHECK-NEXT: ret
42   %load = call <vscale x 4 x i8> @llvm.masked.load.nxv4i8(<vscale x 4 x i8>* %src, i32 1, <vscale x 4 x i1> %mask, <vscale x 4 x i8> undef)
43   %ext = zext <vscale x 4 x i8> %load to <vscale x 4 x i32>
44   ret <vscale x 4 x i32> %ext
47 define <vscale x 4 x i32> @masked_zload_nxv4i16(<vscale x 4 x i16>* %src, <vscale x 4 x i1> %mask) {
48 ; CHECK-LABEL: masked_zload_nxv4i16:
49 ; CHECK-NOT: ld1sh
50 ; CHECK: ld1h { [[IN:z[0-9]+]].s }, [[PG:p[0-9]+]]/z, [x0]
51 ; CHECK-NEXT: ret
52   %load = call <vscale x 4 x i16> @llvm.masked.load.nxv4i16(<vscale x 4 x i16>* %src, i32 1, <vscale x 4 x i1> %mask, <vscale x 4 x i16> undef)
53   %ext = zext <vscale x 4 x i16> %load to <vscale x 4 x i32>
54   ret <vscale x 4 x i32> %ext
57 define <vscale x 8 x i16> @masked_zload_nxv8i8(<vscale x 8 x i8>* %src, <vscale x 8 x i1> %mask) {
58 ; CHECK-LABEL: masked_zload_nxv8i8:
59 ; CHECK-NOT: ld1sb
60 ; CHECK: ld1b { [[IN:z[0-9]+]].h }, [[PG:p[0-9]+]]/z, [x0]
61 ; CHECK-NEXT: ret
62   %load = call <vscale x 8 x i8> @llvm.masked.load.nxv8i8(<vscale x 8 x i8>* %src, i32 1, <vscale x 8 x i1> %mask, <vscale x 8 x i8> undef)
63   %ext = zext <vscale x 8 x i8> %load to <vscale x 8 x i16>
64   ret <vscale x 8 x i16> %ext
67 define <vscale x 2 x i64> @masked_zload_passthru(<vscale x 2 x i32>* %src, <vscale x 2 x i1> %mask, <vscale x 2 x i32> %passthru) {
68 ; CHECK-LABEL: masked_zload_passthru:
69 ; CHECK-NOT: ld1sw
70 ; CHECK: ld1w { [[IN:z[0-9]+]].d }, [[PG:p[0-9]+]]/z, [x0]
71 ; CHECK-NEXT: and z0.d, z0.d, #0xffffffff
72 ; CHECK-NEXT: mov z0.d, [[PG]]/m, [[IN]].d
73 ; CHECK-NEXT: ret
74   %load = call <vscale x 2 x i32> @llvm.masked.load.nxv2i32(<vscale x 2 x i32>* %src, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i32> %passthru)
75   %ext = zext <vscale x 2 x i32> %load to <vscale x 2 x i64>
76   ret <vscale x 2 x i64> %ext
79 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>)
80 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>)
81 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>)
82 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>)
83 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>)
84 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>)