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 -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
3 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s
4 // 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
5
6 #include <arm_sve.h>
7
8 #ifdef SVE_OVERLOADED_FORMS
9 // A simple used,unused... macro, long enough to represent any SVE builtin.
10 #define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3
11 #else
12 #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
13 #endif
14
test_svqrshl_s8_z(svbool_t pg,svint8_t op1,svint8_t op2)15 svint8_t test_svqrshl_s8_z(svbool_t pg, svint8_t op1, svint8_t op2)
16 {
17 // CHECK-LABEL: test_svqrshl_s8_z
18 // 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)
19 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %op2)
20 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
21 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
22 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s8_z'}}
23 return SVE_ACLE_FUNC(svqrshl,_s8,_z,)(pg, op1, op2);
24 }
25
test_svqrshl_s16_z(svbool_t pg,svint16_t op1,svint16_t op2)26 svint16_t test_svqrshl_s16_z(svbool_t pg, svint16_t op1, svint16_t op2)
27 {
28 // CHECK-LABEL: test_svqrshl_s16_z
29 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
30 // 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)
31 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %op2)
32 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
33 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
34 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s16_z'}}
35 return SVE_ACLE_FUNC(svqrshl,_s16,_z,)(pg, op1, op2);
36 }
37
test_svqrshl_s32_z(svbool_t pg,svint32_t op1,svint32_t op2)38 svint32_t test_svqrshl_s32_z(svbool_t pg, svint32_t op1, svint32_t op2)
39 {
40 // CHECK-LABEL: test_svqrshl_s32_z
41 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
42 // 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)
43 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %op2)
44 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
45 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
46 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s32_z'}}
47 return SVE_ACLE_FUNC(svqrshl,_s32,_z,)(pg, op1, op2);
48 }
49
test_svqrshl_s64_z(svbool_t pg,svint64_t op1,svint64_t op2)50 svint64_t test_svqrshl_s64_z(svbool_t pg, svint64_t op1, svint64_t op2)
51 {
52 // CHECK-LABEL: test_svqrshl_s64_z
53 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
54 // 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)
55 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %op2)
56 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
57 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
58 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s64_z'}}
59 return SVE_ACLE_FUNC(svqrshl,_s64,_z,)(pg, op1, op2);
60 }
61
test_svqrshl_u8_z(svbool_t pg,svuint8_t op1,svint8_t op2)62 svuint8_t test_svqrshl_u8_z(svbool_t pg, svuint8_t op1, svint8_t op2)
63 {
64 // CHECK-LABEL: test_svqrshl_u8_z
65 // 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)
66 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %op2)
67 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
68 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
69 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u8_z'}}
70 return SVE_ACLE_FUNC(svqrshl,_u8,_z,)(pg, op1, op2);
71 }
72
test_svqrshl_u16_z(svbool_t pg,svuint16_t op1,svint16_t op2)73 svuint16_t test_svqrshl_u16_z(svbool_t pg, svuint16_t op1, svint16_t op2)
74 {
75 // CHECK-LABEL: test_svqrshl_u16_z
76 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
77 // 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)
78 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %op2)
79 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
80 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
81 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u16_z'}}
82 return SVE_ACLE_FUNC(svqrshl,_u16,_z,)(pg, op1, op2);
83 }
84
test_svqrshl_u32_z(svbool_t pg,svuint32_t op1,svint32_t op2)85 svuint32_t test_svqrshl_u32_z(svbool_t pg, svuint32_t op1, svint32_t op2)
86 {
87 // CHECK-LABEL: test_svqrshl_u32_z
88 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
89 // 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)
90 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %op2)
91 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
92 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
93 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u32_z'}}
94 return SVE_ACLE_FUNC(svqrshl,_u32,_z,)(pg, op1, op2);
95 }
96
test_svqrshl_u64_z(svbool_t pg,svuint64_t op1,svint64_t op2)97 svuint64_t test_svqrshl_u64_z(svbool_t pg, svuint64_t op1, svint64_t op2)
98 {
99 // CHECK-LABEL: test_svqrshl_u64_z
100 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
101 // 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)
102 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %op2)
103 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
104 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
105 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u64_z'}}
106 return SVE_ACLE_FUNC(svqrshl,_u64,_z,)(pg, op1, op2);
107 }
108
test_svqrshl_s8_m(svbool_t pg,svint8_t op1,svint8_t op2)109 svint8_t test_svqrshl_s8_m(svbool_t pg, svint8_t op1, svint8_t op2)
110 {
111 // CHECK-LABEL: test_svqrshl_s8_m
112 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
113 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
114 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
115 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s8_m'}}
116 return SVE_ACLE_FUNC(svqrshl,_s8,_m,)(pg, op1, op2);
117 }
118
test_svqrshl_s16_m(svbool_t pg,svint16_t op1,svint16_t op2)119 svint16_t test_svqrshl_s16_m(svbool_t pg, svint16_t op1, svint16_t op2)
120 {
121 // CHECK-LABEL: test_svqrshl_s16_m
122 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
123 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
124 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
125 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
126 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s16_m'}}
127 return SVE_ACLE_FUNC(svqrshl,_s16,_m,)(pg, op1, op2);
128 }
129
test_svqrshl_s32_m(svbool_t pg,svint32_t op1,svint32_t op2)130 svint32_t test_svqrshl_s32_m(svbool_t pg, svint32_t op1, svint32_t op2)
131 {
132 // CHECK-LABEL: test_svqrshl_s32_m
133 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
134 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
135 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
136 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
137 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s32_m'}}
138 return SVE_ACLE_FUNC(svqrshl,_s32,_m,)(pg, op1, op2);
139 }
140
test_svqrshl_s64_m(svbool_t pg,svint64_t op1,svint64_t op2)141 svint64_t test_svqrshl_s64_m(svbool_t pg, svint64_t op1, svint64_t op2)
142 {
143 // CHECK-LABEL: test_svqrshl_s64_m
144 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
145 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
146 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
147 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
148 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s64_m'}}
149 return SVE_ACLE_FUNC(svqrshl,_s64,_m,)(pg, op1, op2);
150 }
151
test_svqrshl_u8_m(svbool_t pg,svuint8_t op1,svint8_t op2)152 svuint8_t test_svqrshl_u8_m(svbool_t pg, svuint8_t op1, svint8_t op2)
153 {
154 // CHECK-LABEL: test_svqrshl_u8_m
155 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
156 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
157 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
158 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u8_m'}}
159 return SVE_ACLE_FUNC(svqrshl,_u8,_m,)(pg, op1, op2);
160 }
161
test_svqrshl_u16_m(svbool_t pg,svuint16_t op1,svint16_t op2)162 svuint16_t test_svqrshl_u16_m(svbool_t pg, svuint16_t op1, svint16_t op2)
163 {
164 // CHECK-LABEL: test_svqrshl_u16_m
165 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
166 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
167 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
168 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
169 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u16_m'}}
170 return SVE_ACLE_FUNC(svqrshl,_u16,_m,)(pg, op1, op2);
171 }
172
test_svqrshl_u32_m(svbool_t pg,svuint32_t op1,svint32_t op2)173 svuint32_t test_svqrshl_u32_m(svbool_t pg, svuint32_t op1, svint32_t op2)
174 {
175 // CHECK-LABEL: test_svqrshl_u32_m
176 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
177 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
178 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
179 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
180 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u32_m'}}
181 return SVE_ACLE_FUNC(svqrshl,_u32,_m,)(pg, op1, op2);
182 }
183
test_svqrshl_u64_m(svbool_t pg,svuint64_t op1,svint64_t op2)184 svuint64_t test_svqrshl_u64_m(svbool_t pg, svuint64_t op1, svint64_t op2)
185 {
186 // CHECK-LABEL: test_svqrshl_u64_m
187 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
188 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
189 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
190 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
191 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u64_m'}}
192 return SVE_ACLE_FUNC(svqrshl,_u64,_m,)(pg, op1, op2);
193 }
194
test_svqrshl_s8_x(svbool_t pg,svint8_t op1,svint8_t op2)195 svint8_t test_svqrshl_s8_x(svbool_t pg, svint8_t op1, svint8_t op2)
196 {
197 // CHECK-LABEL: test_svqrshl_s8_x
198 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
199 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
200 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
201 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s8_x'}}
202 return SVE_ACLE_FUNC(svqrshl,_s8,_x,)(pg, op1, op2);
203 }
204
test_svqrshl_s16_x(svbool_t pg,svint16_t op1,svint16_t op2)205 svint16_t test_svqrshl_s16_x(svbool_t pg, svint16_t op1, svint16_t op2)
206 {
207 // CHECK-LABEL: test_svqrshl_s16_x
208 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
209 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
210 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
211 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
212 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s16_x'}}
213 return SVE_ACLE_FUNC(svqrshl,_s16,_x,)(pg, op1, op2);
214 }
215
test_svqrshl_s32_x(svbool_t pg,svint32_t op1,svint32_t op2)216 svint32_t test_svqrshl_s32_x(svbool_t pg, svint32_t op1, svint32_t op2)
217 {
218 // CHECK-LABEL: test_svqrshl_s32_x
219 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
220 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
221 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
222 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
223 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s32_x'}}
224 return SVE_ACLE_FUNC(svqrshl,_s32,_x,)(pg, op1, op2);
225 }
226
test_svqrshl_s64_x(svbool_t pg,svint64_t op1,svint64_t op2)227 svint64_t test_svqrshl_s64_x(svbool_t pg, svint64_t op1, svint64_t op2)
228 {
229 // CHECK-LABEL: test_svqrshl_s64_x
230 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
231 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
232 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
233 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
234 // expected-warning@+1 {{implicit declaration of function 'svqrshl_s64_x'}}
235 return SVE_ACLE_FUNC(svqrshl,_s64,_x,)(pg, op1, op2);
236 }
237
test_svqrshl_u8_x(svbool_t pg,svuint8_t op1,svint8_t op2)238 svuint8_t test_svqrshl_u8_x(svbool_t pg, svuint8_t op1, svint8_t op2)
239 {
240 // CHECK-LABEL: test_svqrshl_u8_x
241 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %op2)
242 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
243 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
244 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u8_x'}}
245 return SVE_ACLE_FUNC(svqrshl,_u8,_x,)(pg, op1, op2);
246 }
247
test_svqrshl_u16_x(svbool_t pg,svuint16_t op1,svint16_t op2)248 svuint16_t test_svqrshl_u16_x(svbool_t pg, svuint16_t op1, svint16_t op2)
249 {
250 // CHECK-LABEL: test_svqrshl_u16_x
251 // CHECK: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
252 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %op2)
253 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
254 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
255 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u16_x'}}
256 return SVE_ACLE_FUNC(svqrshl,_u16,_x,)(pg, op1, op2);
257 }
258
test_svqrshl_u32_x(svbool_t pg,svuint32_t op1,svint32_t op2)259 svuint32_t test_svqrshl_u32_x(svbool_t pg, svuint32_t op1, svint32_t op2)
260 {
261 // CHECK-LABEL: test_svqrshl_u32_x
262 // CHECK: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
263 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %op2)
264 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
265 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
266 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u32_x'}}
267 return SVE_ACLE_FUNC(svqrshl,_u32,_x,)(pg, op1, op2);
268 }
269
test_svqrshl_u64_x(svbool_t pg,svuint64_t op1,svint64_t op2)270 svuint64_t test_svqrshl_u64_x(svbool_t pg, svuint64_t op1, svint64_t op2)
271 {
272 // CHECK-LABEL: test_svqrshl_u64_x
273 // CHECK: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
274 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %op2)
275 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
276 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
277 // expected-warning@+1 {{implicit declaration of function 'svqrshl_u64_x'}}
278 return SVE_ACLE_FUNC(svqrshl,_u64,_x,)(pg, op1, op2);
279 }
280
test_svqrshl_n_s8_z(svbool_t pg,svint8_t op1,int8_t op2)281 svint8_t test_svqrshl_n_s8_z(svbool_t pg, svint8_t op1, int8_t op2)
282 {
283 // CHECK-LABEL: test_svqrshl_n_s8_z
284 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
285 // 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)
286 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %[[DUP]])
287 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
288 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
289 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s8_z'}}
290 return SVE_ACLE_FUNC(svqrshl,_n_s8,_z,)(pg, op1, op2);
291 }
292
test_svqrshl_n_s16_z(svbool_t pg,svint16_t op1,int16_t op2)293 svint16_t test_svqrshl_n_s16_z(svbool_t pg, svint16_t op1, int16_t op2)
294 {
295 // CHECK-LABEL: test_svqrshl_n_s16_z
296 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
297 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
298 // 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)
299 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %[[DUP]])
300 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
301 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
302 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s16_z'}}
303 return SVE_ACLE_FUNC(svqrshl,_n_s16,_z,)(pg, op1, op2);
304 }
305
test_svqrshl_n_s32_z(svbool_t pg,svint32_t op1,int32_t op2)306 svint32_t test_svqrshl_n_s32_z(svbool_t pg, svint32_t op1, int32_t op2)
307 {
308 // CHECK-LABEL: test_svqrshl_n_s32_z
309 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
310 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
311 // 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)
312 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %[[DUP]])
313 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
314 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
315 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s32_z'}}
316 return SVE_ACLE_FUNC(svqrshl,_n_s32,_z,)(pg, op1, op2);
317 }
318
test_svqrshl_n_s64_z(svbool_t pg,svint64_t op1,int64_t op2)319 svint64_t test_svqrshl_n_s64_z(svbool_t pg, svint64_t op1, int64_t op2)
320 {
321 // CHECK-LABEL: test_svqrshl_n_s64_z
322 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
323 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
324 // 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)
325 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %[[DUP]])
326 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
327 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
328 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s64_z'}}
329 return SVE_ACLE_FUNC(svqrshl,_n_s64,_z,)(pg, op1, op2);
330 }
331
test_svqrshl_n_u8_z(svbool_t pg,svuint8_t op1,int8_t op2)332 svuint8_t test_svqrshl_n_u8_z(svbool_t pg, svuint8_t op1, int8_t op2)
333 {
334 // CHECK-LABEL: test_svqrshl_n_u8_z
335 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
336 // 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)
337 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %[[SEL]], <vscale x 16 x i8> %[[DUP]])
338 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
339 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
340 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u8_z'}}
341 return SVE_ACLE_FUNC(svqrshl,_n_u8,_z,)(pg, op1, op2);
342 }
343
test_svqrshl_n_u16_z(svbool_t pg,svuint16_t op1,int16_t op2)344 svuint16_t test_svqrshl_n_u16_z(svbool_t pg, svuint16_t op1, int16_t op2)
345 {
346 // CHECK-LABEL: test_svqrshl_n_u16_z
347 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
348 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
349 // 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)
350 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %[[SEL]], <vscale x 8 x i16> %[[DUP]])
351 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
352 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
353 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u16_z'}}
354 return SVE_ACLE_FUNC(svqrshl,_n_u16,_z,)(pg, op1, op2);
355 }
356
test_svqrshl_n_u32_z(svbool_t pg,svuint32_t op1,int32_t op2)357 svuint32_t test_svqrshl_n_u32_z(svbool_t pg, svuint32_t op1, int32_t op2)
358 {
359 // CHECK-LABEL: test_svqrshl_n_u32_z
360 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
361 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
362 // 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)
363 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %[[SEL]], <vscale x 4 x i32> %[[DUP]])
364 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
365 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
366 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u32_z'}}
367 return SVE_ACLE_FUNC(svqrshl,_n_u32,_z,)(pg, op1, op2);
368 }
369
test_svqrshl_n_u64_z(svbool_t pg,svuint64_t op1,int64_t op2)370 svuint64_t test_svqrshl_n_u64_z(svbool_t pg, svuint64_t op1, int64_t op2)
371 {
372 // CHECK-LABEL: test_svqrshl_n_u64_z
373 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
374 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
375 // 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)
376 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %[[SEL]], <vscale x 2 x i64> %[[DUP]])
377 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
378 // overload-warning@+2 {{implicit declaration of function 'svqrshl_z'}}
379 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u64_z'}}
380 return SVE_ACLE_FUNC(svqrshl,_n_u64,_z,)(pg, op1, op2);
381 }
382
test_svqrshl_n_s8_m(svbool_t pg,svint8_t op1,int8_t op2)383 svint8_t test_svqrshl_n_s8_m(svbool_t pg, svint8_t op1, int8_t op2)
384 {
385 // CHECK-LABEL: test_svqrshl_n_s8_m
386 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
387 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
388 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
389 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
390 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s8_m'}}
391 return SVE_ACLE_FUNC(svqrshl,_n_s8,_m,)(pg, op1, op2);
392 }
393
test_svqrshl_n_s16_m(svbool_t pg,svint16_t op1,int16_t op2)394 svint16_t test_svqrshl_n_s16_m(svbool_t pg, svint16_t op1, int16_t op2)
395 {
396 // CHECK-LABEL: test_svqrshl_n_s16_m
397 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
398 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
399 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
400 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
401 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
402 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s16_m'}}
403 return SVE_ACLE_FUNC(svqrshl,_n_s16,_m,)(pg, op1, op2);
404 }
405
test_svqrshl_n_s32_m(svbool_t pg,svint32_t op1,int32_t op2)406 svint32_t test_svqrshl_n_s32_m(svbool_t pg, svint32_t op1, int32_t op2)
407 {
408 // CHECK-LABEL: test_svqrshl_n_s32_m
409 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
410 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
411 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
412 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
413 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
414 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s32_m'}}
415 return SVE_ACLE_FUNC(svqrshl,_n_s32,_m,)(pg, op1, op2);
416 }
417
test_svqrshl_n_s64_m(svbool_t pg,svint64_t op1,int64_t op2)418 svint64_t test_svqrshl_n_s64_m(svbool_t pg, svint64_t op1, int64_t op2)
419 {
420 // CHECK-LABEL: test_svqrshl_n_s64_m
421 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
422 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
423 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
424 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
425 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
426 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s64_m'}}
427 return SVE_ACLE_FUNC(svqrshl,_n_s64,_m,)(pg, op1, op2);
428 }
429
test_svqrshl_n_u8_m(svbool_t pg,svuint8_t op1,int8_t op2)430 svuint8_t test_svqrshl_n_u8_m(svbool_t pg, svuint8_t op1, int8_t op2)
431 {
432 // CHECK-LABEL: test_svqrshl_n_u8_m
433 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
434 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
435 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
436 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
437 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u8_m'}}
438 return SVE_ACLE_FUNC(svqrshl,_n_u8,_m,)(pg, op1, op2);
439 }
440
test_svqrshl_n_u16_m(svbool_t pg,svuint16_t op1,int16_t op2)441 svuint16_t test_svqrshl_n_u16_m(svbool_t pg, svuint16_t op1, int16_t op2)
442 {
443 // CHECK-LABEL: test_svqrshl_n_u16_m
444 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
445 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
446 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
447 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
448 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
449 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u16_m'}}
450 return SVE_ACLE_FUNC(svqrshl,_n_u16,_m,)(pg, op1, op2);
451 }
452
test_svqrshl_n_u32_m(svbool_t pg,svuint32_t op1,int32_t op2)453 svuint32_t test_svqrshl_n_u32_m(svbool_t pg, svuint32_t op1, int32_t op2)
454 {
455 // CHECK-LABEL: test_svqrshl_n_u32_m
456 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
457 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
458 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
459 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
460 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
461 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u32_m'}}
462 return SVE_ACLE_FUNC(svqrshl,_n_u32,_m,)(pg, op1, op2);
463 }
464
test_svqrshl_n_u64_m(svbool_t pg,svuint64_t op1,int64_t op2)465 svuint64_t test_svqrshl_n_u64_m(svbool_t pg, svuint64_t op1, int64_t op2)
466 {
467 // CHECK-LABEL: test_svqrshl_n_u64_m
468 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
469 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
470 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
471 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
472 // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
473 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u64_m'}}
474 return SVE_ACLE_FUNC(svqrshl,_n_u64,_m,)(pg, op1, op2);
475 }
476
test_svqrshl_n_s8_x(svbool_t pg,svint8_t op1,int8_t op2)477 svint8_t test_svqrshl_n_s8_x(svbool_t pg, svint8_t op1, int8_t op2)
478 {
479 // CHECK-LABEL: test_svqrshl_n_s8_x
480 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
481 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.sqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
482 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
483 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
484 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s8_x'}}
485 return SVE_ACLE_FUNC(svqrshl,_n_s8,_x,)(pg, op1, op2);
486 }
487
test_svqrshl_n_s16_x(svbool_t pg,svint16_t op1,int16_t op2)488 svint16_t test_svqrshl_n_s16_x(svbool_t pg, svint16_t op1, int16_t op2)
489 {
490 // CHECK-LABEL: test_svqrshl_n_s16_x
491 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
492 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
493 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
494 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
495 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
496 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s16_x'}}
497 return SVE_ACLE_FUNC(svqrshl,_n_s16,_x,)(pg, op1, op2);
498 }
499
test_svqrshl_n_s32_x(svbool_t pg,svint32_t op1,int32_t op2)500 svint32_t test_svqrshl_n_s32_x(svbool_t pg, svint32_t op1, int32_t op2)
501 {
502 // CHECK-LABEL: test_svqrshl_n_s32_x
503 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
504 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
505 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
506 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
507 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
508 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s32_x'}}
509 return SVE_ACLE_FUNC(svqrshl,_n_s32,_x,)(pg, op1, op2);
510 }
511
test_svqrshl_n_s64_x(svbool_t pg,svint64_t op1,int64_t op2)512 svint64_t test_svqrshl_n_s64_x(svbool_t pg, svint64_t op1, int64_t op2)
513 {
514 // CHECK-LABEL: test_svqrshl_n_s64_x
515 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
516 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
517 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
518 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
519 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
520 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s64_x'}}
521 return SVE_ACLE_FUNC(svqrshl,_n_s64,_x,)(pg, op1, op2);
522 }
523
test_svqrshl_n_u8_x(svbool_t pg,svuint8_t op1,int8_t op2)524 svuint8_t test_svqrshl_n_u8_x(svbool_t pg, svuint8_t op1, int8_t op2)
525 {
526 // CHECK-LABEL: test_svqrshl_n_u8_x
527 // CHECK: %[[DUP:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.dup.x.nxv16i8(i8 %op2)
528 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.uqrshl.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %op1, <vscale x 16 x i8> %[[DUP]])
529 // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
530 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
531 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u8_x'}}
532 return SVE_ACLE_FUNC(svqrshl,_n_u8,_x,)(pg, op1, op2);
533 }
534
test_svqrshl_n_u16_x(svbool_t pg,svuint16_t op1,int16_t op2)535 svuint16_t test_svqrshl_n_u16_x(svbool_t pg, svuint16_t op1, int16_t op2)
536 {
537 // CHECK-LABEL: test_svqrshl_n_u16_x
538 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.dup.x.nxv8i16(i16 %op2)
539 // CHECK-DAG: %[[PG:.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %pg)
540 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.uqrshl.nxv8i16(<vscale x 8 x i1> %[[PG]], <vscale x 8 x i16> %op1, <vscale x 8 x i16> %[[DUP]])
541 // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
542 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
543 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u16_x'}}
544 return SVE_ACLE_FUNC(svqrshl,_n_u16,_x,)(pg, op1, op2);
545 }
546
test_svqrshl_n_u32_x(svbool_t pg,svuint32_t op1,int32_t op2)547 svuint32_t test_svqrshl_n_u32_x(svbool_t pg, svuint32_t op1, int32_t op2)
548 {
549 // CHECK-LABEL: test_svqrshl_n_u32_x
550 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.dup.x.nxv4i32(i32 %op2)
551 // CHECK-DAG: %[[PG:.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> %pg)
552 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.uqrshl.nxv4i32(<vscale x 4 x i1> %[[PG]], <vscale x 4 x i32> %op1, <vscale x 4 x i32> %[[DUP]])
553 // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
554 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
555 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u32_x'}}
556 return SVE_ACLE_FUNC(svqrshl,_n_u32,_x,)(pg, op1, op2);
557 }
558
test_svqrshl_n_u64_x(svbool_t pg,svuint64_t op1,int64_t op2)559 svuint64_t test_svqrshl_n_u64_x(svbool_t pg, svuint64_t op1, int64_t op2)
560 {
561 // CHECK-LABEL: test_svqrshl_n_u64_x
562 // CHECK-DAG: %[[DUP:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 %op2)
563 // CHECK-DAG: %[[PG:.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %pg)
564 // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.uqrshl.nxv2i64(<vscale x 2 x i1> %[[PG]], <vscale x 2 x i64> %op1, <vscale x 2 x i64> %[[DUP]])
565 // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
566 // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
567 // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u64_x'}}
568 return SVE_ACLE_FUNC(svqrshl,_n_u64,_x,)(pg, op1, op2);
569 }
570