annotate clang/test/CodeGen/aarch64-bf16-ldst-intrinsics.c @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
2 // RUN: %clang_cc1 -triple aarch64 -target-feature +neon -target-feature +bf16 \
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 // RUN: -O2 -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK64
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
4 // RUN: %clang_cc1 -triple armv8.6a-arm-none-eabi -target-feature +neon -target-feature +bf16 -mfloat-abi hard \
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 // RUN: -O2 -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK32
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 // REQUIRES: arm-registered-target,aarch64-registered-target
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 #include "arm_neon.h"
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
11 // CHECK-LABEL: @test_vld1_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
12 // CHECK-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
13 // CHECK-NEXT: [[TMP1:%.*]] = load <4 x bfloat>, ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
14 // CHECK-NEXT: ret <4 x bfloat> [[TMP1]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
15 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 bfloat16x4_t test_vld1_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 return vld1_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
20 // CHECK-LABEL: @test_vld1q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
21 // CHECK-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
22 // CHECK-NEXT: [[TMP1:%.*]] = load <8 x bfloat>, ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
23 // CHECK-NEXT: ret <8 x bfloat> [[TMP1]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
24 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 bfloat16x8_t test_vld1q_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 return vld1q_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
29 // CHECK-LABEL: @test_vld1_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
30 // CHECK-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
31 // CHECK-NEXT: [[TMP0:%.*]] = load bfloat, ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
32 // CHECK-NEXT: [[VLD1_LANE:%.*]] = insertelement <4 x bfloat> [[SRC:%.*]], bfloat [[TMP0]], i64 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
33 // CHECK-NEXT: ret <4 x bfloat> [[VLD1_LANE]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
34 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 bfloat16x4_t test_vld1_lane_bf16(bfloat16_t const *ptr, bfloat16x4_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 return vld1_lane_bf16(ptr, src, 0);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
39 // CHECK-LABEL: @test_vld1q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
40 // CHECK-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
41 // CHECK-NEXT: [[TMP0:%.*]] = load bfloat, ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
42 // CHECK-NEXT: [[VLD1_LANE:%.*]] = insertelement <8 x bfloat> [[SRC:%.*]], bfloat [[TMP0]], i64 7
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
43 // CHECK-NEXT: ret <8 x bfloat> [[VLD1_LANE]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
44 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 bfloat16x8_t test_vld1q_lane_bf16(bfloat16_t const *ptr, bfloat16x8_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 return vld1q_lane_bf16(ptr, src, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
49 // CHECK-LABEL: @test_vld1_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
50 // CHECK-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
51 // CHECK-NEXT: [[TMP0:%.*]] = load bfloat, ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
52 // CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x bfloat> poison, bfloat [[TMP0]], i64 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
53 // CHECK-NEXT: [[LANE:%.*]] = shufflevector <4 x bfloat> [[TMP1]], <4 x bfloat> poison, <4 x i32> zeroinitializer
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
54 // CHECK-NEXT: ret <4 x bfloat> [[LANE]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
55 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 bfloat16x4_t test_vld1_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 return vld1_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
60 // CHECK64-LABEL: @test_vld1_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
61 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
62 // CHECK64-NEXT: [[VLD1XN:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld1x2.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
63 // CHECK64-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
64 // CHECK64-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
65 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T:%.*]] poison, <4 x bfloat> [[VLD1XN_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
66 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD1XN_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
67 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
68 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
69 // CHECK32-LABEL: @test_vld1_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
70 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
71 // CHECK32-NEXT: [[VLD1XN:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld1x2.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
72 // CHECK32-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
73 // CHECK32-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
74 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
75 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
76 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <2 x i32>] poison, <2 x i32> [[TMP0]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
77 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP1]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
78 // CHECK32-NEXT: ret [2 x <2 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
79 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 bfloat16x4x2_t test_vld1_bf16_x2(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 return vld1_bf16_x2(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
84 // CHECK64-LABEL: @test_vld1q_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
85 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
86 // CHECK64-NEXT: [[VLD1XN:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld1x2.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
87 // CHECK64-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
88 // CHECK64-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
89 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T:%.*]] poison, <8 x bfloat> [[VLD1XN_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
90 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD1XN_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
91 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
92 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
93 // CHECK32-LABEL: @test_vld1q_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
94 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
95 // CHECK32-NEXT: [[VLD1XN:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld1x2.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
96 // CHECK32-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
97 // CHECK32-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
98 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
99 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
100 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <4 x i32>] poison, <4 x i32> [[TMP0]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
101 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP1]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
102 // CHECK32-NEXT: ret [2 x <4 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
103 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 bfloat16x8x2_t test_vld1q_bf16_x2(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 return vld1q_bf16_x2(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
108 // CHECK64-LABEL: @test_vld1_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
109 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
110 // CHECK64-NEXT: [[VLD1XN:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld1x3.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
111 // CHECK64-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
112 // CHECK64-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
113 // CHECK64-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
114 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T:%.*]] poison, <4 x bfloat> [[VLD1XN_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
115 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD1XN_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
116 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD1XN_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
117 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
118 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
119 // CHECK32-LABEL: @test_vld1_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
120 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
121 // CHECK32-NEXT: [[VLD1XN:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld1x3.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
122 // CHECK32-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
123 // CHECK32-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
124 // CHECK32-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
125 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
126 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
127 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
128 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <2 x i32>] poison, <2 x i32> [[TMP0]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
129 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP1]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
130 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP2]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
131 // CHECK32-NEXT: ret [3 x <2 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
132 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 bfloat16x4x3_t test_vld1_bf16_x3(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 return vld1_bf16_x3(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
137 // CHECK64-LABEL: @test_vld1q_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
138 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
139 // CHECK64-NEXT: [[VLD1XN:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld1x3.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
140 // CHECK64-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
141 // CHECK64-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
142 // CHECK64-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
143 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T:%.*]] poison, <8 x bfloat> [[VLD1XN_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
144 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD1XN_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
145 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD1XN_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
146 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
147 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
148 // CHECK32-LABEL: @test_vld1q_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
149 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
150 // CHECK32-NEXT: [[VLD1XN:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld1x3.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
151 // CHECK32-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
152 // CHECK32-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
153 // CHECK32-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
154 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
155 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
156 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
157 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <4 x i32>] poison, <4 x i32> [[TMP0]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
158 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP1]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
159 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP2]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
160 // CHECK32-NEXT: ret [3 x <4 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
161 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 bfloat16x8x3_t test_vld1q_bf16_x3(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 return vld1q_bf16_x3(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
166 // CHECK64-LABEL: @test_vld1_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
167 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
168 // CHECK64-NEXT: [[VLD1XN:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld1x4.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
169 // CHECK64-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
170 // CHECK64-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
171 // CHECK64-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
172 // CHECK64-NEXT: [[VLD1XN_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
173 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T:%.*]] poison, <4 x bfloat> [[VLD1XN_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
174 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD1XN_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
175 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD1XN_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
176 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_2_INSERT]], <4 x bfloat> [[VLD1XN_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
177 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
178 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
179 // CHECK32-LABEL: @test_vld1_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
180 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
181 // CHECK32-NEXT: [[VLD1XN:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld1x4.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
182 // CHECK32-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
183 // CHECK32-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
184 // CHECK32-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
185 // CHECK32-NEXT: [[VLD1XN_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD1XN]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
186 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
187 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
188 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
189 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x bfloat> [[VLD1XN_FCA_3_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
190 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <2 x i32>] poison, <2 x i32> [[TMP0]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
191 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP1]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
192 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP2]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
193 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_2_INSERT]], <2 x i32> [[TMP3]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
194 // CHECK32-NEXT: ret [4 x <2 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
195 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 bfloat16x4x4_t test_vld1_bf16_x4(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 return vld1_bf16_x4(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
200 // CHECK64-LABEL: @test_vld1q_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
201 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
202 // CHECK64-NEXT: [[VLD1XN:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld1x4.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
203 // CHECK64-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
204 // CHECK64-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
205 // CHECK64-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
206 // CHECK64-NEXT: [[VLD1XN_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
207 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T:%.*]] poison, <8 x bfloat> [[VLD1XN_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
208 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD1XN_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
209 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD1XN_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
210 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_2_INSERT]], <8 x bfloat> [[VLD1XN_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
211 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
212 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
213 // CHECK32-LABEL: @test_vld1q_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
214 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
215 // CHECK32-NEXT: [[VLD1XN:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld1x4.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
216 // CHECK32-NEXT: [[VLD1XN_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
217 // CHECK32-NEXT: [[VLD1XN_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
218 // CHECK32-NEXT: [[VLD1XN_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
219 // CHECK32-NEXT: [[VLD1XN_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD1XN]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
220 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
221 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
222 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
223 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <8 x bfloat> [[VLD1XN_FCA_3_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
224 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <4 x i32>] poison, <4 x i32> [[TMP0]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
225 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP1]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
226 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP2]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
227 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_2_INSERT]], <4 x i32> [[TMP3]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
228 // CHECK32-NEXT: ret [4 x <4 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
229 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 bfloat16x8x4_t test_vld1q_bf16_x4(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 return vld1q_bf16_x4(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
234 // CHECK-LABEL: @test_vld1q_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
235 // CHECK-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
236 // CHECK-NEXT: [[TMP0:%.*]] = load bfloat, ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
237 // CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x bfloat> poison, bfloat [[TMP0]], i64 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
238 // CHECK-NEXT: [[LANE:%.*]] = shufflevector <8 x bfloat> [[TMP1]], <8 x bfloat> poison, <8 x i32> zeroinitializer
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
239 // CHECK-NEXT: ret <8 x bfloat> [[LANE]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
240 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 bfloat16x8_t test_vld1q_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 return vld1q_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
245 // CHECK64-LABEL: @test_vld2_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
246 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
247 // CHECK64-NEXT: [[VLD2:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld2.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
248 // CHECK64-NEXT: [[VLD2_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
249 // CHECK64-NEXT: [[VLD2_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
250 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T:%.*]] poison, <4 x bfloat> [[VLD2_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
251 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD2_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
252 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
253 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
254 // CHECK32-LABEL: @test_vld2_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
255 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
256 // CHECK32-NEXT: [[VLD2_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld2.v4bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
257 // CHECK32-NEXT: [[VLD2_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
258 // CHECK32-NEXT: [[VLD2_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
259 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD2_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
260 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD2_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
261 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <2 x i32>] poison, <2 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
262 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
263 // CHECK32-NEXT: ret [2 x <2 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
264 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 bfloat16x4x2_t test_vld2_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 return vld2_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
269 // CHECK64-LABEL: @test_vld2q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
270 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
271 // CHECK64-NEXT: [[VLD2:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld2.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
272 // CHECK64-NEXT: [[VLD2_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
273 // CHECK64-NEXT: [[VLD2_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
274 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T:%.*]] poison, <8 x bfloat> [[VLD2_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
275 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD2_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
276 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
277 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
278 // CHECK32-LABEL: @test_vld2q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
279 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
280 // CHECK32-NEXT: [[VLD2Q_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld2.v8bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
281 // CHECK32-NEXT: [[VLD2Q_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2Q_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
282 // CHECK32-NEXT: [[VLD2Q_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2Q_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
283 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD2Q_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
284 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD2Q_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
285 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <4 x i32>] poison, <4 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
286 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
287 // CHECK32-NEXT: ret [2 x <4 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
288 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 bfloat16x8x2_t test_vld2q_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 return vld2q_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
293 // CHECK64-LABEL: @test_vld2_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
294 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
295 // CHECK64-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
296 // CHECK64-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[SRC_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
297 // CHECK64-NEXT: [[VLD2_LANE:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld2lane.v4bf16.p0(<4 x bfloat> [[SRC_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[SRC_COERCE_FCA_1_EXTRACT]], i64 1, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
298 // CHECK64-NEXT: [[VLD2_LANE_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_LANE]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
299 // CHECK64-NEXT: [[VLD2_LANE_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_LANE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
300 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T:%.*]] poison, <4 x bfloat> [[VLD2_LANE_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
301 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD2_LANE_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
302 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
303 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
304 // CHECK32-LABEL: @test_vld2_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
305 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
306 // CHECK32-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
307 // CHECK32-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
308 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
309 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
310 // CHECK32-NEXT: [[VLD2_LANE_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld2lane.v4bf16.p0(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], i32 1, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
311 // CHECK32-NEXT: [[VLD2_LANE_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_LANE_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
312 // CHECK32-NEXT: [[VLD2_LANE_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_LANE_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
313 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x bfloat> [[VLD2_LANE_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
314 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <4 x bfloat> [[VLD2_LANE_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
315 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <2 x i32>] poison, <2 x i32> [[TMP3]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
316 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP4]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
317 // CHECK32-NEXT: ret [2 x <2 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
318 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 bfloat16x4x2_t test_vld2_lane_bf16(bfloat16_t const *ptr, bfloat16x4x2_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 return vld2_lane_bf16(ptr, src, 1);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
323 // CHECK64-LABEL: @test_vld2q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
324 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
325 // CHECK64-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
326 // CHECK64-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[SRC_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
327 // CHECK64-NEXT: [[VLD2_LANE:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld2lane.v8bf16.p0(<8 x bfloat> [[SRC_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[SRC_COERCE_FCA_1_EXTRACT]], i64 7, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
328 // CHECK64-NEXT: [[VLD2_LANE_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2_LANE]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
329 // CHECK64-NEXT: [[VLD2_LANE_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2_LANE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
330 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T:%.*]] poison, <8 x bfloat> [[VLD2_LANE_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
331 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD2_LANE_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
332 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
333 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
334 // CHECK32-LABEL: @test_vld2q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
335 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
336 // CHECK32-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
337 // CHECK32-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
338 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
339 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
340 // CHECK32-NEXT: [[VLD2Q_LANE_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld2lane.v8bf16.p0(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], i32 7, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
341 // CHECK32-NEXT: [[VLD2Q_LANE_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2Q_LANE_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
342 // CHECK32-NEXT: [[VLD2Q_LANE_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2Q_LANE_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
343 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <8 x bfloat> [[VLD2Q_LANE_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
344 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <8 x bfloat> [[VLD2Q_LANE_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
345 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <4 x i32>] poison, <4 x i32> [[TMP3]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
346 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP4]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
347 // CHECK32-NEXT: ret [2 x <4 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
348 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 bfloat16x8x2_t test_vld2q_lane_bf16(bfloat16_t const *ptr, bfloat16x8x2_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 return vld2q_lane_bf16(ptr, src, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
353 // CHECK64-LABEL: @test_vld3_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
354 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
355 // CHECK64-NEXT: [[VLD3:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld3.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
356 // CHECK64-NEXT: [[VLD3_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
357 // CHECK64-NEXT: [[VLD3_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
358 // CHECK64-NEXT: [[VLD3_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
359 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T:%.*]] poison, <4 x bfloat> [[VLD3_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
360 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD3_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
361 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD3_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
362 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
363 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
364 // CHECK32-LABEL: @test_vld3_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
365 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
366 // CHECK32-NEXT: [[VLD3_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld3.v4bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
367 // CHECK32-NEXT: [[VLD3_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
368 // CHECK32-NEXT: [[VLD3_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
369 // CHECK32-NEXT: [[VLD3_V_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
370 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD3_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
371 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD3_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
372 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x bfloat> [[VLD3_V_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
373 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <2 x i32>] poison, <2 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
374 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
375 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
376 // CHECK32-NEXT: ret [3 x <2 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
377 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 bfloat16x4x3_t test_vld3_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 return vld3_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
382 // CHECK64-LABEL: @test_vld3q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
383 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
384 // CHECK64-NEXT: [[VLD3:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld3.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
385 // CHECK64-NEXT: [[VLD3_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
386 // CHECK64-NEXT: [[VLD3_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
387 // CHECK64-NEXT: [[VLD3_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
388 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T:%.*]] poison, <8 x bfloat> [[VLD3_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
389 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD3_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
390 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD3_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
391 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
392 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
393 // CHECK32-LABEL: @test_vld3q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
394 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
395 // CHECK32-NEXT: [[VLD3Q_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld3.v8bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
396 // CHECK32-NEXT: [[VLD3Q_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
397 // CHECK32-NEXT: [[VLD3Q_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
398 // CHECK32-NEXT: [[VLD3Q_V_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
399 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD3Q_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
400 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD3Q_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
401 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <8 x bfloat> [[VLD3Q_V_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
402 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <4 x i32>] poison, <4 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
403 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
404 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
405 // CHECK32-NEXT: ret [3 x <4 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
406 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 bfloat16x8x3_t test_vld3q_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 return vld3q_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
411 // CHECK64-LABEL: @test_vld3_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
412 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
413 // CHECK64-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
414 // CHECK64-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
415 // CHECK64-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[SRC_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
416 // CHECK64-NEXT: [[VLD3_LANE:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld3lane.v4bf16.p0(<4 x bfloat> [[SRC_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[SRC_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[SRC_COERCE_FCA_2_EXTRACT]], i64 1, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
417 // CHECK64-NEXT: [[VLD3_LANE_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_LANE]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
418 // CHECK64-NEXT: [[VLD3_LANE_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_LANE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
419 // CHECK64-NEXT: [[VLD3_LANE_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_LANE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
420 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T:%.*]] poison, <4 x bfloat> [[VLD3_LANE_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
421 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD3_LANE_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
422 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD3_LANE_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
423 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
424 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
425 // CHECK32-LABEL: @test_vld3_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
426 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
427 // CHECK32-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
428 // CHECK32-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
429 // CHECK32-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[SRC_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
430 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
431 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
432 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
433 // CHECK32-NEXT: [[VLD3_LANE_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld3lane.v4bf16.p0(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]], i32 1, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
434 // CHECK32-NEXT: [[VLD3_LANE_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_LANE_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
435 // CHECK32-NEXT: [[VLD3_LANE_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_LANE_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
436 // CHECK32-NEXT: [[VLD3_LANE_V_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_LANE_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
437 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <4 x bfloat> [[VLD3_LANE_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
438 // CHECK32-NEXT: [[TMP5:%.*]] = bitcast <4 x bfloat> [[VLD3_LANE_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
439 // CHECK32-NEXT: [[TMP6:%.*]] = bitcast <4 x bfloat> [[VLD3_LANE_V_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
440 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <2 x i32>] poison, <2 x i32> [[TMP4]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
441 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP5]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
442 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP6]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
443 // CHECK32-NEXT: ret [3 x <2 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
444 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 bfloat16x4x3_t test_vld3_lane_bf16(bfloat16_t const *ptr, bfloat16x4x3_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 return vld3_lane_bf16(ptr, src, 1);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
449 // CHECK64-LABEL: @test_vld3q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
450 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
451 // CHECK64-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
452 // CHECK64-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
453 // CHECK64-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[SRC_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
454 // CHECK64-NEXT: [[VLD3_LANE:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld3lane.v8bf16.p0(<8 x bfloat> [[SRC_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[SRC_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[SRC_COERCE_FCA_2_EXTRACT]], i64 7, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
455 // CHECK64-NEXT: [[VLD3_LANE_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3_LANE]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
456 // CHECK64-NEXT: [[VLD3_LANE_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3_LANE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
457 // CHECK64-NEXT: [[VLD3_LANE_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3_LANE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
458 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T:%.*]] poison, <8 x bfloat> [[VLD3_LANE_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
459 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD3_LANE_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
460 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD3_LANE_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
461 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
462 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
463 // CHECK32-LABEL: @test_vld3q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
464 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
465 // CHECK32-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
466 // CHECK32-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
467 // CHECK32-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[SRC_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
468 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
469 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
470 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
471 // CHECK32-NEXT: [[VLD3Q_LANE_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld3lane.v8bf16.p0(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]], i32 7, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
472 // CHECK32-NEXT: [[VLD3Q_LANE_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_LANE_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
473 // CHECK32-NEXT: [[VLD3Q_LANE_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_LANE_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
474 // CHECK32-NEXT: [[VLD3Q_LANE_V_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_LANE_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
475 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <8 x bfloat> [[VLD3Q_LANE_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
476 // CHECK32-NEXT: [[TMP5:%.*]] = bitcast <8 x bfloat> [[VLD3Q_LANE_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
477 // CHECK32-NEXT: [[TMP6:%.*]] = bitcast <8 x bfloat> [[VLD3Q_LANE_V_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
478 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <4 x i32>] poison, <4 x i32> [[TMP4]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
479 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP5]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
480 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP6]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
481 // CHECK32-NEXT: ret [3 x <4 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
482 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 bfloat16x8x3_t test_vld3q_lane_bf16(bfloat16_t const *ptr, bfloat16x8x3_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 return vld3q_lane_bf16(ptr, src, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 // return vld3q_lane_bf16(ptr, src, 8);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
487
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
488 // CHECK64-LABEL: @test_vld4_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
489 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
490 // CHECK64-NEXT: [[VLD4:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld4.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
491 // CHECK64-NEXT: [[VLD4_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
492 // CHECK64-NEXT: [[VLD4_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
493 // CHECK64-NEXT: [[VLD4_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
494 // CHECK64-NEXT: [[VLD4_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
495 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T:%.*]] poison, <4 x bfloat> [[VLD4_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
496 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD4_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
497 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD4_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
498 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_2_INSERT]], <4 x bfloat> [[VLD4_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
499 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
500 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
501 // CHECK32-LABEL: @test_vld4_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
502 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
503 // CHECK32-NEXT: [[VLD4_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld4.v4bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
504 // CHECK32-NEXT: [[VLD4_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
505 // CHECK32-NEXT: [[VLD4_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
506 // CHECK32-NEXT: [[VLD4_V_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
507 // CHECK32-NEXT: [[VLD4_V_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_V]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
508 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD4_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
509 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD4_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
510 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x bfloat> [[VLD4_V_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
511 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <4 x bfloat> [[VLD4_V_FCA_3_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
512 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <2 x i32>] poison, <2 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
513 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
514 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
515 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_2_INSERT]], <2 x i32> [[TMP4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
516 // CHECK32-NEXT: ret [4 x <2 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
517 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 bfloat16x4x4_t test_vld4_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 return vld4_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
521
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
522 // CHECK64-LABEL: @test_vld4q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
523 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
524 // CHECK64-NEXT: [[VLD4:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld4.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
525 // CHECK64-NEXT: [[VLD4_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
526 // CHECK64-NEXT: [[VLD4_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
527 // CHECK64-NEXT: [[VLD4_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
528 // CHECK64-NEXT: [[VLD4_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
529 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T:%.*]] poison, <8 x bfloat> [[VLD4_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
530 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD4_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
531 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD4_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
532 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_2_INSERT]], <8 x bfloat> [[VLD4_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
533 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
534 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
535 // CHECK32-LABEL: @test_vld4q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
536 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
537 // CHECK32-NEXT: [[VLD4Q_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld4.v8bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
538 // CHECK32-NEXT: [[VLD4Q_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
539 // CHECK32-NEXT: [[VLD4Q_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
540 // CHECK32-NEXT: [[VLD4Q_V_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
541 // CHECK32-NEXT: [[VLD4Q_V_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_V]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
542 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD4Q_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
543 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD4Q_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
544 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <8 x bfloat> [[VLD4Q_V_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
545 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <8 x bfloat> [[VLD4Q_V_FCA_3_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
546 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <4 x i32>] poison, <4 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
547 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
548 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
549 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_2_INSERT]], <4 x i32> [[TMP4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
550 // CHECK32-NEXT: ret [4 x <4 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
551 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 bfloat16x8x4_t test_vld4q_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 return vld4q_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
555
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
556 // CHECK64-LABEL: @test_vld4_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
557 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
558 // CHECK64-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
559 // CHECK64-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
560 // CHECK64-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[SRC_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
561 // CHECK64-NEXT: [[SRC_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[SRC_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
562 // CHECK64-NEXT: [[VLD4_LANE:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld4lane.v4bf16.p0(<4 x bfloat> [[SRC_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[SRC_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[SRC_COERCE_FCA_2_EXTRACT]], <4 x bfloat> [[SRC_COERCE_FCA_3_EXTRACT]], i64 1, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
563 // CHECK64-NEXT: [[VLD4_LANE_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
564 // CHECK64-NEXT: [[VLD4_LANE_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
565 // CHECK64-NEXT: [[VLD4_LANE_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
566 // CHECK64-NEXT: [[VLD4_LANE_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
567 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T:%.*]] poison, <4 x bfloat> [[VLD4_LANE_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
568 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD4_LANE_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
569 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD4_LANE_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
570 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_2_INSERT]], <4 x bfloat> [[VLD4_LANE_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
571 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
572 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
573 // CHECK32-LABEL: @test_vld4_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
574 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
575 // CHECK32-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
576 // CHECK32-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
577 // CHECK32-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[SRC_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
578 // CHECK32-NEXT: [[SRC_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[SRC_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
579 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
580 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
581 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
582 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <2 x i32> [[SRC_COERCE_FCA_3_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
583 // CHECK32-NEXT: [[VLD4_LANE_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld4lane.v4bf16.p0(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]], <4 x bfloat> [[TMP3]], i32 1, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
584 // CHECK32-NEXT: [[VLD4_LANE_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
585 // CHECK32-NEXT: [[VLD4_LANE_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
586 // CHECK32-NEXT: [[VLD4_LANE_V_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
587 // CHECK32-NEXT: [[VLD4_LANE_V_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_LANE_V]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
588 // CHECK32-NEXT: [[TMP5:%.*]] = bitcast <4 x bfloat> [[VLD4_LANE_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
589 // CHECK32-NEXT: [[TMP6:%.*]] = bitcast <4 x bfloat> [[VLD4_LANE_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
590 // CHECK32-NEXT: [[TMP7:%.*]] = bitcast <4 x bfloat> [[VLD4_LANE_V_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
591 // CHECK32-NEXT: [[TMP8:%.*]] = bitcast <4 x bfloat> [[VLD4_LANE_V_FCA_3_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
592 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <2 x i32>] poison, <2 x i32> [[TMP5]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
593 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP6]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
594 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP7]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
595 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_2_INSERT]], <2 x i32> [[TMP8]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
596 // CHECK32-NEXT: ret [4 x <2 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
597 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 bfloat16x4x4_t test_vld4_lane_bf16(bfloat16_t const *ptr, bfloat16x4x4_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
599 return vld4_lane_bf16(ptr, src, 1);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
601
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
602 // CHECK64-LABEL: @test_vld4q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
603 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
604 // CHECK64-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
605 // CHECK64-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
606 // CHECK64-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[SRC_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
607 // CHECK64-NEXT: [[SRC_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[SRC_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
608 // CHECK64-NEXT: [[VLD4_LANE:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld4lane.v8bf16.p0(<8 x bfloat> [[SRC_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[SRC_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[SRC_COERCE_FCA_2_EXTRACT]], <8 x bfloat> [[SRC_COERCE_FCA_3_EXTRACT]], i64 7, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
609 // CHECK64-NEXT: [[VLD4_LANE_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4_LANE]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
610 // CHECK64-NEXT: [[VLD4_LANE_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4_LANE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
611 // CHECK64-NEXT: [[VLD4_LANE_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4_LANE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
612 // CHECK64-NEXT: [[VLD4_LANE_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4_LANE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
613 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T:%.*]] poison, <8 x bfloat> [[VLD4_LANE_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
614 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD4_LANE_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
615 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD4_LANE_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
616 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_2_INSERT]], <8 x bfloat> [[VLD4_LANE_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
617 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
618 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
619 // CHECK32-LABEL: @test_vld4q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
620 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
621 // CHECK32-NEXT: [[SRC_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[SRC_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
622 // CHECK32-NEXT: [[SRC_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[SRC_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
623 // CHECK32-NEXT: [[SRC_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[SRC_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
624 // CHECK32-NEXT: [[SRC_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[SRC_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
625 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
626 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
627 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
628 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x i32> [[SRC_COERCE_FCA_3_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
629 // CHECK32-NEXT: [[VLD4Q_LANE_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld4lane.v8bf16.p0(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]], <8 x bfloat> [[TMP3]], i32 7, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
630 // CHECK32-NEXT: [[VLD4Q_LANE_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_LANE_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
631 // CHECK32-NEXT: [[VLD4Q_LANE_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_LANE_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
632 // CHECK32-NEXT: [[VLD4Q_LANE_V_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_LANE_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
633 // CHECK32-NEXT: [[VLD4Q_LANE_V_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_LANE_V]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
634 // CHECK32-NEXT: [[TMP5:%.*]] = bitcast <8 x bfloat> [[VLD4Q_LANE_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
635 // CHECK32-NEXT: [[TMP6:%.*]] = bitcast <8 x bfloat> [[VLD4Q_LANE_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
636 // CHECK32-NEXT: [[TMP7:%.*]] = bitcast <8 x bfloat> [[VLD4Q_LANE_V_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
637 // CHECK32-NEXT: [[TMP8:%.*]] = bitcast <8 x bfloat> [[VLD4Q_LANE_V_FCA_3_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
638 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <4 x i32>] poison, <4 x i32> [[TMP5]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
639 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP6]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
640 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP7]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
641 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_2_INSERT]], <4 x i32> [[TMP8]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
642 // CHECK32-NEXT: ret [4 x <4 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
643 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
644 bfloat16x8x4_t test_vld4q_lane_bf16(bfloat16_t const *ptr, bfloat16x8x4_t src) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
645 return vld4q_lane_bf16(ptr, src, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
646 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
647
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
648 // CHECK64-LABEL: @test_vld2_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
649 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
650 // CHECK64-NEXT: [[VLD2:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld2r.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
651 // CHECK64-NEXT: [[VLD2_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
652 // CHECK64-NEXT: [[VLD2_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
653 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T:%.*]] poison, <4 x bfloat> [[VLD2_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
654 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD2_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
655 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
656 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
657 // CHECK32-LABEL: @test_vld2_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
658 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
659 // CHECK32-NEXT: [[VLD2_DUP_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld2dup.v4bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
660 // CHECK32-NEXT: [[VLD2_DUP_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_DUP_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
661 // CHECK32-NEXT: [[VLD2_DUP_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat> } [[VLD2_DUP_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
662 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD2_DUP_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
663 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD2_DUP_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
664 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <2 x i32>] poison, <2 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
665 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
666 // CHECK32-NEXT: ret [2 x <2 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
667 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
668 bfloat16x4x2_t test_vld2_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
669 return vld2_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
670 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
671
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
672 // CHECK64-LABEL: @test_vld2q_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
673 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
674 // CHECK64-NEXT: [[VLD2:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld2r.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
675 // CHECK64-NEXT: [[VLD2_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
676 // CHECK64-NEXT: [[VLD2_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
677 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T:%.*]] poison, <8 x bfloat> [[VLD2_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
678 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD2_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
679 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X2_T]] [[DOTFCA_0_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
680 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
681 // CHECK32-LABEL: @test_vld2q_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
682 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
683 // CHECK32-NEXT: [[VLD2Q_DUP_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld2dup.v8bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
684 // CHECK32-NEXT: [[VLD2Q_DUP_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2Q_DUP_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
685 // CHECK32-NEXT: [[VLD2Q_DUP_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat> } [[VLD2Q_DUP_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
686 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD2Q_DUP_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
687 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD2Q_DUP_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
688 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [2 x <4 x i32>] poison, <4 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
689 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [2 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
690 // CHECK32-NEXT: ret [2 x <4 x i32>] [[DOTFCA_1_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
691 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
692 bfloat16x8x2_t test_vld2q_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
693 return vld2q_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
694 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
695
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
696 // CHECK64-LABEL: @test_vld3_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
697 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
698 // CHECK64-NEXT: [[VLD3:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld3r.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
699 // CHECK64-NEXT: [[VLD3_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
700 // CHECK64-NEXT: [[VLD3_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
701 // CHECK64-NEXT: [[VLD3_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
702 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T:%.*]] poison, <4 x bfloat> [[VLD3_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
703 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD3_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
704 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD3_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
705 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
706 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
707 // CHECK32-LABEL: @test_vld3_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
708 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
709 // CHECK32-NEXT: [[VLD3_DUP_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld3dup.v4bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
710 // CHECK32-NEXT: [[VLD3_DUP_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_DUP_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
711 // CHECK32-NEXT: [[VLD3_DUP_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_DUP_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
712 // CHECK32-NEXT: [[VLD3_DUP_V_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD3_DUP_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
713 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD3_DUP_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
714 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD3_DUP_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
715 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x bfloat> [[VLD3_DUP_V_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
716 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <2 x i32>] poison, <2 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
717 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
718 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
719 // CHECK32-NEXT: ret [3 x <2 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
720 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
721 bfloat16x4x3_t test_vld3_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
722 return vld3_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
723 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
724
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
725 // CHECK64-LABEL: @test_vld3q_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
726 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
727 // CHECK64-NEXT: [[VLD3:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld3r.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
728 // CHECK64-NEXT: [[VLD3_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
729 // CHECK64-NEXT: [[VLD3_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
730 // CHECK64-NEXT: [[VLD3_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
731 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T:%.*]] poison, <8 x bfloat> [[VLD3_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
732 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD3_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
733 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD3_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
734 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X3_T]] [[DOTFCA_0_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
735 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
736 // CHECK32-LABEL: @test_vld3q_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
737 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
738 // CHECK32-NEXT: [[VLD3Q_DUP_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld3dup.v8bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
739 // CHECK32-NEXT: [[VLD3Q_DUP_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_DUP_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
740 // CHECK32-NEXT: [[VLD3Q_DUP_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_DUP_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
741 // CHECK32-NEXT: [[VLD3Q_DUP_V_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD3Q_DUP_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
742 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD3Q_DUP_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
743 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD3Q_DUP_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
744 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <8 x bfloat> [[VLD3Q_DUP_V_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
745 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [3 x <4 x i32>] poison, <4 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
746 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
747 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [3 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
748 // CHECK32-NEXT: ret [3 x <4 x i32>] [[DOTFCA_2_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
749 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
750 bfloat16x8x3_t test_vld3q_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
751 return vld3q_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
752 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
753
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
754 // CHECK64-LABEL: @test_vld4_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
755 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
756 // CHECK64-NEXT: [[VLD4:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.aarch64.neon.ld4r.v4bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
757 // CHECK64-NEXT: [[VLD4_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
758 // CHECK64-NEXT: [[VLD4_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
759 // CHECK64-NEXT: [[VLD4_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
760 // CHECK64-NEXT: [[VLD4_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
761 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T:%.*]] poison, <4 x bfloat> [[VLD4_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
762 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_0_INSERT]], <4 x bfloat> [[VLD4_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
763 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_1_INSERT]], <4 x bfloat> [[VLD4_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
764 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_2_INSERT]], <4 x bfloat> [[VLD4_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
765 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X4X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
766 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
767 // CHECK32-LABEL: @test_vld4_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
768 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
769 // CHECK32-NEXT: [[VLD4_DUP_V:%.*]] = tail call { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } @llvm.arm.neon.vld4dup.v4bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
770 // CHECK32-NEXT: [[VLD4_DUP_V_FCA_0_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_DUP_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
771 // CHECK32-NEXT: [[VLD4_DUP_V_FCA_1_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_DUP_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
772 // CHECK32-NEXT: [[VLD4_DUP_V_FCA_2_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_DUP_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
773 // CHECK32-NEXT: [[VLD4_DUP_V_FCA_3_EXTRACT:%.*]] = extractvalue { <4 x bfloat>, <4 x bfloat>, <4 x bfloat>, <4 x bfloat> } [[VLD4_DUP_V]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
774 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x bfloat> [[VLD4_DUP_V_FCA_0_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
775 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x bfloat> [[VLD4_DUP_V_FCA_1_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
776 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x bfloat> [[VLD4_DUP_V_FCA_2_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
777 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <4 x bfloat> [[VLD4_DUP_V_FCA_3_EXTRACT]] to <2 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
778 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <2 x i32>] poison, <2 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
779 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_0_INSERT]], <2 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
780 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_1_INSERT]], <2 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
781 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <2 x i32>] [[DOTFCA_2_INSERT]], <2 x i32> [[TMP4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
782 // CHECK32-NEXT: ret [4 x <2 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
783 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
784 bfloat16x4x4_t test_vld4_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
785 return vld4_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
786 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
787
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
788 // CHECK64-LABEL: @test_vld4q_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
789 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
790 // CHECK64-NEXT: [[VLD4:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.aarch64.neon.ld4r.v8bf16.p0(ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
791 // CHECK64-NEXT: [[VLD4_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
792 // CHECK64-NEXT: [[VLD4_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
793 // CHECK64-NEXT: [[VLD4_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
794 // CHECK64-NEXT: [[VLD4_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
795 // CHECK64-NEXT: [[DOTFCA_0_0_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T:%.*]] poison, <8 x bfloat> [[VLD4_FCA_0_EXTRACT]], 0, 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
796 // CHECK64-NEXT: [[DOTFCA_0_1_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_0_INSERT]], <8 x bfloat> [[VLD4_FCA_1_EXTRACT]], 0, 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
797 // CHECK64-NEXT: [[DOTFCA_0_2_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_1_INSERT]], <8 x bfloat> [[VLD4_FCA_2_EXTRACT]], 0, 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
798 // CHECK64-NEXT: [[DOTFCA_0_3_INSERT:%.*]] = insertvalue [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_2_INSERT]], <8 x bfloat> [[VLD4_FCA_3_EXTRACT]], 0, 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
799 // CHECK64-NEXT: ret [[STRUCT_BFLOAT16X8X4_T]] [[DOTFCA_0_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
800 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
801 // CHECK32-LABEL: @test_vld4q_dup_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
802 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
803 // CHECK32-NEXT: [[VLD4Q_DUP_V:%.*]] = tail call { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } @llvm.arm.neon.vld4dup.v8bf16.p0(ptr [[PTR:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
804 // CHECK32-NEXT: [[VLD4Q_DUP_V_FCA_0_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_DUP_V]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
805 // CHECK32-NEXT: [[VLD4Q_DUP_V_FCA_1_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_DUP_V]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
806 // CHECK32-NEXT: [[VLD4Q_DUP_V_FCA_2_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_DUP_V]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
807 // CHECK32-NEXT: [[VLD4Q_DUP_V_FCA_3_EXTRACT:%.*]] = extractvalue { <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat> } [[VLD4Q_DUP_V]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
808 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <8 x bfloat> [[VLD4Q_DUP_V_FCA_0_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
809 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <8 x bfloat> [[VLD4Q_DUP_V_FCA_1_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
810 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <8 x bfloat> [[VLD4Q_DUP_V_FCA_2_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
811 // CHECK32-NEXT: [[TMP4:%.*]] = bitcast <8 x bfloat> [[VLD4Q_DUP_V_FCA_3_EXTRACT]] to <4 x i32>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
812 // CHECK32-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [4 x <4 x i32>] poison, <4 x i32> [[TMP1]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
813 // CHECK32-NEXT: [[DOTFCA_1_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_0_INSERT]], <4 x i32> [[TMP2]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
814 // CHECK32-NEXT: [[DOTFCA_2_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_1_INSERT]], <4 x i32> [[TMP3]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
815 // CHECK32-NEXT: [[DOTFCA_3_INSERT:%.*]] = insertvalue [4 x <4 x i32>] [[DOTFCA_2_INSERT]], <4 x i32> [[TMP4]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
816 // CHECK32-NEXT: ret [4 x <4 x i32>] [[DOTFCA_3_INSERT]]
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
817 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
818 bfloat16x8x4_t test_vld4q_dup_bf16(bfloat16_t const *ptr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
819 return vld4q_dup_bf16(ptr);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
820 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
821
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
822 // CHECK64-LABEL: @test_vst1_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
823 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
824 // CHECK64-NEXT: store <4 x bfloat> [[VAL:%.*]], ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
825 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
826 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
827 // CHECK32-LABEL: @test_vst1_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
828 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
829 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[VAL:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
830 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
831 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
832 void test_vst1_bf16(bfloat16_t *ptr, bfloat16x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 vst1_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
834 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
835
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
836 // CHECK64-LABEL: @test_vst1q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
837 // CHECK64-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
838 // CHECK64-NEXT: store <8 x bfloat> [[VAL:%.*]], ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
839 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
840 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
841 // CHECK32-LABEL: @test_vst1q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
842 // CHECK32-NEXT: entry:
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
843 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[VAL:%.*]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
844 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
845 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 void test_vst1q_bf16(bfloat16_t *ptr, bfloat16x8_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 vst1q_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
848 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
849
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
850 // CHECK-LABEL: @test_vst1_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
851 // CHECK-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
852 // CHECK-NEXT: [[TMP0:%.*]] = extractelement <4 x bfloat> [[VAL:%.*]], i64 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
853 // CHECK-NEXT: store bfloat [[TMP0]], ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
854 // CHECK-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
855 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
856 void test_vst1_lane_bf16(bfloat16_t *ptr, bfloat16x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
857 vst1_lane_bf16(ptr, val, 1);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
858 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
859
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
860 // CHECK-LABEL: @test_vst1q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
861 // CHECK-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
862 // CHECK-NEXT: [[TMP0:%.*]] = extractelement <8 x bfloat> [[VAL:%.*]], i64 7
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
863 // CHECK-NEXT: store bfloat [[TMP0]], ptr [[PTR:%.*]], align 2
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
864 // CHECK-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
865 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
866 void test_vst1q_lane_bf16(bfloat16_t *ptr, bfloat16x8_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 vst1q_lane_bf16(ptr, val, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
868 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
869
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
870 // CHECK64-LABEL: @test_vst1_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
871 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
872 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
873 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[VAL_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
874 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st1x2.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
875 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
876 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
877 // CHECK32-LABEL: @test_vst1_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
878 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
879 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
880 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
881 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
882 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
883 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1x2.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
884 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
885 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
886 void test_vst1_bf16_x2(bfloat16_t *ptr, bfloat16x4x2_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
887 vst1_bf16_x2(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
888 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
889
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
890 // CHECK64-LABEL: @test_vst1q_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
891 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
892 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
893 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[VAL_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
894 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st1x2.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
895 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
896 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
897 // CHECK32-LABEL: @test_vst1q_bf16_x2(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
898 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
899 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
900 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
901 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
902 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
903 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1x2.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
904 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
905 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
906 void test_vst1q_bf16_x2(bfloat16_t *ptr, bfloat16x8x2_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
907 vst1q_bf16_x2(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
908 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
909
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
910 // CHECK64-LABEL: @test_vst1_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
911 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
912 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
913 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
914 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
915 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st1x3.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
916 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
917 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
918 // CHECK32-LABEL: @test_vst1_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
919 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
920 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
921 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
922 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
923 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
924 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
925 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
926 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1x3.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
927 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
928 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
929 void test_vst1_bf16_x3(bfloat16_t *ptr, bfloat16x4x3_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
930 vst1_bf16_x3(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
931 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
932
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
933 // CHECK64-LABEL: @test_vst1q_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
934 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
935 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
936 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
937 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
938 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st1x3.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
939 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
940 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
941 // CHECK32-LABEL: @test_vst1q_bf16_x3(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
942 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
943 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
944 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
945 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
946 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
947 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
948 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
949 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1x3.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
950 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
951 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
952 void test_vst1q_bf16_x3(bfloat16_t *ptr, bfloat16x8x3_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
953 vst1q_bf16_x3(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
954 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
955
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
956 // CHECK64-LABEL: @test_vst1_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
957 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
958 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
959 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
960 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
961 // CHECK64-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
962 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st1x4.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_3_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
963 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
964 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
965 // CHECK32-LABEL: @test_vst1_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
966 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
967 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
968 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
969 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
970 // CHECK32-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
971 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
972 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
973 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
974 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_3_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
975 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1x4.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]], <4 x bfloat> [[TMP3]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
976 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
977 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
978 void test_vst1_bf16_x4(bfloat16_t *ptr, bfloat16x4x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
979 vst1_bf16_x4(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
980 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
981
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
982 // CHECK64-LABEL: @test_vst1q_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
983 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
984 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
985 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
986 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
987 // CHECK64-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
988 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st1x4.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_3_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
989 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
990 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
991 // CHECK32-LABEL: @test_vst1q_bf16_x4(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
992 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
993 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
994 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
995 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
996 // CHECK32-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
997 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
998 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
999 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1000 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_3_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1001 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst1x4.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]], <8 x bfloat> [[TMP3]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1002 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1003 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1004 void test_vst1q_bf16_x4(bfloat16_t *ptr, bfloat16x8x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1005 vst1q_bf16_x4(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1006 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1007
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1008 // CHECK64-LABEL: @test_vst2_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1009 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1010 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1011 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[VAL_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1012 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st2.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1013 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1014 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1015 // CHECK32-LABEL: @test_vst2_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1016 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1017 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1018 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1019 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1020 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1021 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst2.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1022 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1023 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1024 void test_vst2_bf16(bfloat16_t *ptr, bfloat16x4x2_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1025 vst2_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1026 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1027
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1028 // CHECK64-LABEL: @test_vst2q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1029 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1030 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1031 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[VAL_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1032 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st2.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1033 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1034 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1035 // CHECK32-LABEL: @test_vst2q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1036 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1037 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1038 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1039 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1040 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1041 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst2.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1042 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1043 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1044 void test_vst2q_bf16(bfloat16_t *ptr, bfloat16x8x2_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1045 vst2q_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1046 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1047
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1048 // CHECK64-LABEL: @test_vst2_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1049 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1050 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1051 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x bfloat>] [[VAL_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1052 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st2lane.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], i64 1, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1053 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1054 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1055 // CHECK32-LABEL: @test_vst2_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1056 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1057 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1058 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1059 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1060 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1061 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst2lane.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], i32 1, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1062 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1063 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1064 void test_vst2_lane_bf16(bfloat16_t *ptr, bfloat16x4x2_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1065 vst2_lane_bf16(ptr, val, 1);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1066 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1067
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1068 // CHECK64-LABEL: @test_vst2q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1069 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1070 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1071 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <8 x bfloat>] [[VAL_COERCE]], 1
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1072 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st2lane.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], i64 7, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1073 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1074 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1075 // CHECK32-LABEL: @test_vst2q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1076 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1077 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1078 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [2 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1079 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1080 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1081 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst2lane.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], i32 7, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1082 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1083 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1084 void test_vst2q_lane_bf16(bfloat16_t *ptr, bfloat16x8x2_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1085 vst2q_lane_bf16(ptr, val, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1086 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1087
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1088 // CHECK64-LABEL: @test_vst3_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1089 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1090 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1091 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1092 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1093 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st3.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1094 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1095 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1096 // CHECK32-LABEL: @test_vst3_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1097 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1098 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1099 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1100 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1101 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1102 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1103 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1104 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst3.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1105 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1106 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1107 void test_vst3_bf16(bfloat16_t *ptr, bfloat16x4x3_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1108 vst3_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1109 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1110
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1111 // CHECK64-LABEL: @test_vst3q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1112 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1113 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1114 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1115 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1116 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st3.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1117 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1118 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1119 // CHECK32-LABEL: @test_vst3q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1120 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1121 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1122 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1123 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1124 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1125 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1126 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1127 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst3.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1128 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1129 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1130 void test_vst3q_bf16(bfloat16_t *ptr, bfloat16x8x3_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1131 vst3q_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1132 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1133
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1134 // CHECK64-LABEL: @test_vst3_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1135 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1136 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1137 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1138 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x bfloat>] [[VAL_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1139 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st3lane.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], i64 1, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1140 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1141 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1142 // CHECK32-LABEL: @test_vst3_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1143 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1144 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1145 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1146 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <2 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1147 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1148 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1149 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1150 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst3lane.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]], i32 1, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1151 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1152 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1153 void test_vst3_lane_bf16(bfloat16_t *ptr, bfloat16x4x3_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1154 vst3_lane_bf16(ptr, val, 1);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1155 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1156
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1157 // CHECK64-LABEL: @test_vst3q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1158 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1159 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1160 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1161 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <8 x bfloat>] [[VAL_COERCE]], 2
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1162 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st3lane.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], i64 7, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1163 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1164 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1165 // CHECK32-LABEL: @test_vst3q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1166 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1167 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1168 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1169 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [3 x <4 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1170 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1171 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1172 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1173 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst3lane.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]], i32 7, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1174 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1175 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1176 void test_vst3q_lane_bf16(bfloat16_t *ptr, bfloat16x8x3_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1177 vst3q_lane_bf16(ptr, val, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1178 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1179
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1180 // CHECK64-LABEL: @test_vst4_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1181 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1182 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1183 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1184 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1185 // CHECK64-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1186 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st4.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_3_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1187 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1188 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1189 // CHECK32-LABEL: @test_vst4_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1190 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1191 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1192 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1193 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1194 // CHECK32-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1195 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1196 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1197 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1198 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_3_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1199 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst4.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]], <4 x bfloat> [[TMP3]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1200 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1201 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1202 void test_vst4_bf16(bfloat16_t *ptr, bfloat16x4x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1203 vst4_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1204 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1205
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1206 // CHECK64-LABEL: @test_vst4q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1207 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1208 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1209 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1210 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1211 // CHECK64-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1212 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st4.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_3_EXTRACT]], ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1213 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1214 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1215 // CHECK32-LABEL: @test_vst4q_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1216 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1217 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1218 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1219 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1220 // CHECK32-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1221 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1222 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1223 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1224 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_3_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1225 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst4.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]], <8 x bfloat> [[TMP3]], i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1226 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1227 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1228 void test_vst4q_bf16(bfloat16_t *ptr, bfloat16x8x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1229 vst4q_bf16(ptr, val);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1230 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1231
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1232 // CHECK64-LABEL: @test_vst4_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1233 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1234 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1235 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1236 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1237 // CHECK64-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x bfloat>] [[VAL_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1238 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st4lane.v4bf16.p0(<4 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], <4 x bfloat> [[VAL_COERCE_FCA_3_EXTRACT]], i64 1, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1239 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1240 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1241 // CHECK32-LABEL: @test_vst4_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1242 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1243 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1244 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1245 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1246 // CHECK32-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <2 x i32>] [[VAL_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1247 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1248 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1249 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <4 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1250 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <2 x i32> [[VAL_COERCE_FCA_3_EXTRACT]] to <4 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1251 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst4lane.p0.v4bf16(ptr [[PTR:%.*]], <4 x bfloat> [[TMP0]], <4 x bfloat> [[TMP1]], <4 x bfloat> [[TMP2]], <4 x bfloat> [[TMP3]], i32 1, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1252 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1253 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1254 void test_vst4_lane_bf16(bfloat16_t *ptr, bfloat16x4x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1255 vst4_lane_bf16(ptr, val, 1);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1256 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1257
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1258 // CHECK64-LABEL: @test_vst4q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1259 // CHECK64-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1260 // CHECK64-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1261 // CHECK64-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1262 // CHECK64-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1263 // CHECK64-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <8 x bfloat>] [[VAL_COERCE]], 3
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1264 // CHECK64-NEXT: tail call void @llvm.aarch64.neon.st4lane.v8bf16.p0(<8 x bfloat> [[VAL_COERCE_FCA_0_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_1_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_2_EXTRACT]], <8 x bfloat> [[VAL_COERCE_FCA_3_EXTRACT]], i64 7, ptr [[PTR:%.*]])
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1265 // CHECK64-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1266 //
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1267 // CHECK32-LABEL: @test_vst4q_lane_bf16(
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1268 // CHECK32-NEXT: entry:
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1269 // CHECK32-NEXT: [[VAL_COERCE_FCA_0_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE:%.*]], 0
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1270 // CHECK32-NEXT: [[VAL_COERCE_FCA_1_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 1
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1271 // CHECK32-NEXT: [[VAL_COERCE_FCA_2_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 2
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1272 // CHECK32-NEXT: [[VAL_COERCE_FCA_3_EXTRACT:%.*]] = extractvalue [4 x <4 x i32>] [[VAL_COERCE]], 3
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1273 // CHECK32-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_0_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1274 // CHECK32-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_1_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1275 // CHECK32-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_2_EXTRACT]] to <8 x bfloat>
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1276 // CHECK32-NEXT: [[TMP3:%.*]] = bitcast <4 x i32> [[VAL_COERCE_FCA_3_EXTRACT]] to <8 x bfloat>
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
1277 // CHECK32-NEXT: tail call void @llvm.arm.neon.vst4lane.p0.v8bf16(ptr [[PTR:%.*]], <8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]], <8 x bfloat> [[TMP2]], <8 x bfloat> [[TMP3]], i32 7, i32 2)
236
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1278 // CHECK32-NEXT: ret void
c4bab56944e8 LLVM 16
kono
parents: 221
diff changeset
1279 //
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1280 void test_vst4q_lane_bf16(bfloat16_t *ptr, bfloat16x8x4_t val) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1281 vst4q_lane_bf16(ptr, val, 7);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1282 }