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_svrshl_s8_z(svbool_t pg,svint8_t op1,svint8_t op2)15 svint8_t test_svrshl_s8_z(svbool_t pg, svint8_t op1, svint8_t op2)
16 {
17   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
22   // expected-warning@+1 {{implicit declaration of function 'svrshl_s8_z'}}
23   return SVE_ACLE_FUNC(svrshl,_s8,_z,)(pg, op1, op2);
24 }
25 
test_svrshl_s16_z(svbool_t pg,svint16_t op1,svint16_t op2)26 svint16_t test_svrshl_s16_z(svbool_t pg, svint16_t op1, svint16_t op2)
27 {
28   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
34   // expected-warning@+1 {{implicit declaration of function 'svrshl_s16_z'}}
35   return SVE_ACLE_FUNC(svrshl,_s16,_z,)(pg, op1, op2);
36 }
37 
test_svrshl_s32_z(svbool_t pg,svint32_t op1,svint32_t op2)38 svint32_t test_svrshl_s32_z(svbool_t pg, svint32_t op1, svint32_t op2)
39 {
40   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
46   // expected-warning@+1 {{implicit declaration of function 'svrshl_s32_z'}}
47   return SVE_ACLE_FUNC(svrshl,_s32,_z,)(pg, op1, op2);
48 }
49 
test_svrshl_s64_z(svbool_t pg,svint64_t op1,svint64_t op2)50 svint64_t test_svrshl_s64_z(svbool_t pg, svint64_t op1, svint64_t op2)
51 {
52   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
58   // expected-warning@+1 {{implicit declaration of function 'svrshl_s64_z'}}
59   return SVE_ACLE_FUNC(svrshl,_s64,_z,)(pg, op1, op2);
60 }
61 
test_svrshl_u8_z(svbool_t pg,svuint8_t op1,svint8_t op2)62 svuint8_t test_svrshl_u8_z(svbool_t pg, svuint8_t op1, svint8_t op2)
63 {
64   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
69   // expected-warning@+1 {{implicit declaration of function 'svrshl_u8_z'}}
70   return SVE_ACLE_FUNC(svrshl,_u8,_z,)(pg, op1, op2);
71 }
72 
test_svrshl_u16_z(svbool_t pg,svuint16_t op1,svint16_t op2)73 svuint16_t test_svrshl_u16_z(svbool_t pg, svuint16_t op1, svint16_t op2)
74 {
75   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
81   // expected-warning@+1 {{implicit declaration of function 'svrshl_u16_z'}}
82   return SVE_ACLE_FUNC(svrshl,_u16,_z,)(pg, op1, op2);
83 }
84 
test_svrshl_u32_z(svbool_t pg,svuint32_t op1,svint32_t op2)85 svuint32_t test_svrshl_u32_z(svbool_t pg, svuint32_t op1, svint32_t op2)
86 {
87   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
93   // expected-warning@+1 {{implicit declaration of function 'svrshl_u32_z'}}
94   return SVE_ACLE_FUNC(svrshl,_u32,_z,)(pg, op1, op2);
95 }
96 
test_svrshl_u64_z(svbool_t pg,svuint64_t op1,svint64_t op2)97 svuint64_t test_svrshl_u64_z(svbool_t pg, svuint64_t op1, svint64_t op2)
98 {
99   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
105   // expected-warning@+1 {{implicit declaration of function 'svrshl_u64_z'}}
106   return SVE_ACLE_FUNC(svrshl,_u64,_z,)(pg, op1, op2);
107 }
108 
test_svrshl_s8_m(svbool_t pg,svint8_t op1,svint8_t op2)109 svint8_t test_svrshl_s8_m(svbool_t pg, svint8_t op1, svint8_t op2)
110 {
111   // CHECK-LABEL: test_svrshl_s8_m
112   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.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 'svrshl_m'}}
115   // expected-warning@+1 {{implicit declaration of function 'svrshl_s8_m'}}
116   return SVE_ACLE_FUNC(svrshl,_s8,_m,)(pg, op1, op2);
117 }
118 
test_svrshl_s16_m(svbool_t pg,svint16_t op1,svint16_t op2)119 svint16_t test_svrshl_s16_m(svbool_t pg, svint16_t op1, svint16_t op2)
120 {
121   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_m'}}
126   // expected-warning@+1 {{implicit declaration of function 'svrshl_s16_m'}}
127   return SVE_ACLE_FUNC(svrshl,_s16,_m,)(pg, op1, op2);
128 }
129 
test_svrshl_s32_m(svbool_t pg,svint32_t op1,svint32_t op2)130 svint32_t test_svrshl_s32_m(svbool_t pg, svint32_t op1, svint32_t op2)
131 {
132   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_m'}}
137   // expected-warning@+1 {{implicit declaration of function 'svrshl_s32_m'}}
138   return SVE_ACLE_FUNC(svrshl,_s32,_m,)(pg, op1, op2);
139 }
140 
test_svrshl_s64_m(svbool_t pg,svint64_t op1,svint64_t op2)141 svint64_t test_svrshl_s64_m(svbool_t pg, svint64_t op1, svint64_t op2)
142 {
143   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_m'}}
148   // expected-warning@+1 {{implicit declaration of function 'svrshl_s64_m'}}
149   return SVE_ACLE_FUNC(svrshl,_s64,_m,)(pg, op1, op2);
150 }
151 
test_svrshl_u8_m(svbool_t pg,svuint8_t op1,svint8_t op2)152 svuint8_t test_svrshl_u8_m(svbool_t pg, svuint8_t op1, svint8_t op2)
153 {
154   // CHECK-LABEL: test_svrshl_u8_m
155   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.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 'svrshl_m'}}
158   // expected-warning@+1 {{implicit declaration of function 'svrshl_u8_m'}}
159   return SVE_ACLE_FUNC(svrshl,_u8,_m,)(pg, op1, op2);
160 }
161 
test_svrshl_u16_m(svbool_t pg,svuint16_t op1,svint16_t op2)162 svuint16_t test_svrshl_u16_m(svbool_t pg, svuint16_t op1, svint16_t op2)
163 {
164   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_m'}}
169   // expected-warning@+1 {{implicit declaration of function 'svrshl_u16_m'}}
170   return SVE_ACLE_FUNC(svrshl,_u16,_m,)(pg, op1, op2);
171 }
172 
test_svrshl_u32_m(svbool_t pg,svuint32_t op1,svint32_t op2)173 svuint32_t test_svrshl_u32_m(svbool_t pg, svuint32_t op1, svint32_t op2)
174 {
175   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_m'}}
180   // expected-warning@+1 {{implicit declaration of function 'svrshl_u32_m'}}
181   return SVE_ACLE_FUNC(svrshl,_u32,_m,)(pg, op1, op2);
182 }
183 
test_svrshl_u64_m(svbool_t pg,svuint64_t op1,svint64_t op2)184 svuint64_t test_svrshl_u64_m(svbool_t pg, svuint64_t op1, svint64_t op2)
185 {
186   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_m'}}
191   // expected-warning@+1 {{implicit declaration of function 'svrshl_u64_m'}}
192   return SVE_ACLE_FUNC(svrshl,_u64,_m,)(pg, op1, op2);
193 }
194 
test_svrshl_s8_x(svbool_t pg,svint8_t op1,svint8_t op2)195 svint8_t test_svrshl_s8_x(svbool_t pg, svint8_t op1, svint8_t op2)
196 {
197   // CHECK-LABEL: test_svrshl_s8_x
198   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.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 'svrshl_x'}}
201   // expected-warning@+1 {{implicit declaration of function 'svrshl_s8_x'}}
202   return SVE_ACLE_FUNC(svrshl,_s8,_x,)(pg, op1, op2);
203 }
204 
test_svrshl_s16_x(svbool_t pg,svint16_t op1,svint16_t op2)205 svint16_t test_svrshl_s16_x(svbool_t pg, svint16_t op1, svint16_t op2)
206 {
207   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_x'}}
212   // expected-warning@+1 {{implicit declaration of function 'svrshl_s16_x'}}
213   return SVE_ACLE_FUNC(svrshl,_s16,_x,)(pg, op1, op2);
214 }
215 
test_svrshl_s32_x(svbool_t pg,svint32_t op1,svint32_t op2)216 svint32_t test_svrshl_s32_x(svbool_t pg, svint32_t op1, svint32_t op2)
217 {
218   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_x'}}
223   // expected-warning@+1 {{implicit declaration of function 'svrshl_s32_x'}}
224   return SVE_ACLE_FUNC(svrshl,_s32,_x,)(pg, op1, op2);
225 }
226 
test_svrshl_s64_x(svbool_t pg,svint64_t op1,svint64_t op2)227 svint64_t test_svrshl_s64_x(svbool_t pg, svint64_t op1, svint64_t op2)
228 {
229   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_x'}}
234   // expected-warning@+1 {{implicit declaration of function 'svrshl_s64_x'}}
235   return SVE_ACLE_FUNC(svrshl,_s64,_x,)(pg, op1, op2);
236 }
237 
test_svrshl_u8_x(svbool_t pg,svuint8_t op1,svint8_t op2)238 svuint8_t test_svrshl_u8_x(svbool_t pg, svuint8_t op1, svint8_t op2)
239 {
240   // CHECK-LABEL: test_svrshl_u8_x
241   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.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 'svrshl_x'}}
244   // expected-warning@+1 {{implicit declaration of function 'svrshl_u8_x'}}
245   return SVE_ACLE_FUNC(svrshl,_u8,_x,)(pg, op1, op2);
246 }
247 
test_svrshl_u16_x(svbool_t pg,svuint16_t op1,svint16_t op2)248 svuint16_t test_svrshl_u16_x(svbool_t pg, svuint16_t op1, svint16_t op2)
249 {
250   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_x'}}
255   // expected-warning@+1 {{implicit declaration of function 'svrshl_u16_x'}}
256   return SVE_ACLE_FUNC(svrshl,_u16,_x,)(pg, op1, op2);
257 }
258 
test_svrshl_u32_x(svbool_t pg,svuint32_t op1,svint32_t op2)259 svuint32_t test_svrshl_u32_x(svbool_t pg, svuint32_t op1, svint32_t op2)
260 {
261   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_x'}}
266   // expected-warning@+1 {{implicit declaration of function 'svrshl_u32_x'}}
267   return SVE_ACLE_FUNC(svrshl,_u32,_x,)(pg, op1, op2);
268 }
269 
test_svrshl_u64_x(svbool_t pg,svuint64_t op1,svint64_t op2)270 svuint64_t test_svrshl_u64_x(svbool_t pg, svuint64_t op1, svint64_t op2)
271 {
272   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_x'}}
277   // expected-warning@+1 {{implicit declaration of function 'svrshl_u64_x'}}
278   return SVE_ACLE_FUNC(svrshl,_u64,_x,)(pg, op1, op2);
279 }
280 
test_svrshl_n_s8_z(svbool_t pg,svint8_t op1,int8_t op2)281 svint8_t test_svrshl_n_s8_z(svbool_t pg, svint8_t op1, int8_t op2)
282 {
283   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
289   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s8_z'}}
290   return SVE_ACLE_FUNC(svrshl,_n_s8,_z,)(pg, op1, op2);
291 }
292 
test_svrshl_n_s16_z(svbool_t pg,svint16_t op1,int16_t op2)293 svint16_t test_svrshl_n_s16_z(svbool_t pg, svint16_t op1, int16_t op2)
294 {
295   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
302   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s16_z'}}
303   return SVE_ACLE_FUNC(svrshl,_n_s16,_z,)(pg, op1, op2);
304 }
305 
test_svrshl_n_s32_z(svbool_t pg,svint32_t op1,int32_t op2)306 svint32_t test_svrshl_n_s32_z(svbool_t pg, svint32_t op1, int32_t op2)
307 {
308   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
315   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s32_z'}}
316   return SVE_ACLE_FUNC(svrshl,_n_s32,_z,)(pg, op1, op2);
317 }
318 
test_svrshl_n_s64_z(svbool_t pg,svint64_t op1,int64_t op2)319 svint64_t test_svrshl_n_s64_z(svbool_t pg, svint64_t op1, int64_t op2)
320 {
321   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_z'}}
328   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s64_z'}}
329   return SVE_ACLE_FUNC(svrshl,_n_s64,_z,)(pg, op1, op2);
330 }
331 
test_svrshl_n_u8_z(svbool_t pg,svuint8_t op1,int8_t op2)332 svuint8_t test_svrshl_n_u8_z(svbool_t pg, svuint8_t op1, int8_t op2)
333 {
334   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
340   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u8_z'}}
341   return SVE_ACLE_FUNC(svrshl,_n_u8,_z,)(pg, op1, op2);
342 }
343 
test_svrshl_n_u16_z(svbool_t pg,svuint16_t op1,int16_t op2)344 svuint16_t test_svrshl_n_u16_z(svbool_t pg, svuint16_t op1, int16_t op2)
345 {
346   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
353   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u16_z'}}
354   return SVE_ACLE_FUNC(svrshl,_n_u16,_z,)(pg, op1, op2);
355 }
356 
test_svrshl_n_u32_z(svbool_t pg,svuint32_t op1,int32_t op2)357 svuint32_t test_svrshl_n_u32_z(svbool_t pg, svuint32_t op1, int32_t op2)
358 {
359   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
366   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u32_z'}}
367   return SVE_ACLE_FUNC(svrshl,_n_u32,_z,)(pg, op1, op2);
368 }
369 
test_svrshl_n_u64_z(svbool_t pg,svuint64_t op1,int64_t op2)370 svuint64_t test_svrshl_n_u64_z(svbool_t pg, svuint64_t op1, int64_t op2)
371 {
372   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_z'}}
379   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u64_z'}}
380   return SVE_ACLE_FUNC(svrshl,_n_u64,_z,)(pg, op1, op2);
381 }
382 
test_svrshl_n_s8_m(svbool_t pg,svint8_t op1,int8_t op2)383 svint8_t test_svrshl_n_s8_m(svbool_t pg, svint8_t op1, int8_t op2)
384 {
385   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_m'}}
390   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s8_m'}}
391   return SVE_ACLE_FUNC(svrshl,_n_s8,_m,)(pg, op1, op2);
392 }
393 
test_svrshl_n_s16_m(svbool_t pg,svint16_t op1,int16_t op2)394 svint16_t test_svrshl_n_s16_m(svbool_t pg, svint16_t op1, int16_t op2)
395 {
396   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_m'}}
402   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s16_m'}}
403   return SVE_ACLE_FUNC(svrshl,_n_s16,_m,)(pg, op1, op2);
404 }
405 
test_svrshl_n_s32_m(svbool_t pg,svint32_t op1,int32_t op2)406 svint32_t test_svrshl_n_s32_m(svbool_t pg, svint32_t op1, int32_t op2)
407 {
408   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_m'}}
414   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s32_m'}}
415   return SVE_ACLE_FUNC(svrshl,_n_s32,_m,)(pg, op1, op2);
416 }
417 
test_svrshl_n_s64_m(svbool_t pg,svint64_t op1,int64_t op2)418 svint64_t test_svrshl_n_s64_m(svbool_t pg, svint64_t op1, int64_t op2)
419 {
420   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_m'}}
426   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s64_m'}}
427   return SVE_ACLE_FUNC(svrshl,_n_s64,_m,)(pg, op1, op2);
428 }
429 
test_svrshl_n_u8_m(svbool_t pg,svuint8_t op1,int8_t op2)430 svuint8_t test_svrshl_n_u8_m(svbool_t pg, svuint8_t op1, int8_t op2)
431 {
432   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_m'}}
437   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u8_m'}}
438   return SVE_ACLE_FUNC(svrshl,_n_u8,_m,)(pg, op1, op2);
439 }
440 
test_svrshl_n_u16_m(svbool_t pg,svuint16_t op1,int16_t op2)441 svuint16_t test_svrshl_n_u16_m(svbool_t pg, svuint16_t op1, int16_t op2)
442 {
443   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_m'}}
449   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u16_m'}}
450   return SVE_ACLE_FUNC(svrshl,_n_u16,_m,)(pg, op1, op2);
451 }
452 
test_svrshl_n_u32_m(svbool_t pg,svuint32_t op1,int32_t op2)453 svuint32_t test_svrshl_n_u32_m(svbool_t pg, svuint32_t op1, int32_t op2)
454 {
455   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_m'}}
461   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u32_m'}}
462   return SVE_ACLE_FUNC(svrshl,_n_u32,_m,)(pg, op1, op2);
463 }
464 
test_svrshl_n_u64_m(svbool_t pg,svuint64_t op1,int64_t op2)465 svuint64_t test_svrshl_n_u64_m(svbool_t pg, svuint64_t op1, int64_t op2)
466 {
467   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_m'}}
473   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u64_m'}}
474   return SVE_ACLE_FUNC(svrshl,_n_u64,_m,)(pg, op1, op2);
475 }
476 
test_svrshl_n_s8_x(svbool_t pg,svint8_t op1,int8_t op2)477 svint8_t test_svrshl_n_s8_x(svbool_t pg, svint8_t op1, int8_t op2)
478 {
479   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_x'}}
484   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s8_x'}}
485   return SVE_ACLE_FUNC(svrshl,_n_s8,_x,)(pg, op1, op2);
486 }
487 
test_svrshl_n_s16_x(svbool_t pg,svint16_t op1,int16_t op2)488 svint16_t test_svrshl_n_s16_x(svbool_t pg, svint16_t op1, int16_t op2)
489 {
490   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_x'}}
496   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s16_x'}}
497   return SVE_ACLE_FUNC(svrshl,_n_s16,_x,)(pg, op1, op2);
498 }
499 
test_svrshl_n_s32_x(svbool_t pg,svint32_t op1,int32_t op2)500 svint32_t test_svrshl_n_s32_x(svbool_t pg, svint32_t op1, int32_t op2)
501 {
502   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_x'}}
508   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s32_x'}}
509   return SVE_ACLE_FUNC(svrshl,_n_s32,_x,)(pg, op1, op2);
510 }
511 
test_svrshl_n_s64_x(svbool_t pg,svint64_t op1,int64_t op2)512 svint64_t test_svrshl_n_s64_x(svbool_t pg, svint64_t op1, int64_t op2)
513 {
514   // CHECK-LABEL: test_svrshl_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.srshl.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 'svrshl_x'}}
520   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s64_x'}}
521   return SVE_ACLE_FUNC(svrshl,_n_s64,_x,)(pg, op1, op2);
522 }
523 
test_svrshl_n_u8_x(svbool_t pg,svuint8_t op1,int8_t op2)524 svuint8_t test_svrshl_n_u8_x(svbool_t pg, svuint8_t op1, int8_t op2)
525 {
526   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_x'}}
531   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u8_x'}}
532   return SVE_ACLE_FUNC(svrshl,_n_u8,_x,)(pg, op1, op2);
533 }
534 
test_svrshl_n_u16_x(svbool_t pg,svuint16_t op1,int16_t op2)535 svuint16_t test_svrshl_n_u16_x(svbool_t pg, svuint16_t op1, int16_t op2)
536 {
537   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_x'}}
543   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u16_x'}}
544   return SVE_ACLE_FUNC(svrshl,_n_u16,_x,)(pg, op1, op2);
545 }
546 
test_svrshl_n_u32_x(svbool_t pg,svuint32_t op1,int32_t op2)547 svuint32_t test_svrshl_n_u32_x(svbool_t pg, svuint32_t op1, int32_t op2)
548 {
549   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_x'}}
555   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u32_x'}}
556   return SVE_ACLE_FUNC(svrshl,_n_u32,_x,)(pg, op1, op2);
557 }
558 
test_svrshl_n_u64_x(svbool_t pg,svuint64_t op1,int64_t op2)559 svuint64_t test_svrshl_n_u64_x(svbool_t pg, svuint64_t op1, int64_t op2)
560 {
561   // CHECK-LABEL: test_svrshl_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.urshl.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 'svrshl_x'}}
567   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u64_x'}}
568   return SVE_ACLE_FUNC(svrshl,_n_u64,_x,)(pg, op1, op2);
569 }
570