• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=R600 -check-prefix=FUNC %s
3
4; FUNC-LABEL: @uint_to_fp_v2i32
5; R600-DAG: UINT_TO_FLT * T{{[0-9]+\.[XYZW]}}, KC0[2].W
6; R600-DAG: UINT_TO_FLT * T{{[0-9]+\.[XYZW]}}, KC0[3].X
7
8; SI: V_CVT_F32_U32_e32
9; SI: V_CVT_F32_U32_e32
10; SI: S_ENDPGM
11define void @uint_to_fp_v2i32(<2 x float> addrspace(1)* %out, <2 x i32> %in) {
12  %result = uitofp <2 x i32> %in to <2 x float>
13  store <2 x float> %result, <2 x float> addrspace(1)* %out
14  ret void
15}
16
17; FUNC-LABEL: @uint_to_fp_v4i32
18; R600: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
19; R600: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
20; R600: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
21; R600: UINT_TO_FLT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
22
23; SI: V_CVT_F32_U32_e32
24; SI: V_CVT_F32_U32_e32
25; SI: V_CVT_F32_U32_e32
26; SI: V_CVT_F32_U32_e32
27; SI: S_ENDPGM
28define void @uint_to_fp_v4i32(<4 x float> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
29  %value = load <4 x i32> addrspace(1) * %in
30  %result = uitofp <4 x i32> %value to <4 x float>
31  store <4 x float> %result, <4 x float> addrspace(1)* %out
32  ret void
33}
34
35; FUNC-LABEL: @uint_to_fp_i64_f32
36; R600: UINT_TO_FLT
37; R600: UINT_TO_FLT
38; R600: MULADD_IEEE
39; SI: V_CVT_F32_U32_e32
40; SI: V_CVT_F32_U32_e32
41; SI: V_MAD_F32
42; SI: S_ENDPGM
43define void @uint_to_fp_i64_f32(float addrspace(1)* %out, i64 %in) {
44entry:
45  %0 = uitofp i64 %in to float
46  store float %0, float addrspace(1)* %out
47  ret void
48}
49
50; FUNC-LABEL: @uint_to_fp_i1_f32:
51; SI: V_CMP_EQ_I32_e64 [[CMP:s\[[0-9]+:[0-9]\]]],
52; SI-NEXT: V_CNDMASK_B32_e64 [[RESULT:v[0-9]+]], 0, 1.000000e+00, [[CMP]]
53; SI: BUFFER_STORE_DWORD [[RESULT]],
54; SI: S_ENDPGM
55define void @uint_to_fp_i1_f32(float addrspace(1)* %out, i32 %in) {
56  %cmp = icmp eq i32 %in, 0
57  %fp = uitofp i1 %cmp to float
58  store float %fp, float addrspace(1)* %out, align 4
59  ret void
60}
61
62; FUNC-LABEL: @uint_to_fp_i1_f32_load:
63; SI: V_CNDMASK_B32_e64 [[RESULT:v[0-9]+]], 0, 1.000000e+00
64; SI: BUFFER_STORE_DWORD [[RESULT]],
65; SI: S_ENDPGM
66define void @uint_to_fp_i1_f32_load(float addrspace(1)* %out, i1 %in) {
67  %fp = uitofp i1 %in to float
68  store float %fp, float addrspace(1)* %out, align 4
69  ret void
70}
71