1 ; 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
4 ; FUNC-LABEL: {{^}}udiv24_i8:
14 define 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
23 ; FUNC-LABEL: {{^}}udiv24_i16:
33 define 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
42 ; FUNC-LABEL: {{^}}udiv24_i32:
44 ; SI-DAG: v_cvt_f32_u32
52 define 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
65 ; FUNC-LABEL: {{^}}udiv25_i32:
66 ; RCP_IFLAG is for URECIP in the full 32b alg
72 define 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
85 ; FUNC-LABEL: {{^}}test_no_udiv24_i32_1:
86 ; RCP_IFLAG is for URECIP in the full 32b alg
92 define 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
105 ; FUNC-LABEL: {{^}}test_no_udiv24_i32_2:
106 ; RCP_IFLAG is for URECIP in the full 32b alg
110 ; EG-NOT: UINT_TO_FLT
112 define 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
125 ; FUNC-LABEL: {{^}}urem24_i8:
126 ; SI: v_cvt_f32_ubyte
127 ; SI: v_cvt_f32_ubyte
132 ; EG-DAG: UINT_TO_FLT
135 define 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
144 ; FUNC-LABEL: {{^}}urem24_i16:
151 ; EG-DAG: UINT_TO_FLT
154 define 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
163 ; FUNC-LABEL: {{^}}urem24_i32:
170 ; EG-DAG: UINT_TO_FLT
173 define 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
186 ; FUNC-LABEL: {{^}}urem25_i32:
187 ; RCP_IFLAG is for URECIP in the full 32b alg
191 ; EG-NOT: UINT_TO_FLT
193 define 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
206 ; FUNC-LABEL: {{^}}test_no_urem24_i32_1:
207 ; RCP_IFLAG is for URECIP in the full 32b alg
211 ; EG-NOT: UINT_TO_FLT
213 define 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
226 ; FUNC-LABEL: {{^}}test_no_urem24_i32_2:
227 ; RCP_IFLAG is for URECIP in the full 32b alg
231 ; EG-NOT: UINT_TO_FLT
233 define 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