xref: /llvm-project/llvm/test/CodeGen/AArch64/zeroing-forms-ext.ll (revision 5d6d982df61d16b6d498e6d59dd91c059679d3d8)
1*5d6d982dSMomchil Velikov; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2*5d6d982dSMomchil Velikov; RUN: llc -mattr=+sve    < %s | FileCheck %s
3*5d6d982dSMomchil Velikov; RUN: llc -mattr=+sve2p2 < %s | FileCheck %s -check-prefix CHECK-2p2
4*5d6d982dSMomchil Velikov
5*5d6d982dSMomchil Velikov; RUN: llc -mattr=+sme    -force-streaming < %s | FileCheck %s
6*5d6d982dSMomchil Velikov; RUN: llc -mattr=+sme2p2 -force-streaming < %s | FileCheck %s -check-prefix CHECK-2p2
7*5d6d982dSMomchil Velikov
8*5d6d982dSMomchil Velikovtarget triple = "aarch64-linux"
9*5d6d982dSMomchil Velikov
10*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svextb_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {
11*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s16_x_1:
12*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
13*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.h, p0/m, z0.h
14*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
15*5d6d982dSMomchil Velikov;
16*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s16_x_1:
17*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
18*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.h, p0/z, z0.h
19*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
20*5d6d982dSMomchil Velikoventry:
21*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
22*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
23*5d6d982dSMomchil Velikov}
24*5d6d982dSMomchil Velikov
25*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svextb_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {
26*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s16_x_2:
27*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
28*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
29*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.h, p0/m, z1.h
30*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
31*5d6d982dSMomchil Velikov;
32*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s16_x_2:
33*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
34*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.h, p0/z, z1.h
35*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
36*5d6d982dSMomchil Velikoventry:
37*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
38*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
39*5d6d982dSMomchil Velikov}
40*5d6d982dSMomchil Velikov
41*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svextb_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {
42*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s16_z:
43*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
44*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.h, #0 // =0x0
45*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.h, p0/m, z1.h
46*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
47*5d6d982dSMomchil Velikov;
48*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s16_z:
49*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
50*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.h, p0/z, z1.h
51*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
52*5d6d982dSMomchil Velikoventry:
53*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
54*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
55*5d6d982dSMomchil Velikov}
56*5d6d982dSMomchil Velikov
57*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svextb_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {
58*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s32_x_1:
59*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
60*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.s, p0/m, z0.s
61*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
62*5d6d982dSMomchil Velikov;
63*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s32_x_1:
64*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
65*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.s, p0/z, z0.s
66*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
67*5d6d982dSMomchil Velikoventry:
68*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
69*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
70*5d6d982dSMomchil Velikov}
71*5d6d982dSMomchil Velikov
72*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svextb_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
73*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s32_x_2:
74*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
75*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
76*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.s, p0/m, z1.s
77*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
78*5d6d982dSMomchil Velikov;
79*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s32_x_2:
80*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
81*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.s, p0/z, z1.s
82*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
83*5d6d982dSMomchil Velikoventry:
84*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
85*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
86*5d6d982dSMomchil Velikov}
87*5d6d982dSMomchil Velikov
88*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svextb_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
89*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s32_z:
90*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
91*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.s, #0 // =0x0
92*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.s, p0/m, z1.s
93*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
94*5d6d982dSMomchil Velikov;
95*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s32_z:
96*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
97*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.s, p0/z, z1.s
98*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
99*5d6d982dSMomchil Velikoventry:
100*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
101*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
102*5d6d982dSMomchil Velikov}
103*5d6d982dSMomchil Velikov
104*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextb_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {
105*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s64_x_1:
106*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
107*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.d, p0/m, z0.d
108*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
109*5d6d982dSMomchil Velikov;
110*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s64_x_1:
111*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
112*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.d, p0/z, z0.d
113*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
114*5d6d982dSMomchil Velikoventry:
115*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
116*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
117*5d6d982dSMomchil Velikov}
118*5d6d982dSMomchil Velikov
119*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextb_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
120*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s64_x_2:
121*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
122*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
123*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.d, p0/m, z1.d
124*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
125*5d6d982dSMomchil Velikov;
126*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s64_x_2:
127*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
128*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.d, p0/z, z1.d
129*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
130*5d6d982dSMomchil Velikoventry:
131*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
132*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
133*5d6d982dSMomchil Velikov}
134*5d6d982dSMomchil Velikov
135*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextb_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
136*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_s64_z:
137*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
138*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.d, #0 // =0x0
139*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.d, p0/m, z1.d
140*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
141*5d6d982dSMomchil Velikov;
142*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_s64_z:
143*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
144*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.d, p0/z, z1.d
145*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
146*5d6d982dSMomchil Velikoventry:
147*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
148*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
149*5d6d982dSMomchil Velikov}
150*5d6d982dSMomchil Velikov
151*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svextb_u16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {
152*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u16_x_1:
153*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
154*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.h, p0/m, z0.h
155*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
156*5d6d982dSMomchil Velikov;
157*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u16_x_1:
158*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
159*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.h, p0/z, z0.h
160*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
161*5d6d982dSMomchil Velikoventry:
162*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
163*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
164*5d6d982dSMomchil Velikov}
165*5d6d982dSMomchil Velikov
166*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svextb_u16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {
167*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u16_x_2:
168*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
169*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
170*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.h, p0/m, z1.h
171*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
172*5d6d982dSMomchil Velikov;
173*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u16_x_2:
174*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
175*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.h, p0/z, z1.h
176*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
177*5d6d982dSMomchil Velikoventry:
178*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
179*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
180*5d6d982dSMomchil Velikov}
181*5d6d982dSMomchil Velikov
182*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svextb_u16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {
183*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u16_z:
184*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
185*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.h, #0 // =0x0
186*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.h, p0/m, z1.h
187*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
188*5d6d982dSMomchil Velikov;
189*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u16_z:
190*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
191*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.h, p0/z, z1.h
192*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
193*5d6d982dSMomchil Velikoventry:
194*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
195*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
196*5d6d982dSMomchil Velikov}
197*5d6d982dSMomchil Velikov
198*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svextb_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {
199*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u32_x_1:
200*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
201*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.s, p0/m, z0.s
202*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
203*5d6d982dSMomchil Velikov;
204*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u32_x_1:
205*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
206*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.s, p0/z, z0.s
207*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
208*5d6d982dSMomchil Velikoventry:
209*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
210*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
211*5d6d982dSMomchil Velikov}
212*5d6d982dSMomchil Velikov
213*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svextb_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
214*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u32_x_2:
215*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
216*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
217*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.s, p0/m, z1.s
218*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
219*5d6d982dSMomchil Velikov;
220*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u32_x_2:
221*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
222*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.s, p0/z, z1.s
223*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
224*5d6d982dSMomchil Velikoventry:
225*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
226*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
227*5d6d982dSMomchil Velikov}
228*5d6d982dSMomchil Velikov
229*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svextb_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
230*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u32_z:
231*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
232*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.s, #0 // =0x0
233*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.s, p0/m, z1.s
234*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
235*5d6d982dSMomchil Velikov;
236*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u32_z:
237*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
238*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.s, p0/z, z1.s
239*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
240*5d6d982dSMomchil Velikoventry:
241*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
242*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
243*5d6d982dSMomchil Velikov}
244*5d6d982dSMomchil Velikov
245*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextb_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {
246*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u64_x_1:
247*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
248*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.d, p0/m, z0.d
249*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
250*5d6d982dSMomchil Velikov;
251*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u64_x_1:
252*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
253*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.d, p0/z, z0.d
254*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
255*5d6d982dSMomchil Velikoventry:
256*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
257*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
258*5d6d982dSMomchil Velikov}
259*5d6d982dSMomchil Velikov
260*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextb_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
261*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u64_x_2:
262*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
263*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
264*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.d, p0/m, z1.d
265*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
266*5d6d982dSMomchil Velikov;
267*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u64_x_2:
268*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
269*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.d, p0/z, z1.d
270*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
271*5d6d982dSMomchil Velikoventry:
272*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
273*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
274*5d6d982dSMomchil Velikov}
275*5d6d982dSMomchil Velikov
276*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextb_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
277*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextb_u64_z:
278*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
279*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.d, #0 // =0x0
280*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.d, p0/m, z1.d
281*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
282*5d6d982dSMomchil Velikov;
283*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextb_u64_z:
284*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
285*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.d, p0/z, z1.d
286*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
287*5d6d982dSMomchil Velikoventry:
288*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
289*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
290*5d6d982dSMomchil Velikov}
291*5d6d982dSMomchil Velikov
292*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svexth_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {
293*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_s32_x_1:
294*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
295*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.s, p0/m, z0.s
296*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
297*5d6d982dSMomchil Velikov;
298*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_s32_x_1:
299*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
300*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.s, p0/z, z0.s
301*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
302*5d6d982dSMomchil Velikoventry:
303*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
304*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
305*5d6d982dSMomchil Velikov}
306*5d6d982dSMomchil Velikov
307*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svexth_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
308*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_s32_x_2:
309*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
310*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
311*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.s, p0/m, z1.s
312*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
313*5d6d982dSMomchil Velikov;
314*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_s32_x_2:
315*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
316*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.s, p0/z, z1.s
317*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
318*5d6d982dSMomchil Velikoventry:
319*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
320*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
321*5d6d982dSMomchil Velikov}
322*5d6d982dSMomchil Velikov
323*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svexth_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
324*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_s32_z:
325*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
326*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.s, #0 // =0x0
327*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.s, p0/m, z1.s
328*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
329*5d6d982dSMomchil Velikov;
330*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_s32_z:
331*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
332*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.s, p0/z, z1.s
333*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
334*5d6d982dSMomchil Velikoventry:
335*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
336*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
337*5d6d982dSMomchil Velikov}
338*5d6d982dSMomchil Velikov
339*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svexth_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {
340*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_s64_x_1:
341*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
342*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.d, p0/m, z0.d
343*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
344*5d6d982dSMomchil Velikov;
345*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_s64_x_1:
346*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
347*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.d, p0/z, z0.d
348*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
349*5d6d982dSMomchil Velikoventry:
350*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
351*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
352*5d6d982dSMomchil Velikov}
353*5d6d982dSMomchil Velikov
354*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svexth_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
355*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_s64_x_2:
356*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
357*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
358*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.d, p0/m, z1.d
359*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
360*5d6d982dSMomchil Velikov;
361*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_s64_x_2:
362*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
363*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.d, p0/z, z1.d
364*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
365*5d6d982dSMomchil Velikoventry:
366*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
367*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
368*5d6d982dSMomchil Velikov}
369*5d6d982dSMomchil Velikov
370*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svexth_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
371*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_s64_z:
372*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
373*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.d, #0 // =0x0
374*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.d, p0/m, z1.d
375*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
376*5d6d982dSMomchil Velikov;
377*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_s64_z:
378*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
379*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.d, p0/z, z1.d
380*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
381*5d6d982dSMomchil Velikoventry:
382*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
383*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
384*5d6d982dSMomchil Velikov}
385*5d6d982dSMomchil Velikov
386*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svexth_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {
387*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_u32_x_1:
388*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
389*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.s, p0/m, z0.s
390*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
391*5d6d982dSMomchil Velikov;
392*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_u32_x_1:
393*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
394*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.s, p0/z, z0.s
395*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
396*5d6d982dSMomchil Velikoventry:
397*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
398*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
399*5d6d982dSMomchil Velikov}
400*5d6d982dSMomchil Velikov
401*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svexth_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
402*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_u32_x_2:
403*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
404*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
405*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.s, p0/m, z1.s
406*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
407*5d6d982dSMomchil Velikov;
408*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_u32_x_2:
409*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
410*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.s, p0/z, z1.s
411*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
412*5d6d982dSMomchil Velikoventry:
413*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
414*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
415*5d6d982dSMomchil Velikov}
416*5d6d982dSMomchil Velikov
417*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svexth_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {
418*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_u32_z:
419*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
420*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.s, #0 // =0x0
421*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.s, p0/m, z1.s
422*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
423*5d6d982dSMomchil Velikov;
424*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_u32_z:
425*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
426*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.s, p0/z, z1.s
427*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
428*5d6d982dSMomchil Velikoventry:
429*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
430*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
431*5d6d982dSMomchil Velikov}
432*5d6d982dSMomchil Velikov
433*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svexth_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {
434*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_u64_x_1:
435*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
436*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.d, p0/m, z0.d
437*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
438*5d6d982dSMomchil Velikov;
439*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_u64_x_1:
440*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
441*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.d, p0/z, z0.d
442*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
443*5d6d982dSMomchil Velikoventry:
444*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
445*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
446*5d6d982dSMomchil Velikov}
447*5d6d982dSMomchil Velikov
448*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svexth_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
449*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_u64_x_2:
450*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
451*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
452*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.d, p0/m, z1.d
453*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
454*5d6d982dSMomchil Velikov;
455*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_u64_x_2:
456*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
457*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.d, p0/z, z1.d
458*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
459*5d6d982dSMomchil Velikoventry:
460*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
461*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
462*5d6d982dSMomchil Velikov}
463*5d6d982dSMomchil Velikov
464*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svexth_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
465*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svexth_u64_z:
466*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
467*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.d, #0 // =0x0
468*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.d, p0/m, z1.d
469*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
470*5d6d982dSMomchil Velikov;
471*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svexth_u64_z:
472*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
473*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.d, p0/z, z1.d
474*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
475*5d6d982dSMomchil Velikoventry:
476*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
477*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
478*5d6d982dSMomchil Velikov}
479*5d6d982dSMomchil Velikov
480*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextw_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {
481*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextw_s64_x_1:
482*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
483*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtw z0.d, p0/m, z0.d
484*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
485*5d6d982dSMomchil Velikov;
486*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextw_s64_x_1:
487*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
488*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtw z0.d, p0/z, z0.d
489*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
490*5d6d982dSMomchil Velikoventry:
491*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
492*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
493*5d6d982dSMomchil Velikov}
494*5d6d982dSMomchil Velikov
495*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextw_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
496*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextw_s64_x_2:
497*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
498*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
499*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtw z0.d, p0/m, z1.d
500*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
501*5d6d982dSMomchil Velikov;
502*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextw_s64_x_2:
503*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
504*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtw z0.d, p0/z, z1.d
505*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
506*5d6d982dSMomchil Velikoventry:
507*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
508*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
509*5d6d982dSMomchil Velikov}
510*5d6d982dSMomchil Velikov
511*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextw_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
512*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextw_s64_z:
513*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
514*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.d, #0 // =0x0
515*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtw z0.d, p0/m, z1.d
516*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
517*5d6d982dSMomchil Velikov;
518*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextw_s64_z:
519*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
520*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtw z0.d, p0/z, z1.d
521*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
522*5d6d982dSMomchil Velikoventry:
523*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
524*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
525*5d6d982dSMomchil Velikov}
526*5d6d982dSMomchil Velikov
527*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextw_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {
528*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextw_u64_x_1:
529*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
530*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtw z0.d, p0/m, z0.d
531*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
532*5d6d982dSMomchil Velikov;
533*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextw_u64_x_1:
534*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
535*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtw z0.d, p0/z, z0.d
536*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
537*5d6d982dSMomchil Velikoventry:
538*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
539*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
540*5d6d982dSMomchil Velikov}
541*5d6d982dSMomchil Velikov
542*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextw_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
543*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextw_u64_x_2:
544*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
545*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
546*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtw z0.d, p0/m, z1.d
547*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
548*5d6d982dSMomchil Velikov;
549*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextw_u64_x_2:
550*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
551*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtw z0.d, p0/z, z1.d
552*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
553*5d6d982dSMomchil Velikoventry:
554*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
555*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
556*5d6d982dSMomchil Velikov}
557*5d6d982dSMomchil Velikov
558*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svextw_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {
559*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svextw_u64_z:
560*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
561*5d6d982dSMomchil Velikov; CHECK-NEXT:    mov z0.d, #0 // =0x0
562*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtw z0.d, p0/m, z1.d
563*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
564*5d6d982dSMomchil Velikov;
565*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svextw_u64_z:
566*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
567*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtw z0.d, p0/z, z1.d
568*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
569*5d6d982dSMomchil Velikoventry:
570*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
571*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
572*5d6d982dSMomchil Velikov}
573*5d6d982dSMomchil Velikov
574*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svsxtb_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {
575*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtb_nxv8i16_ptrue_u:
576*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
577*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.h
578*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
579*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.h, p0/m, z1.h
580*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
581*5d6d982dSMomchil Velikov;
582*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtb_nxv8i16_ptrue_u:
583*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
584*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.h
585*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.h, p0/z, z1.h
586*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
587*5d6d982dSMomchil Velikoventry:
588*5d6d982dSMomchil Velikov  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
589*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
590*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
591*5d6d982dSMomchil Velikov}
592*5d6d982dSMomchil Velikov
593*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svsxtb_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {
594*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtb_nxv8i16_ptrue:
595*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
596*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.h
597*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
598*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.h, p0/m, z2.h
599*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
600*5d6d982dSMomchil Velikov;
601*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtb_nxv8i16_ptrue:
602*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
603*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.h
604*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.h, p0/z, z2.h
605*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
606*5d6d982dSMomchil Velikoventry:
607*5d6d982dSMomchil Velikov  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
608*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)
609*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
610*5d6d982dSMomchil Velikov}
611*5d6d982dSMomchil Velikov
612*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svsxtb_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {
613*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtb_nxv4i32_ptrue_u:
614*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
615*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
616*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
617*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.s, p0/m, z1.s
618*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
619*5d6d982dSMomchil Velikov;
620*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtb_nxv4i32_ptrue_u:
621*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
622*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
623*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.s, p0/z, z1.s
624*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
625*5d6d982dSMomchil Velikoventry:
626*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
627*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
628*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
629*5d6d982dSMomchil Velikov}
630*5d6d982dSMomchil Velikov
631*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svsxtb_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {
632*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtb_nxv4i32_ptrue:
633*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
634*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
635*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
636*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.s, p0/m, z2.s
637*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
638*5d6d982dSMomchil Velikov;
639*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtb_nxv4i32_ptrue:
640*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
641*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
642*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.s, p0/z, z2.s
643*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
644*5d6d982dSMomchil Velikoventry:
645*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
646*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)
647*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
648*5d6d982dSMomchil Velikov}
649*5d6d982dSMomchil Velikov
650*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svsxtb_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {
651*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtb_nxv2i64_ptrue_u:
652*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
653*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
654*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
655*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.d, p0/m, z1.d
656*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
657*5d6d982dSMomchil Velikov;
658*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtb_nxv2i64_ptrue_u:
659*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
660*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
661*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.d, p0/z, z1.d
662*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
663*5d6d982dSMomchil Velikoventry:
664*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
665*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
666*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
667*5d6d982dSMomchil Velikov}
668*5d6d982dSMomchil Velikov
669*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svsxtb_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
670*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtb_nxv2i64_ptrue:
671*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
672*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
673*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
674*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtb z0.d, p0/m, z2.d
675*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
676*5d6d982dSMomchil Velikov;
677*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtb_nxv2i64_ptrue:
678*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
679*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
680*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtb z0.d, p0/z, z2.d
681*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
682*5d6d982dSMomchil Velikoventry:
683*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
684*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)
685*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
686*5d6d982dSMomchil Velikov}
687*5d6d982dSMomchil Velikov
688*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svuxtb_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {
689*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtb_nxv8i16_ptrue_u:
690*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
691*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.h
692*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
693*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.h, p0/m, z1.h
694*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
695*5d6d982dSMomchil Velikov;
696*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtb_nxv8i16_ptrue_u:
697*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
698*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.h
699*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.h, p0/z, z1.h
700*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
701*5d6d982dSMomchil Velikoventry:
702*5d6d982dSMomchil Velikov  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
703*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)
704*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
705*5d6d982dSMomchil Velikov}
706*5d6d982dSMomchil Velikov
707*5d6d982dSMomchil Velikovdefine <vscale x 8 x i16> @test_svuxtb_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {
708*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtb_nxv8i16_ptrue:
709*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
710*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.h
711*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
712*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.h, p0/m, z2.h
713*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
714*5d6d982dSMomchil Velikov;
715*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtb_nxv8i16_ptrue:
716*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
717*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.h
718*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.h, p0/z, z2.h
719*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
720*5d6d982dSMomchil Velikoventry:
721*5d6d982dSMomchil Velikov  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
722*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)
723*5d6d982dSMomchil Velikov  ret <vscale x 8 x i16> %0
724*5d6d982dSMomchil Velikov}
725*5d6d982dSMomchil Velikov
726*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svuxtb_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {
727*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtb_nxv4i32_ptrue_u:
728*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
729*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
730*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
731*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.s, p0/m, z1.s
732*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
733*5d6d982dSMomchil Velikov;
734*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtb_nxv4i32_ptrue_u:
735*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
736*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
737*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.s, p0/z, z1.s
738*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
739*5d6d982dSMomchil Velikoventry:
740*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
741*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
742*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
743*5d6d982dSMomchil Velikov}
744*5d6d982dSMomchil Velikov
745*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svuxtb_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {
746*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtb_nxv4i32_ptrue:
747*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
748*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
749*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
750*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.s, p0/m, z2.s
751*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
752*5d6d982dSMomchil Velikov;
753*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtb_nxv4i32_ptrue:
754*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
755*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
756*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.s, p0/z, z2.s
757*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
758*5d6d982dSMomchil Velikoventry:
759*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
760*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)
761*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
762*5d6d982dSMomchil Velikov}
763*5d6d982dSMomchil Velikov
764*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svuxtb_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {
765*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtb_nxv2i64_ptrue_u:
766*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
767*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
768*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
769*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.d, p0/m, z1.d
770*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
771*5d6d982dSMomchil Velikov;
772*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtb_nxv2i64_ptrue_u:
773*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
774*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
775*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.d, p0/z, z1.d
776*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
777*5d6d982dSMomchil Velikoventry:
778*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
779*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
780*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
781*5d6d982dSMomchil Velikov}
782*5d6d982dSMomchil Velikov
783*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svuxtb_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
784*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtb_nxv2i64_ptrue:
785*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
786*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
787*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
788*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtb z0.d, p0/m, z2.d
789*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
790*5d6d982dSMomchil Velikov;
791*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtb_nxv2i64_ptrue:
792*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
793*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
794*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtb z0.d, p0/z, z2.d
795*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
796*5d6d982dSMomchil Velikoventry:
797*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
798*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)
799*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
800*5d6d982dSMomchil Velikov}
801*5d6d982dSMomchil Velikov
802*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svsxth_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {
803*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxth_nxv4i32_ptrue_u:
804*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
805*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
806*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
807*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.s, p0/m, z1.s
808*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
809*5d6d982dSMomchil Velikov;
810*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxth_nxv4i32_ptrue_u:
811*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
812*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
813*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.s, p0/z, z1.s
814*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
815*5d6d982dSMomchil Velikoventry:
816*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
817*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
818*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
819*5d6d982dSMomchil Velikov}
820*5d6d982dSMomchil Velikov
821*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svsxth_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {
822*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxth_nxv4i32_ptrue:
823*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
824*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
825*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
826*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.s, p0/m, z2.s
827*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
828*5d6d982dSMomchil Velikov;
829*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxth_nxv4i32_ptrue:
830*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
831*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
832*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.s, p0/z, z2.s
833*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
834*5d6d982dSMomchil Velikoventry:
835*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
836*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)
837*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
838*5d6d982dSMomchil Velikov}
839*5d6d982dSMomchil Velikov
840*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svsxth_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {
841*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxth_nxv2i64_ptrue_u:
842*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
843*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
844*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
845*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.d, p0/m, z1.d
846*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
847*5d6d982dSMomchil Velikov;
848*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxth_nxv2i64_ptrue_u:
849*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
850*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
851*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.d, p0/z, z1.d
852*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
853*5d6d982dSMomchil Velikoventry:
854*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
855*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
856*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
857*5d6d982dSMomchil Velikov}
858*5d6d982dSMomchil Velikov
859*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svsxth_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
860*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxth_nxv2i64_ptrue:
861*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
862*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
863*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
864*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxth z0.d, p0/m, z2.d
865*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
866*5d6d982dSMomchil Velikov;
867*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxth_nxv2i64_ptrue:
868*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
869*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
870*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxth z0.d, p0/z, z2.d
871*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
872*5d6d982dSMomchil Velikoventry:
873*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
874*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)
875*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
876*5d6d982dSMomchil Velikov}
877*5d6d982dSMomchil Velikov
878*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svuxth_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {
879*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxth_nxv4i32_ptrue_u:
880*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
881*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
882*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
883*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.s, p0/m, z1.s
884*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
885*5d6d982dSMomchil Velikov;
886*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxth_nxv4i32_ptrue_u:
887*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
888*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
889*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.s, p0/z, z1.s
890*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
891*5d6d982dSMomchil Velikoventry:
892*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
893*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)
894*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
895*5d6d982dSMomchil Velikov}
896*5d6d982dSMomchil Velikov
897*5d6d982dSMomchil Velikovdefine <vscale x 4 x i32> @test_svuxth_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {
898*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxth_nxv4i32_ptrue:
899*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
900*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.s
901*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
902*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.s, p0/m, z2.s
903*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
904*5d6d982dSMomchil Velikov;
905*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxth_nxv4i32_ptrue:
906*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
907*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.s
908*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.s, p0/z, z2.s
909*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
910*5d6d982dSMomchil Velikoventry:
911*5d6d982dSMomchil Velikov  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
912*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)
913*5d6d982dSMomchil Velikov  ret <vscale x 4 x i32> %0
914*5d6d982dSMomchil Velikov}
915*5d6d982dSMomchil Velikov
916*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svuxth_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {
917*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxth_nxv2i64_ptrue_u:
918*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
919*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
920*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
921*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.d, p0/m, z1.d
922*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
923*5d6d982dSMomchil Velikov;
924*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxth_nxv2i64_ptrue_u:
925*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
926*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
927*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.d, p0/z, z1.d
928*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
929*5d6d982dSMomchil Velikoventry:
930*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
931*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
932*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
933*5d6d982dSMomchil Velikov}
934*5d6d982dSMomchil Velikov
935*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svuxth_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
936*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxth_nxv2i64_ptrue:
937*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
938*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
939*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
940*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxth z0.d, p0/m, z2.d
941*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
942*5d6d982dSMomchil Velikov;
943*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxth_nxv2i64_ptrue:
944*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
945*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
946*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxth z0.d, p0/z, z2.d
947*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
948*5d6d982dSMomchil Velikoventry:
949*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
950*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)
951*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
952*5d6d982dSMomchil Velikov}
953*5d6d982dSMomchil Velikov
954*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svsxtw_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {
955*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtw_nxv2i64_ptrue_u:
956*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
957*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
958*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
959*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtw z0.d, p0/m, z1.d
960*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
961*5d6d982dSMomchil Velikov;
962*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtw_nxv2i64_ptrue_u:
963*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
964*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
965*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtw z0.d, p0/z, z1.d
966*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
967*5d6d982dSMomchil Velikoventry:
968*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
969*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
970*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
971*5d6d982dSMomchil Velikov}
972*5d6d982dSMomchil Velikov
973*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svsxtw_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
974*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svsxtw_nxv2i64_ptrue:
975*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
976*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
977*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
978*5d6d982dSMomchil Velikov; CHECK-NEXT:    sxtw z0.d, p0/m, z2.d
979*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
980*5d6d982dSMomchil Velikov;
981*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svsxtw_nxv2i64_ptrue:
982*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
983*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
984*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    sxtw z0.d, p0/z, z2.d
985*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
986*5d6d982dSMomchil Velikoventry:
987*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
988*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)
989*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
990*5d6d982dSMomchil Velikov}
991*5d6d982dSMomchil Velikov
992*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svuxtw_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {
993*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtw_nxv2i64_ptrue_u:
994*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
995*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
996*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z1
997*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtw z0.d, p0/m, z1.d
998*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
999*5d6d982dSMomchil Velikov;
1000*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtw_nxv2i64_ptrue_u:
1001*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
1002*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
1003*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtw z0.d, p0/z, z1.d
1004*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
1005*5d6d982dSMomchil Velikoventry:
1006*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1007*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)
1008*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
1009*5d6d982dSMomchil Velikov}
1010*5d6d982dSMomchil Velikov
1011*5d6d982dSMomchil Velikovdefine <vscale x 2 x i64> @test_svuxtw_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
1012*5d6d982dSMomchil Velikov; CHECK-LABEL: test_svuxtw_nxv2i64_ptrue:
1013*5d6d982dSMomchil Velikov; CHECK:       // %bb.0: // %entry
1014*5d6d982dSMomchil Velikov; CHECK-NEXT:    ptrue p0.d
1015*5d6d982dSMomchil Velikov; CHECK-NEXT:    movprfx z0, z2
1016*5d6d982dSMomchil Velikov; CHECK-NEXT:    uxtw z0.d, p0/m, z2.d
1017*5d6d982dSMomchil Velikov; CHECK-NEXT:    ret
1018*5d6d982dSMomchil Velikov;
1019*5d6d982dSMomchil Velikov; CHECK-2p2-LABEL: test_svuxtw_nxv2i64_ptrue:
1020*5d6d982dSMomchil Velikov; CHECK-2p2:       // %bb.0: // %entry
1021*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ptrue p0.d
1022*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    uxtw z0.d, p0/z, z2.d
1023*5d6d982dSMomchil Velikov; CHECK-2p2-NEXT:    ret
1024*5d6d982dSMomchil Velikoventry:
1025*5d6d982dSMomchil Velikov  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1026*5d6d982dSMomchil Velikov  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)
1027*5d6d982dSMomchil Velikov  ret <vscale x 2 x i64> %0
1028*5d6d982dSMomchil Velikov}
1029