1 ; RUN: llc -march=amdgcn -mcpu=gfx940 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
3 declare float @llvm.amdgcn.cvt.f32.bf8(i32, i32)
4 declare float @llvm.amdgcn.cvt.f32.fp8(i32, i32)
5 declare <2 x float> @llvm.amdgcn.cvt.pk.f32.bf8(i32, i1)
6 declare <2 x float> @llvm.amdgcn.cvt.pk.f32.fp8(i32, i1)
7 declare i32 @llvm.amdgcn.cvt.pk.bf8.f32(float, float, i32, i1)
8 declare i32 @llvm.amdgcn.cvt.pk.fp8.f32(float, float, i32, i1)
9 declare i32 @llvm.amdgcn.cvt.sr.bf8.f32(float, i32, i32, i32)
10 declare i32 @llvm.amdgcn.cvt.sr.fp8.f32(float, i32, i32, i32)
12 ; GCN-LABEL: {{^}}test_cvt_f32_bf8_byte0:
13 ; GCN: v_cvt_f32_bf8_sdwa v0, v0 src0_sel:BYTE_0{{$}}
14 define float @test_cvt_f32_bf8_byte0(i32 %a) {
15 %ret = tail call float @llvm.amdgcn.cvt.f32.bf8(i32 %a, i32 0)
19 ; GCN-LABEL: {{^}}test_cvt_f32_bf8_byte1:
20 ; GCN: v_cvt_f32_bf8_sdwa v0, v0 src0_sel:BYTE_1
21 define float @test_cvt_f32_bf8_byte1(i32 %a) {
22 %ret = tail call float @llvm.amdgcn.cvt.f32.bf8(i32 %a, i32 1)
26 ; GCN-LABEL: {{^}}test_cvt_f32_bf8_byte2:
27 ; GCN: v_cvt_f32_bf8_sdwa v0, v0 src0_sel:BYTE_2
28 define float @test_cvt_f32_bf8_byte2(i32 %a) {
29 %ret = tail call float @llvm.amdgcn.cvt.f32.bf8(i32 %a, i32 2)
33 ; GCN-LABEL: {{^}}test_cvt_f32_bf8_byte3:
34 ; GCN: v_cvt_f32_bf8_sdwa v0, v0 src0_sel:BYTE_3
35 define float @test_cvt_f32_bf8_byte3(i32 %a) {
36 %ret = tail call float @llvm.amdgcn.cvt.f32.bf8(i32 %a, i32 3)
40 ; GCN-LABEL: {{^}}test_cvt_f32_fp8_byte0:
41 ; GCN: v_cvt_f32_fp8_sdwa v0, v0 src0_sel:BYTE_0{{$}}
42 define float @test_cvt_f32_fp8_byte0(i32 %a) {
43 %ret = tail call float @llvm.amdgcn.cvt.f32.fp8(i32 %a, i32 0)
47 ; GCN-LABEL: {{^}}test_cvt_f32_fp8_byte1:
48 ; GCN: v_cvt_f32_fp8_sdwa v0, v0 src0_sel:BYTE_1
49 define float @test_cvt_f32_fp8_byte1(i32 %a) {
50 %ret = tail call float @llvm.amdgcn.cvt.f32.fp8(i32 %a, i32 1)
54 ; GCN-LABEL: {{^}}test_cvt_f32_fp8_byte2:
55 ; GCN: v_cvt_f32_fp8_sdwa v0, v0 src0_sel:BYTE_2
56 define float @test_cvt_f32_fp8_byte2(i32 %a) {
57 %ret = tail call float @llvm.amdgcn.cvt.f32.fp8(i32 %a, i32 2)
61 ; GCN-LABEL: {{^}}test_cvt_f32_fp8_byte3:
62 ; GCN: v_cvt_f32_fp8_sdwa v0, v0 src0_sel:BYTE_3
63 define float @test_cvt_f32_fp8_byte3(i32 %a) {
64 %ret = tail call float @llvm.amdgcn.cvt.f32.fp8(i32 %a, i32 3)
68 ; GCN-LABEL: {{^}}test_cvt_pk_f32_bf8_word0:
69 ; GCN: v_cvt_pk_f32_bf8_e32 v[0:1], v0{{$}}
70 define <2 x float> @test_cvt_pk_f32_bf8_word0(i32 %a) {
71 %ret = tail call <2 x float> @llvm.amdgcn.cvt.pk.f32.bf8(i32 %a, i1 false)
75 ; GCN-LABEL: {{^}}test_cvt_pk_f32_bf8_word1:
76 ; GCN: v_cvt_pk_f32_bf8_sdwa v[0:1], v0 src0_sel:WORD_1
77 define <2 x float> @test_cvt_pk_f32_bf8_word1(i32 %a) {
78 %ret = tail call <2 x float> @llvm.amdgcn.cvt.pk.f32.bf8(i32 %a, i1 true)
82 ; GCN-LABEL: {{^}}test_cvt_pk_f32_fp8_word0:
83 ; GCN: v_cvt_pk_f32_fp8_e32 v[0:1], v0{{$}}
84 define <2 x float> @test_cvt_pk_f32_fp8_word0(i32 %a) {
85 %ret = tail call <2 x float> @llvm.amdgcn.cvt.pk.f32.fp8(i32 %a, i1 false)
89 ; GCN-LABEL: {{^}}test_cvt_pk_f32_fp8_word1:
90 ; GCN: v_cvt_pk_f32_fp8_sdwa v[0:1], v0 src0_sel:WORD_1
91 define <2 x float> @test_cvt_pk_f32_fp8_word1(i32 %a) {
92 %ret = tail call <2 x float> @llvm.amdgcn.cvt.pk.f32.fp8(i32 %a, i1 true)
96 ; GCN-LABEL: {{^}}test_cvt_pk_bf8_f32_word0:
97 ; GCN: v_cvt_pk_bf8_f32 v2, v0, v1{{$}}
98 ; GCN: v_mov_b32_e32 v0, v2
99 define i32 @test_cvt_pk_bf8_f32_word0(float %x, float %y, i32 %old) {
100 %ret = tail call i32 @llvm.amdgcn.cvt.pk.bf8.f32(float %x, float %y, i32 %old, i1 false)
104 ; GCN-LABEL: {{^}}test_cvt_pk_bf8_f32_word1:
105 ; GCN: v_cvt_pk_bf8_f32 v2, v0, v1 op_sel:[0,0,1]
106 ; GCN: v_mov_b32_e32 v0, v2
107 define i32 @test_cvt_pk_bf8_f32_word1(float %x, float %y, i32 %old) {
108 %ret = tail call i32 @llvm.amdgcn.cvt.pk.bf8.f32(float %x, float %y, i32 %old, i1 true)
112 ; GCN-LABEL: {{^}}test_cvt_pk_fp8_f32_word0:
113 ; GCN: v_cvt_pk_fp8_f32 v2, v0, v1{{$}}
114 ; GCN: v_mov_b32_e32 v0, v2
115 define i32 @test_cvt_pk_fp8_f32_word0(float %x, float %y, i32 %old) {
116 %ret = tail call i32 @llvm.amdgcn.cvt.pk.fp8.f32(float %x, float %y, i32 %old, i1 false)
120 ; GCN-LABEL: {{^}}test_cvt_pk_fp8_f32_word1:
121 ; GCN: v_cvt_pk_fp8_f32 v2, v0, v1 op_sel:[0,0,1]
122 ; GCN: v_mov_b32_e32 v0, v2
123 define i32 @test_cvt_pk_fp8_f32_word1(float %x, float %y, i32 %old) {
124 %ret = tail call i32 @llvm.amdgcn.cvt.pk.fp8.f32(float %x, float %y, i32 %old, i1 true)
128 ; GCN-LABEL: {{^}}test_cvt_sr_bf8_f32_byte0:
129 ; GCN: v_cvt_sr_bf8_f32 v2, v0, v1{{$}}
130 ; GCN: v_mov_b32_e32 v0, v2
131 define i32 @test_cvt_sr_bf8_f32_byte0(float %x, i32 %r, i32 %old) {
132 %ret = tail call i32 @llvm.amdgcn.cvt.sr.bf8.f32(float %x, i32 %r, i32 %old, i32 0)
136 ; GCN-LABEL: {{^}}test_cvt_sr_bf8_f32_byte1:
137 ; GCN: v_cvt_sr_bf8_f32 v2, v0, v1 op_sel:[0,0,1,0]
138 ; GCN: v_mov_b32_e32 v0, v2
139 define i32 @test_cvt_sr_bf8_f32_byte1(float %x, i32 %r, i32 %old) {
140 %ret = tail call i32 @llvm.amdgcn.cvt.sr.bf8.f32(float %x, i32 %r, i32 %old, i32 1)
144 ; GCN-LABEL: {{^}}test_cvt_sr_bf8_f32_byte2:
145 ; GCN: v_cvt_sr_bf8_f32 v2, v0, v1 op_sel:[0,0,0,1]
146 ; GCN: v_mov_b32_e32 v0, v2
147 define i32 @test_cvt_sr_bf8_f32_byte2(float %x, i32 %r, i32 %old) {
148 %ret = tail call i32 @llvm.amdgcn.cvt.sr.bf8.f32(float %x, i32 %r, i32 %old, i32 2)
152 ; GCN-LABEL: {{^}}test_cvt_sr_bf8_f32_byte3:
153 ; GCN: v_cvt_sr_bf8_f32 v2, v0, v1 op_sel:[0,0,1,1]
154 ; GCN: v_mov_b32_e32 v0, v2
155 define i32 @test_cvt_sr_bf8_f32_byte3(float %x, i32 %r, i32 %old) {
156 %ret = tail call i32 @llvm.amdgcn.cvt.sr.bf8.f32(float %x, i32 %r, i32 %old, i32 3)
160 ; GCN-LABEL: {{^}}test_cvt_sr_fp8_f32_byte0:
161 ; GCN: v_cvt_sr_fp8_f32 v2, v0, v1{{$}}
162 ; GCN: v_mov_b32_e32 v0, v2
163 define i32 @test_cvt_sr_fp8_f32_byte0(float %x, i32 %r, i32 %old) {
164 %ret = tail call i32 @llvm.amdgcn.cvt.sr.fp8.f32(float %x, i32 %r, i32 %old, i32 0)
168 ; GCN-LABEL: {{^}}test_cvt_sr_fp8_f32_byte1:
169 ; GCN: v_cvt_sr_fp8_f32 v2, v0, v1 op_sel:[0,0,1,0]
170 ; GCN: v_mov_b32_e32 v0, v2
171 define i32 @test_cvt_sr_fp8_f32_byte1(float %x, i32 %r, i32 %old) {
172 %ret = tail call i32 @llvm.amdgcn.cvt.sr.fp8.f32(float %x, i32 %r, i32 %old, i32 1)
176 ; GCN-LABEL: {{^}}test_cvt_sr_fp8_f32_byte2:
177 ; GCN: v_cvt_sr_fp8_f32 v2, v0, v1 op_sel:[0,0,0,1]
178 ; GCN: v_mov_b32_e32 v0, v2
179 define i32 @test_cvt_sr_fp8_f32_byte2(float %x, i32 %r, i32 %old) {
180 %ret = tail call i32 @llvm.amdgcn.cvt.sr.fp8.f32(float %x, i32 %r, i32 %old, i32 2)
184 ; GCN-LABEL: {{^}}test_cvt_sr_fp8_f32_byte3:
185 ; GCN: v_cvt_sr_fp8_f32 v2, v0, v1 op_sel:[0,0,1,1]
186 ; GCN: v_mov_b32_e32 v0, v2
187 define i32 @test_cvt_sr_fp8_f32_byte3(float %x, i32 %r, i32 %old) {
188 %ret = tail call i32 @llvm.amdgcn.cvt.sr.fp8.f32(float %x, i32 %r, i32 %old, i32 3)