1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // REQUIRES: aarch64-registered-target
3 
4 // 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
5 // 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 -check-prefix=CPP-CHECK
6 // 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
7 // 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 -check-prefix=CPP-CHECK
8 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -fsyntax-only -verify -verify-ignore-unexpected=error %s
9 // 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
10 
11 #include <arm_sve.h>
12 
13 #ifdef SVE_OVERLOADED_FORMS
14 // A simple used,unused... macro, long enough to represent any SVE builtin.
15 #define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3
16 #else
17 #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
18 #endif
19 
20 // CHECK-LABEL: @test_svrshl_s8_z(
21 // CHECK-NEXT:  entry:
22 // CHECK-NEXT:    [[TMP0:%.*]] = 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)
23 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]])
24 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
25 //
26 // CPP-CHECK-LABEL: @_Z16test_svrshl_s8_zu10__SVBool_tu10__SVInt8_tu10__SVInt8_t(
27 // CPP-CHECK-NEXT:  entry:
28 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = 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)
29 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]])
30 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
31 //
test_svrshl_s8_z(svbool_t pg,svint8_t op1,svint8_t op2)32 svint8_t test_svrshl_s8_z(svbool_t pg, svint8_t op1, svint8_t op2)
33 {
34   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
35   // expected-warning@+1 {{implicit declaration of function 'svrshl_s8_z'}}
36   return SVE_ACLE_FUNC(svrshl,_s8,_z,)(pg, op1, op2);
37 }
38 
39 // CHECK-LABEL: @test_svrshl_s16_z(
40 // CHECK-NEXT:  entry:
41 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
42 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
43 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]])
44 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
45 //
46 // CPP-CHECK-LABEL: @_Z17test_svrshl_s16_zu10__SVBool_tu11__SVInt16_tu11__SVInt16_t(
47 // CPP-CHECK-NEXT:  entry:
48 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
49 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
50 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]])
51 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
52 //
test_svrshl_s16_z(svbool_t pg,svint16_t op1,svint16_t op2)53 svint16_t test_svrshl_s16_z(svbool_t pg, svint16_t op1, svint16_t op2)
54 {
55   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
56   // expected-warning@+1 {{implicit declaration of function 'svrshl_s16_z'}}
57   return SVE_ACLE_FUNC(svrshl,_s16,_z,)(pg, op1, op2);
58 }
59 
60 // CHECK-LABEL: @test_svrshl_s32_z(
61 // CHECK-NEXT:  entry:
62 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
63 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
64 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]])
65 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
66 //
67 // CPP-CHECK-LABEL: @_Z17test_svrshl_s32_zu10__SVBool_tu11__SVInt32_tu11__SVInt32_t(
68 // CPP-CHECK-NEXT:  entry:
69 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
70 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
71 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]])
72 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
73 //
test_svrshl_s32_z(svbool_t pg,svint32_t op1,svint32_t op2)74 svint32_t test_svrshl_s32_z(svbool_t pg, svint32_t op1, svint32_t op2)
75 {
76   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
77   // expected-warning@+1 {{implicit declaration of function 'svrshl_s32_z'}}
78   return SVE_ACLE_FUNC(svrshl,_s32,_z,)(pg, op1, op2);
79 }
80 
81 // CHECK-LABEL: @test_svrshl_s64_z(
82 // CHECK-NEXT:  entry:
83 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
84 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
85 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]])
86 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
87 //
88 // CPP-CHECK-LABEL: @_Z17test_svrshl_s64_zu10__SVBool_tu11__SVInt64_tu11__SVInt64_t(
89 // CPP-CHECK-NEXT:  entry:
90 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
91 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
92 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]])
93 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
94 //
test_svrshl_s64_z(svbool_t pg,svint64_t op1,svint64_t op2)95 svint64_t test_svrshl_s64_z(svbool_t pg, svint64_t op1, svint64_t op2)
96 {
97   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
98   // expected-warning@+1 {{implicit declaration of function 'svrshl_s64_z'}}
99   return SVE_ACLE_FUNC(svrshl,_s64,_z,)(pg, op1, op2);
100 }
101 
102 // CHECK-LABEL: @test_svrshl_u8_z(
103 // CHECK-NEXT:  entry:
104 // CHECK-NEXT:    [[TMP0:%.*]] = 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)
105 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]])
106 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
107 //
108 // CPP-CHECK-LABEL: @_Z16test_svrshl_u8_zu10__SVBool_tu11__SVUint8_tu10__SVInt8_t(
109 // CPP-CHECK-NEXT:  entry:
110 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = 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)
111 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]])
112 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
113 //
test_svrshl_u8_z(svbool_t pg,svuint8_t op1,svint8_t op2)114 svuint8_t test_svrshl_u8_z(svbool_t pg, svuint8_t op1, svint8_t op2)
115 {
116   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
117   // expected-warning@+1 {{implicit declaration of function 'svrshl_u8_z'}}
118   return SVE_ACLE_FUNC(svrshl,_u8,_z,)(pg, op1, op2);
119 }
120 
121 // CHECK-LABEL: @test_svrshl_u16_z(
122 // CHECK-NEXT:  entry:
123 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
124 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
125 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]])
126 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
127 //
128 // CPP-CHECK-LABEL: @_Z17test_svrshl_u16_zu10__SVBool_tu12__SVUint16_tu11__SVInt16_t(
129 // CPP-CHECK-NEXT:  entry:
130 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
131 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
132 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]])
133 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
134 //
test_svrshl_u16_z(svbool_t pg,svuint16_t op1,svint16_t op2)135 svuint16_t test_svrshl_u16_z(svbool_t pg, svuint16_t op1, svint16_t op2)
136 {
137   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
138   // expected-warning@+1 {{implicit declaration of function 'svrshl_u16_z'}}
139   return SVE_ACLE_FUNC(svrshl,_u16,_z,)(pg, op1, op2);
140 }
141 
142 // CHECK-LABEL: @test_svrshl_u32_z(
143 // CHECK-NEXT:  entry:
144 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
145 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
146 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]])
147 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
148 //
149 // CPP-CHECK-LABEL: @_Z17test_svrshl_u32_zu10__SVBool_tu12__SVUint32_tu11__SVInt32_t(
150 // CPP-CHECK-NEXT:  entry:
151 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
152 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
153 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]])
154 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
155 //
test_svrshl_u32_z(svbool_t pg,svuint32_t op1,svint32_t op2)156 svuint32_t test_svrshl_u32_z(svbool_t pg, svuint32_t op1, svint32_t op2)
157 {
158   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
159   // expected-warning@+1 {{implicit declaration of function 'svrshl_u32_z'}}
160   return SVE_ACLE_FUNC(svrshl,_u32,_z,)(pg, op1, op2);
161 }
162 
163 // CHECK-LABEL: @test_svrshl_u64_z(
164 // CHECK-NEXT:  entry:
165 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
166 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
167 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]])
168 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
169 //
170 // CPP-CHECK-LABEL: @_Z17test_svrshl_u64_zu10__SVBool_tu12__SVUint64_tu11__SVInt64_t(
171 // CPP-CHECK-NEXT:  entry:
172 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
173 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
174 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]])
175 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
176 //
test_svrshl_u64_z(svbool_t pg,svuint64_t op1,svint64_t op2)177 svuint64_t test_svrshl_u64_z(svbool_t pg, svuint64_t op1, svint64_t op2)
178 {
179   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
180   // expected-warning@+1 {{implicit declaration of function 'svrshl_u64_z'}}
181   return SVE_ACLE_FUNC(svrshl,_u64,_z,)(pg, op1, op2);
182 }
183 
184 // CHECK-LABEL: @test_svrshl_s8_m(
185 // CHECK-NEXT:  entry:
186 // CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
187 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
188 //
189 // CPP-CHECK-LABEL: @_Z16test_svrshl_s8_mu10__SVBool_tu10__SVInt8_tu10__SVInt8_t(
190 // CPP-CHECK-NEXT:  entry:
191 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
192 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
193 //
test_svrshl_s8_m(svbool_t pg,svint8_t op1,svint8_t op2)194 svint8_t test_svrshl_s8_m(svbool_t pg, svint8_t op1, svint8_t op2)
195 {
196   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
197   // expected-warning@+1 {{implicit declaration of function 'svrshl_s8_m'}}
198   return SVE_ACLE_FUNC(svrshl,_s8,_m,)(pg, op1, op2);
199 }
200 
201 // CHECK-LABEL: @test_svrshl_s16_m(
202 // CHECK-NEXT:  entry:
203 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
204 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
205 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
206 //
207 // CPP-CHECK-LABEL: @_Z17test_svrshl_s16_mu10__SVBool_tu11__SVInt16_tu11__SVInt16_t(
208 // CPP-CHECK-NEXT:  entry:
209 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
210 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
211 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
212 //
test_svrshl_s16_m(svbool_t pg,svint16_t op1,svint16_t op2)213 svint16_t test_svrshl_s16_m(svbool_t pg, svint16_t op1, svint16_t op2)
214 {
215   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
216   // expected-warning@+1 {{implicit declaration of function 'svrshl_s16_m'}}
217   return SVE_ACLE_FUNC(svrshl,_s16,_m,)(pg, op1, op2);
218 }
219 
220 // CHECK-LABEL: @test_svrshl_s32_m(
221 // CHECK-NEXT:  entry:
222 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
223 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
224 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
225 //
226 // CPP-CHECK-LABEL: @_Z17test_svrshl_s32_mu10__SVBool_tu11__SVInt32_tu11__SVInt32_t(
227 // CPP-CHECK-NEXT:  entry:
228 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
229 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
230 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
231 //
test_svrshl_s32_m(svbool_t pg,svint32_t op1,svint32_t op2)232 svint32_t test_svrshl_s32_m(svbool_t pg, svint32_t op1, svint32_t op2)
233 {
234   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
235   // expected-warning@+1 {{implicit declaration of function 'svrshl_s32_m'}}
236   return SVE_ACLE_FUNC(svrshl,_s32,_m,)(pg, op1, op2);
237 }
238 
239 // CHECK-LABEL: @test_svrshl_s64_m(
240 // CHECK-NEXT:  entry:
241 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
242 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
243 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
244 //
245 // CPP-CHECK-LABEL: @_Z17test_svrshl_s64_mu10__SVBool_tu11__SVInt64_tu11__SVInt64_t(
246 // CPP-CHECK-NEXT:  entry:
247 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
248 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
249 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
250 //
test_svrshl_s64_m(svbool_t pg,svint64_t op1,svint64_t op2)251 svint64_t test_svrshl_s64_m(svbool_t pg, svint64_t op1, svint64_t op2)
252 {
253   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
254   // expected-warning@+1 {{implicit declaration of function 'svrshl_s64_m'}}
255   return SVE_ACLE_FUNC(svrshl,_s64,_m,)(pg, op1, op2);
256 }
257 
258 // CHECK-LABEL: @test_svrshl_u8_m(
259 // CHECK-NEXT:  entry:
260 // CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
261 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
262 //
263 // CPP-CHECK-LABEL: @_Z16test_svrshl_u8_mu10__SVBool_tu11__SVUint8_tu10__SVInt8_t(
264 // CPP-CHECK-NEXT:  entry:
265 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
266 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
267 //
test_svrshl_u8_m(svbool_t pg,svuint8_t op1,svint8_t op2)268 svuint8_t test_svrshl_u8_m(svbool_t pg, svuint8_t op1, svint8_t op2)
269 {
270   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
271   // expected-warning@+1 {{implicit declaration of function 'svrshl_u8_m'}}
272   return SVE_ACLE_FUNC(svrshl,_u8,_m,)(pg, op1, op2);
273 }
274 
275 // CHECK-LABEL: @test_svrshl_u16_m(
276 // CHECK-NEXT:  entry:
277 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
278 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
279 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
280 //
281 // CPP-CHECK-LABEL: @_Z17test_svrshl_u16_mu10__SVBool_tu12__SVUint16_tu11__SVInt16_t(
282 // CPP-CHECK-NEXT:  entry:
283 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
284 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
285 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
286 //
test_svrshl_u16_m(svbool_t pg,svuint16_t op1,svint16_t op2)287 svuint16_t test_svrshl_u16_m(svbool_t pg, svuint16_t op1, svint16_t op2)
288 {
289   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
290   // expected-warning@+1 {{implicit declaration of function 'svrshl_u16_m'}}
291   return SVE_ACLE_FUNC(svrshl,_u16,_m,)(pg, op1, op2);
292 }
293 
294 // CHECK-LABEL: @test_svrshl_u32_m(
295 // CHECK-NEXT:  entry:
296 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
297 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
298 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
299 //
300 // CPP-CHECK-LABEL: @_Z17test_svrshl_u32_mu10__SVBool_tu12__SVUint32_tu11__SVInt32_t(
301 // CPP-CHECK-NEXT:  entry:
302 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
303 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
304 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
305 //
test_svrshl_u32_m(svbool_t pg,svuint32_t op1,svint32_t op2)306 svuint32_t test_svrshl_u32_m(svbool_t pg, svuint32_t op1, svint32_t op2)
307 {
308   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
309   // expected-warning@+1 {{implicit declaration of function 'svrshl_u32_m'}}
310   return SVE_ACLE_FUNC(svrshl,_u32,_m,)(pg, op1, op2);
311 }
312 
313 // CHECK-LABEL: @test_svrshl_u64_m(
314 // CHECK-NEXT:  entry:
315 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
316 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
317 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
318 //
319 // CPP-CHECK-LABEL: @_Z17test_svrshl_u64_mu10__SVBool_tu12__SVUint64_tu11__SVInt64_t(
320 // CPP-CHECK-NEXT:  entry:
321 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
322 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
323 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
324 //
test_svrshl_u64_m(svbool_t pg,svuint64_t op1,svint64_t op2)325 svuint64_t test_svrshl_u64_m(svbool_t pg, svuint64_t op1, svint64_t op2)
326 {
327   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
328   // expected-warning@+1 {{implicit declaration of function 'svrshl_u64_m'}}
329   return SVE_ACLE_FUNC(svrshl,_u64,_m,)(pg, op1, op2);
330 }
331 
332 // CHECK-LABEL: @test_svrshl_s8_x(
333 // CHECK-NEXT:  entry:
334 // CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
335 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
336 //
337 // CPP-CHECK-LABEL: @_Z16test_svrshl_s8_xu10__SVBool_tu10__SVInt8_tu10__SVInt8_t(
338 // CPP-CHECK-NEXT:  entry:
339 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
340 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
341 //
test_svrshl_s8_x(svbool_t pg,svint8_t op1,svint8_t op2)342 svint8_t test_svrshl_s8_x(svbool_t pg, svint8_t op1, svint8_t op2)
343 {
344   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
345   // expected-warning@+1 {{implicit declaration of function 'svrshl_s8_x'}}
346   return SVE_ACLE_FUNC(svrshl,_s8,_x,)(pg, op1, op2);
347 }
348 
349 // CHECK-LABEL: @test_svrshl_s16_x(
350 // CHECK-NEXT:  entry:
351 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
352 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
353 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
354 //
355 // CPP-CHECK-LABEL: @_Z17test_svrshl_s16_xu10__SVBool_tu11__SVInt16_tu11__SVInt16_t(
356 // CPP-CHECK-NEXT:  entry:
357 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
358 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
359 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
360 //
test_svrshl_s16_x(svbool_t pg,svint16_t op1,svint16_t op2)361 svint16_t test_svrshl_s16_x(svbool_t pg, svint16_t op1, svint16_t op2)
362 {
363   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
364   // expected-warning@+1 {{implicit declaration of function 'svrshl_s16_x'}}
365   return SVE_ACLE_FUNC(svrshl,_s16,_x,)(pg, op1, op2);
366 }
367 
368 // CHECK-LABEL: @test_svrshl_s32_x(
369 // CHECK-NEXT:  entry:
370 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
371 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
372 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
373 //
374 // CPP-CHECK-LABEL: @_Z17test_svrshl_s32_xu10__SVBool_tu11__SVInt32_tu11__SVInt32_t(
375 // CPP-CHECK-NEXT:  entry:
376 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
377 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
378 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
379 //
test_svrshl_s32_x(svbool_t pg,svint32_t op1,svint32_t op2)380 svint32_t test_svrshl_s32_x(svbool_t pg, svint32_t op1, svint32_t op2)
381 {
382   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
383   // expected-warning@+1 {{implicit declaration of function 'svrshl_s32_x'}}
384   return SVE_ACLE_FUNC(svrshl,_s32,_x,)(pg, op1, op2);
385 }
386 
387 // CHECK-LABEL: @test_svrshl_s64_x(
388 // CHECK-NEXT:  entry:
389 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
390 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
391 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
392 //
393 // CPP-CHECK-LABEL: @_Z17test_svrshl_s64_xu10__SVBool_tu11__SVInt64_tu11__SVInt64_t(
394 // CPP-CHECK-NEXT:  entry:
395 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
396 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
397 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
398 //
test_svrshl_s64_x(svbool_t pg,svint64_t op1,svint64_t op2)399 svint64_t test_svrshl_s64_x(svbool_t pg, svint64_t op1, svint64_t op2)
400 {
401   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
402   // expected-warning@+1 {{implicit declaration of function 'svrshl_s64_x'}}
403   return SVE_ACLE_FUNC(svrshl,_s64,_x,)(pg, op1, op2);
404 }
405 
406 // CHECK-LABEL: @test_svrshl_u8_x(
407 // CHECK-NEXT:  entry:
408 // CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
409 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
410 //
411 // CPP-CHECK-LABEL: @_Z16test_svrshl_u8_xu10__SVBool_tu11__SVUint8_tu10__SVInt8_t(
412 // CPP-CHECK-NEXT:  entry:
413 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = 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:%.*]])
414 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
415 //
test_svrshl_u8_x(svbool_t pg,svuint8_t op1,svint8_t op2)416 svuint8_t test_svrshl_u8_x(svbool_t pg, svuint8_t op1, svint8_t op2)
417 {
418   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
419   // expected-warning@+1 {{implicit declaration of function 'svrshl_u8_x'}}
420   return SVE_ACLE_FUNC(svrshl,_u8,_x,)(pg, op1, op2);
421 }
422 
423 // CHECK-LABEL: @test_svrshl_u16_x(
424 // CHECK-NEXT:  entry:
425 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
426 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
427 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
428 //
429 // CPP-CHECK-LABEL: @_Z17test_svrshl_u16_xu10__SVBool_tu12__SVUint16_tu11__SVInt16_t(
430 // CPP-CHECK-NEXT:  entry:
431 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
432 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
433 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
434 //
test_svrshl_u16_x(svbool_t pg,svuint16_t op1,svint16_t op2)435 svuint16_t test_svrshl_u16_x(svbool_t pg, svuint16_t op1, svint16_t op2)
436 {
437   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
438   // expected-warning@+1 {{implicit declaration of function 'svrshl_u16_x'}}
439   return SVE_ACLE_FUNC(svrshl,_u16,_x,)(pg, op1, op2);
440 }
441 
442 // CHECK-LABEL: @test_svrshl_u32_x(
443 // CHECK-NEXT:  entry:
444 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
445 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
446 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
447 //
448 // CPP-CHECK-LABEL: @_Z17test_svrshl_u32_xu10__SVBool_tu12__SVUint32_tu11__SVInt32_t(
449 // CPP-CHECK-NEXT:  entry:
450 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
451 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
452 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
453 //
test_svrshl_u32_x(svbool_t pg,svuint32_t op1,svint32_t op2)454 svuint32_t test_svrshl_u32_x(svbool_t pg, svuint32_t op1, svint32_t op2)
455 {
456   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
457   // expected-warning@+1 {{implicit declaration of function 'svrshl_u32_x'}}
458   return SVE_ACLE_FUNC(svrshl,_u32,_x,)(pg, op1, op2);
459 }
460 
461 // CHECK-LABEL: @test_svrshl_u64_x(
462 // CHECK-NEXT:  entry:
463 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
464 // CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
465 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
466 //
467 // CPP-CHECK-LABEL: @_Z17test_svrshl_u64_xu10__SVBool_tu12__SVUint64_tu11__SVInt64_t(
468 // CPP-CHECK-NEXT:  entry:
469 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
470 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
471 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
472 //
test_svrshl_u64_x(svbool_t pg,svuint64_t op1,svint64_t op2)473 svuint64_t test_svrshl_u64_x(svbool_t pg, svuint64_t op1, svint64_t op2)
474 {
475   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
476   // expected-warning@+1 {{implicit declaration of function 'svrshl_u64_x'}}
477   return SVE_ACLE_FUNC(svrshl,_u64,_x,)(pg, op1, op2);
478 }
479 
480 // CHECK-LABEL: @test_svrshl_n_s8_z(
481 // CHECK-NEXT:  entry:
482 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
483 // CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
484 // CHECK-NEXT:    [[TMP1:%.*]] = 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)
485 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP1]], <vscale x 16 x i8> [[TMP0]])
486 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP2]]
487 //
488 // CPP-CHECK-LABEL: @_Z18test_svrshl_n_s8_zu10__SVBool_tu10__SVInt8_ta(
489 // CPP-CHECK-NEXT:  entry:
490 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
491 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
492 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = 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)
493 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.srshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP1]], <vscale x 16 x i8> [[TMP0]])
494 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP2]]
495 //
test_svrshl_n_s8_z(svbool_t pg,svint8_t op1,int8_t op2)496 svint8_t test_svrshl_n_s8_z(svbool_t pg, svint8_t op1, int8_t op2)
497 {
498   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
499   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s8_z'}}
500   return SVE_ACLE_FUNC(svrshl,_n_s8,_z,)(pg, op1, op2);
501 }
502 
503 // CHECK-LABEL: @test_svrshl_n_s16_z(
504 // CHECK-NEXT:  entry:
505 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
506 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
507 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
508 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
509 // CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP2]], <vscale x 8 x i16> [[TMP1]])
510 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP3]]
511 //
512 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s16_zu10__SVBool_tu11__SVInt16_ts(
513 // CPP-CHECK-NEXT:  entry:
514 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
515 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
516 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
517 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
518 // CPP-CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP2]], <vscale x 8 x i16> [[TMP1]])
519 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP3]]
520 //
test_svrshl_n_s16_z(svbool_t pg,svint16_t op1,int16_t op2)521 svint16_t test_svrshl_n_s16_z(svbool_t pg, svint16_t op1, int16_t op2)
522 {
523   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
524   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s16_z'}}
525   return SVE_ACLE_FUNC(svrshl,_n_s16,_z,)(pg, op1, op2);
526 }
527 
528 // CHECK-LABEL: @test_svrshl_n_s32_z(
529 // CHECK-NEXT:  entry:
530 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
531 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
532 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
533 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
534 // CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP2]], <vscale x 4 x i32> [[TMP1]])
535 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP3]]
536 //
537 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s32_zu10__SVBool_tu11__SVInt32_ti(
538 // CPP-CHECK-NEXT:  entry:
539 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
540 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
541 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
542 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
543 // CPP-CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP2]], <vscale x 4 x i32> [[TMP1]])
544 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP3]]
545 //
test_svrshl_n_s32_z(svbool_t pg,svint32_t op1,int32_t op2)546 svint32_t test_svrshl_n_s32_z(svbool_t pg, svint32_t op1, int32_t op2)
547 {
548   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
549   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s32_z'}}
550   return SVE_ACLE_FUNC(svrshl,_n_s32,_z,)(pg, op1, op2);
551 }
552 
553 // CHECK-LABEL: @test_svrshl_n_s64_z(
554 // CHECK-NEXT:  entry:
555 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
556 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
557 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
558 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
559 // CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP2]], <vscale x 2 x i64> [[TMP1]])
560 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP3]]
561 //
562 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s64_zu10__SVBool_tu11__SVInt64_tl(
563 // CPP-CHECK-NEXT:  entry:
564 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
565 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
566 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
567 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
568 // CPP-CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP2]], <vscale x 2 x i64> [[TMP1]])
569 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP3]]
570 //
test_svrshl_n_s64_z(svbool_t pg,svint64_t op1,int64_t op2)571 svint64_t test_svrshl_n_s64_z(svbool_t pg, svint64_t op1, int64_t op2)
572 {
573   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
574   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s64_z'}}
575   return SVE_ACLE_FUNC(svrshl,_n_s64,_z,)(pg, op1, op2);
576 }
577 
578 // CHECK-LABEL: @test_svrshl_n_u8_z(
579 // CHECK-NEXT:  entry:
580 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
581 // CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
582 // CHECK-NEXT:    [[TMP1:%.*]] = 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)
583 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP1]], <vscale x 16 x i8> [[TMP0]])
584 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP2]]
585 //
586 // CPP-CHECK-LABEL: @_Z18test_svrshl_n_u8_zu10__SVBool_tu11__SVUint8_ta(
587 // CPP-CHECK-NEXT:  entry:
588 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
589 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
590 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = 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)
591 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.urshl.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP1]], <vscale x 16 x i8> [[TMP0]])
592 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP2]]
593 //
test_svrshl_n_u8_z(svbool_t pg,svuint8_t op1,int8_t op2)594 svuint8_t test_svrshl_n_u8_z(svbool_t pg, svuint8_t op1, int8_t op2)
595 {
596   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
597   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u8_z'}}
598   return SVE_ACLE_FUNC(svrshl,_n_u8,_z,)(pg, op1, op2);
599 }
600 
601 // CHECK-LABEL: @test_svrshl_n_u16_z(
602 // CHECK-NEXT:  entry:
603 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
604 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
605 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
606 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
607 // CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP2]], <vscale x 8 x i16> [[TMP1]])
608 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP3]]
609 //
610 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u16_zu10__SVBool_tu12__SVUint16_ts(
611 // CPP-CHECK-NEXT:  entry:
612 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
613 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
614 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
615 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.sel.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer)
616 // CPP-CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP2]], <vscale x 8 x i16> [[TMP1]])
617 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP3]]
618 //
test_svrshl_n_u16_z(svbool_t pg,svuint16_t op1,int16_t op2)619 svuint16_t test_svrshl_n_u16_z(svbool_t pg, svuint16_t op1, int16_t op2)
620 {
621   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
622   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u16_z'}}
623   return SVE_ACLE_FUNC(svrshl,_n_u16,_z,)(pg, op1, op2);
624 }
625 
626 // CHECK-LABEL: @test_svrshl_n_u32_z(
627 // CHECK-NEXT:  entry:
628 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
629 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
630 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
631 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
632 // CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP2]], <vscale x 4 x i32> [[TMP1]])
633 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP3]]
634 //
635 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u32_zu10__SVBool_tu12__SVUint32_ti(
636 // CPP-CHECK-NEXT:  entry:
637 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
638 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
639 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
640 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.sel.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer)
641 // CPP-CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP2]], <vscale x 4 x i32> [[TMP1]])
642 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP3]]
643 //
test_svrshl_n_u32_z(svbool_t pg,svuint32_t op1,int32_t op2)644 svuint32_t test_svrshl_n_u32_z(svbool_t pg, svuint32_t op1, int32_t op2)
645 {
646   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
647   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u32_z'}}
648   return SVE_ACLE_FUNC(svrshl,_n_u32,_z,)(pg, op1, op2);
649 }
650 
651 // CHECK-LABEL: @test_svrshl_n_u64_z(
652 // CHECK-NEXT:  entry:
653 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
654 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
655 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
656 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
657 // CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP2]], <vscale x 2 x i64> [[TMP1]])
658 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP3]]
659 //
660 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u64_zu10__SVBool_tu12__SVUint64_tl(
661 // CPP-CHECK-NEXT:  entry:
662 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
663 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
664 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
665 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.sel.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer)
666 // CPP-CHECK-NEXT:    [[TMP3:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP2]], <vscale x 2 x i64> [[TMP1]])
667 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP3]]
668 //
test_svrshl_n_u64_z(svbool_t pg,svuint64_t op1,int64_t op2)669 svuint64_t test_svrshl_n_u64_z(svbool_t pg, svuint64_t op1, int64_t op2)
670 {
671   // overload-warning@+2 {{implicit declaration of function 'svrshl_z'}}
672   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u64_z'}}
673   return SVE_ACLE_FUNC(svrshl,_n_u64,_z,)(pg, op1, op2);
674 }
675 
676 // CHECK-LABEL: @test_svrshl_n_s8_m(
677 // CHECK-NEXT:  entry:
678 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
679 // CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
680 // CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
681 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
682 //
683 // CPP-CHECK-LABEL: @_Z18test_svrshl_n_s8_mu10__SVBool_tu10__SVInt8_ta(
684 // CPP-CHECK-NEXT:  entry:
685 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
686 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
687 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
688 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
689 //
test_svrshl_n_s8_m(svbool_t pg,svint8_t op1,int8_t op2)690 svint8_t test_svrshl_n_s8_m(svbool_t pg, svint8_t op1, int8_t op2)
691 {
692   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
693   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s8_m'}}
694   return SVE_ACLE_FUNC(svrshl,_n_s8,_m,)(pg, op1, op2);
695 }
696 
697 // CHECK-LABEL: @test_svrshl_n_s16_m(
698 // CHECK-NEXT:  entry:
699 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
700 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
701 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
702 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
703 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
704 //
705 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s16_mu10__SVBool_tu11__SVInt16_ts(
706 // CPP-CHECK-NEXT:  entry:
707 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
708 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
709 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
710 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
711 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
712 //
test_svrshl_n_s16_m(svbool_t pg,svint16_t op1,int16_t op2)713 svint16_t test_svrshl_n_s16_m(svbool_t pg, svint16_t op1, int16_t op2)
714 {
715   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
716   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s16_m'}}
717   return SVE_ACLE_FUNC(svrshl,_n_s16,_m,)(pg, op1, op2);
718 }
719 
720 // CHECK-LABEL: @test_svrshl_n_s32_m(
721 // CHECK-NEXT:  entry:
722 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
723 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
724 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
725 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
726 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
727 //
728 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s32_mu10__SVBool_tu11__SVInt32_ti(
729 // CPP-CHECK-NEXT:  entry:
730 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
731 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
732 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
733 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
734 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
735 //
test_svrshl_n_s32_m(svbool_t pg,svint32_t op1,int32_t op2)736 svint32_t test_svrshl_n_s32_m(svbool_t pg, svint32_t op1, int32_t op2)
737 {
738   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
739   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s32_m'}}
740   return SVE_ACLE_FUNC(svrshl,_n_s32,_m,)(pg, op1, op2);
741 }
742 
743 // CHECK-LABEL: @test_svrshl_n_s64_m(
744 // CHECK-NEXT:  entry:
745 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
746 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
747 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
748 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
749 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
750 //
751 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s64_mu10__SVBool_tu11__SVInt64_tl(
752 // CPP-CHECK-NEXT:  entry:
753 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
754 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
755 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
756 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
757 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
758 //
test_svrshl_n_s64_m(svbool_t pg,svint64_t op1,int64_t op2)759 svint64_t test_svrshl_n_s64_m(svbool_t pg, svint64_t op1, int64_t op2)
760 {
761   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
762   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s64_m'}}
763   return SVE_ACLE_FUNC(svrshl,_n_s64,_m,)(pg, op1, op2);
764 }
765 
766 // CHECK-LABEL: @test_svrshl_n_u8_m(
767 // CHECK-NEXT:  entry:
768 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
769 // CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
770 // CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
771 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
772 //
773 // CPP-CHECK-LABEL: @_Z18test_svrshl_n_u8_mu10__SVBool_tu11__SVUint8_ta(
774 // CPP-CHECK-NEXT:  entry:
775 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
776 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
777 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
778 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
779 //
test_svrshl_n_u8_m(svbool_t pg,svuint8_t op1,int8_t op2)780 svuint8_t test_svrshl_n_u8_m(svbool_t pg, svuint8_t op1, int8_t op2)
781 {
782   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
783   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u8_m'}}
784   return SVE_ACLE_FUNC(svrshl,_n_u8,_m,)(pg, op1, op2);
785 }
786 
787 // CHECK-LABEL: @test_svrshl_n_u16_m(
788 // CHECK-NEXT:  entry:
789 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
790 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
791 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
792 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
793 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
794 //
795 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u16_mu10__SVBool_tu12__SVUint16_ts(
796 // CPP-CHECK-NEXT:  entry:
797 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
798 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
799 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
800 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
801 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
802 //
test_svrshl_n_u16_m(svbool_t pg,svuint16_t op1,int16_t op2)803 svuint16_t test_svrshl_n_u16_m(svbool_t pg, svuint16_t op1, int16_t op2)
804 {
805   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
806   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u16_m'}}
807   return SVE_ACLE_FUNC(svrshl,_n_u16,_m,)(pg, op1, op2);
808 }
809 
810 // CHECK-LABEL: @test_svrshl_n_u32_m(
811 // CHECK-NEXT:  entry:
812 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
813 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
814 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
815 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
816 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
817 //
818 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u32_mu10__SVBool_tu12__SVUint32_ti(
819 // CPP-CHECK-NEXT:  entry:
820 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
821 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
822 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
823 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
824 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
825 //
test_svrshl_n_u32_m(svbool_t pg,svuint32_t op1,int32_t op2)826 svuint32_t test_svrshl_n_u32_m(svbool_t pg, svuint32_t op1, int32_t op2)
827 {
828   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
829   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u32_m'}}
830   return SVE_ACLE_FUNC(svrshl,_n_u32,_m,)(pg, op1, op2);
831 }
832 
833 // CHECK-LABEL: @test_svrshl_n_u64_m(
834 // CHECK-NEXT:  entry:
835 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
836 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
837 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
838 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
839 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
840 //
841 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u64_mu10__SVBool_tu12__SVUint64_tl(
842 // CPP-CHECK-NEXT:  entry:
843 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
844 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
845 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
846 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
847 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
848 //
test_svrshl_n_u64_m(svbool_t pg,svuint64_t op1,int64_t op2)849 svuint64_t test_svrshl_n_u64_m(svbool_t pg, svuint64_t op1, int64_t op2)
850 {
851   // overload-warning@+2 {{implicit declaration of function 'svrshl_m'}}
852   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u64_m'}}
853   return SVE_ACLE_FUNC(svrshl,_n_u64,_m,)(pg, op1, op2);
854 }
855 
856 // CHECK-LABEL: @test_svrshl_n_s8_x(
857 // CHECK-NEXT:  entry:
858 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
859 // CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
860 // CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
861 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
862 //
863 // CPP-CHECK-LABEL: @_Z18test_svrshl_n_s8_xu10__SVBool_tu10__SVInt8_ta(
864 // CPP-CHECK-NEXT:  entry:
865 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
866 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
867 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
868 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
869 //
test_svrshl_n_s8_x(svbool_t pg,svint8_t op1,int8_t op2)870 svint8_t test_svrshl_n_s8_x(svbool_t pg, svint8_t op1, int8_t op2)
871 {
872   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
873   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s8_x'}}
874   return SVE_ACLE_FUNC(svrshl,_n_s8,_x,)(pg, op1, op2);
875 }
876 
877 // CHECK-LABEL: @test_svrshl_n_s16_x(
878 // CHECK-NEXT:  entry:
879 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
880 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
881 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
882 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
883 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
884 //
885 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s16_xu10__SVBool_tu11__SVInt16_ts(
886 // CPP-CHECK-NEXT:  entry:
887 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
888 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
889 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
890 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.srshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
891 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
892 //
test_svrshl_n_s16_x(svbool_t pg,svint16_t op1,int16_t op2)893 svint16_t test_svrshl_n_s16_x(svbool_t pg, svint16_t op1, int16_t op2)
894 {
895   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
896   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s16_x'}}
897   return SVE_ACLE_FUNC(svrshl,_n_s16,_x,)(pg, op1, op2);
898 }
899 
900 // CHECK-LABEL: @test_svrshl_n_s32_x(
901 // CHECK-NEXT:  entry:
902 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
903 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
904 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
905 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
906 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
907 //
908 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s32_xu10__SVBool_tu11__SVInt32_ti(
909 // CPP-CHECK-NEXT:  entry:
910 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
911 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
912 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
913 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.srshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
914 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
915 //
test_svrshl_n_s32_x(svbool_t pg,svint32_t op1,int32_t op2)916 svint32_t test_svrshl_n_s32_x(svbool_t pg, svint32_t op1, int32_t op2)
917 {
918   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
919   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s32_x'}}
920   return SVE_ACLE_FUNC(svrshl,_n_s32,_x,)(pg, op1, op2);
921 }
922 
923 // CHECK-LABEL: @test_svrshl_n_s64_x(
924 // CHECK-NEXT:  entry:
925 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
926 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
927 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
928 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
929 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
930 //
931 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_s64_xu10__SVBool_tu11__SVInt64_tl(
932 // CPP-CHECK-NEXT:  entry:
933 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
934 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
935 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
936 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.srshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
937 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
938 //
test_svrshl_n_s64_x(svbool_t pg,svint64_t op1,int64_t op2)939 svint64_t test_svrshl_n_s64_x(svbool_t pg, svint64_t op1, int64_t op2)
940 {
941   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
942   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_s64_x'}}
943   return SVE_ACLE_FUNC(svrshl,_n_s64,_x,)(pg, op1, op2);
944 }
945 
946 // CHECK-LABEL: @test_svrshl_n_u8_x(
947 // CHECK-NEXT:  entry:
948 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
949 // CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
950 // CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
951 // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
952 //
953 // CPP-CHECK-LABEL: @_Z18test_svrshl_n_u8_xu10__SVBool_tu11__SVUint8_ta(
954 // CPP-CHECK-NEXT:  entry:
955 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP2:%.*]], i32 0
956 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
957 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = 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> [[TMP0]])
958 // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
959 //
test_svrshl_n_u8_x(svbool_t pg,svuint8_t op1,int8_t op2)960 svuint8_t test_svrshl_n_u8_x(svbool_t pg, svuint8_t op1, int8_t op2)
961 {
962   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
963   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u8_x'}}
964   return SVE_ACLE_FUNC(svrshl,_n_u8,_x,)(pg, op1, op2);
965 }
966 
967 // CHECK-LABEL: @test_svrshl_n_u16_x(
968 // CHECK-NEXT:  entry:
969 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
970 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
971 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
972 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
973 // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
974 //
975 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u16_xu10__SVBool_tu12__SVUint16_ts(
976 // CPP-CHECK-NEXT:  entry:
977 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
978 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP2:%.*]], i32 0
979 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
980 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.urshl.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[TMP1]])
981 // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
982 //
test_svrshl_n_u16_x(svbool_t pg,svuint16_t op1,int16_t op2)983 svuint16_t test_svrshl_n_u16_x(svbool_t pg, svuint16_t op1, int16_t op2)
984 {
985   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
986   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u16_x'}}
987   return SVE_ACLE_FUNC(svrshl,_n_u16,_x,)(pg, op1, op2);
988 }
989 
990 // CHECK-LABEL: @test_svrshl_n_u32_x(
991 // CHECK-NEXT:  entry:
992 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
993 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
994 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
995 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
996 // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
997 //
998 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u32_xu10__SVBool_tu12__SVUint32_ti(
999 // CPP-CHECK-NEXT:  entry:
1000 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1001 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP2:%.*]], i32 0
1002 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1003 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.urshl.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[TMP1]])
1004 // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
1005 //
test_svrshl_n_u32_x(svbool_t pg,svuint32_t op1,int32_t op2)1006 svuint32_t test_svrshl_n_u32_x(svbool_t pg, svuint32_t op1, int32_t op2)
1007 {
1008   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
1009   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u32_x'}}
1010   return SVE_ACLE_FUNC(svrshl,_n_u32,_x,)(pg, op1, op2);
1011 }
1012 
1013 // CHECK-LABEL: @test_svrshl_n_u64_x(
1014 // CHECK-NEXT:  entry:
1015 // CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1016 // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
1017 // CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1018 // CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
1019 // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
1020 //
1021 // CPP-CHECK-LABEL: @_Z19test_svrshl_n_u64_xu10__SVBool_tu12__SVUint64_tl(
1022 // CPP-CHECK-NEXT:  entry:
1023 // CPP-CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1024 // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i32 0
1025 // CPP-CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1026 // CPP-CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.urshl.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[TMP1]])
1027 // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
1028 //
test_svrshl_n_u64_x(svbool_t pg,svuint64_t op1,int64_t op2)1029 svuint64_t test_svrshl_n_u64_x(svbool_t pg, svuint64_t op1, int64_t op2)
1030 {
1031   // overload-warning@+2 {{implicit declaration of function 'svrshl_x'}}
1032   // expected-warning@+1 {{implicit declaration of function 'svrshl_n_u64_x'}}
1033   return SVE_ACLE_FUNC(svrshl,_n_u64,_x,)(pg, op1, op2);
1034 }
1035