xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslate-bf16.ll (revision 4b0a76a3d7d590ca1ec60e8a703969be6550ba17)
1*4b0a76a3SPierre van Houtryve; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2*4b0a76a3SPierre van Houtryve; RUN: llc < %s -global-isel -stop-after=irtranslator -mtriple=amdgcn -mcpu=gfx900 | FileCheck %s -check-prefixes=GFX9
3*4b0a76a3SPierre van Houtryve
4*4b0a76a3SPierre van Houtryve; tests bf16 argument & return values lowering.
5*4b0a76a3SPierre van Houtryve
6*4b0a76a3SPierre van Houtryvedefine <3 x bfloat> @v3bf16(<3 x bfloat> %arg0) {
7*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v3bf16
8*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
9*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1
10*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
11*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
12*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
13*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
14*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
15*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
16*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
17*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
18*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
19*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32)
20*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<3 x s16>) = G_TRUNC [[BUILD_VECTOR]](<3 x s32>)
21*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[C:%[0-9]+]]:_(s16) = G_FCONSTANT bfloat 0xR0000
22*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16)
23*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[SHUF:%[0-9]+]]:_(<3 x s16>) = G_SHUFFLE_VECTOR [[TRUNC]](<3 x s16>), [[BUILD_VECTOR1]], shufflemask(3, 1, 2)
24*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16), [[UV6:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[SHUF]](<3 x s16>)
25*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
26*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
27*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT4]](s32)
28*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT5]](s32)
29*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1
30*4b0a76a3SPierre van Houtryve  %res = shufflevector <3 x bfloat> %arg0, <3 x bfloat> zeroinitializer, <3 x i32> <i32 3, i32 1, i32 2>
31*4b0a76a3SPierre van Houtryve  ret <3 x bfloat> %res
32*4b0a76a3SPierre van Houtryve}
33*4b0a76a3SPierre van Houtryve
34*4b0a76a3SPierre van Houtryvedefine <4 x bfloat> @v4bf16(<4 x bfloat> %arg0) {
35*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v4bf16
36*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
37*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1
38*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
39*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
40*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
41*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
42*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
43*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
44*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
45*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
46*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
47*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32)
48*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[BUILD_VECTOR]](<4 x s32>)
49*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[C:%[0-9]+]]:_(s16) = G_FCONSTANT bfloat 0xR0000
50*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16)
51*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[SHUF:%[0-9]+]]:_(<4 x s16>) = G_SHUFFLE_VECTOR [[TRUNC]](<4 x s16>), [[BUILD_VECTOR1]], shufflemask(3, 1, 2, 0)
52*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16), [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[SHUF]](<4 x s16>)
53*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
54*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
55*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT4]](s32)
56*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT5]](s32)
57*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1
58*4b0a76a3SPierre van Houtryve  %res = shufflevector <4 x bfloat> %arg0, <4 x bfloat> zeroinitializer, <4 x i32> <i32 3, i32 1, i32 2, i32 0>
59*4b0a76a3SPierre van Houtryve  ret <4 x bfloat> %res
60*4b0a76a3SPierre van Houtryve}
61*4b0a76a3SPierre van Houtryve
62*4b0a76a3SPierre van Houtryvedefine <5 x bfloat> @v5bf16(<5 x bfloat> %arg0) {
63*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v5bf16
64*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
65*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2
66*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
67*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
68*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
69*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
70*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
71*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
72*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
73*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
74*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
75*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
76*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY2]](s32)
77*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
78*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
79*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32), [[ANYEXT4]](s32)
80*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<5 x s16>) = G_TRUNC [[BUILD_VECTOR]](<5 x s32>)
81*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[C:%[0-9]+]]:_(s16) = G_FCONSTANT bfloat 0xR0000
82*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<5 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16)
83*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[SHUF:%[0-9]+]]:_(<5 x s16>) = G_SHUFFLE_VECTOR [[TRUNC]](<5 x s16>), [[BUILD_VECTOR1]], shufflemask(3, 1, 2, 0, 4)
84*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16), [[UV8:%[0-9]+]]:_(s16), [[UV9:%[0-9]+]]:_(s16), [[UV10:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[SHUF]](<5 x s16>)
85*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s16)
86*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s16)
87*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s16)
88*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT6]](s32)
89*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT7]](s32)
90*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr2 = COPY [[ANYEXT8]](s32)
91*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2
92*4b0a76a3SPierre van Houtryve  %res = shufflevector <5 x bfloat> %arg0, <5 x bfloat> zeroinitializer, <5 x i32> <i32 3, i32 1, i32 2, i32 0, i32 4>
93*4b0a76a3SPierre van Houtryve  ret <5 x bfloat> %res
94*4b0a76a3SPierre van Houtryve}
95*4b0a76a3SPierre van Houtryve
96*4b0a76a3SPierre van Houtryvedefine <6 x bfloat> @v6bf16(<6 x bfloat> %arg0) {
97*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v6bf16
98*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
99*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2
100*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
101*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
102*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
103*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
104*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
105*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
106*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
107*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
108*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
109*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
110*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY2]](s32)
111*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
112*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
113*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<6 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32), [[ANYEXT4]](s32), [[ANYEXT5]](s32)
114*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<6 x s16>) = G_TRUNC [[BUILD_VECTOR]](<6 x s32>)
115*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[C:%[0-9]+]]:_(s16) = G_FCONSTANT bfloat 0xR0000
116*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<6 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16)
117*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[SHUF:%[0-9]+]]:_(<6 x s16>) = G_SHUFFLE_VECTOR [[TRUNC]](<6 x s16>), [[BUILD_VECTOR1]], shufflemask(3, 1, 2, 0, 4, 5)
118*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16), [[UV8:%[0-9]+]]:_(s16), [[UV9:%[0-9]+]]:_(s16), [[UV10:%[0-9]+]]:_(s16), [[UV11:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[SHUF]](<6 x s16>)
119*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s16)
120*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s16)
121*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s16)
122*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT6]](s32)
123*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT7]](s32)
124*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr2 = COPY [[ANYEXT8]](s32)
125*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2
126*4b0a76a3SPierre van Houtryve  %res = shufflevector <6 x bfloat> %arg0, <6 x bfloat> zeroinitializer, <6 x i32> <i32 3, i32 1, i32 2, i32 0, i32 4, i32 5>
127*4b0a76a3SPierre van Houtryve  ret <6 x bfloat> %res
128*4b0a76a3SPierre van Houtryve}
129*4b0a76a3SPierre van Houtryve
130*4b0a76a3SPierre van Houtryvedefine <7 x bfloat> @v7bf16(<7 x bfloat> %arg0) {
131*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v7bf16
132*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
133*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
134*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
135*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
136*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
137*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
138*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
139*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
140*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
141*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
142*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
143*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
144*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
145*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY2]](s32)
146*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
147*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
148*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY3]](s32)
149*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s16)
150*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s16)
151*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<7 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32), [[ANYEXT4]](s32), [[ANYEXT5]](s32), [[ANYEXT6]](s32)
152*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<7 x s16>) = G_TRUNC [[BUILD_VECTOR]](<7 x s32>)
153*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[C:%[0-9]+]]:_(s16) = G_FCONSTANT bfloat 0xR0000
154*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<7 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16)
155*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[SHUF:%[0-9]+]]:_(<7 x s16>) = G_SHUFFLE_VECTOR [[TRUNC]](<7 x s16>), [[BUILD_VECTOR1]], shufflemask(3, 1, 2, 0, 4, 5, 6)
156*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV8:%[0-9]+]]:_(s16), [[UV9:%[0-9]+]]:_(s16), [[UV10:%[0-9]+]]:_(s16), [[UV11:%[0-9]+]]:_(s16), [[UV12:%[0-9]+]]:_(s16), [[UV13:%[0-9]+]]:_(s16), [[UV14:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[SHUF]](<7 x s16>)
157*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s16)
158*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT9:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s16)
159*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT10:%[0-9]+]]:_(s32) = G_ANYEXT [[UV10]](s16)
160*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT11:%[0-9]+]]:_(s32) = G_ANYEXT [[UV11]](s16)
161*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT8]](s32)
162*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT9]](s32)
163*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr2 = COPY [[ANYEXT10]](s32)
164*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr3 = COPY [[ANYEXT11]](s32)
165*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3
166*4b0a76a3SPierre van Houtryve  %res = shufflevector <7 x bfloat> %arg0, <7 x bfloat> zeroinitializer, <7 x i32> <i32 3, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6>
167*4b0a76a3SPierre van Houtryve  ret <7 x bfloat> %res
168*4b0a76a3SPierre van Houtryve}
169*4b0a76a3SPierre van Houtryve
170*4b0a76a3SPierre van Houtryvedefine <8 x bfloat> @v8bf16(<8 x bfloat> %arg0) {
171*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v8bf16
172*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
173*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
174*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
175*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
176*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
177*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
178*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
179*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
180*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
181*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
182*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
183*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
184*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
185*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY2]](s32)
186*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
187*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
188*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY3]](s32)
189*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s16)
190*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s16)
191*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32), [[ANYEXT4]](s32), [[ANYEXT5]](s32), [[ANYEXT6]](s32), [[ANYEXT7]](s32)
192*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<8 x s16>) = G_TRUNC [[BUILD_VECTOR]](<8 x s32>)
193*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[C:%[0-9]+]]:_(s16) = G_FCONSTANT bfloat 0xR0000
194*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16)
195*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[SHUF:%[0-9]+]]:_(<8 x s16>) = G_SHUFFLE_VECTOR [[TRUNC]](<8 x s16>), [[BUILD_VECTOR1]], shufflemask(3, 1, 2, 0, 4, 5, 6, 7)
196*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV8:%[0-9]+]]:_(s16), [[UV9:%[0-9]+]]:_(s16), [[UV10:%[0-9]+]]:_(s16), [[UV11:%[0-9]+]]:_(s16), [[UV12:%[0-9]+]]:_(s16), [[UV13:%[0-9]+]]:_(s16), [[UV14:%[0-9]+]]:_(s16), [[UV15:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[SHUF]](<8 x s16>)
197*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s16)
198*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT9:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s16)
199*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT10:%[0-9]+]]:_(s32) = G_ANYEXT [[UV10]](s16)
200*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT11:%[0-9]+]]:_(s32) = G_ANYEXT [[UV11]](s16)
201*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT8]](s32)
202*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT9]](s32)
203*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr2 = COPY [[ANYEXT10]](s32)
204*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr3 = COPY [[ANYEXT11]](s32)
205*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3
206*4b0a76a3SPierre van Houtryve  %res = shufflevector <8 x bfloat> %arg0, <8 x bfloat> zeroinitializer, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>
207*4b0a76a3SPierre van Houtryve  ret <8 x bfloat> %res
208*4b0a76a3SPierre van Houtryve}
209*4b0a76a3SPierre van Houtryve
210*4b0a76a3SPierre van Houtryvedefine <16 x bfloat> @v16bf16(<16 x bfloat> %arg0) {
211*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v16bf16
212*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
213*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
214*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
215*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
216*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
217*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
218*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
219*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
220*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
221*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
222*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
223*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
224*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
225*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
226*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
227*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
228*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
229*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY2]](s32)
230*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
231*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
232*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY3]](s32)
233*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s16)
234*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s16)
235*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV8:%[0-9]+]]:_(s16), [[UV9:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY4]](s32)
236*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s16)
237*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT9:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s16)
238*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV10:%[0-9]+]]:_(s16), [[UV11:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY5]](s32)
239*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT10:%[0-9]+]]:_(s32) = G_ANYEXT [[UV10]](s16)
240*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT11:%[0-9]+]]:_(s32) = G_ANYEXT [[UV11]](s16)
241*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV12:%[0-9]+]]:_(s16), [[UV13:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY6]](s32)
242*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT12:%[0-9]+]]:_(s32) = G_ANYEXT [[UV12]](s16)
243*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT13:%[0-9]+]]:_(s32) = G_ANYEXT [[UV13]](s16)
244*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV14:%[0-9]+]]:_(s16), [[UV15:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY7]](s32)
245*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT14:%[0-9]+]]:_(s32) = G_ANYEXT [[UV14]](s16)
246*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT15:%[0-9]+]]:_(s32) = G_ANYEXT [[UV15]](s16)
247*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32), [[ANYEXT4]](s32), [[ANYEXT5]](s32), [[ANYEXT6]](s32), [[ANYEXT7]](s32), [[ANYEXT8]](s32), [[ANYEXT9]](s32), [[ANYEXT10]](s32), [[ANYEXT11]](s32), [[ANYEXT12]](s32), [[ANYEXT13]](s32), [[ANYEXT14]](s32), [[ANYEXT15]](s32)
248*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<16 x s16>) = G_TRUNC [[BUILD_VECTOR]](<16 x s32>)
249*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV16:%[0-9]+]]:_(s16), [[UV17:%[0-9]+]]:_(s16), [[UV18:%[0-9]+]]:_(s16), [[UV19:%[0-9]+]]:_(s16), [[UV20:%[0-9]+]]:_(s16), [[UV21:%[0-9]+]]:_(s16), [[UV22:%[0-9]+]]:_(s16), [[UV23:%[0-9]+]]:_(s16), [[UV24:%[0-9]+]]:_(s16), [[UV25:%[0-9]+]]:_(s16), [[UV26:%[0-9]+]]:_(s16), [[UV27:%[0-9]+]]:_(s16), [[UV28:%[0-9]+]]:_(s16), [[UV29:%[0-9]+]]:_(s16), [[UV30:%[0-9]+]]:_(s16), [[UV31:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC]](<16 x s16>)
250*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT16:%[0-9]+]]:_(s32) = G_ANYEXT [[UV16]](s16)
251*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT17:%[0-9]+]]:_(s32) = G_ANYEXT [[UV17]](s16)
252*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT18:%[0-9]+]]:_(s32) = G_ANYEXT [[UV18]](s16)
253*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT19:%[0-9]+]]:_(s32) = G_ANYEXT [[UV19]](s16)
254*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT20:%[0-9]+]]:_(s32) = G_ANYEXT [[UV20]](s16)
255*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT21:%[0-9]+]]:_(s32) = G_ANYEXT [[UV21]](s16)
256*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT22:%[0-9]+]]:_(s32) = G_ANYEXT [[UV22]](s16)
257*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT23:%[0-9]+]]:_(s32) = G_ANYEXT [[UV23]](s16)
258*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT16]](s32)
259*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT17]](s32)
260*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr2 = COPY [[ANYEXT18]](s32)
261*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr3 = COPY [[ANYEXT19]](s32)
262*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr4 = COPY [[ANYEXT20]](s32)
263*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr5 = COPY [[ANYEXT21]](s32)
264*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr6 = COPY [[ANYEXT22]](s32)
265*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr7 = COPY [[ANYEXT23]](s32)
266*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr7
267*4b0a76a3SPierre van Houtryve  ret <16 x bfloat> %arg0
268*4b0a76a3SPierre van Houtryve}
269*4b0a76a3SPierre van Houtryve
270*4b0a76a3SPierre van Houtryvedefine <32 x bfloat> @v32bf16(<32 x bfloat> %arg0) {
271*4b0a76a3SPierre van Houtryve  ; GFX9-LABEL: name: v32bf16
272*4b0a76a3SPierre van Houtryve  ; GFX9: bb.1 (%ir-block.0):
273*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15
274*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT: {{  $}}
275*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
276*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
277*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
278*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
279*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
280*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
281*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
282*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
283*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
284*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
285*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
286*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
287*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
288*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
289*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
290*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
291*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](s32)
292*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
293*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
294*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY1]](s32)
295*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
296*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
297*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY2]](s32)
298*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
299*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
300*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY3]](s32)
301*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s16)
302*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s16)
303*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV8:%[0-9]+]]:_(s16), [[UV9:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY4]](s32)
304*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s16)
305*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT9:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s16)
306*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV10:%[0-9]+]]:_(s16), [[UV11:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY5]](s32)
307*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT10:%[0-9]+]]:_(s32) = G_ANYEXT [[UV10]](s16)
308*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT11:%[0-9]+]]:_(s32) = G_ANYEXT [[UV11]](s16)
309*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV12:%[0-9]+]]:_(s16), [[UV13:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY6]](s32)
310*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT12:%[0-9]+]]:_(s32) = G_ANYEXT [[UV12]](s16)
311*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT13:%[0-9]+]]:_(s32) = G_ANYEXT [[UV13]](s16)
312*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV14:%[0-9]+]]:_(s16), [[UV15:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY7]](s32)
313*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT14:%[0-9]+]]:_(s32) = G_ANYEXT [[UV14]](s16)
314*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT15:%[0-9]+]]:_(s32) = G_ANYEXT [[UV15]](s16)
315*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV16:%[0-9]+]]:_(s16), [[UV17:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY8]](s32)
316*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT16:%[0-9]+]]:_(s32) = G_ANYEXT [[UV16]](s16)
317*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT17:%[0-9]+]]:_(s32) = G_ANYEXT [[UV17]](s16)
318*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV18:%[0-9]+]]:_(s16), [[UV19:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY9]](s32)
319*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT18:%[0-9]+]]:_(s32) = G_ANYEXT [[UV18]](s16)
320*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT19:%[0-9]+]]:_(s32) = G_ANYEXT [[UV19]](s16)
321*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV20:%[0-9]+]]:_(s16), [[UV21:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY10]](s32)
322*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT20:%[0-9]+]]:_(s32) = G_ANYEXT [[UV20]](s16)
323*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT21:%[0-9]+]]:_(s32) = G_ANYEXT [[UV21]](s16)
324*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV22:%[0-9]+]]:_(s16), [[UV23:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY11]](s32)
325*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT22:%[0-9]+]]:_(s32) = G_ANYEXT [[UV22]](s16)
326*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT23:%[0-9]+]]:_(s32) = G_ANYEXT [[UV23]](s16)
327*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV24:%[0-9]+]]:_(s16), [[UV25:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY12]](s32)
328*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT24:%[0-9]+]]:_(s32) = G_ANYEXT [[UV24]](s16)
329*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT25:%[0-9]+]]:_(s32) = G_ANYEXT [[UV25]](s16)
330*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV26:%[0-9]+]]:_(s16), [[UV27:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY13]](s32)
331*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT26:%[0-9]+]]:_(s32) = G_ANYEXT [[UV26]](s16)
332*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT27:%[0-9]+]]:_(s32) = G_ANYEXT [[UV27]](s16)
333*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV28:%[0-9]+]]:_(s16), [[UV29:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY14]](s32)
334*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT28:%[0-9]+]]:_(s32) = G_ANYEXT [[UV28]](s16)
335*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT29:%[0-9]+]]:_(s32) = G_ANYEXT [[UV29]](s16)
336*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV30:%[0-9]+]]:_(s16), [[UV31:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY15]](s32)
337*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT30:%[0-9]+]]:_(s32) = G_ANYEXT [[UV30]](s16)
338*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT31:%[0-9]+]]:_(s32) = G_ANYEXT [[UV31]](s16)
339*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32), [[ANYEXT3]](s32), [[ANYEXT4]](s32), [[ANYEXT5]](s32), [[ANYEXT6]](s32), [[ANYEXT7]](s32), [[ANYEXT8]](s32), [[ANYEXT9]](s32), [[ANYEXT10]](s32), [[ANYEXT11]](s32), [[ANYEXT12]](s32), [[ANYEXT13]](s32), [[ANYEXT14]](s32), [[ANYEXT15]](s32), [[ANYEXT16]](s32), [[ANYEXT17]](s32), [[ANYEXT18]](s32), [[ANYEXT19]](s32), [[ANYEXT20]](s32), [[ANYEXT21]](s32), [[ANYEXT22]](s32), [[ANYEXT23]](s32), [[ANYEXT24]](s32), [[ANYEXT25]](s32), [[ANYEXT26]](s32), [[ANYEXT27]](s32), [[ANYEXT28]](s32), [[ANYEXT29]](s32), [[ANYEXT30]](s32), [[ANYEXT31]](s32)
340*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[TRUNC:%[0-9]+]]:_(<32 x s16>) = G_TRUNC [[BUILD_VECTOR]](<32 x s32>)
341*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[UV32:%[0-9]+]]:_(s16), [[UV33:%[0-9]+]]:_(s16), [[UV34:%[0-9]+]]:_(s16), [[UV35:%[0-9]+]]:_(s16), [[UV36:%[0-9]+]]:_(s16), [[UV37:%[0-9]+]]:_(s16), [[UV38:%[0-9]+]]:_(s16), [[UV39:%[0-9]+]]:_(s16), [[UV40:%[0-9]+]]:_(s16), [[UV41:%[0-9]+]]:_(s16), [[UV42:%[0-9]+]]:_(s16), [[UV43:%[0-9]+]]:_(s16), [[UV44:%[0-9]+]]:_(s16), [[UV45:%[0-9]+]]:_(s16), [[UV46:%[0-9]+]]:_(s16), [[UV47:%[0-9]+]]:_(s16), [[UV48:%[0-9]+]]:_(s16), [[UV49:%[0-9]+]]:_(s16), [[UV50:%[0-9]+]]:_(s16), [[UV51:%[0-9]+]]:_(s16), [[UV52:%[0-9]+]]:_(s16), [[UV53:%[0-9]+]]:_(s16), [[UV54:%[0-9]+]]:_(s16), [[UV55:%[0-9]+]]:_(s16), [[UV56:%[0-9]+]]:_(s16), [[UV57:%[0-9]+]]:_(s16), [[UV58:%[0-9]+]]:_(s16), [[UV59:%[0-9]+]]:_(s16), [[UV60:%[0-9]+]]:_(s16), [[UV61:%[0-9]+]]:_(s16), [[UV62:%[0-9]+]]:_(s16), [[UV63:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC]](<32 x s16>)
342*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT32:%[0-9]+]]:_(s32) = G_ANYEXT [[UV32]](s16)
343*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT33:%[0-9]+]]:_(s32) = G_ANYEXT [[UV33]](s16)
344*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT34:%[0-9]+]]:_(s32) = G_ANYEXT [[UV34]](s16)
345*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT35:%[0-9]+]]:_(s32) = G_ANYEXT [[UV35]](s16)
346*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT36:%[0-9]+]]:_(s32) = G_ANYEXT [[UV36]](s16)
347*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT37:%[0-9]+]]:_(s32) = G_ANYEXT [[UV37]](s16)
348*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT38:%[0-9]+]]:_(s32) = G_ANYEXT [[UV38]](s16)
349*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT39:%[0-9]+]]:_(s32) = G_ANYEXT [[UV39]](s16)
350*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT40:%[0-9]+]]:_(s32) = G_ANYEXT [[UV40]](s16)
351*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT41:%[0-9]+]]:_(s32) = G_ANYEXT [[UV41]](s16)
352*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT42:%[0-9]+]]:_(s32) = G_ANYEXT [[UV42]](s16)
353*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT43:%[0-9]+]]:_(s32) = G_ANYEXT [[UV43]](s16)
354*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT44:%[0-9]+]]:_(s32) = G_ANYEXT [[UV44]](s16)
355*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT45:%[0-9]+]]:_(s32) = G_ANYEXT [[UV45]](s16)
356*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT46:%[0-9]+]]:_(s32) = G_ANYEXT [[UV46]](s16)
357*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   [[ANYEXT47:%[0-9]+]]:_(s32) = G_ANYEXT [[UV47]](s16)
358*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr0 = COPY [[ANYEXT32]](s32)
359*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr1 = COPY [[ANYEXT33]](s32)
360*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr2 = COPY [[ANYEXT34]](s32)
361*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr3 = COPY [[ANYEXT35]](s32)
362*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr4 = COPY [[ANYEXT36]](s32)
363*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr5 = COPY [[ANYEXT37]](s32)
364*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr6 = COPY [[ANYEXT38]](s32)
365*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr7 = COPY [[ANYEXT39]](s32)
366*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr8 = COPY [[ANYEXT40]](s32)
367*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr9 = COPY [[ANYEXT41]](s32)
368*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr10 = COPY [[ANYEXT42]](s32)
369*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr11 = COPY [[ANYEXT43]](s32)
370*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr12 = COPY [[ANYEXT44]](s32)
371*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr13 = COPY [[ANYEXT45]](s32)
372*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr14 = COPY [[ANYEXT46]](s32)
373*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   $vgpr15 = COPY [[ANYEXT47]](s32)
374*4b0a76a3SPierre van Houtryve  ; GFX9-NEXT:   SI_RETURN implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr7, implicit $vgpr8, implicit $vgpr9, implicit $vgpr10, implicit $vgpr11, implicit $vgpr12, implicit $vgpr13, implicit $vgpr14, implicit $vgpr15
375*4b0a76a3SPierre van Houtryve  ret <32 x bfloat> %arg0
376*4b0a76a3SPierre van Houtryve}
377