blob: 657d6f8e22d741669499fdfeb6a70e81b6cd170a [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
Tom Stellard79243d92014-10-01 17:15:17 +00004; FUNC-LABEL: {{^}}uint_to_fp_v2i32:
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +00005; 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
Tom Stellard79243d92014-10-01 17:15:17 +000017; FUNC-LABEL: {{^}}uint_to_fp_v4i32:
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000018; 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
Tom Stellard79243d92014-10-01 17:15:17 +000035; FUNC-LABEL: {{^}}uint_to_fp_i64_f32:
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000036; 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
Tom Stellard79243d92014-10-01 17:15:17 +000050; FUNC-LABEL: {{^}}uint_to_fp_i1_f32:
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000051; SI: V_CMP_EQ_I32_e64 [[CMP:s\[[0-9]+:[0-9]\]]],
Matt Arsenault02dc2652014-09-17 17:32:13 +000052; SI-NEXT: V_CNDMASK_B32_e64 [[RESULT:v[0-9]+]], 0, 1.0, [[CMP]]
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000053; 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
Tom Stellard79243d92014-10-01 17:15:17 +000062; FUNC-LABEL: {{^}}uint_to_fp_i1_f32_load:
Matt Arsenault02dc2652014-09-17 17:32:13 +000063; SI: V_CNDMASK_B32_e64 [[RESULT:v[0-9]+]], 0, 1.0
Matt Arsenaultaeca2fa2014-05-31 06:47:42 +000064; 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}