1 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve2 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
2 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve2 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s
3 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
4 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve2 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s
5 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s
6 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify=overload -verify-ignore-unexpected=error %s
7
8 #include <arm_sve.h>
9
10 #ifdef SVE_OVERLOADED_FORMS
11 // A simple used,unused... macro, long enough to represent any SVE builtin.
12 #define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3
13 #else
14 #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
15 #endif
16
test_svqshl_s8_z(svbool_t pg,svint8_t op1,svint8_t op2)17 svint8_t test_svqshl_s8_z(svbool_t pg, svint8_t op1, svint8_t op2)
18 {
19 // CHECK-LABEL: test_svqshl_s8_z
20 // CHECK: %[[SEL:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sel.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> zeroinitializer)
21 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %op2)
22 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
23 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
24 // expected-warning@+1 {{implicit declaration of function 'svqshl_s8_z'}}
25 return SVE_ACLE_FUNC(svqshl,_s8,_z,)(pg, op1, op2);
26 }
27
test_svqshl_s16_z(svbool_t pg,svint16_t op1,svint16_t op2)28 svint16_t test_svqshl_s16_z(svbool_t pg, svint16_t op1, svint16_t op2)
29 {
30 // CHECK-LABEL: test_svqshl_s16_z
31 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
32 // CHECK: %[[SEL:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> zeroinitializer)
33 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %op2)
34 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
35 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
36 // expected-warning@+1 {{implicit declaration of function 'svqshl_s16_z'}}
37 return SVE_ACLE_FUNC(svqshl,_s16,_z,)(pg, op1, op2);
38 }
39
test_svqshl_s32_z(svbool_t pg,svint32_t op1,svint32_t op2)40 svint32_t test_svqshl_s32_z(svbool_t pg, svint32_t op1, svint32_t op2)
41 {
42 // CHECK-LABEL: test_svqshl_s32_z
43 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
44 // CHECK: %[[SEL:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> zeroinitializer)
45 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %op2)
46 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
47 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
48 // expected-warning@+1 {{implicit declaration of function 'svqshl_s32_z'}}
49 return SVE_ACLE_FUNC(svqshl,_s32,_z,)(pg, op1, op2);
50 }
51
test_svqshl_s64_z(svbool_t pg,svint64_t op1,svint64_t op2)52 svint64_t test_svqshl_s64_z(svbool_t pg, svint64_t op1, svint64_t op2)
53 {
54 // CHECK-LABEL: test_svqshl_s64_z
55 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
56 // CHECK: %[[SEL:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> zeroinitializer)
57 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %op2)
58 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
59 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
60 // expected-warning@+1 {{implicit declaration of function 'svqshl_s64_z'}}
61 return SVE_ACLE_FUNC(svqshl,_s64,_z,)(pg, op1, op2);
62 }
63
test_svqshl_u8_z(svbool_t pg,svuint8_t op1,svint8_t op2)64 svuint8_t test_svqshl_u8_z(svbool_t pg, svuint8_t op1, svint8_t op2)
65 {
66 // CHECK-LABEL: test_svqshl_u8_z
67 // CHECK: %[[SEL:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sel.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> zeroinitializer)
68 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %op2)
69 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
70 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
71 // expected-warning@+1 {{implicit declaration of function 'svqshl_u8_z'}}
72 return SVE_ACLE_FUNC(svqshl,_u8,_z,)(pg, op1, op2);
73 }
74
test_svqshl_u16_z(svbool_t pg,svuint16_t op1,svint16_t op2)75 svuint16_t test_svqshl_u16_z(svbool_t pg, svuint16_t op1, svint16_t op2)
76 {
77 // CHECK-LABEL: test_svqshl_u16_z
78 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
79 // CHECK: %[[SEL:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> zeroinitializer)
80 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %op2)
81 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
82 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
83 // expected-warning@+1 {{implicit declaration of function 'svqshl_u16_z'}}
84 return SVE_ACLE_FUNC(svqshl,_u16,_z,)(pg, op1, op2);
85 }
86
test_svqshl_u32_z(svbool_t pg,svuint32_t op1,svint32_t op2)87 svuint32_t test_svqshl_u32_z(svbool_t pg, svuint32_t op1, svint32_t op2)
88 {
89 // CHECK-LABEL: test_svqshl_u32_z
90 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
91 // CHECK: %[[SEL:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> zeroinitializer)
92 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %op2)
93 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
94 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
95 // expected-warning@+1 {{implicit declaration of function 'svqshl_u32_z'}}
96 return SVE_ACLE_FUNC(svqshl,_u32,_z,)(pg, op1, op2);
97 }
98
test_svqshl_u64_z(svbool_t pg,svuint64_t op1,svint64_t op2)99 svuint64_t test_svqshl_u64_z(svbool_t pg, svuint64_t op1, svint64_t op2)
100 {
101 // CHECK-LABEL: test_svqshl_u64_z
102 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
103 // CHECK: %[[SEL:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> zeroinitializer)
104 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %op2)
105 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
106 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
107 // expected-warning@+1 {{implicit declaration of function 'svqshl_u64_z'}}
108 return SVE_ACLE_FUNC(svqshl,_u64,_z,)(pg, op1, op2);
109 }
110
test_svqshl_s8_m(svbool_t pg,svint8_t op1,svint8_t op2)111 svint8_t test_svqshl_s8_m(svbool_t pg, svint8_t op1, svint8_t op2)
112 {
113 // CHECK-LABEL: test_svqshl_s8_m
114 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
115 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
116 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
117 // expected-warning@+1 {{implicit declaration of function 'svqshl_s8_m'}}
118 return SVE_ACLE_FUNC(svqshl,_s8,_m,)(pg, op1, op2);
119 }
120
test_svqshl_s16_m(svbool_t pg,svint16_t op1,svint16_t op2)121 svint16_t test_svqshl_s16_m(svbool_t pg, svint16_t op1, svint16_t op2)
122 {
123 // CHECK-LABEL: test_svqshl_s16_m
124 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
125 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
126 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
127 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
128 // expected-warning@+1 {{implicit declaration of function 'svqshl_s16_m'}}
129 return SVE_ACLE_FUNC(svqshl,_s16,_m,)(pg, op1, op2);
130 }
131
test_svqshl_s32_m(svbool_t pg,svint32_t op1,svint32_t op2)132 svint32_t test_svqshl_s32_m(svbool_t pg, svint32_t op1, svint32_t op2)
133 {
134 // CHECK-LABEL: test_svqshl_s32_m
135 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
136 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
137 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
138 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
139 // expected-warning@+1 {{implicit declaration of function 'svqshl_s32_m'}}
140 return SVE_ACLE_FUNC(svqshl,_s32,_m,)(pg, op1, op2);
141 }
142
test_svqshl_s64_m(svbool_t pg,svint64_t op1,svint64_t op2)143 svint64_t test_svqshl_s64_m(svbool_t pg, svint64_t op1, svint64_t op2)
144 {
145 // CHECK-LABEL: test_svqshl_s64_m
146 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
147 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
148 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
149 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
150 // expected-warning@+1 {{implicit declaration of function 'svqshl_s64_m'}}
151 return SVE_ACLE_FUNC(svqshl,_s64,_m,)(pg, op1, op2);
152 }
153
test_svqshl_u8_m(svbool_t pg,svuint8_t op1,svint8_t op2)154 svuint8_t test_svqshl_u8_m(svbool_t pg, svuint8_t op1, svint8_t op2)
155 {
156 // CHECK-LABEL: test_svqshl_u8_m
157 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
158 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
159 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
160 // expected-warning@+1 {{implicit declaration of function 'svqshl_u8_m'}}
161 return SVE_ACLE_FUNC(svqshl,_u8,_m,)(pg, op1, op2);
162 }
163
test_svqshl_u16_m(svbool_t pg,svuint16_t op1,svint16_t op2)164 svuint16_t test_svqshl_u16_m(svbool_t pg, svuint16_t op1, svint16_t op2)
165 {
166 // CHECK-LABEL: test_svqshl_u16_m
167 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
168 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
169 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
170 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
171 // expected-warning@+1 {{implicit declaration of function 'svqshl_u16_m'}}
172 return SVE_ACLE_FUNC(svqshl,_u16,_m,)(pg, op1, op2);
173 }
174
test_svqshl_u32_m(svbool_t pg,svuint32_t op1,svint32_t op2)175 svuint32_t test_svqshl_u32_m(svbool_t pg, svuint32_t op1, svint32_t op2)
176 {
177 // CHECK-LABEL: test_svqshl_u32_m
178 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
179 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
180 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
181 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
182 // expected-warning@+1 {{implicit declaration of function 'svqshl_u32_m'}}
183 return SVE_ACLE_FUNC(svqshl,_u32,_m,)(pg, op1, op2);
184 }
185
test_svqshl_u64_m(svbool_t pg,svuint64_t op1,svint64_t op2)186 svuint64_t test_svqshl_u64_m(svbool_t pg, svuint64_t op1, svint64_t op2)
187 {
188 // CHECK-LABEL: test_svqshl_u64_m
189 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
190 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
191 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
192 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
193 // expected-warning@+1 {{implicit declaration of function 'svqshl_u64_m'}}
194 return SVE_ACLE_FUNC(svqshl,_u64,_m,)(pg, op1, op2);
195 }
196
test_svqshl_s8_x(svbool_t pg,svint8_t op1,svint8_t op2)197 svint8_t test_svqshl_s8_x(svbool_t pg, svint8_t op1, svint8_t op2)
198 {
199 // CHECK-LABEL: test_svqshl_s8_x
200 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
201 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
202 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
203 // expected-warning@+1 {{implicit declaration of function 'svqshl_s8_x'}}
204 return SVE_ACLE_FUNC(svqshl,_s8,_x,)(pg, op1, op2);
205 }
206
test_svqshl_s16_x(svbool_t pg,svint16_t op1,svint16_t op2)207 svint16_t test_svqshl_s16_x(svbool_t pg, svint16_t op1, svint16_t op2)
208 {
209 // CHECK-LABEL: test_svqshl_s16_x
210 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
211 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
212 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
213 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
214 // expected-warning@+1 {{implicit declaration of function 'svqshl_s16_x'}}
215 return SVE_ACLE_FUNC(svqshl,_s16,_x,)(pg, op1, op2);
216 }
217
test_svqshl_s32_x(svbool_t pg,svint32_t op1,svint32_t op2)218 svint32_t test_svqshl_s32_x(svbool_t pg, svint32_t op1, svint32_t op2)
219 {
220 // CHECK-LABEL: test_svqshl_s32_x
221 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
222 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
223 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
224 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
225 // expected-warning@+1 {{implicit declaration of function 'svqshl_s32_x'}}
226 return SVE_ACLE_FUNC(svqshl,_s32,_x,)(pg, op1, op2);
227 }
228
test_svqshl_s64_x(svbool_t pg,svint64_t op1,svint64_t op2)229 svint64_t test_svqshl_s64_x(svbool_t pg, svint64_t op1, svint64_t op2)
230 {
231 // CHECK-LABEL: test_svqshl_s64_x
232 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
233 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
234 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
235 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
236 // expected-warning@+1 {{implicit declaration of function 'svqshl_s64_x'}}
237 return SVE_ACLE_FUNC(svqshl,_s64,_x,)(pg, op1, op2);
238 }
239
test_svqshl_u8_x(svbool_t pg,svuint8_t op1,svint8_t op2)240 svuint8_t test_svqshl_u8_x(svbool_t pg, svuint8_t op1, svint8_t op2)
241 {
242 // CHECK-LABEL: test_svqshl_u8_x
243 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
244 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
245 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
246 // expected-warning@+1 {{implicit declaration of function 'svqshl_u8_x'}}
247 return SVE_ACLE_FUNC(svqshl,_u8,_x,)(pg, op1, op2);
248 }
249
test_svqshl_u16_x(svbool_t pg,svuint16_t op1,svint16_t op2)250 svuint16_t test_svqshl_u16_x(svbool_t pg, svuint16_t op1, svint16_t op2)
251 {
252 // CHECK-LABEL: test_svqshl_u16_x
253 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
254 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
255 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
256 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
257 // expected-warning@+1 {{implicit declaration of function 'svqshl_u16_x'}}
258 return SVE_ACLE_FUNC(svqshl,_u16,_x,)(pg, op1, op2);
259 }
260
test_svqshl_u32_x(svbool_t pg,svuint32_t op1,svint32_t op2)261 svuint32_t test_svqshl_u32_x(svbool_t pg, svuint32_t op1, svint32_t op2)
262 {
263 // CHECK-LABEL: test_svqshl_u32_x
264 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
265 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
266 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
267 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
268 // expected-warning@+1 {{implicit declaration of function 'svqshl_u32_x'}}
269 return SVE_ACLE_FUNC(svqshl,_u32,_x,)(pg, op1, op2);
270 }
271
test_svqshl_u64_x(svbool_t pg,svuint64_t op1,svint64_t op2)272 svuint64_t test_svqshl_u64_x(svbool_t pg, svuint64_t op1, svint64_t op2)
273 {
274 // CHECK-LABEL: test_svqshl_u64_x
275 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
276 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
277 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
278 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
279 // expected-warning@+1 {{implicit declaration of function 'svqshl_u64_x'}}
280 return SVE_ACLE_FUNC(svqshl,_u64,_x,)(pg, op1, op2);
281 }
282
test_svqshl_n_s8_z(svbool_t pg,svint8_t op1,int8_t op2)283 svint8_t test_svqshl_n_s8_z(svbool_t pg, svint8_t op1, int8_t op2)
284 {
285 // CHECK-LABEL: test_svqshl_n_s8_z
286 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
287 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sel.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> zeroinitializer)
288 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %[[DUP]])
289 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
290 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
291 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s8_z'}}
292 return SVE_ACLE_FUNC(svqshl,_n_s8,_z,)(pg, op1, op2);
293 }
294
test_svqshl_n_s16_z(svbool_t pg,svint16_t op1,int16_t op2)295 svint16_t test_svqshl_n_s16_z(svbool_t pg, svint16_t op1, int16_t op2)
296 {
297 // CHECK-LABEL: test_svqshl_n_s16_z
298 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
299 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
300 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> zeroinitializer)
301 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %[[DUP]])
302 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
303 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
304 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s16_z'}}
305 return SVE_ACLE_FUNC(svqshl,_n_s16,_z,)(pg, op1, op2);
306 }
307
test_svqshl_n_s32_z(svbool_t pg,svint32_t op1,int32_t op2)308 svint32_t test_svqshl_n_s32_z(svbool_t pg, svint32_t op1, int32_t op2)
309 {
310 // CHECK-LABEL: test_svqshl_n_s32_z
311 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
312 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
313 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> zeroinitializer)
314 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %[[DUP]])
315 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
316 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
317 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s32_z'}}
318 return SVE_ACLE_FUNC(svqshl,_n_s32,_z,)(pg, op1, op2);
319 }
320
test_svqshl_n_s64_z(svbool_t pg,svint64_t op1,int64_t op2)321 svint64_t test_svqshl_n_s64_z(svbool_t pg, svint64_t op1, int64_t op2)
322 {
323 // CHECK-LABEL: test_svqshl_n_s64_z
324 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
325 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
326 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> zeroinitializer)
327 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %[[DUP]])
328 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
329 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
330 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s64_z'}}
331 return SVE_ACLE_FUNC(svqshl,_n_s64,_z,)(pg, op1, op2);
332 }
333
test_svqshl_n_u8_z(svbool_t pg,svuint8_t op1,int8_t op2)334 svuint8_t test_svqshl_n_u8_z(svbool_t pg, svuint8_t op1, int8_t op2)
335 {
336 // CHECK-LABEL: test_svqshl_n_u8_z
337 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
338 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sel.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> zeroinitializer)
339 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %[[DUP]])
340 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
341 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
342 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u8_z'}}
343 return SVE_ACLE_FUNC(svqshl,_n_u8,_z,)(pg, op1, op2);
344 }
345
test_svqshl_n_u16_z(svbool_t pg,svuint16_t op1,int16_t op2)346 svuint16_t test_svqshl_n_u16_z(svbool_t pg, svuint16_t op1, int16_t op2)
347 {
348 // CHECK-LABEL: test_svqshl_n_u16_z
349 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
350 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
351 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> zeroinitializer)
352 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %[[DUP]])
353 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
354 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
355 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u16_z'}}
356 return SVE_ACLE_FUNC(svqshl,_n_u16,_z,)(pg, op1, op2);
357 }
358
test_svqshl_n_u32_z(svbool_t pg,svuint32_t op1,int32_t op2)359 svuint32_t test_svqshl_n_u32_z(svbool_t pg, svuint32_t op1, int32_t op2)
360 {
361 // CHECK-LABEL: test_svqshl_n_u32_z
362 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
363 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
364 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> zeroinitializer)
365 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %[[DUP]])
366 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
367 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
368 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u32_z'}}
369 return SVE_ACLE_FUNC(svqshl,_n_u32,_z,)(pg, op1, op2);
370 }
371
test_svqshl_n_u64_z(svbool_t pg,svuint64_t op1,int64_t op2)372 svuint64_t test_svqshl_n_u64_z(svbool_t pg, svuint64_t op1, int64_t op2)
373 {
374 // CHECK-LABEL: test_svqshl_n_u64_z
375 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
376 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
377 // CHECK-DAG: %[[SEL:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> zeroinitializer)
378 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %[[DUP]])
379 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
380 // overload-warning@+2 {{implicit declaration of function 'svqshl_z'}}
381 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u64_z'}}
382 return SVE_ACLE_FUNC(svqshl,_n_u64,_z,)(pg, op1, op2);
383 }
384
test_svqshl_n_s8_m(svbool_t pg,svint8_t op1,int8_t op2)385 svint8_t test_svqshl_n_s8_m(svbool_t pg, svint8_t op1, int8_t op2)
386 {
387 // CHECK-LABEL: test_svqshl_n_s8_m
388 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
389 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
390 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
391 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
392 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s8_m'}}
393 return SVE_ACLE_FUNC(svqshl,_n_s8,_m,)(pg, op1, op2);
394 }
395
test_svqshl_n_s16_m(svbool_t pg,svint16_t op1,int16_t op2)396 svint16_t test_svqshl_n_s16_m(svbool_t pg, svint16_t op1, int16_t op2)
397 {
398 // CHECK-LABEL: test_svqshl_n_s16_m
399 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
400 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
401 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
402 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
403 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
404 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s16_m'}}
405 return SVE_ACLE_FUNC(svqshl,_n_s16,_m,)(pg, op1, op2);
406 }
407
test_svqshl_n_s32_m(svbool_t pg,svint32_t op1,int32_t op2)408 svint32_t test_svqshl_n_s32_m(svbool_t pg, svint32_t op1, int32_t op2)
409 {
410 // CHECK-LABEL: test_svqshl_n_s32_m
411 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
412 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
413 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
414 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
415 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
416 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s32_m'}}
417 return SVE_ACLE_FUNC(svqshl,_n_s32,_m,)(pg, op1, op2);
418 }
419
test_svqshl_n_s64_m(svbool_t pg,svint64_t op1,int64_t op2)420 svint64_t test_svqshl_n_s64_m(svbool_t pg, svint64_t op1, int64_t op2)
421 {
422 // CHECK-LABEL: test_svqshl_n_s64_m
423 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
424 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
425 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
426 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
427 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
428 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s64_m'}}
429 return SVE_ACLE_FUNC(svqshl,_n_s64,_m,)(pg, op1, op2);
430 }
431
test_svqshl_n_u8_m(svbool_t pg,svuint8_t op1,int8_t op2)432 svuint8_t test_svqshl_n_u8_m(svbool_t pg, svuint8_t op1, int8_t op2)
433 {
434 // CHECK-LABEL: test_svqshl_n_u8_m
435 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
436 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
437 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
438 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
439 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u8_m'}}
440 return SVE_ACLE_FUNC(svqshl,_n_u8,_m,)(pg, op1, op2);
441 }
442
test_svqshl_n_u16_m(svbool_t pg,svuint16_t op1,int16_t op2)443 svuint16_t test_svqshl_n_u16_m(svbool_t pg, svuint16_t op1, int16_t op2)
444 {
445 // CHECK-LABEL: test_svqshl_n_u16_m
446 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
447 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
448 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
449 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
450 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
451 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u16_m'}}
452 return SVE_ACLE_FUNC(svqshl,_n_u16,_m,)(pg, op1, op2);
453 }
454
test_svqshl_n_u32_m(svbool_t pg,svuint32_t op1,int32_t op2)455 svuint32_t test_svqshl_n_u32_m(svbool_t pg, svuint32_t op1, int32_t op2)
456 {
457 // CHECK-LABEL: test_svqshl_n_u32_m
458 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
459 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
460 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
461 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
462 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
463 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u32_m'}}
464 return SVE_ACLE_FUNC(svqshl,_n_u32,_m,)(pg, op1, op2);
465 }
466
test_svqshl_n_u64_m(svbool_t pg,svuint64_t op1,int64_t op2)467 svuint64_t test_svqshl_n_u64_m(svbool_t pg, svuint64_t op1, int64_t op2)
468 {
469 // CHECK-LABEL: test_svqshl_n_u64_m
470 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
471 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
472 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
473 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
474 // overload-warning@+2 {{implicit declaration of function 'svqshl_m'}}
475 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u64_m'}}
476 return SVE_ACLE_FUNC(svqshl,_n_u64,_m,)(pg, op1, op2);
477 }
478
test_svqshl_n_s8_x(svbool_t pg,svint8_t op1,int8_t op2)479 svint8_t test_svqshl_n_s8_x(svbool_t pg, svint8_t op1, int8_t op2)
480 {
481 // CHECK-LABEL: test_svqshl_n_s8_x
482 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
483 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
484 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
485 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
486 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s8_x'}}
487 return SVE_ACLE_FUNC(svqshl,_n_s8,_x,)(pg, op1, op2);
488 }
489
test_svqshl_n_s16_x(svbool_t pg,svint16_t op1,int16_t op2)490 svint16_t test_svqshl_n_s16_x(svbool_t pg, svint16_t op1, int16_t op2)
491 {
492 // CHECK-LABEL: test_svqshl_n_s16_x
493 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
494 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
495 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
496 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
497 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
498 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s16_x'}}
499 return SVE_ACLE_FUNC(svqshl,_n_s16,_x,)(pg, op1, op2);
500 }
501
test_svqshl_n_s32_x(svbool_t pg,svint32_t op1,int32_t op2)502 svint32_t test_svqshl_n_s32_x(svbool_t pg, svint32_t op1, int32_t op2)
503 {
504 // CHECK-LABEL: test_svqshl_n_s32_x
505 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
506 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
507 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
508 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
509 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
510 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s32_x'}}
511 return SVE_ACLE_FUNC(svqshl,_n_s32,_x,)(pg, op1, op2);
512 }
513
test_svqshl_n_s64_x(svbool_t pg,svint64_t op1,int64_t op2)514 svint64_t test_svqshl_n_s64_x(svbool_t pg, svint64_t op1, int64_t op2)
515 {
516 // CHECK-LABEL: test_svqshl_n_s64_x
517 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
518 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
519 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
520 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
521 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
522 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_s64_x'}}
523 return SVE_ACLE_FUNC(svqshl,_n_s64,_x,)(pg, op1, op2);
524 }
525
test_svqshl_n_u8_x(svbool_t pg,svuint8_t op1,int8_t op2)526 svuint8_t test_svqshl_n_u8_x(svbool_t pg, svuint8_t op1, int8_t op2)
527 {
528 // CHECK-LABEL: test_svqshl_n_u8_x
529 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
530 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
531 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
532 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
533 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u8_x'}}
534 return SVE_ACLE_FUNC(svqshl,_n_u8,_x,)(pg, op1, op2);
535 }
536
test_svqshl_n_u16_x(svbool_t pg,svuint16_t op1,int16_t op2)537 svuint16_t test_svqshl_n_u16_x(svbool_t pg, svuint16_t op1, int16_t op2)
538 {
539 // CHECK-LABEL: test_svqshl_n_u16_x
540 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
541 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
542 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
543 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
544 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
545 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u16_x'}}
546 return SVE_ACLE_FUNC(svqshl,_n_u16,_x,)(pg, op1, op2);
547 }
548
test_svqshl_n_u32_x(svbool_t pg,svuint32_t op1,int32_t op2)549 svuint32_t test_svqshl_n_u32_x(svbool_t pg, svuint32_t op1, int32_t op2)
550 {
551 // CHECK-LABEL: test_svqshl_n_u32_x
552 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
553 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
554 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
555 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
556 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
557 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u32_x'}}
558 return SVE_ACLE_FUNC(svqshl,_n_u32,_x,)(pg, op1, op2);
559 }
560
test_svqshl_n_u64_x(svbool_t pg,svuint64_t op1,int64_t op2)561 svuint64_t test_svqshl_n_u64_x(svbool_t pg, svuint64_t op1, int64_t op2)
562 {
563 // CHECK-LABEL: test_svqshl_n_u64_x
564 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
565 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
566 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
567 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
568 // overload-warning@+2 {{implicit declaration of function 'svqshl_x'}}
569 // expected-warning@+1 {{implicit declaration of function 'svqshl_n_u64_x'}}
570 return SVE_ACLE_FUNC(svqshl,_n_u64,_x,)(pg, op1, op2);
571 }
572