[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.cvt.fp8.ll
blob98b7e8cef0da85074338bbc58a7e97bd0df440d1
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)
16   ret float %ret
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)
23   ret float %ret
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)
30   ret float %ret
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)
37   ret float %ret
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)
44   ret float %ret
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)
51   ret float %ret
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)
58   ret float %ret
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)
65   ret float %ret
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)
72   ret <2 x float> %ret
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)
79   ret <2 x float> %ret
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)
86   ret <2 x float> %ret
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)
93   ret <2 x float> %ret
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)
101   ret i32 %ret
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)
109   ret i32 %ret
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)
117   ret i32 %ret
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)
125   ret i32 %ret
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)
133   ret i32 %ret
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)
141   ret i32 %ret
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)
149   ret i32 %ret
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)
157   ret i32 %ret
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)
165   ret i32 %ret
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)
173   ret i32 %ret
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)
181   ret i32 %ret
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)
189   ret i32 %ret