blob: defb3c099e2b7f1e2f320f3a5e5344c6907e042a [file] [log] [blame]
Jan Veselye5ca27d2014-08-12 17:31:20 +00001; RUN: llc -march=r600 -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
3
Tom Stellard79243d92014-10-01 17:15:17 +00004; FUNC-LABEL: {{^}}udiv24_i8:
Tom Stellard326d6ec2014-11-05 14:50:53 +00005; SI: v_cvt_f32_ubyte
6; SI: v_cvt_f32_ubyte
7; SI: v_rcp_f32
8; SI: v_cvt_u32_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +00009
10; EG: UINT_TO_FLT
11; EG-DAG: UINT_TO_FLT
12; EG-DAG: RECIP_IEEE
13; EG: FLT_TO_UINT
14define void @udiv24_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %in) {
15 %den_ptr = getelementptr i8 addrspace(1)* %in, i8 1
16 %num = load i8 addrspace(1) * %in
17 %den = load i8 addrspace(1) * %den_ptr
18 %result = udiv i8 %num, %den
19 store i8 %result, i8 addrspace(1)* %out
20 ret void
21}
22
Tom Stellard79243d92014-10-01 17:15:17 +000023; FUNC-LABEL: {{^}}udiv24_i16:
Tom Stellard326d6ec2014-11-05 14:50:53 +000024; SI: v_cvt_f32_u32
25; SI: v_cvt_f32_u32
26; SI: v_rcp_f32
27; SI: v_cvt_u32_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +000028
29; EG: UINT_TO_FLT
30; EG-DAG: UINT_TO_FLT
31; EG-DAG: RECIP_IEEE
32; EG: FLT_TO_UINT
33define void @udiv24_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %in) {
34 %den_ptr = getelementptr i16 addrspace(1)* %in, i16 1
35 %num = load i16 addrspace(1) * %in, align 2
36 %den = load i16 addrspace(1) * %den_ptr, align 2
37 %result = udiv i16 %num, %den
38 store i16 %result, i16 addrspace(1)* %out, align 2
39 ret void
40}
41
Tom Stellard79243d92014-10-01 17:15:17 +000042; FUNC-LABEL: {{^}}udiv24_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000043; SI: v_cvt_f32_u32
44; SI-DAG: v_cvt_f32_u32
45; SI-DAG: v_rcp_f32
46; SI: v_cvt_u32_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +000047
48; EG: UINT_TO_FLT
49; EG-DAG: UINT_TO_FLT
50; EG-DAG: RECIP_IEEE
51; EG: FLT_TO_UINT
52define void @udiv24_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
53 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
54 %num = load i32 addrspace(1) * %in, align 4
55 %den = load i32 addrspace(1) * %den_ptr, align 4
56 %num.i24.0 = shl i32 %num, 8
57 %den.i24.0 = shl i32 %den, 8
58 %num.i24 = lshr i32 %num.i24.0, 8
59 %den.i24 = lshr i32 %den.i24.0, 8
60 %result = udiv i32 %num.i24, %den.i24
61 store i32 %result, i32 addrspace(1)* %out, align 4
62 ret void
63}
64
Tom Stellard79243d92014-10-01 17:15:17 +000065; FUNC-LABEL: {{^}}udiv25_i32:
Jan Veselye5ca27d2014-08-12 17:31:20 +000066; RCP_IFLAG is for URECIP in the full 32b alg
Tom Stellard326d6ec2014-11-05 14:50:53 +000067; SI: v_rcp_iflag
68; SI-NOT: v_rcp_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +000069
70; EG-NOT: UINT_TO_FLT
71; EG-NOT: RECIP_IEEE
72define void @udiv25_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
73 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
74 %num = load i32 addrspace(1) * %in, align 4
75 %den = load i32 addrspace(1) * %den_ptr, align 4
76 %num.i24.0 = shl i32 %num, 7
77 %den.i24.0 = shl i32 %den, 7
78 %num.i24 = lshr i32 %num.i24.0, 7
79 %den.i24 = lshr i32 %den.i24.0, 7
80 %result = udiv i32 %num.i24, %den.i24
81 store i32 %result, i32 addrspace(1)* %out, align 4
82 ret void
83}
84
Tom Stellard79243d92014-10-01 17:15:17 +000085; FUNC-LABEL: {{^}}test_no_udiv24_i32_1:
Jan Veselye5ca27d2014-08-12 17:31:20 +000086; RCP_IFLAG is for URECIP in the full 32b alg
Tom Stellard326d6ec2014-11-05 14:50:53 +000087; SI: v_rcp_iflag
88; SI-NOT: v_rcp_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +000089
90; EG-NOT: UINT_TO_FLT
91; EG-NOT: RECIP_IEEE
92define void @test_no_udiv24_i32_1(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
93 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
94 %num = load i32 addrspace(1) * %in, align 4
95 %den = load i32 addrspace(1) * %den_ptr, align 4
96 %num.i24.0 = shl i32 %num, 8
97 %den.i24.0 = shl i32 %den, 7
98 %num.i24 = lshr i32 %num.i24.0, 8
99 %den.i24 = lshr i32 %den.i24.0, 7
100 %result = udiv i32 %num.i24, %den.i24
101 store i32 %result, i32 addrspace(1)* %out, align 4
102 ret void
103}
104
Tom Stellard79243d92014-10-01 17:15:17 +0000105; FUNC-LABEL: {{^}}test_no_udiv24_i32_2:
Jan Veselye5ca27d2014-08-12 17:31:20 +0000106; RCP_IFLAG is for URECIP in the full 32b alg
Tom Stellard326d6ec2014-11-05 14:50:53 +0000107; SI: v_rcp_iflag
108; SI-NOT: v_rcp_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +0000109
110; EG-NOT: UINT_TO_FLT
111; EG-NOT: RECIP_IEEE
112define void @test_no_udiv24_i32_2(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
113 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
114 %num = load i32 addrspace(1) * %in, align 4
115 %den = load i32 addrspace(1) * %den_ptr, align 4
116 %num.i24.0 = shl i32 %num, 7
117 %den.i24.0 = shl i32 %den, 8
118 %num.i24 = lshr i32 %num.i24.0, 7
119 %den.i24 = lshr i32 %den.i24.0, 8
120 %result = udiv i32 %num.i24, %den.i24
121 store i32 %result, i32 addrspace(1)* %out, align 4
122 ret void
123}
124
Tom Stellard79243d92014-10-01 17:15:17 +0000125; FUNC-LABEL: {{^}}urem24_i8:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000126; SI: v_cvt_f32_ubyte
127; SI: v_cvt_f32_ubyte
128; SI: v_rcp_f32
129; SI: v_cvt_u32_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +0000130
131; EG: UINT_TO_FLT
132; EG-DAG: UINT_TO_FLT
133; EG-DAG: RECIP_IEEE
134; EG: FLT_TO_UINT
135define void @urem24_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %in) {
136 %den_ptr = getelementptr i8 addrspace(1)* %in, i8 1
137 %num = load i8 addrspace(1) * %in
138 %den = load i8 addrspace(1) * %den_ptr
139 %result = urem i8 %num, %den
140 store i8 %result, i8 addrspace(1)* %out
141 ret void
142}
143
Tom Stellard79243d92014-10-01 17:15:17 +0000144; FUNC-LABEL: {{^}}urem24_i16:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000145; SI: v_cvt_f32_u32
146; SI: v_cvt_f32_u32
147; SI: v_rcp_f32
148; SI: v_cvt_u32_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +0000149
150; EG: UINT_TO_FLT
151; EG-DAG: UINT_TO_FLT
152; EG-DAG: RECIP_IEEE
153; EG: FLT_TO_UINT
154define void @urem24_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %in) {
155 %den_ptr = getelementptr i16 addrspace(1)* %in, i16 1
156 %num = load i16 addrspace(1) * %in, align 2
157 %den = load i16 addrspace(1) * %den_ptr, align 2
158 %result = urem i16 %num, %den
159 store i16 %result, i16 addrspace(1)* %out, align 2
160 ret void
161}
162
Tom Stellard79243d92014-10-01 17:15:17 +0000163; FUNC-LABEL: {{^}}urem24_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000164; SI: v_cvt_f32_u32
165; SI: v_cvt_f32_u32
166; SI: v_rcp_f32
167; SI: v_cvt_u32_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +0000168
169; EG: UINT_TO_FLT
170; EG-DAG: UINT_TO_FLT
171; EG-DAG: RECIP_IEEE
172; EG: FLT_TO_UINT
173define void @urem24_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
174 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
175 %num = load i32 addrspace(1) * %in, align 4
176 %den = load i32 addrspace(1) * %den_ptr, align 4
177 %num.i24.0 = shl i32 %num, 8
178 %den.i24.0 = shl i32 %den, 8
179 %num.i24 = lshr i32 %num.i24.0, 8
180 %den.i24 = lshr i32 %den.i24.0, 8
181 %result = urem i32 %num.i24, %den.i24
182 store i32 %result, i32 addrspace(1)* %out, align 4
183 ret void
184}
185
Tom Stellard79243d92014-10-01 17:15:17 +0000186; FUNC-LABEL: {{^}}urem25_i32:
Jan Veselye5ca27d2014-08-12 17:31:20 +0000187; RCP_IFLAG is for URECIP in the full 32b alg
Tom Stellard326d6ec2014-11-05 14:50:53 +0000188; SI: v_rcp_iflag
189; SI-NOT: v_rcp_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +0000190
191; EG-NOT: UINT_TO_FLT
192; EG-NOT: RECIP_IEEE
193define void @urem25_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
194 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
195 %num = load i32 addrspace(1) * %in, align 4
196 %den = load i32 addrspace(1) * %den_ptr, align 4
197 %num.i24.0 = shl i32 %num, 7
198 %den.i24.0 = shl i32 %den, 7
199 %num.i24 = lshr i32 %num.i24.0, 7
200 %den.i24 = lshr i32 %den.i24.0, 7
201 %result = urem i32 %num.i24, %den.i24
202 store i32 %result, i32 addrspace(1)* %out, align 4
203 ret void
204}
205
Tom Stellard79243d92014-10-01 17:15:17 +0000206; FUNC-LABEL: {{^}}test_no_urem24_i32_1:
Jan Veselye5ca27d2014-08-12 17:31:20 +0000207; RCP_IFLAG is for URECIP in the full 32b alg
Tom Stellard326d6ec2014-11-05 14:50:53 +0000208; SI: v_rcp_iflag
209; SI-NOT: v_rcp_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +0000210
211; EG-NOT: UINT_TO_FLT
212; EG-NOT: RECIP_IEEE
213define void @test_no_urem24_i32_1(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
214 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
215 %num = load i32 addrspace(1) * %in, align 4
216 %den = load i32 addrspace(1) * %den_ptr, align 4
217 %num.i24.0 = shl i32 %num, 8
218 %den.i24.0 = shl i32 %den, 7
219 %num.i24 = lshr i32 %num.i24.0, 8
220 %den.i24 = lshr i32 %den.i24.0, 7
221 %result = urem i32 %num.i24, %den.i24
222 store i32 %result, i32 addrspace(1)* %out, align 4
223 ret void
224}
225
Tom Stellard79243d92014-10-01 17:15:17 +0000226; FUNC-LABEL: {{^}}test_no_urem24_i32_2:
Jan Veselye5ca27d2014-08-12 17:31:20 +0000227; RCP_IFLAG is for URECIP in the full 32b alg
Tom Stellard326d6ec2014-11-05 14:50:53 +0000228; SI: v_rcp_iflag
229; SI-NOT: v_rcp_f32
Jan Veselye5ca27d2014-08-12 17:31:20 +0000230
231; EG-NOT: UINT_TO_FLT
232; EG-NOT: RECIP_IEEE
233define void @test_no_urem24_i32_2(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
234 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
235 %num = load i32 addrspace(1) * %in, align 4
236 %den = load i32 addrspace(1) * %den_ptr, align 4
237 %num.i24.0 = shl i32 %num, 7
238 %den.i24.0 = shl i32 %den, 8
239 %num.i24 = lshr i32 %num.i24.0, 7
240 %den.i24 = lshr i32 %den.i24.0, 8
241 %result = urem i32 %num.i24, %den.i24
242 store i32 %result, i32 addrspace(1)* %out, align 4
243 ret void
244}