1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // REQUIRES: aarch64-registered-target
4 // RUN: %clang_cc1 -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
5 // RUN: %clang_cc1 -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
6 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
7 // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
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
11 #ifdef SVE_OVERLOADED_FORMS
12 // A simple used,unused... macro, long enough to represent any SVE builtin.
13 #define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED,A5) A1##A3##A5
15 #define SVE_ACLE_FUNC(A1,A2,A3,A4,A5) A1##A2##A3##A4##A5
20 // CHECK-LABEL: @test_svmls2_f16(
22 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x2.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZM_COERCE0:%.*]], <vscale x 8 x half> [[ZM_COERCE1:%.*]])
23 // CHECK-NEXT: ret void
25 // CPP-CHECK-LABEL: @_Z15test_svmls2_f16j13svfloat16x2_tS_(
26 // CPP-CHECK-NEXT: entry:
27 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x2.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZM_COERCE0:%.*]], <vscale x 8 x half> [[ZM_COERCE1:%.*]])
28 // CPP-CHECK-NEXT: ret void
30 void test_svmls2_f16(uint32_t slice_base
, svfloat16x2_t zn
, svfloat16x2_t zm
) __arm_streaming
__arm_inout("za")
32 SVE_ACLE_FUNC(svmls_za32
,_f16
,_vg2x2
,,)(slice_base
, zn
, zm
);
35 // CHECK-LABEL: @test_svmls2_bf16(
37 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x2.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE1:%.*]])
38 // CHECK-NEXT: ret void
40 // CPP-CHECK-LABEL: @_Z16test_svmls2_bf16j14svbfloat16x2_tS_(
41 // CPP-CHECK-NEXT: entry:
42 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x2.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE1:%.*]])
43 // CPP-CHECK-NEXT: ret void
45 void test_svmls2_bf16(uint32_t slice_base
, svbfloat16x2_t zn
, svbfloat16x2_t zm
) __arm_streaming
__arm_inout("za")
47 SVE_ACLE_FUNC(svmls_za32
,_bf16
,_vg2x2
,,)(slice_base
, zn
, zm
);
50 // CHECK-LABEL: @test_svmls2_u16(
52 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]])
53 // CHECK-NEXT: ret void
55 // CPP-CHECK-LABEL: @_Z15test_svmls2_u16j12svuint16x2_tS_(
56 // CPP-CHECK-NEXT: entry:
57 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]])
58 // CPP-CHECK-NEXT: ret void
60 void test_svmls2_u16(uint32_t slice_base
, svuint16x2_t zn
, svuint16x2_t zm
) __arm_streaming
__arm_inout("za")
62 SVE_ACLE_FUNC(svmls_za32
,_u16
,_vg2x2
,,)(slice_base
, zn
, zm
);
65 // CHECK-LABEL: @test_svmls2_s16(
67 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]])
68 // CHECK-NEXT: ret void
70 // CPP-CHECK-LABEL: @_Z15test_svmls2_s16j11svint16x2_tS_(
71 // CPP-CHECK-NEXT: entry:
72 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]])
73 // CPP-CHECK-NEXT: ret void
75 void test_svmls2_s16(uint32_t slice_base
, svint16x2_t zn
, svint16x2_t zm
) __arm_streaming
__arm_inout("za")
77 SVE_ACLE_FUNC(svmls_za32
,_s16
,_vg2x2
,,)(slice_base
, zn
, zm
);
80 // CHECK-LABEL: @test_svmls4_f16(
82 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x4.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZN_COERCE2:%.*]], <vscale x 8 x half> [[ZN_COERCE3:%.*]], <vscale x 8 x half> [[ZM_COERCE0:%.*]], <vscale x 8 x half> [[ZM_COERCE1:%.*]], <vscale x 8 x half> [[ZM_COERCE2:%.*]], <vscale x 8 x half> [[ZM_COERCE3:%.*]])
83 // CHECK-NEXT: ret void
85 // CPP-CHECK-LABEL: @_Z15test_svmls4_f16j13svfloat16x4_tS_(
86 // CPP-CHECK-NEXT: entry:
87 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x4.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZN_COERCE2:%.*]], <vscale x 8 x half> [[ZN_COERCE3:%.*]], <vscale x 8 x half> [[ZM_COERCE0:%.*]], <vscale x 8 x half> [[ZM_COERCE1:%.*]], <vscale x 8 x half> [[ZM_COERCE2:%.*]], <vscale x 8 x half> [[ZM_COERCE3:%.*]])
88 // CPP-CHECK-NEXT: ret void
90 void test_svmls4_f16(uint32_t slice_base
, svfloat16x4_t zn
, svfloat16x4_t zm
) __arm_streaming
__arm_inout("za")
92 SVE_ACLE_FUNC(svmls_za32
,_f16
,_vg2x4
,,)(slice_base
, zn
, zm
);
95 // CHECK-LABEL: @test_svmls4_bf16(
97 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x4.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE3:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE3:%.*]])
98 // CHECK-NEXT: ret void
100 // CPP-CHECK-LABEL: @_Z16test_svmls4_bf16j14svbfloat16x4_tS_(
101 // CPP-CHECK-NEXT: entry:
102 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.vg2x4.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE3:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZM_COERCE3:%.*]])
103 // CPP-CHECK-NEXT: ret void
105 void test_svmls4_bf16(uint32_t slice_base
, svbfloat16x4_t zn
, svbfloat16x4_t zm
) __arm_streaming
__arm_inout("za")
107 SVE_ACLE_FUNC(svmls_za32
,_bf16
,_vg2x4
,,)(slice_base
, zn
, zm
);
110 // CHECK-LABEL: @test_svmls4_u16(
111 // CHECK-NEXT: entry:
112 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE2:%.*]], <vscale x 8 x i16> [[ZM_COERCE3:%.*]])
113 // CHECK-NEXT: ret void
115 // CPP-CHECK-LABEL: @_Z15test_svmls4_u16j12svuint16x4_tS_(
116 // CPP-CHECK-NEXT: entry:
117 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE2:%.*]], <vscale x 8 x i16> [[ZM_COERCE3:%.*]])
118 // CPP-CHECK-NEXT: ret void
120 void test_svmls4_u16(uint32_t slice_base
, svuint16x4_t zn
, svuint16x4_t zm
) __arm_streaming
__arm_inout("za")
122 SVE_ACLE_FUNC(svmls_za32
,_u16
,_vg2x4
,,)(slice_base
, zn
, zm
);
125 // CHECK-LABEL: @test_svmls4_s16(
126 // CHECK-NEXT: entry:
127 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE2:%.*]], <vscale x 8 x i16> [[ZM_COERCE3:%.*]])
128 // CHECK-NEXT: ret void
130 // CPP-CHECK-LABEL: @_Z15test_svmls4_s16j11svint16x4_tS_(
131 // CPP-CHECK-NEXT: entry:
132 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM_COERCE0:%.*]], <vscale x 8 x i16> [[ZM_COERCE1:%.*]], <vscale x 8 x i16> [[ZM_COERCE2:%.*]], <vscale x 8 x i16> [[ZM_COERCE3:%.*]])
133 // CPP-CHECK-NEXT: ret void
135 void test_svmls4_s16(uint32_t slice_base
, svint16x4_t zn
, svint16x4_t zm
) __arm_streaming
__arm_inout("za")
137 SVE_ACLE_FUNC(svmls_za32
,_s16
,_vg2x4
,,)(slice_base
, zn
, zm
);
142 // CHECK-LABEL: @test_svmls_single1_f16(
143 // CHECK-NEXT: entry:
144 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x1.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN:%.*]], <vscale x 8 x half> [[ZM:%.*]])
145 // CHECK-NEXT: ret void
147 // CPP-CHECK-LABEL: @_Z22test_svmls_single1_f16ju13__SVFloat16_tS_(
148 // CPP-CHECK-NEXT: entry:
149 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x1.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN:%.*]], <vscale x 8 x half> [[ZM:%.*]])
150 // CPP-CHECK-NEXT: ret void
152 void test_svmls_single1_f16(uint32_t slice_base
, svfloat16_t zn
, svfloat16_t zm
) __arm_streaming
__arm_inout("za")
154 SVE_ACLE_FUNC(svmls_za32
,_f16
,_vg2x1
,,)(slice_base
, zn
, zm
);
157 // CHECK-LABEL: @test_svmls_single1_bf16(
158 // CHECK-NEXT: entry:
159 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x1.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]])
160 // CHECK-NEXT: ret void
162 // CPP-CHECK-LABEL: @_Z23test_svmls_single1_bf16ju14__SVBfloat16_tS_(
163 // CPP-CHECK-NEXT: entry:
164 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x1.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]])
165 // CPP-CHECK-NEXT: ret void
167 void test_svmls_single1_bf16(uint32_t slice_base
, svbfloat16_t zn
, svbfloat16_t zm
) __arm_streaming
__arm_inout("za")
169 SVE_ACLE_FUNC(svmls_za32
,_bf16
,_vg2x1
,,)(slice_base
, zn
, zm
);
172 // CHECK-LABEL: @test_svmls_single1_u16(
173 // CHECK-NEXT: entry:
174 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.single.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
175 // CHECK-NEXT: ret void
177 // CPP-CHECK-LABEL: @_Z22test_svmls_single1_u16ju12__SVUint16_tS_(
178 // CPP-CHECK-NEXT: entry:
179 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.single.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
180 // CPP-CHECK-NEXT: ret void
182 void test_svmls_single1_u16(uint32_t slice_base
, svuint16_t zn
, svuint16_t zm
) __arm_streaming
__arm_inout("za")
184 SVE_ACLE_FUNC(svmls_za32
,_u16
,_vg2x1
,,)(slice_base
, zn
, zm
);
187 // CHECK-LABEL: @test_svmls_single1_s16(
188 // CHECK-NEXT: entry:
189 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.single.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
190 // CHECK-NEXT: ret void
192 // CPP-CHECK-LABEL: @_Z22test_svmls_single1_s16ju11__SVInt16_tS_(
193 // CPP-CHECK-NEXT: entry:
194 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.single.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
195 // CPP-CHECK-NEXT: ret void
197 void test_svmls_single1_s16(uint32_t slice_base
, svint16_t zn
, svint16_t zm
) __arm_streaming
__arm_inout("za")
199 SVE_ACLE_FUNC(svmls_za32
,_s16
,_vg2x1
,,)(slice_base
, zn
, zm
);
202 // CHECK-LABEL: @test_svmls_single2_f16(
203 // CHECK-NEXT: entry:
204 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x2.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZM:%.*]])
205 // CHECK-NEXT: ret void
207 // CPP-CHECK-LABEL: @_Z22test_svmls_single2_f16j13svfloat16x2_tu13__SVFloat16_t(
208 // CPP-CHECK-NEXT: entry:
209 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x2.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZM:%.*]])
210 // CPP-CHECK-NEXT: ret void
212 void test_svmls_single2_f16(uint32_t slice_base
, svfloat16x2_t zn
, svfloat16_t zm
) __arm_streaming
__arm_inout("za")
214 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_f16
,_vg2x2
)(slice_base
, zn
, zm
);
217 // CHECK-LABEL: @test_svmls_single2_bf16(
218 // CHECK-NEXT: entry:
219 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x2.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]])
220 // CHECK-NEXT: ret void
222 // CPP-CHECK-LABEL: @_Z23test_svmls_single2_bf16j14svbfloat16x2_tu14__SVBfloat16_t(
223 // CPP-CHECK-NEXT: entry:
224 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x2.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]])
225 // CPP-CHECK-NEXT: ret void
227 void test_svmls_single2_bf16(uint32_t slice_base
, svbfloat16x2_t zn
, svbfloat16_t zm
) __arm_streaming
__arm_inout("za")
229 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_bf16
,_vg2x2
)(slice_base
, zn
, zm
);
232 // CHECK-LABEL: @test_svmls_single2_u16(
233 // CHECK-NEXT: entry:
234 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.single.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
235 // CHECK-NEXT: ret void
237 // CPP-CHECK-LABEL: @_Z22test_svmls_single2_u16j12svuint16x2_tu12__SVUint16_t(
238 // CPP-CHECK-NEXT: entry:
239 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.single.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
240 // CPP-CHECK-NEXT: ret void
242 void test_svmls_single2_u16(uint32_t slice_base
, svuint16x2_t zn
, svuint16_t zm
) __arm_streaming
__arm_inout("za")
244 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_u16
,_vg2x2
)(slice_base
, zn
, zm
);
247 // CHECK-LABEL: @test_svmls_single2_s16(
248 // CHECK-NEXT: entry:
249 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.single.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
250 // CHECK-NEXT: ret void
252 // CPP-CHECK-LABEL: @_Z22test_svmls_single2_s16j11svint16x2_tu11__SVInt16_t(
253 // CPP-CHECK-NEXT: entry:
254 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.single.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
255 // CPP-CHECK-NEXT: ret void
257 void test_svmls_single2_s16(uint32_t slice_base
, svint16x2_t zn
, svint16_t zm
) __arm_streaming
__arm_inout("za")
259 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_s16
,_vg2x2
)(slice_base
, zn
, zm
);
262 // CHECK-LABEL: @test_svmls_single4_f16(
263 // CHECK-NEXT: entry:
264 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x4.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZN_COERCE2:%.*]], <vscale x 8 x half> [[ZN_COERCE3:%.*]], <vscale x 8 x half> [[ZM:%.*]])
265 // CHECK-NEXT: ret void
267 // CPP-CHECK-LABEL: @_Z22test_svmls_single4_f16j13svfloat16x4_tu13__SVFloat16_t(
268 // CPP-CHECK-NEXT: entry:
269 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x4.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZN_COERCE2:%.*]], <vscale x 8 x half> [[ZN_COERCE3:%.*]], <vscale x 8 x half> [[ZM:%.*]])
270 // CPP-CHECK-NEXT: ret void
272 void test_svmls_single4_f16(uint32_t slice_base
, svfloat16x4_t zn
, svfloat16_t zm
) __arm_streaming
__arm_inout("za")
274 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_f16
,_vg2x4
)(slice_base
, zn
, zm
);
277 // CHECK-LABEL: @test_svmls_single4_bf16(
278 // CHECK-NEXT: entry:
279 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x4.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE3:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]])
280 // CHECK-NEXT: ret void
282 // CPP-CHECK-LABEL: @_Z23test_svmls_single4_bf16j14svbfloat16x4_tu14__SVBfloat16_t(
283 // CPP-CHECK-NEXT: entry:
284 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.single.vg2x4.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE3:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]])
285 // CPP-CHECK-NEXT: ret void
287 void test_svmls_single4_bf16(uint32_t slice_base
, svbfloat16x4_t zn
, svbfloat16_t zm
) __arm_streaming
__arm_inout("za")
289 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_bf16
,_vg2x4
)(slice_base
, zn
, zm
);
292 // CHECK-LABEL: @test_svmls_single4_u16(
293 // CHECK-NEXT: entry:
294 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.single.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
295 // CHECK-NEXT: ret void
297 // CPP-CHECK-LABEL: @_Z22test_svmls_single4_u16j12svuint16x4_tu12__SVUint16_t(
298 // CPP-CHECK-NEXT: entry:
299 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.single.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
300 // CPP-CHECK-NEXT: ret void
302 void test_svmls_single4_u16(uint32_t slice_base
, svuint16x4_t zn
, svuint16_t zm
) __arm_streaming
__arm_inout("za")
304 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_u16
,_vg2x4
)(slice_base
, zn
, zm
);
307 // CHECK-LABEL: @test_svmls_single4_s16(
308 // CHECK-NEXT: entry:
309 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.single.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
310 // CHECK-NEXT: ret void
312 // CPP-CHECK-LABEL: @_Z22test_svmls_single4_s16j11svint16x4_tu11__SVInt16_t(
313 // CPP-CHECK-NEXT: entry:
314 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.single.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]])
315 // CPP-CHECK-NEXT: ret void
317 void test_svmls_single4_s16(uint32_t slice_base
, svint16x4_t zn
, svint16_t zm
) __arm_streaming
__arm_inout("za")
319 SVE_ACLE_FUNC(svmls
,_single
,_za32
,_s16
,_vg2x4
)(slice_base
, zn
, zm
);
326 // CHECK-LABEL: @test_svmls_lane1_f16(
327 // CHECK-NEXT: entry:
328 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x1.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN:%.*]], <vscale x 8 x half> [[ZM:%.*]], i32 7)
329 // CHECK-NEXT: ret void
331 // CPP-CHECK-LABEL: @_Z20test_svmls_lane1_f16ju13__SVFloat16_tS_(
332 // CPP-CHECK-NEXT: entry:
333 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x1.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN:%.*]], <vscale x 8 x half> [[ZM:%.*]], i32 7)
334 // CPP-CHECK-NEXT: ret void
336 void test_svmls_lane1_f16(uint32_t slice_base
, svfloat16_t zn
, svfloat16_t zm
) __arm_streaming
__arm_inout("za")
338 SVE_ACLE_FUNC(svmls_lane_za32
,_f16
,_vg2x1
,,)(slice_base
, zn
, zm
, 7);
341 // CHECK-LABEL: @test_svmls_lane1_bf16(
342 // CHECK-NEXT: entry:
343 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x1.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]], i32 7)
344 // CHECK-NEXT: ret void
346 // CPP-CHECK-LABEL: @_Z21test_svmls_lane1_bf16ju14__SVBfloat16_tS_(
347 // CPP-CHECK-NEXT: entry:
348 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x1.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]], i32 7)
349 // CPP-CHECK-NEXT: ret void
351 void test_svmls_lane1_bf16(uint32_t slice_base
, svbfloat16_t zn
, svbfloat16_t zm
) __arm_streaming
__arm_inout("za")
353 SVE_ACLE_FUNC(svmls_lane_za32
,_bf16
,_vg2x1
,,)(slice_base
, zn
, zm
, 7);
356 // CHECK-LABEL: @test_svmls_lane1_u16(
357 // CHECK-NEXT: entry:
358 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.lane.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
359 // CHECK-NEXT: ret void
361 // CPP-CHECK-LABEL: @_Z20test_svmls_lane1_u16ju12__SVUint16_tS_(
362 // CPP-CHECK-NEXT: entry:
363 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.lane.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
364 // CPP-CHECK-NEXT: ret void
366 void test_svmls_lane1_u16(uint32_t slice_base
, svuint16_t zn
, svuint16_t zm
) __arm_streaming
__arm_inout("za")
368 SVE_ACLE_FUNC(svmls_lane_za32
,_u16
,_vg2x1
,,)(slice_base
, zn
, zm
, 7);
371 // CHECK-LABEL: @test_svmls_lane1_s16(
372 // CHECK-NEXT: entry:
373 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.lane.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
374 // CHECK-NEXT: ret void
376 // CPP-CHECK-LABEL: @_Z20test_svmls_lane1_s16ju11__SVInt16_tS_(
377 // CPP-CHECK-NEXT: entry:
378 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.lane.vg2x1.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
379 // CPP-CHECK-NEXT: ret void
381 void test_svmls_lane1_s16(uint32_t slice_base
, svint16_t zn
, svint16_t zm
) __arm_streaming
__arm_inout("za")
383 SVE_ACLE_FUNC(svmls_lane_za32
,_s16
,_vg2x1
,,)(slice_base
, zn
, zm
, 7);
386 // CHECK-LABEL: @test_svmls_lane2_f16(
387 // CHECK-NEXT: entry:
388 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x2.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZM:%.*]], i32 7)
389 // CHECK-NEXT: ret void
391 // CPP-CHECK-LABEL: @_Z20test_svmls_lane2_f16j13svfloat16x2_tu13__SVFloat16_t(
392 // CPP-CHECK-NEXT: entry:
393 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x2.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZM:%.*]], i32 7)
394 // CPP-CHECK-NEXT: ret void
396 void test_svmls_lane2_f16(uint32_t slice_base
, svfloat16x2_t zn
, svfloat16_t zm
) __arm_streaming
__arm_inout("za")
398 SVE_ACLE_FUNC(svmls_lane_za32
,_f16
,_vg2x2
,,)(slice_base
, zn
, zm
, 7);
401 // CHECK-LABEL: @test_svmls_lane2_bf16(
402 // CHECK-NEXT: entry:
403 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x2.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]], i32 7)
404 // CHECK-NEXT: ret void
406 // CPP-CHECK-LABEL: @_Z21test_svmls_lane2_bf16j14svbfloat16x2_tu14__SVBfloat16_t(
407 // CPP-CHECK-NEXT: entry:
408 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x2.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]], i32 7)
409 // CPP-CHECK-NEXT: ret void
411 void test_svmls_lane2_bf16(uint32_t slice_base
, svbfloat16x2_t zn
, svbfloat16_t zm
) __arm_streaming
__arm_inout("za")
413 SVE_ACLE_FUNC(svmls_lane_za32
,_bf16
,_vg2x2
,,)(slice_base
, zn
, zm
, 7);
416 // CHECK-LABEL: @test_svmls_lane2_u16(
417 // CHECK-NEXT: entry:
418 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.lane.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
419 // CHECK-NEXT: ret void
421 // CPP-CHECK-LABEL: @_Z20test_svmls_lane2_u16j12svuint16x2_tu12__SVUint16_t(
422 // CPP-CHECK-NEXT: entry:
423 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.lane.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
424 // CPP-CHECK-NEXT: ret void
426 void test_svmls_lane2_u16(uint32_t slice_base
, svuint16x2_t zn
, svuint16_t zm
) __arm_streaming
__arm_inout("za")
428 SVE_ACLE_FUNC(svmls_lane_za32
,_u16
,_vg2x2
,,)(slice_base
, zn
, zm
, 7);
431 // CHECK-LABEL: @test_svmls_lane2_s16(
432 // CHECK-NEXT: entry:
433 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.lane.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
434 // CHECK-NEXT: ret void
436 // CPP-CHECK-LABEL: @_Z20test_svmls_lane2_s16j11svint16x2_tu11__SVInt16_t(
437 // CPP-CHECK-NEXT: entry:
438 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.lane.vg2x2.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
439 // CPP-CHECK-NEXT: ret void
441 void test_svmls_lane2_s16(uint32_t slice_base
, svint16x2_t zn
, svint16_t zm
) __arm_streaming
__arm_inout("za")
443 SVE_ACLE_FUNC(svmls_lane_za32
,_s16
,_vg2x2
,,)(slice_base
, zn
, zm
, 7);
446 // CHECK-LABEL: @test_svmls_lane4_f16(
447 // CHECK-NEXT: entry:
448 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x4.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZN_COERCE2:%.*]], <vscale x 8 x half> [[ZN_COERCE3:%.*]], <vscale x 8 x half> [[ZM:%.*]], i32 7)
449 // CHECK-NEXT: ret void
451 // CPP-CHECK-LABEL: @_Z20test_svmls_lane4_f16j13svfloat16x4_tu13__SVFloat16_t(
452 // CPP-CHECK-NEXT: entry:
453 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x4.nxv8f16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x half> [[ZN_COERCE0:%.*]], <vscale x 8 x half> [[ZN_COERCE1:%.*]], <vscale x 8 x half> [[ZN_COERCE2:%.*]], <vscale x 8 x half> [[ZN_COERCE3:%.*]], <vscale x 8 x half> [[ZM:%.*]], i32 7)
454 // CPP-CHECK-NEXT: ret void
456 void test_svmls_lane4_f16(uint32_t slice_base
, svfloat16x4_t zn
, svfloat16_t zm
) __arm_streaming
__arm_inout("za")
458 SVE_ACLE_FUNC(svmls_lane_za32
,_f16
,_vg2x4
,,)(slice_base
, zn
, zm
, 7);
461 // CHECK-LABEL: @test_svmls_lane4_bf16(
462 // CHECK-NEXT: entry:
463 // CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x4.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE3:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]], i32 7)
464 // CHECK-NEXT: ret void
466 // CPP-CHECK-LABEL: @_Z21test_svmls_lane4_bf16j14svbfloat16x4_tu14__SVBfloat16_t(
467 // CPP-CHECK-NEXT: entry:
468 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fmlsl.lane.vg2x4.nxv8bf16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE0:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE1:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE2:%.*]], <vscale x 8 x bfloat> [[ZN_COERCE3:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]], i32 7)
469 // CPP-CHECK-NEXT: ret void
471 void test_svmls_lane4_bf16(uint32_t slice_base
, svbfloat16x4_t zn
, svbfloat16_t zm
) __arm_streaming
__arm_inout("za")
473 SVE_ACLE_FUNC(svmls_lane_za32
,_bf16
,_vg2x4
,,)(slice_base
, zn
, zm
, 7);
476 // CHECK-LABEL: @test_svmls_lane4_u16(
477 // CHECK-NEXT: entry:
478 // CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.lane.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
479 // CHECK-NEXT: ret void
481 // CPP-CHECK-LABEL: @_Z20test_svmls_lane4_u16j12svuint16x4_tu12__SVUint16_t(
482 // CPP-CHECK-NEXT: entry:
483 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.umlsl.lane.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
484 // CPP-CHECK-NEXT: ret void
486 void test_svmls_lane4_u16(uint32_t slice_base
, svuint16x4_t zn
, svuint16_t zm
) __arm_streaming
__arm_inout("za")
488 SVE_ACLE_FUNC(svmls_lane_za32
,_u16
,_vg2x4
,,)(slice_base
, zn
, zm
, 7);
491 // CHECK-LABEL: @test_svmls_lane4_s16(
492 // CHECK-NEXT: entry:
493 // CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.lane.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
494 // CHECK-NEXT: ret void
496 // CPP-CHECK-LABEL: @_Z20test_svmls_lane4_s16j11svint16x4_tu11__SVInt16_t(
497 // CPP-CHECK-NEXT: entry:
498 // CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.smlsl.lane.vg2x4.nxv8i16(i32 [[SLICE_BASE:%.*]], <vscale x 8 x i16> [[ZN_COERCE0:%.*]], <vscale x 8 x i16> [[ZN_COERCE1:%.*]], <vscale x 8 x i16> [[ZN_COERCE2:%.*]], <vscale x 8 x i16> [[ZN_COERCE3:%.*]], <vscale x 8 x i16> [[ZM:%.*]], i32 7)
499 // CPP-CHECK-NEXT: ret void
501 void test_svmls_lane4_s16(uint32_t slice_base
, svint16x4_t zn
, svint16_t zm
) __arm_streaming
__arm_inout("za")
503 SVE_ACLE_FUNC(svmls_lane_za32
,_s16
,_vg2x4
,,)(slice_base
, zn
, zm
, 7);