blob: 8f5d42d42c6b5f65754bc19591bcf643c3e63f64 [file] [log] [blame]
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +00001; 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
Tom Stellard5a6b0d82013-04-19 02:10:53 +00003
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +00004; 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
Tom Stellard0344cdf2013-08-01 15:23:42 +000011define 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
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000017; 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
Tom Stellard5a6b0d82013-04-19 02:10:53 +000028define 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}
Tom Stellardc947d8c2013-10-30 17:22:05 +000034
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000035; 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
Tom Stellardc947d8c2013-10-30 17:22:05 +000043define 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}
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000049
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}