1; RUN: llc -march=amdgcn < %s | FileCheck -check-prefix=SI --check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -check-prefix=SI --check-prefix=FUNC %s
3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG --check-prefix=FUNC %s
4
5declare float @llvm.trunc.f32(float) nounwind readnone
6declare <2 x float> @llvm.trunc.v2f32(<2 x float>) nounwind readnone
7declare <3 x float> @llvm.trunc.v3f32(<3 x float>) nounwind readnone
8declare <4 x float> @llvm.trunc.v4f32(<4 x float>) nounwind readnone
9declare <8 x float> @llvm.trunc.v8f32(<8 x float>) nounwind readnone
10declare <16 x float> @llvm.trunc.v16f32(<16 x float>) nounwind readnone
11
12; FUNC-LABEL: {{^}}ftrunc_f32:
13; EG: TRUNC
14; SI: v_trunc_f32_e32
15define amdgpu_kernel void @ftrunc_f32(float addrspace(1)* %out, float %x) {
16  %y = call float @llvm.trunc.f32(float %x) nounwind readnone
17  store float %y, float addrspace(1)* %out
18  ret void
19}
20
21; FUNC-LABEL: {{^}}ftrunc_v2f32:
22; EG: TRUNC
23; EG: TRUNC
24; SI: v_trunc_f32_e32
25; SI: v_trunc_f32_e32
26define amdgpu_kernel void @ftrunc_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %x) {
27  %y = call <2 x float> @llvm.trunc.v2f32(<2 x float> %x) nounwind readnone
28  store <2 x float> %y, <2 x float> addrspace(1)* %out
29  ret void
30}
31
32; FIXME-FUNC-LABEL: {{^}}ftrunc_v3f32:
33; FIXME-EG: TRUNC
34; FIXME-EG: TRUNC
35; FIXME-EG: TRUNC
36; FIXME-SI: v_trunc_f32_e32
37; FIXME-SI: v_trunc_f32_e32
38; FIXME-SI: v_trunc_f32_e32
39; define amdgpu_kernel void @ftrunc_v3f32(<3 x float> addrspace(1)* %out, <3 x float> %x) {
40;   %y = call <3 x float> @llvm.trunc.v3f32(<3 x float> %x) nounwind readnone
41;   store <3 x float> %y, <3 x float> addrspace(1)* %out
42;   ret void
43; }
44
45; FUNC-LABEL: {{^}}ftrunc_v4f32:
46; EG: TRUNC
47; EG: TRUNC
48; EG: TRUNC
49; EG: TRUNC
50; SI: v_trunc_f32_e32
51; SI: v_trunc_f32_e32
52; SI: v_trunc_f32_e32
53; SI: v_trunc_f32_e32
54define amdgpu_kernel void @ftrunc_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %x) {
55  %y = call <4 x float> @llvm.trunc.v4f32(<4 x float> %x) nounwind readnone
56  store <4 x float> %y, <4 x float> addrspace(1)* %out
57  ret void
58}
59
60; FUNC-LABEL: {{^}}ftrunc_v8f32:
61; EG: TRUNC
62; EG: TRUNC
63; EG: TRUNC
64; EG: TRUNC
65; EG: TRUNC
66; EG: TRUNC
67; EG: TRUNC
68; EG: TRUNC
69; SI: v_trunc_f32_e32
70; SI: v_trunc_f32_e32
71; SI: v_trunc_f32_e32
72; SI: v_trunc_f32_e32
73; SI: v_trunc_f32_e32
74; SI: v_trunc_f32_e32
75; SI: v_trunc_f32_e32
76; SI: v_trunc_f32_e32
77define amdgpu_kernel void @ftrunc_v8f32(<8 x float> addrspace(1)* %out, <8 x float> %x) {
78  %y = call <8 x float> @llvm.trunc.v8f32(<8 x float> %x) nounwind readnone
79  store <8 x float> %y, <8 x float> addrspace(1)* %out
80  ret void
81}
82
83; FUNC-LABEL: {{^}}ftrunc_v16f32:
84; EG: TRUNC
85; EG: TRUNC
86; EG: TRUNC
87; EG: TRUNC
88; EG: TRUNC
89; EG: TRUNC
90; EG: TRUNC
91; EG: TRUNC
92; EG: TRUNC
93; EG: TRUNC
94; EG: TRUNC
95; EG: TRUNC
96; EG: TRUNC
97; EG: TRUNC
98; EG: TRUNC
99; EG: TRUNC
100; SI: v_trunc_f32_e32
101; SI: v_trunc_f32_e32
102; SI: v_trunc_f32_e32
103; SI: v_trunc_f32_e32
104; SI: v_trunc_f32_e32
105; SI: v_trunc_f32_e32
106; SI: v_trunc_f32_e32
107; SI: v_trunc_f32_e32
108; SI: v_trunc_f32_e32
109; SI: v_trunc_f32_e32
110; SI: v_trunc_f32_e32
111; SI: v_trunc_f32_e32
112; SI: v_trunc_f32_e32
113; SI: v_trunc_f32_e32
114; SI: v_trunc_f32_e32
115; SI: v_trunc_f32_e32
116define amdgpu_kernel void @ftrunc_v16f32(<16 x float> addrspace(1)* %out, <16 x float> %x) {
117  %y = call <16 x float> @llvm.trunc.v16f32(<16 x float> %x) nounwind readnone
118  store <16 x float> %y, <16 x float> addrspace(1)* %out
119  ret void
120}
121