1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // REQUIRES: aarch64-registered-target
3 // RUN: %clang_cc1 -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
4 // RUN: %clang_cc1 -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve2p1 -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
5 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve2p1 -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
6 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve2p1 -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
7 // RUN: %clang_cc1 -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve2p1 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
8 // RUN: %clang_cc1 -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
12 #ifdef SVE_OVERLOADED_FORMS
13 // A simple used,unused... macro, long enough to represent any SVE builtin.
14 #define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3
16 #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
19 #ifdef __ARM_FEATURE_SME
20 #define ATTR __arm_streaming
25 // CHECK-LABEL: @test_svstnt1_u8_x2(
27 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
28 // CHECK-NEXT: ret void
30 // CPP-CHECK-LABEL: @_Z18test_svstnt1_u8_x2u11__SVCount_tPh11svuint8x2_t(
31 // CPP-CHECK-NEXT: entry:
32 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
33 // CPP-CHECK-NEXT: ret void
35 void test_svstnt1_u8_x2(svcount_t pn
, uint8_t *base
, svuint8x2_t v
) ATTR
37 return SVE_ACLE_FUNC(svstnt1
,_u8_x2
,,)(pn
, base
, v
);
41 // CHECK-LABEL: @test_svstnt1_u16_x2(
43 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
44 // CHECK-NEXT: ret void
46 // CPP-CHECK-LABEL: @_Z19test_svstnt1_u16_x2u11__SVCount_tPt12svuint16x2_t(
47 // CPP-CHECK-NEXT: entry:
48 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
49 // CPP-CHECK-NEXT: ret void
51 void test_svstnt1_u16_x2(svcount_t pn
, uint16_t *base
, svuint16x2_t v
) ATTR
53 return SVE_ACLE_FUNC(svstnt1
,_u16_x2
,,)(pn
, base
, v
);
57 // CHECK-LABEL: @test_svstnt1_u32_x2(
59 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
60 // CHECK-NEXT: ret void
62 // CPP-CHECK-LABEL: @_Z19test_svstnt1_u32_x2u11__SVCount_tPj12svuint32x2_t(
63 // CPP-CHECK-NEXT: entry:
64 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
65 // CPP-CHECK-NEXT: ret void
67 void test_svstnt1_u32_x2(svcount_t pn
, uint32_t *base
, svuint32x2_t v
) ATTR
69 return SVE_ACLE_FUNC(svstnt1
,_u32_x2
,,)(pn
, base
, v
);
73 // CHECK-LABEL: @test_svstnt1_u64_x2(
75 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
76 // CHECK-NEXT: ret void
78 // CPP-CHECK-LABEL: @_Z19test_svstnt1_u64_x2u11__SVCount_tPm12svuint64x2_t(
79 // CPP-CHECK-NEXT: entry:
80 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
81 // CPP-CHECK-NEXT: ret void
83 void test_svstnt1_u64_x2(svcount_t pn
, uint64_t *base
, svuint64x2_t v
) ATTR
85 return SVE_ACLE_FUNC(svstnt1
,_u64_x2
,,)(pn
, base
, v
);
89 // CHECK-LABEL: @test_svstnt1_u8_x4(
91 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
92 // CHECK-NEXT: ret void
94 // CPP-CHECK-LABEL: @_Z18test_svstnt1_u8_x4u11__SVCount_tPh11svuint8x4_t(
95 // CPP-CHECK-NEXT: entry:
96 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
97 // CPP-CHECK-NEXT: ret void
99 void test_svstnt1_u8_x4(svcount_t pn
, uint8_t *base
, svuint8x4_t v
) ATTR
101 return SVE_ACLE_FUNC(svstnt1
,_u8_x4
,,)(pn
, base
, v
);
105 // CHECK-LABEL: @test_svstnt1_u16_x4(
106 // CHECK-NEXT: entry:
107 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
108 // CHECK-NEXT: ret void
110 // CPP-CHECK-LABEL: @_Z19test_svstnt1_u16_x4u11__SVCount_tPt12svuint16x4_t(
111 // CPP-CHECK-NEXT: entry:
112 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
113 // CPP-CHECK-NEXT: ret void
115 void test_svstnt1_u16_x4(svcount_t pn
, uint16_t *base
, svuint16x4_t v
) ATTR
117 return SVE_ACLE_FUNC(svstnt1
,_u16_x4
,,)(pn
, base
, v
);
121 // CHECK-LABEL: @test_svstnt1_u32_x4(
122 // CHECK-NEXT: entry:
123 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
124 // CHECK-NEXT: ret void
126 // CPP-CHECK-LABEL: @_Z19test_svstnt1_u32_x4u11__SVCount_tPj12svuint32x4_t(
127 // CPP-CHECK-NEXT: entry:
128 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
129 // CPP-CHECK-NEXT: ret void
131 void test_svstnt1_u32_x4(svcount_t pn
, uint32_t *base
, svuint32x4_t v
) ATTR
133 return SVE_ACLE_FUNC(svstnt1
,_u32_x4
,,)(pn
, base
, v
);
137 // CHECK-LABEL: @test_svstnt1_u64_x4(
138 // CHECK-NEXT: entry:
139 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
140 // CHECK-NEXT: ret void
142 // CPP-CHECK-LABEL: @_Z19test_svstnt1_u64_x4u11__SVCount_tPm12svuint64x4_t(
143 // CPP-CHECK-NEXT: entry:
144 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
145 // CPP-CHECK-NEXT: ret void
147 void test_svstnt1_u64_x4(svcount_t pn
, uint64_t *base
, svuint64x4_t v
) ATTR
149 return SVE_ACLE_FUNC(svstnt1
,_u64_x4
,,)(pn
, base
, v
);
153 // CHECK-LABEL: @test_svstnt1_s8_x2(
154 // CHECK-NEXT: entry:
155 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
156 // CHECK-NEXT: ret void
158 // CPP-CHECK-LABEL: @_Z18test_svstnt1_s8_x2u11__SVCount_tPa10svint8x2_t(
159 // CPP-CHECK-NEXT: entry:
160 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
161 // CPP-CHECK-NEXT: ret void
163 void test_svstnt1_s8_x2(svcount_t pn
, int8_t *base
, svint8x2_t v
) ATTR
165 return SVE_ACLE_FUNC(svstnt1
,_s8_x2
,,)(pn
, base
, v
);
169 // CHECK-LABEL: @test_svstnt1_s16_x2(
170 // CHECK-NEXT: entry:
171 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
172 // CHECK-NEXT: ret void
174 // CPP-CHECK-LABEL: @_Z19test_svstnt1_s16_x2u11__SVCount_tPs11svint16x2_t(
175 // CPP-CHECK-NEXT: entry:
176 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
177 // CPP-CHECK-NEXT: ret void
179 void test_svstnt1_s16_x2(svcount_t pn
, int16_t *base
, svint16x2_t v
) ATTR
181 return SVE_ACLE_FUNC(svstnt1
,_s16_x2
,,)(pn
, base
, v
);
185 // CHECK-LABEL: @test_svstnt1_s32_x2(
186 // CHECK-NEXT: entry:
187 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
188 // CHECK-NEXT: ret void
190 // CPP-CHECK-LABEL: @_Z19test_svstnt1_s32_x2u11__SVCount_tPi11svint32x2_t(
191 // CPP-CHECK-NEXT: entry:
192 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
193 // CPP-CHECK-NEXT: ret void
195 void test_svstnt1_s32_x2(svcount_t pn
, int32_t *base
, svint32x2_t v
) ATTR
197 return SVE_ACLE_FUNC(svstnt1
,_s32_x2
,,)(pn
, base
, v
);
201 // CHECK-LABEL: @test_svstnt1_s64_x2(
202 // CHECK-NEXT: entry:
203 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
204 // CHECK-NEXT: ret void
206 // CPP-CHECK-LABEL: @_Z19test_svstnt1_s64_x2u11__SVCount_tPl11svint64x2_t(
207 // CPP-CHECK-NEXT: entry:
208 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
209 // CPP-CHECK-NEXT: ret void
211 void test_svstnt1_s64_x2(svcount_t pn
, int64_t *base
, svint64x2_t v
) ATTR
213 return SVE_ACLE_FUNC(svstnt1
,_s64_x2
,,)(pn
, base
, v
);
217 // CHECK-LABEL: @test_svstnt1_s8_x4(
218 // CHECK-NEXT: entry:
219 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
220 // CHECK-NEXT: ret void
222 // CPP-CHECK-LABEL: @_Z18test_svstnt1_s8_x4u11__SVCount_tPa10svint8x4_t(
223 // CPP-CHECK-NEXT: entry:
224 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
225 // CPP-CHECK-NEXT: ret void
227 void test_svstnt1_s8_x4(svcount_t pn
, int8_t *base
, svint8x4_t v
) ATTR
229 return SVE_ACLE_FUNC(svstnt1
,_s8_x4
,,)(pn
, base
, v
);
233 // CHECK-LABEL: @test_svstnt1_s16_x4(
234 // CHECK-NEXT: entry:
235 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
236 // CHECK-NEXT: ret void
238 // CPP-CHECK-LABEL: @_Z19test_svstnt1_s16_x4u11__SVCount_tPs11svint16x4_t(
239 // CPP-CHECK-NEXT: entry:
240 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
241 // CPP-CHECK-NEXT: ret void
243 void test_svstnt1_s16_x4(svcount_t pn
, int16_t *base
, svint16x4_t v
) ATTR
245 return SVE_ACLE_FUNC(svstnt1
,_s16_x4
,,)(pn
, base
, v
);
249 // CHECK-LABEL: @test_svstnt1_s32_x4(
250 // CHECK-NEXT: entry:
251 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
252 // CHECK-NEXT: ret void
254 // CPP-CHECK-LABEL: @_Z19test_svstnt1_s32_x4u11__SVCount_tPi11svint32x4_t(
255 // CPP-CHECK-NEXT: entry:
256 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
257 // CPP-CHECK-NEXT: ret void
259 void test_svstnt1_s32_x4(svcount_t pn
, int32_t *base
, svint32x4_t v
) ATTR
261 return SVE_ACLE_FUNC(svstnt1
,_s32_x4
,,)(pn
, base
, v
);
265 // CHECK-LABEL: @test_svstnt1_s64_x4(
266 // CHECK-NEXT: entry:
267 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
268 // CHECK-NEXT: ret void
270 // CPP-CHECK-LABEL: @_Z19test_svstnt1_s64_x4u11__SVCount_tPl11svint64x4_t(
271 // CPP-CHECK-NEXT: entry:
272 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
273 // CPP-CHECK-NEXT: ret void
275 void test_svstnt1_s64_x4(svcount_t pn
, int64_t *base
, svint64x4_t v
) ATTR
277 return SVE_ACLE_FUNC(svstnt1
,_s64_x4
,,)(pn
, base
, v
);
281 // CHECK-LABEL: @test_svstnt1_f16_x2(
282 // CHECK-NEXT: entry:
283 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
284 // CHECK-NEXT: ret void
286 // CPP-CHECK-LABEL: @_Z19test_svstnt1_f16_x2u11__SVCount_tPDh13svfloat16x2_t(
287 // CPP-CHECK-NEXT: entry:
288 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
289 // CPP-CHECK-NEXT: ret void
291 void test_svstnt1_f16_x2(svcount_t pn
, float16_t
*base
, svfloat16x2_t v
) ATTR
293 return SVE_ACLE_FUNC(svstnt1
,_f16_x2
,,)(pn
, base
, v
);
297 // CHECK-LABEL: @test_svstnt1_f32_x2(
298 // CHECK-NEXT: entry:
299 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
300 // CHECK-NEXT: ret void
302 // CPP-CHECK-LABEL: @_Z19test_svstnt1_f32_x2u11__SVCount_tPf13svfloat32x2_t(
303 // CPP-CHECK-NEXT: entry:
304 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
305 // CPP-CHECK-NEXT: ret void
307 void test_svstnt1_f32_x2(svcount_t pn
, float32_t
*base
, svfloat32x2_t v
) ATTR
309 return SVE_ACLE_FUNC(svstnt1
,_f32_x2
,,)(pn
, base
, v
);
313 // CHECK-LABEL: @test_svstnt1_f64_x2(
314 // CHECK-NEXT: entry:
315 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
316 // CHECK-NEXT: ret void
318 // CPP-CHECK-LABEL: @_Z19test_svstnt1_f64_x2u11__SVCount_tPd13svfloat64x2_t(
319 // CPP-CHECK-NEXT: entry:
320 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
321 // CPP-CHECK-NEXT: ret void
323 void test_svstnt1_f64_x2(svcount_t pn
, float64_t
*base
, svfloat64x2_t v
) ATTR
325 return SVE_ACLE_FUNC(svstnt1
,_f64_x2
,,)(pn
, base
, v
);
329 // CHECK-LABEL: @test_svstnt1_f16_x4(
330 // CHECK-NEXT: entry:
331 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], <vscale x 8 x half> [[V_COERCE2:%.*]], <vscale x 8 x half> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
332 // CHECK-NEXT: ret void
334 // CPP-CHECK-LABEL: @_Z19test_svstnt1_f16_x4u11__SVCount_tPDh13svfloat16x4_t(
335 // CPP-CHECK-NEXT: entry:
336 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], <vscale x 8 x half> [[V_COERCE2:%.*]], <vscale x 8 x half> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
337 // CPP-CHECK-NEXT: ret void
339 void test_svstnt1_f16_x4(svcount_t pn
, float16_t
*base
, svfloat16x4_t v
) ATTR
341 return SVE_ACLE_FUNC(svstnt1
,_f16_x4
,,)(pn
, base
, v
);
345 // CHECK-LABEL: @test_svstnt1_f32_x4(
346 // CHECK-NEXT: entry:
347 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], <vscale x 4 x float> [[V_COERCE2:%.*]], <vscale x 4 x float> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
348 // CHECK-NEXT: ret void
350 // CPP-CHECK-LABEL: @_Z19test_svstnt1_f32_x4u11__SVCount_tPf13svfloat32x4_t(
351 // CPP-CHECK-NEXT: entry:
352 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], <vscale x 4 x float> [[V_COERCE2:%.*]], <vscale x 4 x float> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
353 // CPP-CHECK-NEXT: ret void
355 void test_svstnt1_f32_x4(svcount_t pn
, float32_t
*base
, svfloat32x4_t v
) ATTR
357 return SVE_ACLE_FUNC(svstnt1
,_f32_x4
,,)(pn
, base
, v
);
361 // CHECK-LABEL: @test_svstnt1_f64_x4(
362 // CHECK-NEXT: entry:
363 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], <vscale x 2 x double> [[V_COERCE2:%.*]], <vscale x 2 x double> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
364 // CHECK-NEXT: ret void
366 // CPP-CHECK-LABEL: @_Z19test_svstnt1_f64_x4u11__SVCount_tPd13svfloat64x4_t(
367 // CPP-CHECK-NEXT: entry:
368 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], <vscale x 2 x double> [[V_COERCE2:%.*]], <vscale x 2 x double> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[BASE:%.*]])
369 // CPP-CHECK-NEXT: ret void
371 void test_svstnt1_f64_x4(svcount_t pn
, float64_t
*base
, svfloat64x4_t v
) ATTR
373 return SVE_ACLE_FUNC(svstnt1
,_f64_x4
,,)(pn
, base
, v
);
376 // == VNUM variants ==
379 // CHECK-LABEL: @test_svstnt1_vnum_u8_x2(
380 // CHECK-NEXT: entry:
381 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
382 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
383 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
384 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
385 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
386 // CHECK-NEXT: ret void
388 // CPP-CHECK-LABEL: @_Z23test_svstnt1_vnum_u8_x2u11__SVCount_tPhl11svuint8x2_t(
389 // CPP-CHECK-NEXT: entry:
390 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
391 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
392 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
393 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
394 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
395 // CPP-CHECK-NEXT: ret void
397 void test_svstnt1_vnum_u8_x2(svcount_t pn
, uint8_t *base
, int64_t vnum
, svuint8x2_t v
) ATTR
399 return SVE_ACLE_FUNC(svstnt1_vnum
,_u8_x2
,,)(pn
, base
, vnum
, v
);
403 // CHECK-LABEL: @test_svstnt1_vnum_u16_x2(
404 // CHECK-NEXT: entry:
405 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
406 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
407 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
408 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
409 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
410 // CHECK-NEXT: ret void
412 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_u16_x2u11__SVCount_tPtl12svuint16x2_t(
413 // CPP-CHECK-NEXT: entry:
414 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
415 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
416 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
417 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
418 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
419 // CPP-CHECK-NEXT: ret void
421 void test_svstnt1_vnum_u16_x2(svcount_t pn
, uint16_t *base
, int64_t vnum
, svuint16x2_t v
) ATTR
423 return SVE_ACLE_FUNC(svstnt1_vnum
,_u16_x2
,,)(pn
, base
, vnum
, v
);
427 // CHECK-LABEL: @test_svstnt1_vnum_u32_x2(
428 // CHECK-NEXT: entry:
429 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
430 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
431 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
432 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
433 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
434 // CHECK-NEXT: ret void
436 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_u32_x2u11__SVCount_tPjl12svuint32x2_t(
437 // CPP-CHECK-NEXT: entry:
438 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
439 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
440 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
441 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
442 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
443 // CPP-CHECK-NEXT: ret void
445 void test_svstnt1_vnum_u32_x2(svcount_t pn
, uint32_t *base
, int64_t vnum
, svuint32x2_t v
) ATTR
447 return SVE_ACLE_FUNC(svstnt1_vnum
,_u32_x2
,,)(pn
, base
, vnum
, v
);
451 // CHECK-LABEL: @test_svstnt1_vnum_u64_x2(
452 // CHECK-NEXT: entry:
453 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
454 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
455 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
456 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
457 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
458 // CHECK-NEXT: ret void
460 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_u64_x2u11__SVCount_tPml12svuint64x2_t(
461 // CPP-CHECK-NEXT: entry:
462 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
463 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
464 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
465 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
466 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
467 // CPP-CHECK-NEXT: ret void
469 void test_svstnt1_vnum_u64_x2(svcount_t pn
, uint64_t *base
, int64_t vnum
, svuint64x2_t v
) ATTR
471 return SVE_ACLE_FUNC(svstnt1_vnum
,_u64_x2
,,)(pn
, base
, vnum
, v
);
475 // CHECK-LABEL: @test_svstnt1_vnum_u8_x4(
476 // CHECK-NEXT: entry:
477 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
478 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
479 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
480 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
481 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
482 // CHECK-NEXT: ret void
484 // CPP-CHECK-LABEL: @_Z23test_svstnt1_vnum_u8_x4u11__SVCount_tPhl11svuint8x4_t(
485 // CPP-CHECK-NEXT: entry:
486 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
487 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
488 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
489 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
490 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
491 // CPP-CHECK-NEXT: ret void
493 void test_svstnt1_vnum_u8_x4(svcount_t pn
, uint8_t *base
, int64_t vnum
, svuint8x4_t v
) ATTR
495 return SVE_ACLE_FUNC(svstnt1_vnum
,_u8_x4
,,)(pn
, base
, vnum
, v
);
499 // CHECK-LABEL: @test_svstnt1_vnum_u16_x4(
500 // CHECK-NEXT: entry:
501 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
502 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
503 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
504 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
505 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
506 // CHECK-NEXT: ret void
508 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_u16_x4u11__SVCount_tPtl12svuint16x4_t(
509 // CPP-CHECK-NEXT: entry:
510 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
511 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
512 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
513 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
514 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
515 // CPP-CHECK-NEXT: ret void
517 void test_svstnt1_vnum_u16_x4(svcount_t pn
, uint16_t *base
, int64_t vnum
, svuint16x4_t v
) ATTR
519 return SVE_ACLE_FUNC(svstnt1_vnum
,_u16_x4
,,)(pn
, base
, vnum
, v
);
523 // CHECK-LABEL: @test_svstnt1_vnum_u32_x4(
524 // CHECK-NEXT: entry:
525 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
526 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
527 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
528 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
529 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
530 // CHECK-NEXT: ret void
532 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_u32_x4u11__SVCount_tPjl12svuint32x4_t(
533 // CPP-CHECK-NEXT: entry:
534 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
535 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
536 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
537 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
538 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
539 // CPP-CHECK-NEXT: ret void
541 void test_svstnt1_vnum_u32_x4(svcount_t pn
, uint32_t *base
, int64_t vnum
, svuint32x4_t v
) ATTR
543 return SVE_ACLE_FUNC(svstnt1_vnum
,_u32_x4
,,)(pn
, base
, vnum
, v
);
547 // CHECK-LABEL: @test_svstnt1_vnum_u64_x4(
548 // CHECK-NEXT: entry:
549 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
550 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
551 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
552 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
553 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
554 // CHECK-NEXT: ret void
556 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_u64_x4u11__SVCount_tPml12svuint64x4_t(
557 // CPP-CHECK-NEXT: entry:
558 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
559 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
560 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
561 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
562 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
563 // CPP-CHECK-NEXT: ret void
565 void test_svstnt1_vnum_u64_x4(svcount_t pn
, uint64_t *base
, int64_t vnum
, svuint64x4_t v
) ATTR
567 return SVE_ACLE_FUNC(svstnt1_vnum
,_u64_x4
,,)(pn
, base
, vnum
, v
);
571 // CHECK-LABEL: @test_svstnt1_vnum_s8_x2(
572 // CHECK-NEXT: entry:
573 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
574 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
575 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
576 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
577 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
578 // CHECK-NEXT: ret void
580 // CPP-CHECK-LABEL: @_Z23test_svstnt1_vnum_s8_x2u11__SVCount_tPal10svint8x2_t(
581 // CPP-CHECK-NEXT: entry:
582 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
583 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
584 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
585 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
586 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
587 // CPP-CHECK-NEXT: ret void
589 void test_svstnt1_vnum_s8_x2(svcount_t pn
, int8_t *base
, int64_t vnum
, svint8x2_t v
) ATTR
591 return SVE_ACLE_FUNC(svstnt1_vnum
,_s8_x2
,,)(pn
, base
, vnum
, v
);
595 // CHECK-LABEL: @test_svstnt1_vnum_s16_x2(
596 // CHECK-NEXT: entry:
597 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
598 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
599 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
600 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
601 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
602 // CHECK-NEXT: ret void
604 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_s16_x2u11__SVCount_tPsl11svint16x2_t(
605 // CPP-CHECK-NEXT: entry:
606 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
607 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
608 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
609 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
610 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
611 // CPP-CHECK-NEXT: ret void
613 void test_svstnt1_vnum_s16_x2(svcount_t pn
, int16_t *base
, int64_t vnum
, svint16x2_t v
) ATTR
615 return SVE_ACLE_FUNC(svstnt1_vnum
,_s16_x2
,,)(pn
, base
, vnum
, v
);
619 // CHECK-LABEL: @test_svstnt1_vnum_s32_x2(
620 // CHECK-NEXT: entry:
621 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
622 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
623 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
624 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
625 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
626 // CHECK-NEXT: ret void
628 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_s32_x2u11__SVCount_tPil11svint32x2_t(
629 // CPP-CHECK-NEXT: entry:
630 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
631 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
632 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
633 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
634 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
635 // CPP-CHECK-NEXT: ret void
637 void test_svstnt1_vnum_s32_x2(svcount_t pn
, int32_t *base
, int64_t vnum
, svint32x2_t v
) ATTR
639 return SVE_ACLE_FUNC(svstnt1_vnum
,_s32_x2
,,)(pn
, base
, vnum
, v
);
643 // CHECK-LABEL: @test_svstnt1_vnum_s64_x2(
644 // CHECK-NEXT: entry:
645 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
646 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
647 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
648 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
649 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
650 // CHECK-NEXT: ret void
652 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_s64_x2u11__SVCount_tPll11svint64x2_t(
653 // CPP-CHECK-NEXT: entry:
654 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
655 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
656 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
657 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
658 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
659 // CPP-CHECK-NEXT: ret void
661 void test_svstnt1_vnum_s64_x2(svcount_t pn
, int64_t *base
, int64_t vnum
, svint64x2_t v
) ATTR
663 return SVE_ACLE_FUNC(svstnt1_vnum
,_s64_x2
,,)(pn
, base
, vnum
, v
);
667 // CHECK-LABEL: @test_svstnt1_vnum_s8_x4(
668 // CHECK-NEXT: entry:
669 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
670 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
671 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
672 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
673 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
674 // CHECK-NEXT: ret void
676 // CPP-CHECK-LABEL: @_Z23test_svstnt1_vnum_s8_x4u11__SVCount_tPal10svint8x4_t(
677 // CPP-CHECK-NEXT: entry:
678 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
679 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
680 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
681 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
682 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv16i8(<vscale x 16 x i8> [[V_COERCE0:%.*]], <vscale x 16 x i8> [[V_COERCE1:%.*]], <vscale x 16 x i8> [[V_COERCE2:%.*]], <vscale x 16 x i8> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
683 // CPP-CHECK-NEXT: ret void
685 void test_svstnt1_vnum_s8_x4(svcount_t pn
, int8_t *base
, int64_t vnum
, svint8x4_t v
) ATTR
687 return SVE_ACLE_FUNC(svstnt1_vnum
,_s8_x4
,,)(pn
, base
, vnum
, v
);
691 // CHECK-LABEL: @test_svstnt1_vnum_s16_x4(
692 // CHECK-NEXT: entry:
693 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
694 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
695 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
696 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
697 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
698 // CHECK-NEXT: ret void
700 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_s16_x4u11__SVCount_tPsl11svint16x4_t(
701 // CPP-CHECK-NEXT: entry:
702 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
703 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
704 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
705 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
706 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8i16(<vscale x 8 x i16> [[V_COERCE0:%.*]], <vscale x 8 x i16> [[V_COERCE1:%.*]], <vscale x 8 x i16> [[V_COERCE2:%.*]], <vscale x 8 x i16> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
707 // CPP-CHECK-NEXT: ret void
709 void test_svstnt1_vnum_s16_x4(svcount_t pn
, int16_t *base
, int64_t vnum
, svint16x4_t v
) ATTR
711 return SVE_ACLE_FUNC(svstnt1_vnum
,_s16_x4
,,)(pn
, base
, vnum
, v
);
715 // CHECK-LABEL: @test_svstnt1_vnum_s32_x4(
716 // CHECK-NEXT: entry:
717 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
718 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
719 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
720 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
721 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
722 // CHECK-NEXT: ret void
724 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_s32_x4u11__SVCount_tPil11svint32x4_t(
725 // CPP-CHECK-NEXT: entry:
726 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
727 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
728 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
729 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
730 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4i32(<vscale x 4 x i32> [[V_COERCE0:%.*]], <vscale x 4 x i32> [[V_COERCE1:%.*]], <vscale x 4 x i32> [[V_COERCE2:%.*]], <vscale x 4 x i32> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
731 // CPP-CHECK-NEXT: ret void
733 void test_svstnt1_vnum_s32_x4(svcount_t pn
, int32_t *base
, int64_t vnum
, svint32x4_t v
) ATTR
735 return SVE_ACLE_FUNC(svstnt1_vnum
,_s32_x4
,,)(pn
, base
, vnum
, v
);
739 // CHECK-LABEL: @test_svstnt1_vnum_s64_x4(
740 // CHECK-NEXT: entry:
741 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
742 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
743 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
744 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
745 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
746 // CHECK-NEXT: ret void
748 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_s64_x4u11__SVCount_tPll11svint64x4_t(
749 // CPP-CHECK-NEXT: entry:
750 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
751 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM:%.*]], 4
752 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
753 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
754 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2i64(<vscale x 2 x i64> [[V_COERCE0:%.*]], <vscale x 2 x i64> [[V_COERCE1:%.*]], <vscale x 2 x i64> [[V_COERCE2:%.*]], <vscale x 2 x i64> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
755 // CPP-CHECK-NEXT: ret void
757 void test_svstnt1_vnum_s64_x4(svcount_t pn
, int64_t *base
, int64_t vnum
, svint64x4_t v
) ATTR
759 return SVE_ACLE_FUNC(svstnt1_vnum
,_s64_x4
,,)(pn
, base
, vnum
, v
);
763 // CHECK-LABEL: @test_svstnt1_vnum_f16_x2(
764 // CHECK-NEXT: entry:
765 // CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
766 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
767 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
768 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
769 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
770 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
771 // CHECK-NEXT: ret void
773 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_f16_x2u11__SVCount_tPDhd13svfloat16x2_t(
774 // CPP-CHECK-NEXT: entry:
775 // CPP-CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
776 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
777 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
778 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
779 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
780 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
781 // CPP-CHECK-NEXT: ret void
783 void test_svstnt1_vnum_f16_x2(svcount_t pn
, float16_t
*base
, float64_t vnum
, svfloat16x2_t v
) ATTR
785 return SVE_ACLE_FUNC(svstnt1_vnum
,_f16_x2
,,)(pn
, base
, vnum
, v
);
789 // CHECK-LABEL: @test_svstnt1_vnum_f32_x2(
790 // CHECK-NEXT: entry:
791 // CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
792 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
793 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
794 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
795 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
796 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
797 // CHECK-NEXT: ret void
799 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_f32_x2u11__SVCount_tPfd13svfloat32x2_t(
800 // CPP-CHECK-NEXT: entry:
801 // CPP-CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
802 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
803 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
804 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
805 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
806 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
807 // CPP-CHECK-NEXT: ret void
809 void test_svstnt1_vnum_f32_x2(svcount_t pn
, float32_t
*base
, float64_t vnum
, svfloat32x2_t v
) ATTR
811 return SVE_ACLE_FUNC(svstnt1_vnum
,_f32_x2
,,)(pn
, base
, vnum
, v
);
815 // CHECK-LABEL: @test_svstnt1_vnum_f64_x2(
816 // CHECK-NEXT: entry:
817 // CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
818 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
819 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
820 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
821 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
822 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
823 // CHECK-NEXT: ret void
825 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_f64_x2u11__SVCount_tPdd13svfloat64x2_t(
826 // CPP-CHECK-NEXT: entry:
827 // CPP-CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
828 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
829 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
830 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
831 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
832 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x2.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
833 // CPP-CHECK-NEXT: ret void
835 void test_svstnt1_vnum_f64_x2(svcount_t pn
, float64_t
*base
, float64_t vnum
, svfloat64x2_t v
) ATTR
837 return SVE_ACLE_FUNC(svstnt1_vnum
,_f64_x2
,,)(pn
, base
, vnum
, v
);
841 // CHECK-LABEL: @test_svstnt1_vnum_f16_x4(
842 // CHECK-NEXT: entry:
843 // CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
844 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
845 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
846 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
847 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
848 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], <vscale x 8 x half> [[V_COERCE2:%.*]], <vscale x 8 x half> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
849 // CHECK-NEXT: ret void
851 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_f16_x4u11__SVCount_tPDhd13svfloat16x4_t(
852 // CPP-CHECK-NEXT: entry:
853 // CPP-CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
854 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
855 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
856 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
857 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
858 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv8f16(<vscale x 8 x half> [[V_COERCE0:%.*]], <vscale x 8 x half> [[V_COERCE1:%.*]], <vscale x 8 x half> [[V_COERCE2:%.*]], <vscale x 8 x half> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
859 // CPP-CHECK-NEXT: ret void
861 void test_svstnt1_vnum_f16_x4(svcount_t pn
, float16_t
*base
, float64_t vnum
, svfloat16x4_t v
) ATTR
863 return SVE_ACLE_FUNC(svstnt1_vnum
,_f16_x4
,,)(pn
, base
, vnum
, v
);
867 // CHECK-LABEL: @test_svstnt1_vnum_f32_x4(
868 // CHECK-NEXT: entry:
869 // CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
870 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
871 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
872 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
873 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
874 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], <vscale x 4 x float> [[V_COERCE2:%.*]], <vscale x 4 x float> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
875 // CHECK-NEXT: ret void
877 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_f32_x4u11__SVCount_tPfd13svfloat32x4_t(
878 // CPP-CHECK-NEXT: entry:
879 // CPP-CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
880 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
881 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
882 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
883 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
884 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv4f32(<vscale x 4 x float> [[V_COERCE0:%.*]], <vscale x 4 x float> [[V_COERCE1:%.*]], <vscale x 4 x float> [[V_COERCE2:%.*]], <vscale x 4 x float> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
885 // CPP-CHECK-NEXT: ret void
887 void test_svstnt1_vnum_f32_x4(svcount_t pn
, float32_t
*base
, float64_t vnum
, svfloat32x4_t v
) ATTR
889 return SVE_ACLE_FUNC(svstnt1_vnum
,_f32_x4
,,)(pn
, base
, vnum
, v
);
893 // CHECK-LABEL: @test_svstnt1_vnum_f64_x4(
894 // CHECK-NEXT: entry:
895 // CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
896 // CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
897 // CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
898 // CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
899 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
900 // CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], <vscale x 2 x double> [[V_COERCE2:%.*]], <vscale x 2 x double> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
901 // CHECK-NEXT: ret void
903 // CPP-CHECK-LABEL: @_Z24test_svstnt1_vnum_f64_x4u11__SVCount_tPdd13svfloat64x4_t(
904 // CPP-CHECK-NEXT: entry:
905 // CPP-CHECK-NEXT: [[CONV:%.*]] = fptosi double [[VNUM:%.*]] to i64
906 // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()
907 // CPP-CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[CONV]], 4
908 // CPP-CHECK-NEXT: [[DOTIDX:%.*]] = mul i64 [[TMP1]], [[TMP0]]
909 // CPP-CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[DOTIDX]]
910 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sve.stnt1.pn.x4.nxv2f64(<vscale x 2 x double> [[V_COERCE0:%.*]], <vscale x 2 x double> [[V_COERCE1:%.*]], <vscale x 2 x double> [[V_COERCE2:%.*]], <vscale x 2 x double> [[V_COERCE3:%.*]], target("aarch64.svcount") [[PN:%.*]], ptr [[TMP2]])
911 // CPP-CHECK-NEXT: ret void
913 void test_svstnt1_vnum_f64_x4(svcount_t pn
, float64_t
*base
, float64_t vnum
, svfloat64x4_t v
) ATTR
915 return SVE_ACLE_FUNC(svstnt1_vnum
,_f64_x4
,,)(pn
, base
, vnum
, v
);