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_svqrshl_s8_z(svbool_t pg,svint8_t op1,svint8_t op2)17 svint8_t test_svqrshl_s8_z(svbool_t pg, svint8_t op1, svint8_t op2)
18 {
19   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
24   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s8_z'}}
25   return SVE_ACLE_FUNC(svqrshl,_s8,_z,)(pg, op1, op2);
26 }
27 
test_svqrshl_s16_z(svbool_t pg,svint16_t op1,svint16_t op2)28 svint16_t test_svqrshl_s16_z(svbool_t pg, svint16_t op1, svint16_t op2)
29 {
30   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
36   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s16_z'}}
37   return SVE_ACLE_FUNC(svqrshl,_s16,_z,)(pg, op1, op2);
38 }
39 
test_svqrshl_s32_z(svbool_t pg,svint32_t op1,svint32_t op2)40 svint32_t test_svqrshl_s32_z(svbool_t pg, svint32_t op1, svint32_t op2)
41 {
42   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
48   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s32_z'}}
49   return SVE_ACLE_FUNC(svqrshl,_s32,_z,)(pg, op1, op2);
50 }
51 
test_svqrshl_s64_z(svbool_t pg,svint64_t op1,svint64_t op2)52 svint64_t test_svqrshl_s64_z(svbool_t pg, svint64_t op1, svint64_t op2)
53 {
54   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
60   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s64_z'}}
61   return SVE_ACLE_FUNC(svqrshl,_s64,_z,)(pg, op1, op2);
62 }
63 
test_svqrshl_u8_z(svbool_t pg,svuint8_t op1,svint8_t op2)64 svuint8_t test_svqrshl_u8_z(svbool_t pg, svuint8_t op1, svint8_t op2)
65 {
66   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
71   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u8_z'}}
72   return SVE_ACLE_FUNC(svqrshl,_u8,_z,)(pg, op1, op2);
73 }
74 
test_svqrshl_u16_z(svbool_t pg,svuint16_t op1,svint16_t op2)75 svuint16_t test_svqrshl_u16_z(svbool_t pg, svuint16_t op1, svint16_t op2)
76 {
77   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
83   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u16_z'}}
84   return SVE_ACLE_FUNC(svqrshl,_u16,_z,)(pg, op1, op2);
85 }
86 
test_svqrshl_u32_z(svbool_t pg,svuint32_t op1,svint32_t op2)87 svuint32_t test_svqrshl_u32_z(svbool_t pg, svuint32_t op1, svint32_t op2)
88 {
89   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
95   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u32_z'}}
96   return SVE_ACLE_FUNC(svqrshl,_u32,_z,)(pg, op1, op2);
97 }
98 
test_svqrshl_u64_z(svbool_t pg,svuint64_t op1,svint64_t op2)99 svuint64_t test_svqrshl_u64_z(svbool_t pg, svuint64_t op1, svint64_t op2)
100 {
101   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
107   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u64_z'}}
108   return SVE_ACLE_FUNC(svqrshl,_u64,_z,)(pg, op1, op2);
109 }
110 
test_svqrshl_s8_m(svbool_t pg,svint8_t op1,svint8_t op2)111 svint8_t test_svqrshl_s8_m(svbool_t pg, svint8_t op1, svint8_t op2)
112 {
113   // CHECK-LABEL: test_svqrshl_s8_m
114   // 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)
115   // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
116   // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
117   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s8_m'}}
118   return SVE_ACLE_FUNC(svqrshl,_s8,_m,)(pg, op1, op2);
119 }
120 
test_svqrshl_s16_m(svbool_t pg,svint16_t op1,svint16_t op2)121 svint16_t test_svqrshl_s16_m(svbool_t pg, svint16_t op1, svint16_t op2)
122 {
123   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_m'}}
128   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s16_m'}}
129   return SVE_ACLE_FUNC(svqrshl,_s16,_m,)(pg, op1, op2);
130 }
131 
test_svqrshl_s32_m(svbool_t pg,svint32_t op1,svint32_t op2)132 svint32_t test_svqrshl_s32_m(svbool_t pg, svint32_t op1, svint32_t op2)
133 {
134   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_m'}}
139   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s32_m'}}
140   return SVE_ACLE_FUNC(svqrshl,_s32,_m,)(pg, op1, op2);
141 }
142 
test_svqrshl_s64_m(svbool_t pg,svint64_t op1,svint64_t op2)143 svint64_t test_svqrshl_s64_m(svbool_t pg, svint64_t op1, svint64_t op2)
144 {
145   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_m'}}
150   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s64_m'}}
151   return SVE_ACLE_FUNC(svqrshl,_s64,_m,)(pg, op1, op2);
152 }
153 
test_svqrshl_u8_m(svbool_t pg,svuint8_t op1,svint8_t op2)154 svuint8_t test_svqrshl_u8_m(svbool_t pg, svuint8_t op1, svint8_t op2)
155 {
156   // CHECK-LABEL: test_svqrshl_u8_m
157   // 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)
158   // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
159   // overload-warning@+2 {{implicit declaration of function 'svqrshl_m'}}
160   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u8_m'}}
161   return SVE_ACLE_FUNC(svqrshl,_u8,_m,)(pg, op1, op2);
162 }
163 
test_svqrshl_u16_m(svbool_t pg,svuint16_t op1,svint16_t op2)164 svuint16_t test_svqrshl_u16_m(svbool_t pg, svuint16_t op1, svint16_t op2)
165 {
166   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_m'}}
171   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u16_m'}}
172   return SVE_ACLE_FUNC(svqrshl,_u16,_m,)(pg, op1, op2);
173 }
174 
test_svqrshl_u32_m(svbool_t pg,svuint32_t op1,svint32_t op2)175 svuint32_t test_svqrshl_u32_m(svbool_t pg, svuint32_t op1, svint32_t op2)
176 {
177   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_m'}}
182   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u32_m'}}
183   return SVE_ACLE_FUNC(svqrshl,_u32,_m,)(pg, op1, op2);
184 }
185 
test_svqrshl_u64_m(svbool_t pg,svuint64_t op1,svint64_t op2)186 svuint64_t test_svqrshl_u64_m(svbool_t pg, svuint64_t op1, svint64_t op2)
187 {
188   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_m'}}
193   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u64_m'}}
194   return SVE_ACLE_FUNC(svqrshl,_u64,_m,)(pg, op1, op2);
195 }
196 
test_svqrshl_s8_x(svbool_t pg,svint8_t op1,svint8_t op2)197 svint8_t test_svqrshl_s8_x(svbool_t pg, svint8_t op1, svint8_t op2)
198 {
199   // CHECK-LABEL: test_svqrshl_s8_x
200   // 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)
201   // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
202   // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
203   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s8_x'}}
204   return SVE_ACLE_FUNC(svqrshl,_s8,_x,)(pg, op1, op2);
205 }
206 
test_svqrshl_s16_x(svbool_t pg,svint16_t op1,svint16_t op2)207 svint16_t test_svqrshl_s16_x(svbool_t pg, svint16_t op1, svint16_t op2)
208 {
209   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_x'}}
214   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s16_x'}}
215   return SVE_ACLE_FUNC(svqrshl,_s16,_x,)(pg, op1, op2);
216 }
217 
test_svqrshl_s32_x(svbool_t pg,svint32_t op1,svint32_t op2)218 svint32_t test_svqrshl_s32_x(svbool_t pg, svint32_t op1, svint32_t op2)
219 {
220   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_x'}}
225   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s32_x'}}
226   return SVE_ACLE_FUNC(svqrshl,_s32,_x,)(pg, op1, op2);
227 }
228 
test_svqrshl_s64_x(svbool_t pg,svint64_t op1,svint64_t op2)229 svint64_t test_svqrshl_s64_x(svbool_t pg, svint64_t op1, svint64_t op2)
230 {
231   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_x'}}
236   // expected-warning@+1 {{implicit declaration of function 'svqrshl_s64_x'}}
237   return SVE_ACLE_FUNC(svqrshl,_s64,_x,)(pg, op1, op2);
238 }
239 
test_svqrshl_u8_x(svbool_t pg,svuint8_t op1,svint8_t op2)240 svuint8_t test_svqrshl_u8_x(svbool_t pg, svuint8_t op1, svint8_t op2)
241 {
242   // CHECK-LABEL: test_svqrshl_u8_x
243   // 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)
244   // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
245   // overload-warning@+2 {{implicit declaration of function 'svqrshl_x'}}
246   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u8_x'}}
247   return SVE_ACLE_FUNC(svqrshl,_u8,_x,)(pg, op1, op2);
248 }
249 
test_svqrshl_u16_x(svbool_t pg,svuint16_t op1,svint16_t op2)250 svuint16_t test_svqrshl_u16_x(svbool_t pg, svuint16_t op1, svint16_t op2)
251 {
252   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_x'}}
257   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u16_x'}}
258   return SVE_ACLE_FUNC(svqrshl,_u16,_x,)(pg, op1, op2);
259 }
260 
test_svqrshl_u32_x(svbool_t pg,svuint32_t op1,svint32_t op2)261 svuint32_t test_svqrshl_u32_x(svbool_t pg, svuint32_t op1, svint32_t op2)
262 {
263   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_x'}}
268   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u32_x'}}
269   return SVE_ACLE_FUNC(svqrshl,_u32,_x,)(pg, op1, op2);
270 }
271 
test_svqrshl_u64_x(svbool_t pg,svuint64_t op1,svint64_t op2)272 svuint64_t test_svqrshl_u64_x(svbool_t pg, svuint64_t op1, svint64_t op2)
273 {
274   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_x'}}
279   // expected-warning@+1 {{implicit declaration of function 'svqrshl_u64_x'}}
280   return SVE_ACLE_FUNC(svqrshl,_u64,_x,)(pg, op1, op2);
281 }
282 
test_svqrshl_n_s8_z(svbool_t pg,svint8_t op1,int8_t op2)283 svint8_t test_svqrshl_n_s8_z(svbool_t pg, svint8_t op1, int8_t op2)
284 {
285   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
291   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s8_z'}}
292   return SVE_ACLE_FUNC(svqrshl,_n_s8,_z,)(pg, op1, op2);
293 }
294 
test_svqrshl_n_s16_z(svbool_t pg,svint16_t op1,int16_t op2)295 svint16_t test_svqrshl_n_s16_z(svbool_t pg, svint16_t op1, int16_t op2)
296 {
297   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
304   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s16_z'}}
305   return SVE_ACLE_FUNC(svqrshl,_n_s16,_z,)(pg, op1, op2);
306 }
307 
test_svqrshl_n_s32_z(svbool_t pg,svint32_t op1,int32_t op2)308 svint32_t test_svqrshl_n_s32_z(svbool_t pg, svint32_t op1, int32_t op2)
309 {
310   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
317   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s32_z'}}
318   return SVE_ACLE_FUNC(svqrshl,_n_s32,_z,)(pg, op1, op2);
319 }
320 
test_svqrshl_n_s64_z(svbool_t pg,svint64_t op1,int64_t op2)321 svint64_t test_svqrshl_n_s64_z(svbool_t pg, svint64_t op1, int64_t op2)
322 {
323   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_z'}}
330   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s64_z'}}
331   return SVE_ACLE_FUNC(svqrshl,_n_s64,_z,)(pg, op1, op2);
332 }
333 
test_svqrshl_n_u8_z(svbool_t pg,svuint8_t op1,int8_t op2)334 svuint8_t test_svqrshl_n_u8_z(svbool_t pg, svuint8_t op1, int8_t op2)
335 {
336   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
342   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u8_z'}}
343   return SVE_ACLE_FUNC(svqrshl,_n_u8,_z,)(pg, op1, op2);
344 }
345 
test_svqrshl_n_u16_z(svbool_t pg,svuint16_t op1,int16_t op2)346 svuint16_t test_svqrshl_n_u16_z(svbool_t pg, svuint16_t op1, int16_t op2)
347 {
348   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
355   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u16_z'}}
356   return SVE_ACLE_FUNC(svqrshl,_n_u16,_z,)(pg, op1, op2);
357 }
358 
test_svqrshl_n_u32_z(svbool_t pg,svuint32_t op1,int32_t op2)359 svuint32_t test_svqrshl_n_u32_z(svbool_t pg, svuint32_t op1, int32_t op2)
360 {
361   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
368   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u32_z'}}
369   return SVE_ACLE_FUNC(svqrshl,_n_u32,_z,)(pg, op1, op2);
370 }
371 
test_svqrshl_n_u64_z(svbool_t pg,svuint64_t op1,int64_t op2)372 svuint64_t test_svqrshl_n_u64_z(svbool_t pg, svuint64_t op1, int64_t op2)
373 {
374   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_z'}}
381   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u64_z'}}
382   return SVE_ACLE_FUNC(svqrshl,_n_u64,_z,)(pg, op1, op2);
383 }
384 
test_svqrshl_n_s8_m(svbool_t pg,svint8_t op1,int8_t op2)385 svint8_t test_svqrshl_n_s8_m(svbool_t pg, svint8_t op1, int8_t op2)
386 {
387   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_m'}}
392   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s8_m'}}
393   return SVE_ACLE_FUNC(svqrshl,_n_s8,_m,)(pg, op1, op2);
394 }
395 
test_svqrshl_n_s16_m(svbool_t pg,svint16_t op1,int16_t op2)396 svint16_t test_svqrshl_n_s16_m(svbool_t pg, svint16_t op1, int16_t op2)
397 {
398   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_m'}}
404   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s16_m'}}
405   return SVE_ACLE_FUNC(svqrshl,_n_s16,_m,)(pg, op1, op2);
406 }
407 
test_svqrshl_n_s32_m(svbool_t pg,svint32_t op1,int32_t op2)408 svint32_t test_svqrshl_n_s32_m(svbool_t pg, svint32_t op1, int32_t op2)
409 {
410   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_m'}}
416   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s32_m'}}
417   return SVE_ACLE_FUNC(svqrshl,_n_s32,_m,)(pg, op1, op2);
418 }
419 
test_svqrshl_n_s64_m(svbool_t pg,svint64_t op1,int64_t op2)420 svint64_t test_svqrshl_n_s64_m(svbool_t pg, svint64_t op1, int64_t op2)
421 {
422   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_m'}}
428   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s64_m'}}
429   return SVE_ACLE_FUNC(svqrshl,_n_s64,_m,)(pg, op1, op2);
430 }
431 
test_svqrshl_n_u8_m(svbool_t pg,svuint8_t op1,int8_t op2)432 svuint8_t test_svqrshl_n_u8_m(svbool_t pg, svuint8_t op1, int8_t op2)
433 {
434   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_m'}}
439   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u8_m'}}
440   return SVE_ACLE_FUNC(svqrshl,_n_u8,_m,)(pg, op1, op2);
441 }
442 
test_svqrshl_n_u16_m(svbool_t pg,svuint16_t op1,int16_t op2)443 svuint16_t test_svqrshl_n_u16_m(svbool_t pg, svuint16_t op1, int16_t op2)
444 {
445   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_m'}}
451   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u16_m'}}
452   return SVE_ACLE_FUNC(svqrshl,_n_u16,_m,)(pg, op1, op2);
453 }
454 
test_svqrshl_n_u32_m(svbool_t pg,svuint32_t op1,int32_t op2)455 svuint32_t test_svqrshl_n_u32_m(svbool_t pg, svuint32_t op1, int32_t op2)
456 {
457   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_m'}}
463   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u32_m'}}
464   return SVE_ACLE_FUNC(svqrshl,_n_u32,_m,)(pg, op1, op2);
465 }
466 
test_svqrshl_n_u64_m(svbool_t pg,svuint64_t op1,int64_t op2)467 svuint64_t test_svqrshl_n_u64_m(svbool_t pg, svuint64_t op1, int64_t op2)
468 {
469   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_m'}}
475   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u64_m'}}
476   return SVE_ACLE_FUNC(svqrshl,_n_u64,_m,)(pg, op1, op2);
477 }
478 
test_svqrshl_n_s8_x(svbool_t pg,svint8_t op1,int8_t op2)479 svint8_t test_svqrshl_n_s8_x(svbool_t pg, svint8_t op1, int8_t op2)
480 {
481   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_x'}}
486   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s8_x'}}
487   return SVE_ACLE_FUNC(svqrshl,_n_s8,_x,)(pg, op1, op2);
488 }
489 
test_svqrshl_n_s16_x(svbool_t pg,svint16_t op1,int16_t op2)490 svint16_t test_svqrshl_n_s16_x(svbool_t pg, svint16_t op1, int16_t op2)
491 {
492   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_x'}}
498   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s16_x'}}
499   return SVE_ACLE_FUNC(svqrshl,_n_s16,_x,)(pg, op1, op2);
500 }
501 
test_svqrshl_n_s32_x(svbool_t pg,svint32_t op1,int32_t op2)502 svint32_t test_svqrshl_n_s32_x(svbool_t pg, svint32_t op1, int32_t op2)
503 {
504   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_x'}}
510   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s32_x'}}
511   return SVE_ACLE_FUNC(svqrshl,_n_s32,_x,)(pg, op1, op2);
512 }
513 
test_svqrshl_n_s64_x(svbool_t pg,svint64_t op1,int64_t op2)514 svint64_t test_svqrshl_n_s64_x(svbool_t pg, svint64_t op1, int64_t op2)
515 {
516   // CHECK-LABEL: test_svqrshl_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.sqrshl.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 'svqrshl_x'}}
522   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_s64_x'}}
523   return SVE_ACLE_FUNC(svqrshl,_n_s64,_x,)(pg, op1, op2);
524 }
525 
test_svqrshl_n_u8_x(svbool_t pg,svuint8_t op1,int8_t op2)526 svuint8_t test_svqrshl_n_u8_x(svbool_t pg, svuint8_t op1, int8_t op2)
527 {
528   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_x'}}
533   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u8_x'}}
534   return SVE_ACLE_FUNC(svqrshl,_n_u8,_x,)(pg, op1, op2);
535 }
536 
test_svqrshl_n_u16_x(svbool_t pg,svuint16_t op1,int16_t op2)537 svuint16_t test_svqrshl_n_u16_x(svbool_t pg, svuint16_t op1, int16_t op2)
538 {
539   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_x'}}
545   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u16_x'}}
546   return SVE_ACLE_FUNC(svqrshl,_n_u16,_x,)(pg, op1, op2);
547 }
548 
test_svqrshl_n_u32_x(svbool_t pg,svuint32_t op1,int32_t op2)549 svuint32_t test_svqrshl_n_u32_x(svbool_t pg, svuint32_t op1, int32_t op2)
550 {
551   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_x'}}
557   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u32_x'}}
558   return SVE_ACLE_FUNC(svqrshl,_n_u32,_x,)(pg, op1, op2);
559 }
560 
test_svqrshl_n_u64_x(svbool_t pg,svuint64_t op1,int64_t op2)561 svuint64_t test_svqrshl_n_u64_x(svbool_t pg, svuint64_t op1, int64_t op2)
562 {
563   // CHECK-LABEL: test_svqrshl_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.uqrshl.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 'svqrshl_x'}}
569   // expected-warning@+1 {{implicit declaration of function 'svqrshl_n_u64_x'}}
570   return SVE_ACLE_FUNC(svqrshl,_n_u64,_x,)(pg, op1, op2);
571 }
572