xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/udivrem64.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck --check-prefix=SI --check-prefix=GCN --check-prefix=FUNC %s
2*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck --check-prefix=VI --check-prefix=GCN --check-prefix=FUNC %s
3*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_udiv:
6*9880d681SAndroid Build Coastguard Worker;EG: RECIP_UINT
7*9880d681SAndroid Build Coastguard Worker;EG: LSHL {{.*}}, 1,
8*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
9*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
10*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
11*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
12*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
13*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
14*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
15*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
16*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
17*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
18*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
19*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
20*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
21*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
22*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
23*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
24*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
25*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
26*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
27*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
28*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
29*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
30*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
31*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
32*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
33*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
34*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
35*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
36*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
37*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
40*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
41*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
42*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
43*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
44*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
45*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
46*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
47*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
48*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
49*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
50*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
51*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
52*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
53*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
54*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
55*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
56*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
57*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
58*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
59*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
60*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
61*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
62*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
63*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
64*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
65*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
66*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
67*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
68*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
69*9880d681SAndroid Build Coastguard Worker;GCN-NOT: v_mad_f32
70*9880d681SAndroid Build Coastguard Worker;SI-NOT: v_lshr_b64
71*9880d681SAndroid Build Coastguard Worker;VI-NOT: v_lshrrev_b64
72*9880d681SAndroid Build Coastguard Worker;GCN: s_endpgm
73*9880d681SAndroid Build Coastguard Workerdefine void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
74*9880d681SAndroid Build Coastguard Worker  %result = udiv i64 %x, %y
75*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out
76*9880d681SAndroid Build Coastguard Worker  ret void
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_urem:
80*9880d681SAndroid Build Coastguard Worker;EG: RECIP_UINT
81*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
82*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
83*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
84*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
85*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
86*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
87*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
88*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
89*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
90*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
91*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
92*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
93*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
94*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
95*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
96*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
97*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
98*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
99*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
100*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
101*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
102*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
103*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
104*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
105*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
106*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
107*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
108*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
109*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
110*9880d681SAndroid Build Coastguard Worker;EG: BFE_UINT
111*9880d681SAndroid Build Coastguard Worker;EG: AND_INT {{.*}}, 1,
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
114*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
115*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
116*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
117*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
118*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
119*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
120*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
121*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
122*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
123*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
124*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
125*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
126*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
127*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
128*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
129*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
130*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
131*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
132*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
133*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
134*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
135*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
136*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
137*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
138*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
139*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
140*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
141*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
142*9880d681SAndroid Build Coastguard Worker;GCN: s_bfe_u32
143*9880d681SAndroid Build Coastguard Worker;GCN-NOT: v_mad_f32
144*9880d681SAndroid Build Coastguard Worker;SI-NOT: v_lshr_b64
145*9880d681SAndroid Build Coastguard Worker;VI-NOT: v_lshrrev_b64
146*9880d681SAndroid Build Coastguard Worker;GCN: s_endpgm
147*9880d681SAndroid Build Coastguard Workerdefine void @test_urem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
148*9880d681SAndroid Build Coastguard Worker  %result = urem i64 %x, %y
149*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out
150*9880d681SAndroid Build Coastguard Worker  ret void
151*9880d681SAndroid Build Coastguard Worker}
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_udiv3264:
154*9880d681SAndroid Build Coastguard Worker;EG: RECIP_UINT
155*9880d681SAndroid Build Coastguard Worker;EG-NOT: BFE_UINT
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker;GCN-NOT: s_bfe_u32
158*9880d681SAndroid Build Coastguard Worker;GCN-NOT: v_mad_f32
159*9880d681SAndroid Build Coastguard Worker;SI-NOT: v_lshr_b64
160*9880d681SAndroid Build Coastguard Worker;VI-NOT: v_lshrrev_b64
161*9880d681SAndroid Build Coastguard Worker;GCN: s_endpgm
162*9880d681SAndroid Build Coastguard Workerdefine void @test_udiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
163*9880d681SAndroid Build Coastguard Worker  %1 = lshr i64 %x, 33
164*9880d681SAndroid Build Coastguard Worker  %2 = lshr i64 %y, 33
165*9880d681SAndroid Build Coastguard Worker  %result = udiv i64 %1, %2
166*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out
167*9880d681SAndroid Build Coastguard Worker  ret void
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_urem3264:
171*9880d681SAndroid Build Coastguard Worker;EG: RECIP_UINT
172*9880d681SAndroid Build Coastguard Worker;EG-NOT: BFE_UINT
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker;GCN-NOT: s_bfe_u32
175*9880d681SAndroid Build Coastguard Worker;GCN-NOT: v_mad_f32
176*9880d681SAndroid Build Coastguard Worker;SI-NOT: v_lshr_b64
177*9880d681SAndroid Build Coastguard Worker;VI-NOT: v_lshrrev_b64
178*9880d681SAndroid Build Coastguard Worker;GCN: s_endpgm
179*9880d681SAndroid Build Coastguard Workerdefine void @test_urem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
180*9880d681SAndroid Build Coastguard Worker  %1 = lshr i64 %x, 33
181*9880d681SAndroid Build Coastguard Worker  %2 = lshr i64 %y, 33
182*9880d681SAndroid Build Coastguard Worker  %result = urem i64 %1, %2
183*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out
184*9880d681SAndroid Build Coastguard Worker  ret void
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_udiv2364:
188*9880d681SAndroid Build Coastguard Worker;EG: UINT_TO_FLT
189*9880d681SAndroid Build Coastguard Worker;EG: UINT_TO_FLT
190*9880d681SAndroid Build Coastguard Worker;EG: FLT_TO_UINT
191*9880d681SAndroid Build Coastguard Worker;EG-NOT: RECIP_UINT
192*9880d681SAndroid Build Coastguard Worker;EG-NOT: BFE_UINT
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker;SI-NOT: v_lshr_b64
195*9880d681SAndroid Build Coastguard Worker;VI-NOT: v_lshrrev_b64
196*9880d681SAndroid Build Coastguard Worker;GCN: v_mad_f32
197*9880d681SAndroid Build Coastguard Worker;GCN: s_endpgm
198*9880d681SAndroid Build Coastguard Workerdefine void @test_udiv2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
199*9880d681SAndroid Build Coastguard Worker  %1 = lshr i64 %x, 41
200*9880d681SAndroid Build Coastguard Worker  %2 = lshr i64 %y, 41
201*9880d681SAndroid Build Coastguard Worker  %result = udiv i64 %1, %2
202*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out
203*9880d681SAndroid Build Coastguard Worker  ret void
204*9880d681SAndroid Build Coastguard Worker}
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Worker;FUNC-LABEL: {{^}}test_urem2364:
207*9880d681SAndroid Build Coastguard Worker;EG: UINT_TO_FLT
208*9880d681SAndroid Build Coastguard Worker;EG: UINT_TO_FLT
209*9880d681SAndroid Build Coastguard Worker;EG: FLT_TO_UINT
210*9880d681SAndroid Build Coastguard Worker;EG-NOT: RECIP_UINT
211*9880d681SAndroid Build Coastguard Worker;EG-NOT: BFE_UINT
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker;SI-NOT: v_lshr_b64
214*9880d681SAndroid Build Coastguard Worker;VI-NOT: v_lshrrev_b64
215*9880d681SAndroid Build Coastguard Worker;GCN: v_mad_f32
216*9880d681SAndroid Build Coastguard Worker;GCN: s_endpgm
217*9880d681SAndroid Build Coastguard Workerdefine void @test_urem2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
218*9880d681SAndroid Build Coastguard Worker  %1 = lshr i64 %x, 41
219*9880d681SAndroid Build Coastguard Worker  %2 = lshr i64 %y, 41
220*9880d681SAndroid Build Coastguard Worker  %result = urem i64 %1, %2
221*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out
222*9880d681SAndroid Build Coastguard Worker  ret void
223*9880d681SAndroid Build Coastguard Worker}
224