blob: 228cf762f16ac75d567dd6e774d560d8e2d27761 [file] [log] [blame]
Jan Vesely4a33bc62014-08-12 17:31:17 +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: {{^}}sdiv24_i8:
Tom Stellard326d6ec2014-11-05 14:50:53 +00005; SI: v_cvt_f32_i32
6; SI: v_cvt_f32_i32
7; SI: v_rcp_f32
8; SI: v_cvt_i32_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +00009
10; EG: INT_TO_FLT
11; EG-DAG: INT_TO_FLT
12; EG-DAG: RECIP_IEEE
13; EG: FLT_TO_INT
14define void @sdiv24_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 = sdiv 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: {{^}}sdiv24_i16:
Tom Stellard326d6ec2014-11-05 14:50:53 +000024; SI: v_cvt_f32_i32
25; SI: v_cvt_f32_i32
26; SI: v_rcp_f32
27; SI: v_cvt_i32_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +000028
29; EG: INT_TO_FLT
30; EG-DAG: INT_TO_FLT
31; EG-DAG: RECIP_IEEE
32; EG: FLT_TO_INT
33define void @sdiv24_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 = sdiv 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: {{^}}sdiv24_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000043; SI: v_cvt_f32_i32
44; SI: v_cvt_f32_i32
45; SI: v_rcp_f32
46; SI: v_cvt_i32_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +000047
48; EG: INT_TO_FLT
49; EG-DAG: INT_TO_FLT
50; EG-DAG: RECIP_IEEE
51; EG: FLT_TO_INT
52define void @sdiv24_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 = ashr i32 %num.i24.0, 8
59 %den.i24 = ashr i32 %den.i24.0, 8
60 %result = sdiv 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: {{^}}sdiv25_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000066; SI-NOT: v_cvt_f32_i32
67; SI-NOT: v_rcp_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +000068
69; EG-NOT: INT_TO_FLT
70; EG-NOT: RECIP_IEEE
71define void @sdiv25_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
72 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
73 %num = load i32 addrspace(1) * %in, align 4
74 %den = load i32 addrspace(1) * %den_ptr, align 4
75 %num.i24.0 = shl i32 %num, 7
76 %den.i24.0 = shl i32 %den, 7
77 %num.i24 = ashr i32 %num.i24.0, 7
78 %den.i24 = ashr i32 %den.i24.0, 7
79 %result = sdiv i32 %num.i24, %den.i24
80 store i32 %result, i32 addrspace(1)* %out, align 4
81 ret void
82}
83
Tom Stellard79243d92014-10-01 17:15:17 +000084; FUNC-LABEL: {{^}}test_no_sdiv24_i32_1:
Tom Stellard326d6ec2014-11-05 14:50:53 +000085; SI-NOT: v_cvt_f32_i32
86; SI-NOT: v_rcp_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +000087
88; EG-NOT: INT_TO_FLT
89; EG-NOT: RECIP_IEEE
90define void @test_no_sdiv24_i32_1(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
91 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
92 %num = load i32 addrspace(1) * %in, align 4
93 %den = load i32 addrspace(1) * %den_ptr, align 4
94 %num.i24.0 = shl i32 %num, 8
95 %den.i24.0 = shl i32 %den, 7
96 %num.i24 = ashr i32 %num.i24.0, 8
97 %den.i24 = ashr i32 %den.i24.0, 7
98 %result = sdiv i32 %num.i24, %den.i24
99 store i32 %result, i32 addrspace(1)* %out, align 4
100 ret void
101}
102
Tom Stellard79243d92014-10-01 17:15:17 +0000103; FUNC-LABEL: {{^}}test_no_sdiv24_i32_2:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000104; SI-NOT: v_cvt_f32_i32
105; SI-NOT: v_rcp_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +0000106
107; EG-NOT: INT_TO_FLT
108; EG-NOT: RECIP_IEEE
109define void @test_no_sdiv24_i32_2(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
110 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
111 %num = load i32 addrspace(1) * %in, align 4
112 %den = load i32 addrspace(1) * %den_ptr, align 4
113 %num.i24.0 = shl i32 %num, 7
114 %den.i24.0 = shl i32 %den, 8
115 %num.i24 = ashr i32 %num.i24.0, 7
116 %den.i24 = ashr i32 %den.i24.0, 8
117 %result = sdiv i32 %num.i24, %den.i24
118 store i32 %result, i32 addrspace(1)* %out, align 4
119 ret void
120}
121
Tom Stellard79243d92014-10-01 17:15:17 +0000122; FUNC-LABEL: {{^}}srem24_i8:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000123; SI: v_cvt_f32_i32
124; SI: v_cvt_f32_i32
125; SI: v_rcp_f32
126; SI: v_cvt_i32_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +0000127
128; EG: INT_TO_FLT
129; EG-DAG: INT_TO_FLT
130; EG-DAG: RECIP_IEEE
131; EG: FLT_TO_INT
132define void @srem24_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %in) {
133 %den_ptr = getelementptr i8 addrspace(1)* %in, i8 1
134 %num = load i8 addrspace(1) * %in
135 %den = load i8 addrspace(1) * %den_ptr
136 %result = srem i8 %num, %den
137 store i8 %result, i8 addrspace(1)* %out
138 ret void
139}
140
Tom Stellard79243d92014-10-01 17:15:17 +0000141; FUNC-LABEL: {{^}}srem24_i16:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000142; SI: v_cvt_f32_i32
143; SI: v_cvt_f32_i32
144; SI: v_rcp_f32
145; SI: v_cvt_i32_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +0000146
147; EG: INT_TO_FLT
148; EG-DAG: INT_TO_FLT
149; EG-DAG: RECIP_IEEE
150; EG: FLT_TO_INT
151define void @srem24_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %in) {
152 %den_ptr = getelementptr i16 addrspace(1)* %in, i16 1
153 %num = load i16 addrspace(1) * %in, align 2
154 %den = load i16 addrspace(1) * %den_ptr, align 2
155 %result = srem i16 %num, %den
156 store i16 %result, i16 addrspace(1)* %out, align 2
157 ret void
158}
159
Tom Stellard79243d92014-10-01 17:15:17 +0000160; FUNC-LABEL: {{^}}srem24_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000161; SI: v_cvt_f32_i32
162; SI: v_cvt_f32_i32
163; SI: v_rcp_f32
164; SI: v_cvt_i32_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +0000165
166; EG: INT_TO_FLT
167; EG-DAG: INT_TO_FLT
168; EG-DAG: RECIP_IEEE
169; EG: FLT_TO_INT
170define void @srem24_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
171 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
172 %num = load i32 addrspace(1) * %in, align 4
173 %den = load i32 addrspace(1) * %den_ptr, align 4
174 %num.i24.0 = shl i32 %num, 8
175 %den.i24.0 = shl i32 %den, 8
176 %num.i24 = ashr i32 %num.i24.0, 8
177 %den.i24 = ashr i32 %den.i24.0, 8
178 %result = srem i32 %num.i24, %den.i24
179 store i32 %result, i32 addrspace(1)* %out, align 4
180 ret void
181}
182
Tom Stellard79243d92014-10-01 17:15:17 +0000183; FUNC-LABEL: {{^}}srem25_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000184; SI-NOT: v_cvt_f32_i32
185; SI-NOT: v_rcp_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +0000186
187; EG-NOT: INT_TO_FLT
188; EG-NOT: RECIP_IEEE
189define void @srem25_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
190 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
191 %num = load i32 addrspace(1) * %in, align 4
192 %den = load i32 addrspace(1) * %den_ptr, align 4
193 %num.i24.0 = shl i32 %num, 7
194 %den.i24.0 = shl i32 %den, 7
195 %num.i24 = ashr i32 %num.i24.0, 7
196 %den.i24 = ashr i32 %den.i24.0, 7
197 %result = srem i32 %num.i24, %den.i24
198 store i32 %result, i32 addrspace(1)* %out, align 4
199 ret void
200}
201
Tom Stellard79243d92014-10-01 17:15:17 +0000202; FUNC-LABEL: {{^}}test_no_srem24_i32_1:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000203; SI-NOT: v_cvt_f32_i32
204; SI-NOT: v_rcp_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +0000205
206; EG-NOT: INT_TO_FLT
207; EG-NOT: RECIP_IEEE
208define void @test_no_srem24_i32_1(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
209 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
210 %num = load i32 addrspace(1) * %in, align 4
211 %den = load i32 addrspace(1) * %den_ptr, align 4
212 %num.i24.0 = shl i32 %num, 8
213 %den.i24.0 = shl i32 %den, 7
214 %num.i24 = ashr i32 %num.i24.0, 8
215 %den.i24 = ashr i32 %den.i24.0, 7
216 %result = srem i32 %num.i24, %den.i24
217 store i32 %result, i32 addrspace(1)* %out, align 4
218 ret void
219}
220
Tom Stellard79243d92014-10-01 17:15:17 +0000221; FUNC-LABEL: {{^}}test_no_srem24_i32_2:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000222; SI-NOT: v_cvt_f32_i32
223; SI-NOT: v_rcp_f32
Jan Vesely4a33bc62014-08-12 17:31:17 +0000224
225; EG-NOT: INT_TO_FLT
226; EG-NOT: RECIP_IEEE
227define void @test_no_srem24_i32_2(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
228 %den_ptr = getelementptr i32 addrspace(1)* %in, i32 1
229 %num = load i32 addrspace(1) * %in, align 4
230 %den = load i32 addrspace(1) * %den_ptr, align 4
231 %num.i24.0 = shl i32 %num, 7
232 %den.i24.0 = shl i32 %den, 8
233 %num.i24 = ashr i32 %num.i24.0, 7
234 %den.i24 = ashr i32 %den.i24.0, 8
235 %result = srem i32 %num.i24, %den.i24
236 store i32 %result, i32 addrspace(1)* %out, align 4
237 ret void
238}