[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / sve-intrinsics-perm-select.ll
blobc2230b0c550199e65b2a49435aded44e15bf1373
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
4 ; SUNPKHI
7 define <vscale x 8 x i16> @sunpkhi_i16(<vscale x 16 x i8> %a) {
8 ; CHECK-LABEL: sunpkhi_i16
9 ; CHECK: sunpkhi z0.h, z0.b
10 ; CHECK-NEXT: ret
11   %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sunpkhi.nxv8i16(<vscale x 16 x i8> %a)
12   ret <vscale x 8 x i16> %res
15 define <vscale x 4 x i32> @sunpkhi_i32(<vscale x 8 x i16> %a) {
16 ; CHECK-LABEL: sunpkhi_i32
17 ; CHECK: sunpkhi z0.s, z0.h
18 ; CHECK-NEXT: ret
19   %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sunpkhi.nxv4i32(<vscale x 8 x i16> %a)
20   ret <vscale x 4 x i32> %res
23 define <vscale x 2 x i64> @sunpkhi_i64(<vscale x 4 x i32> %a) {
24 ; CHECK-LABEL:  sunpkhi_i64
25 ; CHECK: sunpkhi z0.d, z0.s
26 ; CHECK-NEXT: ret
27   %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sunpkhi.nxv2i64(<vscale x 4 x i32> %a)
28   ret <vscale x 2 x i64> %res
32 ; SUNPKLO
35 define <vscale x 8 x i16> @sunpklo_i16(<vscale x 16 x i8> %a) {
36 ; CHECK-LABEL: sunpklo_i16
37 ; CHECK: sunpklo z0.h, z0.b
38 ; CHECK-NEXT: ret
39   %res = call <vscale x 8 x i16> @llvm.aarch64.sve.sunpklo.nxv8i16(<vscale x 16 x i8> %a)
40   ret <vscale x 8 x i16> %res
43 define <vscale x 4 x i32> @sunpklo_i32(<vscale x 8 x i16> %a) {
44 ; CHECK-LABEL: sunpklo_i32
45 ; CHECK: sunpklo z0.s, z0.h
46 ; CHECK-NEXT: ret
47   %res = call <vscale x 4 x i32> @llvm.aarch64.sve.sunpklo.nxv4i32(<vscale x 8 x i16> %a)
48   ret <vscale x 4 x i32> %res
51 define <vscale x 2 x i64> @sunpklo_i64(<vscale x 4 x i32> %a) {
52 ; CHECK-LABEL:  sunpklo_i64
53 ; CHECK: sunpklo z0.d, z0.s
54 ; CHECK-NEXT: ret
55   %res = call <vscale x 2 x i64> @llvm.aarch64.sve.sunpklo.nxv2i64(<vscale x 4 x i32> %a)
56   ret <vscale x 2 x i64> %res
60 ; UUNPKHI
63 define <vscale x 8 x i16> @uunpkhi_i16(<vscale x 16 x i8> %a) {
64 ; CHECK-LABEL: uunpkhi_i16
65 ; CHECK: uunpkhi z0.h, z0.b
66 ; CHECK-NEXT: ret
67   %res = call <vscale x 8 x i16> @llvm.aarch64.sve.uunpkhi.nxv8i16(<vscale x 16 x i8> %a)
68   ret <vscale x 8 x i16> %res
71 define <vscale x 4 x i32> @uunpkhi_i32(<vscale x 8 x i16> %a) {
72 ; CHECK-LABEL: uunpkhi_i32
73 ; CHECK: uunpkhi z0.s, z0.h
74 ; CHECK-NEXT: ret
75   %res = call <vscale x 4 x i32> @llvm.aarch64.sve.uunpkhi.nxv4i32(<vscale x 8 x i16> %a)
76   ret <vscale x 4 x i32> %res
79 define <vscale x 2 x i64> @uunpkhi_i64(<vscale x 4 x i32> %a) {
80 ; CHECK-LABEL:  uunpkhi_i64
81 ; CHECK: uunpkhi z0.d, z0.s
82 ; CHECK-NEXT: ret
83   %res = call <vscale x 2 x i64> @llvm.aarch64.sve.uunpkhi.nxv2i64(<vscale x 4 x i32> %a)
84   ret <vscale x 2 x i64> %res
88 ; UUNPKLO
91 define <vscale x 8 x i16> @uunpklo_i16(<vscale x 16 x i8> %a) {
92 ; CHECK-LABEL: uunpklo_i16
93 ; CHECK: uunpklo z0.h, z0.b
94 ; CHECK-NEXT: ret
95   %res = call <vscale x 8 x i16> @llvm.aarch64.sve.uunpklo.nxv8i16(<vscale x 16 x i8> %a)
96   ret <vscale x 8 x i16> %res
99 define <vscale x 4 x i32> @uunpklo_i32(<vscale x 8 x i16> %a) {
100 ; CHECK-LABEL: uunpklo_i32
101 ; CHECK: uunpklo z0.s, z0.h
102 ; CHECK-NEXT: ret
103   %res = call <vscale x 4 x i32> @llvm.aarch64.sve.uunpklo.nxv4i32(<vscale x 8 x i16> %a)
104   ret <vscale x 4 x i32> %res
107 define <vscale x 2 x i64> @uunpklo_i64(<vscale x 4 x i32> %a) {
108 ; CHECK-LABEL:  uunpklo_i64
109 ; CHECK: uunpklo z0.d, z0.s
110 ; CHECK-NEXT: ret
111   %res = call <vscale x 2 x i64> @llvm.aarch64.sve.uunpklo.nxv2i64(<vscale x 4 x i32> %a)
112   ret <vscale x 2 x i64> %res
115 declare <vscale x 8 x i16> @llvm.aarch64.sve.sunpkhi.nxv8i16(<vscale x 16 x i8>)
116 declare <vscale x 4 x i32> @llvm.aarch64.sve.sunpkhi.nxv4i32(<vscale x 8 x i16>)
117 declare <vscale x 2 x i64> @llvm.aarch64.sve.sunpkhi.nxv2i64(<vscale x 4 x i32>)
119 declare <vscale x 8 x i16> @llvm.aarch64.sve.sunpklo.nxv8i16(<vscale x 16 x i8>)
120 declare <vscale x 4 x i32> @llvm.aarch64.sve.sunpklo.nxv4i32(<vscale x 8 x i16>)
121 declare <vscale x 2 x i64> @llvm.aarch64.sve.sunpklo.nxv2i64(<vscale x 4 x i32>)
123 declare <vscale x 8 x i16> @llvm.aarch64.sve.uunpkhi.nxv8i16(<vscale x 16 x i8>)
124 declare <vscale x 4 x i32> @llvm.aarch64.sve.uunpkhi.nxv4i32(<vscale x 8 x i16>)
125 declare <vscale x 2 x i64> @llvm.aarch64.sve.uunpkhi.nxv2i64(<vscale x 4 x i32>)
127 declare <vscale x 8 x i16> @llvm.aarch64.sve.uunpklo.nxv8i16(<vscale x 16 x i8>)
128 declare <vscale x 4 x i32> @llvm.aarch64.sve.uunpklo.nxv4i32(<vscale x 8 x i16>)
129 declare <vscale x 2 x i64> @llvm.aarch64.sve.uunpklo.nxv2i64(<vscale x 4 x i32>)