1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // REQUIRES: aarch64-registered-target
3 // RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s
4 // RUN: %clang_cc1 -fclang-abi-compat=latest -DTUPLE=x2 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=TUPLE2
5 // RUN: %clang_cc1 -fclang-abi-compat=latest -DTUPLE=x3 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=TUPLE3
6 // RUN: %clang_cc1 -fclang-abi-compat=latest -DTUPLE=x4 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=TUPLE4
7 // RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
8 // RUN: %clang_cc1 -fclang-abi-compat=latest -DTUPLE=x2 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-TUPLE2
9 // RUN: %clang_cc1 -fclang-abi-compat=latest -DTUPLE=x3 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-TUPLE3
10 // RUN: %clang_cc1 -fclang-abi-compat=latest -DTUPLE=x4 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-TUPLE4
11 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s
12 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -DTUPLE=x2 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=TUPLE2
13 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -DTUPLE=x3 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=TUPLE3
14 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -DTUPLE=x4 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=TUPLE4
15 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
16 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -DTUPLE=x2 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-TUPLE2
17 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -DTUPLE=x3 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-TUPLE3
18 // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -DTUPLE=x4 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-TUPLE4
20 // RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
25 #define TYPE_1(base,tuple) base ## tuple ## _t
26 #define TYPE_0(base,tuple) TYPE_1(base,tuple)
27 #define TYPE(base) TYPE_0(base,TUPLE)
29 #define TYPE(base) base ## _t
32 #ifdef SVE_OVERLOADED_FORMS
33 #define SVE_ACLE_FUNC(A1,A2_UNUSED) A1
36 #define SVE_ACLE_FUNC_1(A1,A2,T) A1##A2##_##T
37 #define SVE_ACLE_FUNC_0(A1,A2,T) SVE_ACLE_FUNC_1(A1,A2,T)
38 #define SVE_ACLE_FUNC(A1,A2) SVE_ACLE_FUNC_0(A1,A2,TUPLE)
40 #define SVE_ACLE_FUNC(A1,A2) A1##A2
44 // CHECK-LABEL: @test_svreinterpret_s8_bf16(
46 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 16 x i8>
47 // CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
49 // TUPLE2-LABEL: @test_svreinterpret_s8_bf16(
50 // TUPLE2-NEXT: entry:
51 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 32 x i8>
52 // TUPLE2-NEXT: ret <vscale x 32 x i8> [[TMP0]]
54 // TUPLE3-LABEL: @test_svreinterpret_s8_bf16(
55 // TUPLE3-NEXT: entry:
56 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 48 x i8>
57 // TUPLE3-NEXT: ret <vscale x 48 x i8> [[TMP0]]
59 // TUPLE4-LABEL: @test_svreinterpret_s8_bf16(
60 // TUPLE4-NEXT: entry:
61 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 64 x i8>
62 // TUPLE4-NEXT: ret <vscale x 64 x i8> [[TMP0]]
64 // CPP-CHECK-LABEL: @_Z26test_svreinterpret_s8_bf16u14__SVBfloat16_t(
65 // CPP-CHECK-NEXT: entry:
66 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 16 x i8>
67 // CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
69 // CPP-TUPLE2-LABEL: @_Z26test_svreinterpret_s8_bf1614svbfloat16x2_t(
70 // CPP-TUPLE2-NEXT: entry:
71 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 32 x i8>
72 // CPP-TUPLE2-NEXT: ret <vscale x 32 x i8> [[TMP0]]
74 // CPP-TUPLE3-LABEL: @_Z26test_svreinterpret_s8_bf1614svbfloat16x3_t(
75 // CPP-TUPLE3-NEXT: entry:
76 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 48 x i8>
77 // CPP-TUPLE3-NEXT: ret <vscale x 48 x i8> [[TMP0]]
79 // CPP-TUPLE4-LABEL: @_Z26test_svreinterpret_s8_bf1614svbfloat16x4_t(
80 // CPP-TUPLE4-NEXT: entry:
81 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 64 x i8>
82 // CPP-TUPLE4-NEXT: ret <vscale x 64 x i8> [[TMP0]]
84 TYPE(svint8
) test_svreinterpret_s8_bf16(TYPE(svbfloat16
) op
) {
85 return SVE_ACLE_FUNC(svreinterpret_s8
, _bf16
)(op
);
88 // CHECK-LABEL: @test_svreinterpret_s16_bf16(
90 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 8 x i16>
91 // CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
93 // TUPLE2-LABEL: @test_svreinterpret_s16_bf16(
94 // TUPLE2-NEXT: entry:
95 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 16 x i16>
96 // TUPLE2-NEXT: ret <vscale x 16 x i16> [[TMP0]]
98 // TUPLE3-LABEL: @test_svreinterpret_s16_bf16(
99 // TUPLE3-NEXT: entry:
100 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 24 x i16>
101 // TUPLE3-NEXT: ret <vscale x 24 x i16> [[TMP0]]
103 // TUPLE4-LABEL: @test_svreinterpret_s16_bf16(
104 // TUPLE4-NEXT: entry:
105 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 32 x i16>
106 // TUPLE4-NEXT: ret <vscale x 32 x i16> [[TMP0]]
108 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_s16_bf16u14__SVBfloat16_t(
109 // CPP-CHECK-NEXT: entry:
110 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 8 x i16>
111 // CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
113 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_s16_bf1614svbfloat16x2_t(
114 // CPP-TUPLE2-NEXT: entry:
115 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 16 x i16>
116 // CPP-TUPLE2-NEXT: ret <vscale x 16 x i16> [[TMP0]]
118 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_s16_bf1614svbfloat16x3_t(
119 // CPP-TUPLE3-NEXT: entry:
120 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 24 x i16>
121 // CPP-TUPLE3-NEXT: ret <vscale x 24 x i16> [[TMP0]]
123 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_s16_bf1614svbfloat16x4_t(
124 // CPP-TUPLE4-NEXT: entry:
125 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 32 x i16>
126 // CPP-TUPLE4-NEXT: ret <vscale x 32 x i16> [[TMP0]]
128 TYPE(svint16
) test_svreinterpret_s16_bf16(TYPE(svbfloat16
) op
) {
129 return SVE_ACLE_FUNC(svreinterpret_s16
, _bf16
)(op
);
132 // CHECK-LABEL: @test_svreinterpret_s32_bf16(
133 // CHECK-NEXT: entry:
134 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 4 x i32>
135 // CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
137 // TUPLE2-LABEL: @test_svreinterpret_s32_bf16(
138 // TUPLE2-NEXT: entry:
139 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 8 x i32>
140 // TUPLE2-NEXT: ret <vscale x 8 x i32> [[TMP0]]
142 // TUPLE3-LABEL: @test_svreinterpret_s32_bf16(
143 // TUPLE3-NEXT: entry:
144 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 12 x i32>
145 // TUPLE3-NEXT: ret <vscale x 12 x i32> [[TMP0]]
147 // TUPLE4-LABEL: @test_svreinterpret_s32_bf16(
148 // TUPLE4-NEXT: entry:
149 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 16 x i32>
150 // TUPLE4-NEXT: ret <vscale x 16 x i32> [[TMP0]]
152 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_s32_bf16u14__SVBfloat16_t(
153 // CPP-CHECK-NEXT: entry:
154 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 4 x i32>
155 // CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
157 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_s32_bf1614svbfloat16x2_t(
158 // CPP-TUPLE2-NEXT: entry:
159 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 8 x i32>
160 // CPP-TUPLE2-NEXT: ret <vscale x 8 x i32> [[TMP0]]
162 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_s32_bf1614svbfloat16x3_t(
163 // CPP-TUPLE3-NEXT: entry:
164 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 12 x i32>
165 // CPP-TUPLE3-NEXT: ret <vscale x 12 x i32> [[TMP0]]
167 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_s32_bf1614svbfloat16x4_t(
168 // CPP-TUPLE4-NEXT: entry:
169 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 16 x i32>
170 // CPP-TUPLE4-NEXT: ret <vscale x 16 x i32> [[TMP0]]
172 TYPE(svint32
) test_svreinterpret_s32_bf16(TYPE(svbfloat16
) op
) {
173 return SVE_ACLE_FUNC(svreinterpret_s32
, _bf16
)(op
);
175 // CHECK-LABEL: @test_svreinterpret_s64_bf16(
176 // CHECK-NEXT: entry:
177 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 2 x i64>
178 // CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
180 // TUPLE2-LABEL: @test_svreinterpret_s64_bf16(
181 // TUPLE2-NEXT: entry:
182 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 4 x i64>
183 // TUPLE2-NEXT: ret <vscale x 4 x i64> [[TMP0]]
185 // TUPLE3-LABEL: @test_svreinterpret_s64_bf16(
186 // TUPLE3-NEXT: entry:
187 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 6 x i64>
188 // TUPLE3-NEXT: ret <vscale x 6 x i64> [[TMP0]]
190 // TUPLE4-LABEL: @test_svreinterpret_s64_bf16(
191 // TUPLE4-NEXT: entry:
192 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 8 x i64>
193 // TUPLE4-NEXT: ret <vscale x 8 x i64> [[TMP0]]
195 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_s64_bf16u14__SVBfloat16_t(
196 // CPP-CHECK-NEXT: entry:
197 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 2 x i64>
198 // CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
200 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_s64_bf1614svbfloat16x2_t(
201 // CPP-TUPLE2-NEXT: entry:
202 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 4 x i64>
203 // CPP-TUPLE2-NEXT: ret <vscale x 4 x i64> [[TMP0]]
205 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_s64_bf1614svbfloat16x3_t(
206 // CPP-TUPLE3-NEXT: entry:
207 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 6 x i64>
208 // CPP-TUPLE3-NEXT: ret <vscale x 6 x i64> [[TMP0]]
210 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_s64_bf1614svbfloat16x4_t(
211 // CPP-TUPLE4-NEXT: entry:
212 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 8 x i64>
213 // CPP-TUPLE4-NEXT: ret <vscale x 8 x i64> [[TMP0]]
215 TYPE(svint64
) test_svreinterpret_s64_bf16(TYPE(svbfloat16
) op
) {
216 return SVE_ACLE_FUNC(svreinterpret_s64
, _bf16
)(op
);
219 // CHECK-LABEL: @test_svreinterpret_u8_bf16(
220 // CHECK-NEXT: entry:
221 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 16 x i8>
222 // CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
224 // TUPLE2-LABEL: @test_svreinterpret_u8_bf16(
225 // TUPLE2-NEXT: entry:
226 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 32 x i8>
227 // TUPLE2-NEXT: ret <vscale x 32 x i8> [[TMP0]]
229 // TUPLE3-LABEL: @test_svreinterpret_u8_bf16(
230 // TUPLE3-NEXT: entry:
231 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 48 x i8>
232 // TUPLE3-NEXT: ret <vscale x 48 x i8> [[TMP0]]
234 // TUPLE4-LABEL: @test_svreinterpret_u8_bf16(
235 // TUPLE4-NEXT: entry:
236 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 64 x i8>
237 // TUPLE4-NEXT: ret <vscale x 64 x i8> [[TMP0]]
239 // CPP-CHECK-LABEL: @_Z26test_svreinterpret_u8_bf16u14__SVBfloat16_t(
240 // CPP-CHECK-NEXT: entry:
241 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 16 x i8>
242 // CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
244 // CPP-TUPLE2-LABEL: @_Z26test_svreinterpret_u8_bf1614svbfloat16x2_t(
245 // CPP-TUPLE2-NEXT: entry:
246 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 32 x i8>
247 // CPP-TUPLE2-NEXT: ret <vscale x 32 x i8> [[TMP0]]
249 // CPP-TUPLE3-LABEL: @_Z26test_svreinterpret_u8_bf1614svbfloat16x3_t(
250 // CPP-TUPLE3-NEXT: entry:
251 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 48 x i8>
252 // CPP-TUPLE3-NEXT: ret <vscale x 48 x i8> [[TMP0]]
254 // CPP-TUPLE4-LABEL: @_Z26test_svreinterpret_u8_bf1614svbfloat16x4_t(
255 // CPP-TUPLE4-NEXT: entry:
256 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 64 x i8>
257 // CPP-TUPLE4-NEXT: ret <vscale x 64 x i8> [[TMP0]]
259 TYPE(svuint8
) test_svreinterpret_u8_bf16(TYPE(svbfloat16
) op
) {
260 return SVE_ACLE_FUNC(svreinterpret_u8
, _bf16
)(op
);
263 // CHECK-LABEL: @test_svreinterpret_u16_bf16(
264 // CHECK-NEXT: entry:
265 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 8 x i16>
266 // CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
268 // TUPLE2-LABEL: @test_svreinterpret_u16_bf16(
269 // TUPLE2-NEXT: entry:
270 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 16 x i16>
271 // TUPLE2-NEXT: ret <vscale x 16 x i16> [[TMP0]]
273 // TUPLE3-LABEL: @test_svreinterpret_u16_bf16(
274 // TUPLE3-NEXT: entry:
275 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 24 x i16>
276 // TUPLE3-NEXT: ret <vscale x 24 x i16> [[TMP0]]
278 // TUPLE4-LABEL: @test_svreinterpret_u16_bf16(
279 // TUPLE4-NEXT: entry:
280 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 32 x i16>
281 // TUPLE4-NEXT: ret <vscale x 32 x i16> [[TMP0]]
283 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_u16_bf16u14__SVBfloat16_t(
284 // CPP-CHECK-NEXT: entry:
285 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 8 x i16>
286 // CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
288 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_u16_bf1614svbfloat16x2_t(
289 // CPP-TUPLE2-NEXT: entry:
290 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 16 x i16>
291 // CPP-TUPLE2-NEXT: ret <vscale x 16 x i16> [[TMP0]]
293 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_u16_bf1614svbfloat16x3_t(
294 // CPP-TUPLE3-NEXT: entry:
295 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 24 x i16>
296 // CPP-TUPLE3-NEXT: ret <vscale x 24 x i16> [[TMP0]]
298 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_u16_bf1614svbfloat16x4_t(
299 // CPP-TUPLE4-NEXT: entry:
300 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 32 x i16>
301 // CPP-TUPLE4-NEXT: ret <vscale x 32 x i16> [[TMP0]]
303 TYPE(svuint16
) test_svreinterpret_u16_bf16(TYPE(svbfloat16
) op
) {
304 return SVE_ACLE_FUNC(svreinterpret_u16
, _bf16
)(op
);
307 // CHECK-LABEL: @test_svreinterpret_u32_bf16(
308 // CHECK-NEXT: entry:
309 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 4 x i32>
310 // CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
312 // TUPLE2-LABEL: @test_svreinterpret_u32_bf16(
313 // TUPLE2-NEXT: entry:
314 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 8 x i32>
315 // TUPLE2-NEXT: ret <vscale x 8 x i32> [[TMP0]]
317 // TUPLE3-LABEL: @test_svreinterpret_u32_bf16(
318 // TUPLE3-NEXT: entry:
319 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 12 x i32>
320 // TUPLE3-NEXT: ret <vscale x 12 x i32> [[TMP0]]
322 // TUPLE4-LABEL: @test_svreinterpret_u32_bf16(
323 // TUPLE4-NEXT: entry:
324 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 16 x i32>
325 // TUPLE4-NEXT: ret <vscale x 16 x i32> [[TMP0]]
327 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_u32_bf16u14__SVBfloat16_t(
328 // CPP-CHECK-NEXT: entry:
329 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 4 x i32>
330 // CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
332 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_u32_bf1614svbfloat16x2_t(
333 // CPP-TUPLE2-NEXT: entry:
334 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 8 x i32>
335 // CPP-TUPLE2-NEXT: ret <vscale x 8 x i32> [[TMP0]]
337 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_u32_bf1614svbfloat16x3_t(
338 // CPP-TUPLE3-NEXT: entry:
339 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 12 x i32>
340 // CPP-TUPLE3-NEXT: ret <vscale x 12 x i32> [[TMP0]]
342 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_u32_bf1614svbfloat16x4_t(
343 // CPP-TUPLE4-NEXT: entry:
344 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 16 x i32>
345 // CPP-TUPLE4-NEXT: ret <vscale x 16 x i32> [[TMP0]]
347 TYPE(svuint32
) test_svreinterpret_u32_bf16(TYPE(svbfloat16
) op
) {
348 return SVE_ACLE_FUNC(svreinterpret_u32
, _bf16
)(op
);
351 // CHECK-LABEL: @test_svreinterpret_u64_bf16(
352 // CHECK-NEXT: entry:
353 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 2 x i64>
354 // CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
356 // TUPLE2-LABEL: @test_svreinterpret_u64_bf16(
357 // TUPLE2-NEXT: entry:
358 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 4 x i64>
359 // TUPLE2-NEXT: ret <vscale x 4 x i64> [[TMP0]]
361 // TUPLE3-LABEL: @test_svreinterpret_u64_bf16(
362 // TUPLE3-NEXT: entry:
363 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 6 x i64>
364 // TUPLE3-NEXT: ret <vscale x 6 x i64> [[TMP0]]
366 // TUPLE4-LABEL: @test_svreinterpret_u64_bf16(
367 // TUPLE4-NEXT: entry:
368 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 8 x i64>
369 // TUPLE4-NEXT: ret <vscale x 8 x i64> [[TMP0]]
371 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_u64_bf16u14__SVBfloat16_t(
372 // CPP-CHECK-NEXT: entry:
373 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 2 x i64>
374 // CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
376 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_u64_bf1614svbfloat16x2_t(
377 // CPP-TUPLE2-NEXT: entry:
378 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 4 x i64>
379 // CPP-TUPLE2-NEXT: ret <vscale x 4 x i64> [[TMP0]]
381 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_u64_bf1614svbfloat16x3_t(
382 // CPP-TUPLE3-NEXT: entry:
383 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 6 x i64>
384 // CPP-TUPLE3-NEXT: ret <vscale x 6 x i64> [[TMP0]]
386 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_u64_bf1614svbfloat16x4_t(
387 // CPP-TUPLE4-NEXT: entry:
388 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 8 x i64>
389 // CPP-TUPLE4-NEXT: ret <vscale x 8 x i64> [[TMP0]]
391 TYPE(svuint64
) test_svreinterpret_u64_bf16(TYPE(svbfloat16
) op
) {
392 return SVE_ACLE_FUNC(svreinterpret_u64
, _bf16
)(op
);
395 // CHECK-LABEL: @test_svreinterpret_bf16_s8(
396 // CHECK-NEXT: entry:
397 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i8> [[OP:%.*]] to <vscale x 8 x bfloat>
398 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
400 // TUPLE2-LABEL: @test_svreinterpret_bf16_s8(
401 // TUPLE2-NEXT: entry:
402 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i8> [[OP:%.*]] to <vscale x 16 x bfloat>
403 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
405 // TUPLE3-LABEL: @test_svreinterpret_bf16_s8(
406 // TUPLE3-NEXT: entry:
407 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 48 x i8> [[OP:%.*]] to <vscale x 24 x bfloat>
408 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
410 // TUPLE4-LABEL: @test_svreinterpret_bf16_s8(
411 // TUPLE4-NEXT: entry:
412 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 64 x i8> [[OP:%.*]] to <vscale x 32 x bfloat>
413 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
415 // CPP-CHECK-LABEL: @_Z26test_svreinterpret_bf16_s8u10__SVInt8_t(
416 // CPP-CHECK-NEXT: entry:
417 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i8> [[OP:%.*]] to <vscale x 8 x bfloat>
418 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
420 // CPP-TUPLE2-LABEL: @_Z26test_svreinterpret_bf16_s810svint8x2_t(
421 // CPP-TUPLE2-NEXT: entry:
422 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i8> [[OP:%.*]] to <vscale x 16 x bfloat>
423 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
425 // CPP-TUPLE3-LABEL: @_Z26test_svreinterpret_bf16_s810svint8x3_t(
426 // CPP-TUPLE3-NEXT: entry:
427 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 48 x i8> [[OP:%.*]] to <vscale x 24 x bfloat>
428 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
430 // CPP-TUPLE4-LABEL: @_Z26test_svreinterpret_bf16_s810svint8x4_t(
431 // CPP-TUPLE4-NEXT: entry:
432 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 64 x i8> [[OP:%.*]] to <vscale x 32 x bfloat>
433 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
435 TYPE(svbfloat16
) test_svreinterpret_bf16_s8(TYPE(svint8
) op
) {
436 return SVE_ACLE_FUNC(svreinterpret_bf16
, _s8
)(op
);
439 // CHECK-LABEL: @test_svreinterpret_bf16_s16(
440 // CHECK-NEXT: entry:
441 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i16> [[OP:%.*]] to <vscale x 8 x bfloat>
442 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
444 // TUPLE2-LABEL: @test_svreinterpret_bf16_s16(
445 // TUPLE2-NEXT: entry:
446 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i16> [[OP:%.*]] to <vscale x 16 x bfloat>
447 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
449 // TUPLE3-LABEL: @test_svreinterpret_bf16_s16(
450 // TUPLE3-NEXT: entry:
451 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x i16> [[OP:%.*]] to <vscale x 24 x bfloat>
452 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
454 // TUPLE4-LABEL: @test_svreinterpret_bf16_s16(
455 // TUPLE4-NEXT: entry:
456 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i16> [[OP:%.*]] to <vscale x 32 x bfloat>
457 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
459 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_s16u11__SVInt16_t(
460 // CPP-CHECK-NEXT: entry:
461 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i16> [[OP:%.*]] to <vscale x 8 x bfloat>
462 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
464 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_s1611svint16x2_t(
465 // CPP-TUPLE2-NEXT: entry:
466 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i16> [[OP:%.*]] to <vscale x 16 x bfloat>
467 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
469 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_s1611svint16x3_t(
470 // CPP-TUPLE3-NEXT: entry:
471 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x i16> [[OP:%.*]] to <vscale x 24 x bfloat>
472 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
474 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_s1611svint16x4_t(
475 // CPP-TUPLE4-NEXT: entry:
476 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i16> [[OP:%.*]] to <vscale x 32 x bfloat>
477 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
479 TYPE(svbfloat16
) test_svreinterpret_bf16_s16(TYPE(svint16
) op
) {
480 return SVE_ACLE_FUNC(svreinterpret_bf16
, _s16
)(op
);
483 // CHECK-LABEL: @test_svreinterpret_bf16_s32(
484 // CHECK-NEXT: entry:
485 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i32> [[OP:%.*]] to <vscale x 8 x bfloat>
486 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
488 // TUPLE2-LABEL: @test_svreinterpret_bf16_s32(
489 // TUPLE2-NEXT: entry:
490 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i32> [[OP:%.*]] to <vscale x 16 x bfloat>
491 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
493 // TUPLE3-LABEL: @test_svreinterpret_bf16_s32(
494 // TUPLE3-NEXT: entry:
495 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 12 x i32> [[OP:%.*]] to <vscale x 24 x bfloat>
496 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
498 // TUPLE4-LABEL: @test_svreinterpret_bf16_s32(
499 // TUPLE4-NEXT: entry:
500 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i32> [[OP:%.*]] to <vscale x 32 x bfloat>
501 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
503 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_s32u11__SVInt32_t(
504 // CPP-CHECK-NEXT: entry:
505 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i32> [[OP:%.*]] to <vscale x 8 x bfloat>
506 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
508 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_s3211svint32x2_t(
509 // CPP-TUPLE2-NEXT: entry:
510 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i32> [[OP:%.*]] to <vscale x 16 x bfloat>
511 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
513 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_s3211svint32x3_t(
514 // CPP-TUPLE3-NEXT: entry:
515 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 12 x i32> [[OP:%.*]] to <vscale x 24 x bfloat>
516 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
518 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_s3211svint32x4_t(
519 // CPP-TUPLE4-NEXT: entry:
520 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i32> [[OP:%.*]] to <vscale x 32 x bfloat>
521 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
523 TYPE(svbfloat16
) test_svreinterpret_bf16_s32(TYPE(svint32
) op
) {
524 return SVE_ACLE_FUNC(svreinterpret_bf16
, _s32
)(op
);
527 // CHECK-LABEL: @test_svreinterpret_bf16_s64(
528 // CHECK-NEXT: entry:
529 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 2 x i64> [[OP:%.*]] to <vscale x 8 x bfloat>
530 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
532 // TUPLE2-LABEL: @test_svreinterpret_bf16_s64(
533 // TUPLE2-NEXT: entry:
534 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i64> [[OP:%.*]] to <vscale x 16 x bfloat>
535 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
537 // TUPLE3-LABEL: @test_svreinterpret_bf16_s64(
538 // TUPLE3-NEXT: entry:
539 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 6 x i64> [[OP:%.*]] to <vscale x 24 x bfloat>
540 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
542 // TUPLE4-LABEL: @test_svreinterpret_bf16_s64(
543 // TUPLE4-NEXT: entry:
544 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i64> [[OP:%.*]] to <vscale x 32 x bfloat>
545 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
547 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_s64u11__SVInt64_t(
548 // CPP-CHECK-NEXT: entry:
549 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 2 x i64> [[OP:%.*]] to <vscale x 8 x bfloat>
550 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
552 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_s6411svint64x2_t(
553 // CPP-TUPLE2-NEXT: entry:
554 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i64> [[OP:%.*]] to <vscale x 16 x bfloat>
555 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
557 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_s6411svint64x3_t(
558 // CPP-TUPLE3-NEXT: entry:
559 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 6 x i64> [[OP:%.*]] to <vscale x 24 x bfloat>
560 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
562 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_s6411svint64x4_t(
563 // CPP-TUPLE4-NEXT: entry:
564 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i64> [[OP:%.*]] to <vscale x 32 x bfloat>
565 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
567 TYPE(svbfloat16
) test_svreinterpret_bf16_s64(TYPE(svint64
) op
) {
568 return SVE_ACLE_FUNC(svreinterpret_bf16
, _s64
)(op
);
571 // CHECK-LABEL: @test_svreinterpret_bf16_u8(
572 // CHECK-NEXT: entry:
573 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i8> [[OP:%.*]] to <vscale x 8 x bfloat>
574 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
576 // TUPLE2-LABEL: @test_svreinterpret_bf16_u8(
577 // TUPLE2-NEXT: entry:
578 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i8> [[OP:%.*]] to <vscale x 16 x bfloat>
579 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
581 // TUPLE3-LABEL: @test_svreinterpret_bf16_u8(
582 // TUPLE3-NEXT: entry:
583 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 48 x i8> [[OP:%.*]] to <vscale x 24 x bfloat>
584 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
586 // TUPLE4-LABEL: @test_svreinterpret_bf16_u8(
587 // TUPLE4-NEXT: entry:
588 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 64 x i8> [[OP:%.*]] to <vscale x 32 x bfloat>
589 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
591 // CPP-CHECK-LABEL: @_Z26test_svreinterpret_bf16_u8u11__SVUint8_t(
592 // CPP-CHECK-NEXT: entry:
593 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i8> [[OP:%.*]] to <vscale x 8 x bfloat>
594 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
596 // CPP-TUPLE2-LABEL: @_Z26test_svreinterpret_bf16_u811svuint8x2_t(
597 // CPP-TUPLE2-NEXT: entry:
598 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i8> [[OP:%.*]] to <vscale x 16 x bfloat>
599 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
601 // CPP-TUPLE3-LABEL: @_Z26test_svreinterpret_bf16_u811svuint8x3_t(
602 // CPP-TUPLE3-NEXT: entry:
603 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 48 x i8> [[OP:%.*]] to <vscale x 24 x bfloat>
604 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
606 // CPP-TUPLE4-LABEL: @_Z26test_svreinterpret_bf16_u811svuint8x4_t(
607 // CPP-TUPLE4-NEXT: entry:
608 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 64 x i8> [[OP:%.*]] to <vscale x 32 x bfloat>
609 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
611 TYPE(svbfloat16
) test_svreinterpret_bf16_u8(TYPE(svuint8
) op
) {
612 return SVE_ACLE_FUNC(svreinterpret_bf16
, _u8
)(op
);
615 // CHECK-LABEL: @test_svreinterpret_bf16_u16(
616 // CHECK-NEXT: entry:
617 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i16> [[OP:%.*]] to <vscale x 8 x bfloat>
618 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
620 // TUPLE2-LABEL: @test_svreinterpret_bf16_u16(
621 // TUPLE2-NEXT: entry:
622 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i16> [[OP:%.*]] to <vscale x 16 x bfloat>
623 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
625 // TUPLE3-LABEL: @test_svreinterpret_bf16_u16(
626 // TUPLE3-NEXT: entry:
627 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x i16> [[OP:%.*]] to <vscale x 24 x bfloat>
628 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
630 // TUPLE4-LABEL: @test_svreinterpret_bf16_u16(
631 // TUPLE4-NEXT: entry:
632 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i16> [[OP:%.*]] to <vscale x 32 x bfloat>
633 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
635 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_u16u12__SVUint16_t(
636 // CPP-CHECK-NEXT: entry:
637 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i16> [[OP:%.*]] to <vscale x 8 x bfloat>
638 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
640 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_u1612svuint16x2_t(
641 // CPP-TUPLE2-NEXT: entry:
642 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i16> [[OP:%.*]] to <vscale x 16 x bfloat>
643 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
645 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_u1612svuint16x3_t(
646 // CPP-TUPLE3-NEXT: entry:
647 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x i16> [[OP:%.*]] to <vscale x 24 x bfloat>
648 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
650 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_u1612svuint16x4_t(
651 // CPP-TUPLE4-NEXT: entry:
652 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x i16> [[OP:%.*]] to <vscale x 32 x bfloat>
653 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
655 TYPE(svbfloat16
) test_svreinterpret_bf16_u16(TYPE(svuint16
) op
) {
656 return SVE_ACLE_FUNC(svreinterpret_bf16
, _u16
)(op
);
659 // CHECK-LABEL: @test_svreinterpret_bf16_u32(
660 // CHECK-NEXT: entry:
661 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i32> [[OP:%.*]] to <vscale x 8 x bfloat>
662 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
664 // TUPLE2-LABEL: @test_svreinterpret_bf16_u32(
665 // TUPLE2-NEXT: entry:
666 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i32> [[OP:%.*]] to <vscale x 16 x bfloat>
667 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
669 // TUPLE3-LABEL: @test_svreinterpret_bf16_u32(
670 // TUPLE3-NEXT: entry:
671 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 12 x i32> [[OP:%.*]] to <vscale x 24 x bfloat>
672 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
674 // TUPLE4-LABEL: @test_svreinterpret_bf16_u32(
675 // TUPLE4-NEXT: entry:
676 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i32> [[OP:%.*]] to <vscale x 32 x bfloat>
677 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
679 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_u32u12__SVUint32_t(
680 // CPP-CHECK-NEXT: entry:
681 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i32> [[OP:%.*]] to <vscale x 8 x bfloat>
682 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
684 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_u3212svuint32x2_t(
685 // CPP-TUPLE2-NEXT: entry:
686 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i32> [[OP:%.*]] to <vscale x 16 x bfloat>
687 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
689 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_u3212svuint32x3_t(
690 // CPP-TUPLE3-NEXT: entry:
691 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 12 x i32> [[OP:%.*]] to <vscale x 24 x bfloat>
692 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
694 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_u3212svuint32x4_t(
695 // CPP-TUPLE4-NEXT: entry:
696 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x i32> [[OP:%.*]] to <vscale x 32 x bfloat>
697 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
699 TYPE(svbfloat16
) test_svreinterpret_bf16_u32(TYPE(svuint32
) op
) {
700 return SVE_ACLE_FUNC(svreinterpret_bf16
, _u32
)(op
);
703 // CHECK-LABEL: @test_svreinterpret_bf16_u64(
704 // CHECK-NEXT: entry:
705 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 2 x i64> [[OP:%.*]] to <vscale x 8 x bfloat>
706 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
708 // TUPLE2-LABEL: @test_svreinterpret_bf16_u64(
709 // TUPLE2-NEXT: entry:
710 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i64> [[OP:%.*]] to <vscale x 16 x bfloat>
711 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
713 // TUPLE3-LABEL: @test_svreinterpret_bf16_u64(
714 // TUPLE3-NEXT: entry:
715 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 6 x i64> [[OP:%.*]] to <vscale x 24 x bfloat>
716 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
718 // TUPLE4-LABEL: @test_svreinterpret_bf16_u64(
719 // TUPLE4-NEXT: entry:
720 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i64> [[OP:%.*]] to <vscale x 32 x bfloat>
721 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
723 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_u64u12__SVUint64_t(
724 // CPP-CHECK-NEXT: entry:
725 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 2 x i64> [[OP:%.*]] to <vscale x 8 x bfloat>
726 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
728 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_u6412svuint64x2_t(
729 // CPP-TUPLE2-NEXT: entry:
730 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x i64> [[OP:%.*]] to <vscale x 16 x bfloat>
731 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
733 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_u6412svuint64x3_t(
734 // CPP-TUPLE3-NEXT: entry:
735 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 6 x i64> [[OP:%.*]] to <vscale x 24 x bfloat>
736 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
738 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_u6412svuint64x4_t(
739 // CPP-TUPLE4-NEXT: entry:
740 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x i64> [[OP:%.*]] to <vscale x 32 x bfloat>
741 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
743 TYPE(svbfloat16
) test_svreinterpret_bf16_u64(TYPE(svuint64
) op
) {
744 return SVE_ACLE_FUNC(svreinterpret_bf16
, _u64
)(op
);
747 // CHECK-LABEL: @test_svreinterpret_bf16_bf16(
748 // CHECK-NEXT: entry:
749 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[OP:%.*]]
751 // TUPLE2-LABEL: @test_svreinterpret_bf16_bf16(
752 // TUPLE2-NEXT: entry:
753 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[OP:%.*]]
755 // TUPLE3-LABEL: @test_svreinterpret_bf16_bf16(
756 // TUPLE3-NEXT: entry:
757 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[OP:%.*]]
759 // TUPLE4-LABEL: @test_svreinterpret_bf16_bf16(
760 // TUPLE4-NEXT: entry:
761 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[OP:%.*]]
763 // CPP-CHECK-LABEL: @_Z28test_svreinterpret_bf16_bf16u14__SVBfloat16_t(
764 // CPP-CHECK-NEXT: entry:
765 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[OP:%.*]]
767 // CPP-TUPLE2-LABEL: @_Z28test_svreinterpret_bf16_bf1614svbfloat16x2_t(
768 // CPP-TUPLE2-NEXT: entry:
769 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[OP:%.*]]
771 // CPP-TUPLE3-LABEL: @_Z28test_svreinterpret_bf16_bf1614svbfloat16x3_t(
772 // CPP-TUPLE3-NEXT: entry:
773 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[OP:%.*]]
775 // CPP-TUPLE4-LABEL: @_Z28test_svreinterpret_bf16_bf1614svbfloat16x4_t(
776 // CPP-TUPLE4-NEXT: entry:
777 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[OP:%.*]]
779 TYPE(svbfloat16
) test_svreinterpret_bf16_bf16(TYPE(svbfloat16
) op
) {
780 return SVE_ACLE_FUNC(svreinterpret_bf16
, _bf16
)(op
);
783 // CHECK-LABEL: @test_svreinterpret_bf16_f16(
784 // CHECK-NEXT: entry:
785 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x half> [[OP:%.*]] to <vscale x 8 x bfloat>
786 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
788 // TUPLE2-LABEL: @test_svreinterpret_bf16_f16(
789 // TUPLE2-NEXT: entry:
790 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x half> [[OP:%.*]] to <vscale x 16 x bfloat>
791 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
793 // TUPLE3-LABEL: @test_svreinterpret_bf16_f16(
794 // TUPLE3-NEXT: entry:
795 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x half> [[OP:%.*]] to <vscale x 24 x bfloat>
796 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
798 // TUPLE4-LABEL: @test_svreinterpret_bf16_f16(
799 // TUPLE4-NEXT: entry:
800 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x half> [[OP:%.*]] to <vscale x 32 x bfloat>
801 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
803 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_f16u13__SVFloat16_t(
804 // CPP-CHECK-NEXT: entry:
805 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x half> [[OP:%.*]] to <vscale x 8 x bfloat>
806 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
808 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_f1613svfloat16x2_t(
809 // CPP-TUPLE2-NEXT: entry:
810 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x half> [[OP:%.*]] to <vscale x 16 x bfloat>
811 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
813 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_f1613svfloat16x3_t(
814 // CPP-TUPLE3-NEXT: entry:
815 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x half> [[OP:%.*]] to <vscale x 24 x bfloat>
816 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
818 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_f1613svfloat16x4_t(
819 // CPP-TUPLE4-NEXT: entry:
820 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x half> [[OP:%.*]] to <vscale x 32 x bfloat>
821 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
823 TYPE(svbfloat16
) test_svreinterpret_bf16_f16(TYPE(svfloat16
) op
) {
824 return SVE_ACLE_FUNC(svreinterpret_bf16
, _f16
)(op
);
827 // CHECK-LABEL: @test_svreinterpret_bf16_f32(
828 // CHECK-NEXT: entry:
829 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x float> [[OP:%.*]] to <vscale x 8 x bfloat>
830 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
832 // TUPLE2-LABEL: @test_svreinterpret_bf16_f32(
833 // TUPLE2-NEXT: entry:
834 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x float> [[OP:%.*]] to <vscale x 16 x bfloat>
835 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
837 // TUPLE3-LABEL: @test_svreinterpret_bf16_f32(
838 // TUPLE3-NEXT: entry:
839 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 12 x float> [[OP:%.*]] to <vscale x 24 x bfloat>
840 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
842 // TUPLE4-LABEL: @test_svreinterpret_bf16_f32(
843 // TUPLE4-NEXT: entry:
844 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x float> [[OP:%.*]] to <vscale x 32 x bfloat>
845 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
847 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_f32u13__SVFloat32_t(
848 // CPP-CHECK-NEXT: entry:
849 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x float> [[OP:%.*]] to <vscale x 8 x bfloat>
850 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
852 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_f3213svfloat32x2_t(
853 // CPP-TUPLE2-NEXT: entry:
854 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x float> [[OP:%.*]] to <vscale x 16 x bfloat>
855 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
857 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_f3213svfloat32x3_t(
858 // CPP-TUPLE3-NEXT: entry:
859 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 12 x float> [[OP:%.*]] to <vscale x 24 x bfloat>
860 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
862 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_f3213svfloat32x4_t(
863 // CPP-TUPLE4-NEXT: entry:
864 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x float> [[OP:%.*]] to <vscale x 32 x bfloat>
865 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
867 TYPE(svbfloat16
) test_svreinterpret_bf16_f32(TYPE(svfloat32
) op
) {
868 return SVE_ACLE_FUNC(svreinterpret_bf16
, _f32
)(op
);
871 // CHECK-LABEL: @test_svreinterpret_bf16_f64(
872 // CHECK-NEXT: entry:
873 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 2 x double> [[OP:%.*]] to <vscale x 8 x bfloat>
874 // CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
876 // TUPLE2-LABEL: @test_svreinterpret_bf16_f64(
877 // TUPLE2-NEXT: entry:
878 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x double> [[OP:%.*]] to <vscale x 16 x bfloat>
879 // TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
881 // TUPLE3-LABEL: @test_svreinterpret_bf16_f64(
882 // TUPLE3-NEXT: entry:
883 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 6 x double> [[OP:%.*]] to <vscale x 24 x bfloat>
884 // TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
886 // TUPLE4-LABEL: @test_svreinterpret_bf16_f64(
887 // TUPLE4-NEXT: entry:
888 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x double> [[OP:%.*]] to <vscale x 32 x bfloat>
889 // TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
891 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_bf16_f64u13__SVFloat64_t(
892 // CPP-CHECK-NEXT: entry:
893 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 2 x double> [[OP:%.*]] to <vscale x 8 x bfloat>
894 // CPP-CHECK-NEXT: ret <vscale x 8 x bfloat> [[TMP0]]
896 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_bf16_f6413svfloat64x2_t(
897 // CPP-TUPLE2-NEXT: entry:
898 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 4 x double> [[OP:%.*]] to <vscale x 16 x bfloat>
899 // CPP-TUPLE2-NEXT: ret <vscale x 16 x bfloat> [[TMP0]]
901 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_bf16_f6413svfloat64x3_t(
902 // CPP-TUPLE3-NEXT: entry:
903 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 6 x double> [[OP:%.*]] to <vscale x 24 x bfloat>
904 // CPP-TUPLE3-NEXT: ret <vscale x 24 x bfloat> [[TMP0]]
906 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_bf16_f6413svfloat64x4_t(
907 // CPP-TUPLE4-NEXT: entry:
908 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x double> [[OP:%.*]] to <vscale x 32 x bfloat>
909 // CPP-TUPLE4-NEXT: ret <vscale x 32 x bfloat> [[TMP0]]
911 TYPE(svbfloat16
) test_svreinterpret_bf16_f64(TYPE(svfloat64
) op
) {
912 return SVE_ACLE_FUNC(svreinterpret_bf16
, _f64
)(op
);
915 // CHECK-LABEL: @test_svreinterpret_f32_bf16(
916 // CHECK-NEXT: entry:
917 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 4 x float>
918 // CHECK-NEXT: ret <vscale x 4 x float> [[TMP0]]
920 // TUPLE2-LABEL: @test_svreinterpret_f32_bf16(
921 // TUPLE2-NEXT: entry:
922 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 8 x float>
923 // TUPLE2-NEXT: ret <vscale x 8 x float> [[TMP0]]
925 // TUPLE3-LABEL: @test_svreinterpret_f32_bf16(
926 // TUPLE3-NEXT: entry:
927 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 12 x float>
928 // TUPLE3-NEXT: ret <vscale x 12 x float> [[TMP0]]
930 // TUPLE4-LABEL: @test_svreinterpret_f32_bf16(
931 // TUPLE4-NEXT: entry:
932 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 16 x float>
933 // TUPLE4-NEXT: ret <vscale x 16 x float> [[TMP0]]
935 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_f32_bf16u14__SVBfloat16_t(
936 // CPP-CHECK-NEXT: entry:
937 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 4 x float>
938 // CPP-CHECK-NEXT: ret <vscale x 4 x float> [[TMP0]]
940 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_f32_bf1614svbfloat16x2_t(
941 // CPP-TUPLE2-NEXT: entry:
942 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 8 x float>
943 // CPP-TUPLE2-NEXT: ret <vscale x 8 x float> [[TMP0]]
945 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_f32_bf1614svbfloat16x3_t(
946 // CPP-TUPLE3-NEXT: entry:
947 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 12 x float>
948 // CPP-TUPLE3-NEXT: ret <vscale x 12 x float> [[TMP0]]
950 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_f32_bf1614svbfloat16x4_t(
951 // CPP-TUPLE4-NEXT: entry:
952 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 16 x float>
953 // CPP-TUPLE4-NEXT: ret <vscale x 16 x float> [[TMP0]]
955 TYPE(svfloat32
) test_svreinterpret_f32_bf16(TYPE(svbfloat16
) op
) {
956 return SVE_ACLE_FUNC(svreinterpret_f32
, _bf16
)(op
);
959 // CHECK-LABEL: @test_svreinterpret_f16_bf16(
960 // CHECK-NEXT: entry:
961 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 8 x half>
962 // CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]
964 // TUPLE2-LABEL: @test_svreinterpret_f16_bf16(
965 // TUPLE2-NEXT: entry:
966 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 16 x half>
967 // TUPLE2-NEXT: ret <vscale x 16 x half> [[TMP0]]
969 // TUPLE3-LABEL: @test_svreinterpret_f16_bf16(
970 // TUPLE3-NEXT: entry:
971 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 24 x half>
972 // TUPLE3-NEXT: ret <vscale x 24 x half> [[TMP0]]
974 // TUPLE4-LABEL: @test_svreinterpret_f16_bf16(
975 // TUPLE4-NEXT: entry:
976 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 32 x half>
977 // TUPLE4-NEXT: ret <vscale x 32 x half> [[TMP0]]
979 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_f16_bf16u14__SVBfloat16_t(
980 // CPP-CHECK-NEXT: entry:
981 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 8 x half>
982 // CPP-CHECK-NEXT: ret <vscale x 8 x half> [[TMP0]]
984 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_f16_bf1614svbfloat16x2_t(
985 // CPP-TUPLE2-NEXT: entry:
986 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 16 x half>
987 // CPP-TUPLE2-NEXT: ret <vscale x 16 x half> [[TMP0]]
989 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_f16_bf1614svbfloat16x3_t(
990 // CPP-TUPLE3-NEXT: entry:
991 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 24 x half>
992 // CPP-TUPLE3-NEXT: ret <vscale x 24 x half> [[TMP0]]
994 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_f16_bf1614svbfloat16x4_t(
995 // CPP-TUPLE4-NEXT: entry:
996 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 32 x half>
997 // CPP-TUPLE4-NEXT: ret <vscale x 32 x half> [[TMP0]]
999 TYPE(svfloat16
) test_svreinterpret_f16_bf16(TYPE(svbfloat16
) op
) {
1000 return SVE_ACLE_FUNC(svreinterpret_f16
, _bf16
)(op
);
1003 // CHECK-LABEL: @test_svreinterpret_f64_bf16(
1004 // CHECK-NEXT: entry:
1005 // CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 2 x double>
1006 // CHECK-NEXT: ret <vscale x 2 x double> [[TMP0]]
1008 // TUPLE2-LABEL: @test_svreinterpret_f64_bf16(
1009 // TUPLE2-NEXT: entry:
1010 // TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 4 x double>
1011 // TUPLE2-NEXT: ret <vscale x 4 x double> [[TMP0]]
1013 // TUPLE3-LABEL: @test_svreinterpret_f64_bf16(
1014 // TUPLE3-NEXT: entry:
1015 // TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 6 x double>
1016 // TUPLE3-NEXT: ret <vscale x 6 x double> [[TMP0]]
1018 // TUPLE4-LABEL: @test_svreinterpret_f64_bf16(
1019 // TUPLE4-NEXT: entry:
1020 // TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 8 x double>
1021 // TUPLE4-NEXT: ret <vscale x 8 x double> [[TMP0]]
1023 // CPP-CHECK-LABEL: @_Z27test_svreinterpret_f64_bf16u14__SVBfloat16_t(
1024 // CPP-CHECK-NEXT: entry:
1025 // CPP-CHECK-NEXT: [[TMP0:%.*]] = bitcast <vscale x 8 x bfloat> [[OP:%.*]] to <vscale x 2 x double>
1026 // CPP-CHECK-NEXT: ret <vscale x 2 x double> [[TMP0]]
1028 // CPP-TUPLE2-LABEL: @_Z27test_svreinterpret_f64_bf1614svbfloat16x2_t(
1029 // CPP-TUPLE2-NEXT: entry:
1030 // CPP-TUPLE2-NEXT: [[TMP0:%.*]] = bitcast <vscale x 16 x bfloat> [[OP:%.*]] to <vscale x 4 x double>
1031 // CPP-TUPLE2-NEXT: ret <vscale x 4 x double> [[TMP0]]
1033 // CPP-TUPLE3-LABEL: @_Z27test_svreinterpret_f64_bf1614svbfloat16x3_t(
1034 // CPP-TUPLE3-NEXT: entry:
1035 // CPP-TUPLE3-NEXT: [[TMP0:%.*]] = bitcast <vscale x 24 x bfloat> [[OP:%.*]] to <vscale x 6 x double>
1036 // CPP-TUPLE3-NEXT: ret <vscale x 6 x double> [[TMP0]]
1038 // CPP-TUPLE4-LABEL: @_Z27test_svreinterpret_f64_bf1614svbfloat16x4_t(
1039 // CPP-TUPLE4-NEXT: entry:
1040 // CPP-TUPLE4-NEXT: [[TMP0:%.*]] = bitcast <vscale x 32 x bfloat> [[OP:%.*]] to <vscale x 8 x double>
1041 // CPP-TUPLE4-NEXT: ret <vscale x 8 x double> [[TMP0]]
1043 TYPE(svfloat64
) test_svreinterpret_f64_bf16(TYPE(svbfloat16
) op
) {
1044 return SVE_ACLE_FUNC(svreinterpret_f64
, _bf16
)(op
);