blob: d76e8a341c6f9c0f6f0fe5ce025bbf3e52e217bf [file] [log] [blame]
Jan Vesely2cb62ce2014-07-10 22:40:21 +00001; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck %s --check-prefix=EG --check-prefix=FUNC
Tom Stellard49f8bfd2015-01-06 18:00:21 +00002; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck %s --check-prefix=SI --check-prefix=FUNC
Tom Stellard5a6b0d82013-04-19 02:10:53 +00003
Matt Arsenault268757b2015-01-15 23:17:03 +00004declare float @llvm.fabs.f32(float) #0
5
Tom Stellard79243d92014-10-01 17:15:17 +00006; FUNC-LABEL: {{^}}fp_to_sint_i32:
Matt Arsenault42d15652014-09-25 23:16:18 +00007; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
Tom Stellard326d6ec2014-11-05 14:50:53 +00008; SI: v_cvt_i32_f32_e32
9; SI: s_endpgm
Matt Arsenault268757b2015-01-15 23:17:03 +000010define void @fp_to_sint_i32(i32 addrspace(1)* %out, float %in) {
Matt Arsenault42d15652014-09-25 23:16:18 +000011 %conv = fptosi float %in to i32
12 store i32 %conv, i32 addrspace(1)* %out
13 ret void
14}
15
Matt Arsenault268757b2015-01-15 23:17:03 +000016; FUNC-LABEL: {{^}}fp_to_sint_i32_fabs:
17; SI: v_cvt_i32_f32_e64 v{{[0-9]+}}, |s{{[0-9]+}}|{{$}}
18define void @fp_to_sint_i32_fabs(i32 addrspace(1)* %out, float %in) {
19 %in.fabs = call float @llvm.fabs.f32(float %in) #0
20 %conv = fptosi float %in.fabs to i32
21 store i32 %conv, i32 addrspace(1)* %out
22 ret void
23}
24
Tom Stellard79243d92014-10-01 17:15:17 +000025; FUNC-LABEL: {{^}}fp_to_sint_v2i32:
Jan Vesely2cb62ce2014-07-10 22:40:21 +000026; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
27; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
Tom Stellard326d6ec2014-11-05 14:50:53 +000028; SI: v_cvt_i32_f32_e32
29; SI: v_cvt_i32_f32_e32
Tom Stellard0344cdf2013-08-01 15:23:42 +000030define void @fp_to_sint_v2i32(<2 x i32> addrspace(1)* %out, <2 x float> %in) {
31 %result = fptosi <2 x float> %in to <2 x i32>
32 store <2 x i32> %result, <2 x i32> addrspace(1)* %out
33 ret void
34}
35
Tom Stellard79243d92014-10-01 17:15:17 +000036; FUNC-LABEL: {{^}}fp_to_sint_v4i32:
Jan Vesely2cb62ce2014-07-10 22:40:21 +000037; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
38; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW]}}
39; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
40; EG: FLT_TO_INT {{\** *}}T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
Tom Stellard326d6ec2014-11-05 14:50:53 +000041; SI: v_cvt_i32_f32_e32
42; SI: v_cvt_i32_f32_e32
43; SI: v_cvt_i32_f32_e32
44; SI: v_cvt_i32_f32_e32
Tom Stellard5a6b0d82013-04-19 02:10:53 +000045define void @fp_to_sint_v4i32(<4 x i32> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
46 %value = load <4 x float> addrspace(1) * %in
47 %result = fptosi <4 x float> %value to <4 x i32>
48 store <4 x i32> %result, <4 x i32> addrspace(1)* %out
49 ret void
50}
Jan Vesely2cb62ce2014-07-10 22:40:21 +000051
Tom Stellard79243d92014-10-01 17:15:17 +000052; FUNC-LABEL: {{^}}fp_to_sint_i64:
Jan Vesely2cb62ce2014-07-10 22:40:21 +000053
54; EG-DAG: AND_INT
55; EG-DAG: LSHR
56; EG-DAG: SUB_INT
57; EG-DAG: AND_INT
58; EG-DAG: ASHR
59; EG-DAG: AND_INT
60; EG-DAG: OR_INT
61; EG-DAG: SUB_INT
62; EG-DAG: LSHL
63; EG-DAG: LSHL
64; EG-DAG: SUB_INT
65; EG-DAG: LSHR
66; EG-DAG: LSHR
67; EG-DAG: SETGT_UINT
68; EG-DAG: SETGT_INT
69; EG-DAG: XOR_INT
70; EG-DAG: XOR_INT
71; EG: SUB_INT
72; EG-DAG: SUB_INT
Chandler Carruth411fb402014-07-26 05:49:40 +000073; EG-DAG: CNDE_INT
74; EG-DAG: CNDE_INT
Jan Vesely2cb62ce2014-07-10 22:40:21 +000075
76; Check that the compiler doesn't crash with a "cannot select" error
Tom Stellard326d6ec2014-11-05 14:50:53 +000077; SI: s_endpgm
Jan Vesely2cb62ce2014-07-10 22:40:21 +000078define void @fp_to_sint_i64 (i64 addrspace(1)* %out, float %in) {
79entry:
80 %0 = fptosi float %in to i64
81 store i64 %0, i64 addrspace(1)* %out
82 ret void
83}
84
Tom Stellard79243d92014-10-01 17:15:17 +000085; FUNC: {{^}}fp_to_sint_v2i64:
Jan Vesely2cb62ce2014-07-10 22:40:21 +000086; EG-DAG: AND_INT
87; EG-DAG: LSHR
88; EG-DAG: SUB_INT
89; EG-DAG: AND_INT
90; EG-DAG: ASHR
91; EG-DAG: AND_INT
92; EG-DAG: OR_INT
93; EG-DAG: SUB_INT
94; EG-DAG: LSHL
95; EG-DAG: LSHL
96; EG-DAG: SUB_INT
97; EG-DAG: LSHR
98; EG-DAG: LSHR
99; EG-DAG: SETGT_UINT
100; EG-DAG: SETGT_INT
101; EG-DAG: XOR_INT
102; EG-DAG: XOR_INT
103; EG-DAG: SUB_INT
104; EG-DAG: SUB_INT
Chandler Carruth411fb402014-07-26 05:49:40 +0000105; EG-DAG: CNDE_INT
106; EG-DAG: CNDE_INT
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000107; EG-DAG: AND_INT
108; EG-DAG: LSHR
109; EG-DAG: SUB_INT
110; EG-DAG: AND_INT
111; EG-DAG: ASHR
112; EG-DAG: AND_INT
113; EG-DAG: OR_INT
114; EG-DAG: SUB_INT
115; EG-DAG: LSHL
116; EG-DAG: LSHL
117; EG-DAG: SUB_INT
118; EG-DAG: LSHR
119; EG-DAG: LSHR
120; EG-DAG: SETGT_UINT
121; EG-DAG: SETGT_INT
122; EG-DAG: XOR_INT
123; EG-DAG: XOR_INT
124; EG-DAG: SUB_INT
125; EG-DAG: SUB_INT
Chandler Carruth411fb402014-07-26 05:49:40 +0000126; EG-DAG: CNDE_INT
127; EG-DAG: CNDE_INT
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000128
Tom Stellard326d6ec2014-11-05 14:50:53 +0000129; SI: s_endpgm
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000130define void @fp_to_sint_v2i64(<2 x i64> addrspace(1)* %out, <2 x float> %x) {
131 %conv = fptosi <2 x float> %x to <2 x i64>
132 store <2 x i64> %conv, <2 x i64> addrspace(1)* %out
133 ret void
134}
135
Tom Stellard79243d92014-10-01 17:15:17 +0000136; FUNC: {{^}}fp_to_sint_v4i64:
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000137; EG-DAG: AND_INT
138; EG-DAG: LSHR
139; EG-DAG: SUB_INT
140; EG-DAG: AND_INT
141; EG-DAG: ASHR
142; EG-DAG: AND_INT
143; EG-DAG: OR_INT
144; EG-DAG: SUB_INT
145; EG-DAG: LSHL
146; EG-DAG: LSHL
147; EG-DAG: SUB_INT
148; EG-DAG: LSHR
149; EG-DAG: LSHR
150; EG-DAG: SETGT_UINT
151; EG-DAG: SETGT_INT
152; EG-DAG: XOR_INT
153; EG-DAG: XOR_INT
154; EG-DAG: SUB_INT
155; EG-DAG: SUB_INT
Chandler Carruth411fb402014-07-26 05:49:40 +0000156; EG-DAG: CNDE_INT
157; EG-DAG: CNDE_INT
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000158; EG-DAG: AND_INT
159; EG-DAG: LSHR
160; EG-DAG: SUB_INT
161; EG-DAG: AND_INT
162; EG-DAG: ASHR
163; EG-DAG: AND_INT
164; EG-DAG: OR_INT
165; EG-DAG: SUB_INT
166; EG-DAG: LSHL
167; EG-DAG: LSHL
168; EG-DAG: SUB_INT
169; EG-DAG: LSHR
170; EG-DAG: LSHR
171; EG-DAG: SETGT_UINT
172; EG-DAG: SETGT_INT
173; EG-DAG: XOR_INT
174; EG-DAG: XOR_INT
175; EG-DAG: SUB_INT
176; EG-DAG: SUB_INT
Chandler Carruth411fb402014-07-26 05:49:40 +0000177; EG-DAG: CNDE_INT
178; EG-DAG: CNDE_INT
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000179; EG-DAG: AND_INT
180; EG-DAG: LSHR
181; EG-DAG: SUB_INT
182; EG-DAG: AND_INT
183; EG-DAG: ASHR
184; EG-DAG: AND_INT
185; EG-DAG: OR_INT
186; EG-DAG: SUB_INT
187; EG-DAG: LSHL
188; EG-DAG: LSHL
189; EG-DAG: SUB_INT
190; EG-DAG: LSHR
191; EG-DAG: LSHR
192; EG-DAG: SETGT_UINT
193; EG-DAG: SETGT_INT
194; EG-DAG: XOR_INT
195; EG-DAG: XOR_INT
196; EG-DAG: SUB_INT
197; EG-DAG: SUB_INT
Chandler Carruth411fb402014-07-26 05:49:40 +0000198; EG-DAG: CNDE_INT
199; EG-DAG: CNDE_INT
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000200; EG-DAG: AND_INT
201; EG-DAG: LSHR
202; EG-DAG: SUB_INT
203; EG-DAG: AND_INT
204; EG-DAG: ASHR
205; EG-DAG: AND_INT
206; EG-DAG: OR_INT
207; EG-DAG: SUB_INT
208; EG-DAG: LSHL
209; EG-DAG: LSHL
210; EG-DAG: SUB_INT
211; EG-DAG: LSHR
212; EG-DAG: LSHR
213; EG-DAG: SETGT_UINT
214; EG-DAG: SETGT_INT
215; EG-DAG: XOR_INT
216; EG-DAG: XOR_INT
217; EG-DAG: SUB_INT
218; EG-DAG: SUB_INT
Chandler Carruth411fb402014-07-26 05:49:40 +0000219; EG-DAG: CNDE_INT
220; EG-DAG: CNDE_INT
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000221
Tom Stellard326d6ec2014-11-05 14:50:53 +0000222; SI: s_endpgm
Jan Vesely2cb62ce2014-07-10 22:40:21 +0000223define void @fp_to_sint_v4i64(<4 x i64> addrspace(1)* %out, <4 x float> %x) {
224 %conv = fptosi <4 x float> %x to <4 x i64>
225 store <4 x i64> %conv, <4 x i64> addrspace(1)* %out
226 ret void
227}
Matt Arsenault268757b2015-01-15 23:17:03 +0000228
229attributes #0 = { nounwind readnone }