Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / sdiv.i64.ll
blob9dacdbc46be194814127de5e5051e7fe7bf58ea2
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -amdgpu-codegenprepare-disable-idiv-expansion=1 -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii -denormal-fp-math-f32=preserve-sign < %s | FileCheck -check-prefixes=CHECK,GISEL %s
3 ; RUN: llc -global-isel -amdgpu-codegenprepare-disable-idiv-expansion=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii -denormal-fp-math-f32=preserve-sign < %s | FileCheck -check-prefixes=CHECK,CGP %s
5 ; The same 32-bit expansion is implemented in the legalizer and in AMDGPUCodeGenPrepare.
7 define i64 @v_sdiv_i64(i64 %num, i64 %den) {
8 ; CHECK-LABEL: v_sdiv_i64:
9 ; CHECK:       ; %bb.0:
10 ; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11 ; CHECK-NEXT:    v_mov_b32_e32 v5, v1
12 ; CHECK-NEXT:    v_mov_b32_e32 v4, v0
13 ; CHECK-NEXT:    v_or_b32_e32 v1, v5, v3
14 ; CHECK-NEXT:    v_mov_b32_e32 v0, 0
15 ; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
16 ; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1
17 ; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc
18 ; CHECK-NEXT:    s_xor_b64 s[6:7], exec, s[4:5]
19 ; CHECK-NEXT:    s_cbranch_execnz .LBB0_3
20 ; CHECK-NEXT:  ; %bb.1: ; %Flow
21 ; CHECK-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
22 ; CHECK-NEXT:    s_cbranch_execnz .LBB0_4
23 ; CHECK-NEXT:  .LBB0_2:
24 ; CHECK-NEXT:    s_or_b64 exec, exec, s[6:7]
25 ; CHECK-NEXT:    s_setpc_b64 s[30:31]
26 ; CHECK-NEXT:  .LBB0_3:
27 ; CHECK-NEXT:    v_ashrrev_i32_e32 v0, 31, v3
28 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v2, v0
29 ; CHECK-NEXT:    v_addc_u32_e32 v3, vcc, v3, v0, vcc
30 ; CHECK-NEXT:    v_xor_b32_e32 v2, v1, v0
31 ; CHECK-NEXT:    v_xor_b32_e32 v1, v3, v0
32 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v3, v2
33 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v6, v1
34 ; CHECK-NEXT:    v_sub_i32_e32 v10, vcc, 0, v2
35 ; CHECK-NEXT:    v_subb_u32_e32 v11, vcc, 0, v1, vcc
36 ; CHECK-NEXT:    v_mac_f32_e32 v3, 0x4f800000, v6
37 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v3, v3
38 ; CHECK-NEXT:    v_mul_f32_e32 v3, 0x5f7ffffc, v3
39 ; CHECK-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v3
40 ; CHECK-NEXT:    v_trunc_f32_e32 v8, v6
41 ; CHECK-NEXT:    v_mac_f32_e32 v3, 0xcf800000, v8
42 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v9, v3
43 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v12, v8
44 ; CHECK-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v10, v9, 0
45 ; CHECK-NEXT:    v_mov_b32_e32 v3, v7
46 ; CHECK-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v10, v12, v[3:4]
47 ; CHECK-NEXT:    v_mul_lo_u32 v3, v12, v6
48 ; CHECK-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v11, v9, v[7:8]
49 ; CHECK-NEXT:    v_mul_hi_u32 v8, v9, v6
50 ; CHECK-NEXT:    v_mul_hi_u32 v6, v12, v6
51 ; CHECK-NEXT:    v_mul_lo_u32 v13, v9, v7
52 ; CHECK-NEXT:    v_mul_lo_u32 v14, v12, v7
53 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v13
54 ; CHECK-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
55 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v8
56 ; CHECK-NEXT:    v_mul_hi_u32 v8, v9, v7
57 ; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
58 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v13, v3
59 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v14, v6
60 ; CHECK-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
61 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v6, v8
62 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
63 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v13, v8
64 ; CHECK-NEXT:    v_mul_hi_u32 v7, v12, v7
65 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v6, v3
66 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
67 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v8, v6
68 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
69 ; CHECK-NEXT:    v_add_i32_e32 v9, vcc, v9, v3
70 ; CHECK-NEXT:    v_addc_u32_e32 v12, vcc, v12, v6, vcc
71 ; CHECK-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v10, v9, 0
72 ; CHECK-NEXT:    v_mov_b32_e32 v3, v7
73 ; CHECK-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v10, v12, v[3:4]
74 ; CHECK-NEXT:    v_ashrrev_i32_e32 v10, 31, v5
75 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v4, v10
76 ; CHECK-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v11, v9, v[7:8]
77 ; CHECK-NEXT:    v_addc_u32_e32 v4, vcc, v5, v10, vcc
78 ; CHECK-NEXT:    v_xor_b32_e32 v8, v3, v10
79 ; CHECK-NEXT:    v_mul_lo_u32 v3, v12, v6
80 ; CHECK-NEXT:    v_mul_lo_u32 v5, v9, v7
81 ; CHECK-NEXT:    v_xor_b32_e32 v11, v4, v10
82 ; CHECK-NEXT:    v_mul_hi_u32 v4, v9, v6
83 ; CHECK-NEXT:    v_mul_hi_u32 v6, v12, v6
84 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v5
85 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
86 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v4
87 ; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
88 ; CHECK-NEXT:    v_mul_lo_u32 v4, v12, v7
89 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v5, v3
90 ; CHECK-NEXT:    v_mul_hi_u32 v5, v9, v7
91 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v6
92 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
93 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v5
94 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
95 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
96 ; CHECK-NEXT:    v_mul_hi_u32 v6, v12, v7
97 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
98 ; CHECK-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
99 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v5, v4
100 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v6, v4
101 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v9, v3
102 ; CHECK-NEXT:    v_addc_u32_e32 v4, vcc, v12, v4, vcc
103 ; CHECK-NEXT:    v_mul_lo_u32 v5, v11, v3
104 ; CHECK-NEXT:    v_mul_lo_u32 v6, v8, v4
105 ; CHECK-NEXT:    v_mul_hi_u32 v7, v8, v3
106 ; CHECK-NEXT:    v_mul_hi_u32 v3, v11, v3
107 ; CHECK-NEXT:    v_mul_hi_u32 v9, v11, v4
108 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v6
109 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
110 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v7
111 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
112 ; CHECK-NEXT:    v_mul_lo_u32 v7, v11, v4
113 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
114 ; CHECK-NEXT:    v_mul_hi_u32 v6, v8, v4
115 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v7, v3
116 ; CHECK-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
117 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v6
118 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
119 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
120 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, v3, v5
121 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v2, v7, 0
122 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
123 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
124 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v9, v5
125 ; CHECK-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v2, v6, v[4:5]
126 ; CHECK-NEXT:    v_sub_i32_e32 v3, vcc, v8, v3
127 ; CHECK-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v1, v7, v[4:5]
128 ; CHECK-NEXT:    v_subb_u32_e64 v5, s[4:5], v11, v4, vcc
129 ; CHECK-NEXT:    v_sub_i32_e64 v4, s[4:5], v11, v4
130 ; CHECK-NEXT:    v_cmp_ge_u32_e64 s[4:5], v5, v1
131 ; CHECK-NEXT:    v_subb_u32_e32 v4, vcc, v4, v1, vcc
132 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]
133 ; CHECK-NEXT:    v_cmp_ge_u32_e64 s[4:5], v3, v2
134 ; CHECK-NEXT:    v_sub_i32_e32 v3, vcc, v3, v2
135 ; CHECK-NEXT:    v_cndmask_b32_e64 v9, 0, -1, s[4:5]
136 ; CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], v5, v1
137 ; CHECK-NEXT:    v_subbrev_u32_e32 v4, vcc, 0, v4, vcc
138 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, v8, v9, s[4:5]
139 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, 1, v7
140 ; CHECK-NEXT:    v_addc_u32_e32 v9, vcc, 0, v6, vcc
141 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v4, v1
142 ; CHECK-NEXT:    v_cndmask_b32_e64 v11, 0, -1, vcc
143 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v2
144 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
145 ; CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
146 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v11, v2, vcc
147 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, 1, v8
148 ; CHECK-NEXT:    v_addc_u32_e32 v3, vcc, 0, v9, vcc
149 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v1
150 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v8, v2, vcc
151 ; CHECK-NEXT:    v_cndmask_b32_e32 v2, v9, v3, vcc
152 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v5
153 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v7, v1, vcc
154 ; CHECK-NEXT:    v_xor_b32_e32 v3, v10, v0
155 ; CHECK-NEXT:    v_cndmask_b32_e32 v2, v6, v2, vcc
156 ; CHECK-NEXT:    v_xor_b32_e32 v0, v1, v3
157 ; CHECK-NEXT:    v_xor_b32_e32 v1, v2, v3
158 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v0, v3
159 ; CHECK-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc
160 ; CHECK-NEXT:    ; implicit-def: $vgpr2
161 ; CHECK-NEXT:    ; implicit-def: $vgpr4
162 ; CHECK-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
163 ; CHECK-NEXT:    s_cbranch_execz .LBB0_2
164 ; CHECK-NEXT:  .LBB0_4:
165 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v0, v2
166 ; CHECK-NEXT:    v_sub_i32_e32 v1, vcc, 0, v2
167 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v0, v0
168 ; CHECK-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0
169 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v0, v0
170 ; CHECK-NEXT:    v_mul_lo_u32 v1, v1, v0
171 ; CHECK-NEXT:    v_mul_hi_u32 v1, v0, v1
172 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
173 ; CHECK-NEXT:    v_mul_hi_u32 v0, v4, v0
174 ; CHECK-NEXT:    v_mul_lo_u32 v1, v0, v2
175 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, 1, v0
176 ; CHECK-NEXT:    v_sub_i32_e32 v1, vcc, v4, v1
177 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v2
178 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
179 ; CHECK-NEXT:    v_sub_i32_e64 v3, s[4:5], v1, v2
180 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
181 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, 1, v0
182 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v2
183 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
184 ; CHECK-NEXT:    v_mov_b32_e32 v1, 0
185 ; CHECK-NEXT:    s_or_b64 exec, exec, s[6:7]
186 ; CHECK-NEXT:    s_setpc_b64 s[30:31]
187   %result = sdiv i64 %num, %den
188   ret i64 %result
191 ; FIXME: This is a workaround for not handling uniform VGPR case.
192 declare i32 @llvm.amdgcn.readfirstlane(i32)
194 define amdgpu_ps i64 @s_sdiv_i64(i64 inreg %num, i64 inreg %den) {
195 ; CHECK-LABEL: s_sdiv_i64:
196 ; CHECK:       ; %bb.0:
197 ; CHECK-NEXT:    s_mov_b32 s6, 0
198 ; CHECK-NEXT:    s_or_b64 s[0:1], s[2:3], s[4:5]
199 ; CHECK-NEXT:    s_mov_b32 s7, -1
200 ; CHECK-NEXT:    s_and_b64 s[0:1], s[0:1], s[6:7]
201 ; CHECK-NEXT:    v_cmp_ne_u64_e64 vcc, s[0:1], 0
202 ; CHECK-NEXT:    s_mov_b32 s0, 1
203 ; CHECK-NEXT:    s_cbranch_vccz .LBB1_2
204 ; CHECK-NEXT:  ; %bb.1:
205 ; CHECK-NEXT:    s_ashr_i32 s6, s3, 31
206 ; CHECK-NEXT:    s_ashr_i32 s8, s5, 31
207 ; CHECK-NEXT:    s_add_u32 s0, s2, s6
208 ; CHECK-NEXT:    s_addc_u32 s1, s3, s6
209 ; CHECK-NEXT:    s_add_u32 s10, s4, s8
210 ; CHECK-NEXT:    s_mov_b32 s9, s8
211 ; CHECK-NEXT:    s_addc_u32 s11, s5, s8
212 ; CHECK-NEXT:    s_xor_b64 s[10:11], s[10:11], s[8:9]
213 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v0, s10
214 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v1, s11
215 ; CHECK-NEXT:    s_mov_b32 s7, s6
216 ; CHECK-NEXT:    s_xor_b64 s[12:13], s[0:1], s[6:7]
217 ; CHECK-NEXT:    s_sub_u32 s3, 0, s10
218 ; CHECK-NEXT:    v_mac_f32_e32 v0, 0x4f800000, v1
219 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v0, v0
220 ; CHECK-NEXT:    s_subb_u32 s5, 0, s11
221 ; CHECK-NEXT:    v_mul_f32_e32 v0, 0x5f7ffffc, v0
222 ; CHECK-NEXT:    v_mul_f32_e32 v1, 0x2f800000, v0
223 ; CHECK-NEXT:    v_trunc_f32_e32 v2, v1
224 ; CHECK-NEXT:    v_mac_f32_e32 v0, 0xcf800000, v2
225 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v3, v0
226 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v4, v2
227 ; CHECK-NEXT:    v_mad_u64_u32 v[0:1], s[0:1], s3, v3, 0
228 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[0:1], s3, v4, v[1:2]
229 ; CHECK-NEXT:    v_mul_hi_u32 v5, v3, v0
230 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[0:1], s5, v3, v[1:2]
231 ; CHECK-NEXT:    v_mul_lo_u32 v2, v4, v0
232 ; CHECK-NEXT:    v_mul_hi_u32 v0, v4, v0
233 ; CHECK-NEXT:    v_mul_lo_u32 v6, v3, v1
234 ; CHECK-NEXT:    v_mul_lo_u32 v7, v4, v1
235 ; CHECK-NEXT:    v_mul_hi_u32 v8, v3, v1
236 ; CHECK-NEXT:    v_mul_hi_u32 v1, v4, v1
237 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v6
238 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
239 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v5
240 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
241 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v6, v2
242 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v7, v0
243 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
244 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v8
245 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
246 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v6
247 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
248 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
249 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
250 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v2
251 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v0
252 ; CHECK-NEXT:    v_addc_u32_e32 v4, vcc, v4, v1, vcc
253 ; CHECK-NEXT:    v_mad_u64_u32 v[0:1], s[0:1], s3, v3, 0
254 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[0:1], s3, v4, v[1:2]
255 ; CHECK-NEXT:    v_mul_hi_u32 v6, v3, v0
256 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[0:1], s5, v3, v[1:2]
257 ; CHECK-NEXT:    v_mul_lo_u32 v2, v4, v0
258 ; CHECK-NEXT:    v_mul_hi_u32 v0, v4, v0
259 ; CHECK-NEXT:    v_mul_lo_u32 v5, v3, v1
260 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v5
261 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
262 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v6
263 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
264 ; CHECK-NEXT:    v_mul_lo_u32 v6, v4, v1
265 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
266 ; CHECK-NEXT:    v_mul_hi_u32 v5, v3, v1
267 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v6, v0
268 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
269 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v5
270 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
271 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
272 ; CHECK-NEXT:    v_mul_hi_u32 v1, v4, v1
273 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
274 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
275 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
276 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v2
277 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
278 ; CHECK-NEXT:    v_addc_u32_e32 v1, vcc, v4, v1, vcc
279 ; CHECK-NEXT:    v_mul_lo_u32 v2, s13, v0
280 ; CHECK-NEXT:    v_mul_lo_u32 v3, s12, v1
281 ; CHECK-NEXT:    v_mul_hi_u32 v4, s12, v0
282 ; CHECK-NEXT:    v_mul_hi_u32 v0, s13, v0
283 ; CHECK-NEXT:    v_mul_hi_u32 v5, s13, v1
284 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
285 ; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
286 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v4
287 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
288 ; CHECK-NEXT:    v_mul_lo_u32 v4, s13, v1
289 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
290 ; CHECK-NEXT:    v_mul_hi_u32 v3, s12, v1
291 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v4, v0
292 ; CHECK-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
293 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v3
294 ; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
295 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
296 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v0, v2
297 ; CHECK-NEXT:    v_mad_u64_u32 v[0:1], s[0:1], s10, v4, 0
298 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
299 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
300 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
301 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[0:1], s10, v2, v[1:2]
302 ; CHECK-NEXT:    v_mov_b32_e32 v5, s13
303 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, s12, v0
304 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[0:1], s11, v4, v[1:2]
305 ; CHECK-NEXT:    v_mov_b32_e32 v3, s11
306 ; CHECK-NEXT:    v_subb_u32_e64 v2, s[0:1], v5, v1, vcc
307 ; CHECK-NEXT:    v_sub_i32_e64 v1, s[0:1], s13, v1
308 ; CHECK-NEXT:    v_cmp_le_u32_e64 s[0:1], s11, v2
309 ; CHECK-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc
310 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, -1, s[0:1]
311 ; CHECK-NEXT:    v_cmp_le_u32_e64 s[0:1], s10, v0
312 ; CHECK-NEXT:    v_subrev_i32_e32 v0, vcc, s10, v0
313 ; CHECK-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v1, vcc
314 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, 1, v4
315 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, -1, s[0:1]
316 ; CHECK-NEXT:    v_cmp_eq_u32_e64 s[0:1], s11, v2
317 ; CHECK-NEXT:    v_cmp_le_u32_e32 vcc, s11, v1
318 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, v5, v6, s[0:1]
319 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, -1, vcc
320 ; CHECK-NEXT:    v_cmp_le_u32_e32 vcc, s10, v0
321 ; CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc
322 ; CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, s11, v1
323 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v5, v0, vcc
324 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, 1, v3
325 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0
326 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
327 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
328 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
329 ; CHECK-NEXT:    s_xor_b64 s[0:1], s[6:7], s[8:9]
330 ; CHECK-NEXT:    v_xor_b32_e32 v0, s0, v0
331 ; CHECK-NEXT:    v_subrev_i32_e32 v0, vcc, s0, v0
332 ; CHECK-NEXT:    s_mov_b32 s0, 0
333 ; CHECK-NEXT:    s_branch .LBB1_3
334 ; CHECK-NEXT:  .LBB1_2:
335 ; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1
336 ; CHECK-NEXT:  .LBB1_3: ; %Flow
337 ; CHECK-NEXT:    s_xor_b32 s0, s0, 1
338 ; CHECK-NEXT:    s_and_b32 s0, s0, 1
339 ; CHECK-NEXT:    s_cmp_lg_u32 s0, 0
340 ; CHECK-NEXT:    s_cbranch_scc1 .LBB1_5
341 ; CHECK-NEXT:  ; %bb.4:
342 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v0, s4
343 ; CHECK-NEXT:    s_sub_i32 s0, 0, s4
344 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v0, v0
345 ; CHECK-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0
346 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v0, v0
347 ; CHECK-NEXT:    v_mul_lo_u32 v1, s0, v0
348 ; CHECK-NEXT:    v_mul_hi_u32 v1, v0, v1
349 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
350 ; CHECK-NEXT:    v_mul_hi_u32 v0, s2, v0
351 ; CHECK-NEXT:    v_mul_lo_u32 v1, v0, s4
352 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
353 ; CHECK-NEXT:    v_sub_i32_e32 v1, vcc, s2, v1
354 ; CHECK-NEXT:    v_cmp_le_u32_e32 vcc, s4, v1
355 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
356 ; CHECK-NEXT:    v_subrev_i32_e64 v2, s[0:1], s4, v1
357 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
358 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
359 ; CHECK-NEXT:    v_cmp_le_u32_e32 vcc, s4, v1
360 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
361 ; CHECK-NEXT:  .LBB1_5:
362 ; CHECK-NEXT:    v_readfirstlane_b32 s0, v0
363 ; CHECK-NEXT:    s_mov_b32 s1, s0
364 ; CHECK-NEXT:    ; return to shader part epilog
365   %result = sdiv i64 %num, %den
366   %cast = bitcast i64 %result to <2 x i32>
367   %elt.0 = extractelement <2 x i32> %cast, i32 0
368   %elt.1 = extractelement <2 x i32> %cast, i32 1
369   %res.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt.0)
370   %res.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt.1)
371   %ins.0 = insertelement <2 x i32> undef, i32 %res.0, i32 0
372   %ins.1 = insertelement <2 x i32> %ins.0, i32 %res.0, i32 1
373   %cast.back = bitcast <2 x i32> %ins.1 to i64
374   ret i64 %cast.back
377 define <2 x i64> @v_sdiv_v2i64(<2 x i64> %num, <2 x i64> %den) {
378 ; GISEL-LABEL: v_sdiv_v2i64:
379 ; GISEL:       ; %bb.0:
380 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
381 ; GISEL-NEXT:    v_ashrrev_i32_e32 v8, 31, v5
382 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v8
383 ; GISEL-NEXT:    v_addc_u32_e32 v5, vcc, v5, v8, vcc
384 ; GISEL-NEXT:    v_xor_b32_e32 v10, v4, v8
385 ; GISEL-NEXT:    v_xor_b32_e32 v4, v5, v8
386 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v5, v10
387 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v9, v4
388 ; GISEL-NEXT:    v_sub_i32_e32 v15, vcc, 0, v10
389 ; GISEL-NEXT:    v_subb_u32_e32 v16, vcc, 0, v4, vcc
390 ; GISEL-NEXT:    v_mac_f32_e32 v5, 0x4f800000, v9
391 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v5, v5
392 ; GISEL-NEXT:    v_mul_f32_e32 v5, 0x5f7ffffc, v5
393 ; GISEL-NEXT:    v_mul_f32_e32 v9, 0x2f800000, v5
394 ; GISEL-NEXT:    v_trunc_f32_e32 v9, v9
395 ; GISEL-NEXT:    v_mac_f32_e32 v5, 0xcf800000, v9
396 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v14, v5
397 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v9, v9
398 ; GISEL-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v15, v14, 0
399 ; GISEL-NEXT:    v_mov_b32_e32 v5, v12
400 ; GISEL-NEXT:    v_mad_u64_u32 v[12:13], s[4:5], v15, v9, v[5:6]
401 ; GISEL-NEXT:    v_mul_lo_u32 v5, v9, v11
402 ; GISEL-NEXT:    v_mul_hi_u32 v17, v14, v11
403 ; GISEL-NEXT:    v_mad_u64_u32 v[12:13], s[4:5], v16, v14, v[12:13]
404 ; GISEL-NEXT:    v_mul_hi_u32 v11, v9, v11
405 ; GISEL-NEXT:    v_mul_lo_u32 v13, v14, v12
406 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v13
407 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
408 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v17
409 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
410 ; GISEL-NEXT:    v_mul_lo_u32 v17, v9, v12
411 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v13, v5
412 ; GISEL-NEXT:    v_mul_hi_u32 v13, v14, v12
413 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v17, v11
414 ; GISEL-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
415 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v11, v13
416 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
417 ; GISEL-NEXT:    v_add_i32_e32 v13, vcc, v17, v13
418 ; GISEL-NEXT:    v_mul_hi_u32 v12, v9, v12
419 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v11, v5
420 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
421 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v13, v11
422 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v12, v11
423 ; GISEL-NEXT:    v_add_i32_e32 v14, vcc, v14, v5
424 ; GISEL-NEXT:    v_addc_u32_e32 v17, vcc, v9, v11, vcc
425 ; GISEL-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v15, v14, 0
426 ; GISEL-NEXT:    v_ashrrev_i32_e32 v9, 31, v1
427 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v9
428 ; GISEL-NEXT:    v_mov_b32_e32 v5, v12
429 ; GISEL-NEXT:    v_mad_u64_u32 v[12:13], s[4:5], v15, v17, v[5:6]
430 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v1, v9, vcc
431 ; GISEL-NEXT:    v_mad_u64_u32 v[12:13], s[4:5], v16, v14, v[12:13]
432 ; GISEL-NEXT:    v_xor_b32_e32 v5, v0, v9
433 ; GISEL-NEXT:    v_mul_lo_u32 v0, v17, v11
434 ; GISEL-NEXT:    v_mul_lo_u32 v13, v14, v12
435 ; GISEL-NEXT:    v_xor_b32_e32 v15, v1, v9
436 ; GISEL-NEXT:    v_mul_hi_u32 v1, v14, v11
437 ; GISEL-NEXT:    v_mul_hi_u32 v11, v17, v11
438 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v13
439 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
440 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
441 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
442 ; GISEL-NEXT:    v_mul_lo_u32 v1, v17, v12
443 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v13, v0
444 ; GISEL-NEXT:    v_mul_hi_u32 v13, v14, v12
445 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v11
446 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
447 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v13
448 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
449 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v11, v13
450 ; GISEL-NEXT:    v_mul_hi_u32 v12, v17, v12
451 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v1, v0
452 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
453 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
454 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v12, v1
455 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v14, v0
456 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v17, v1, vcc
457 ; GISEL-NEXT:    v_mul_lo_u32 v11, v15, v0
458 ; GISEL-NEXT:    v_mul_lo_u32 v12, v5, v1
459 ; GISEL-NEXT:    v_mul_hi_u32 v13, v5, v0
460 ; GISEL-NEXT:    v_mul_hi_u32 v0, v15, v0
461 ; GISEL-NEXT:    v_mul_hi_u32 v14, v15, v1
462 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v11, v12
463 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
464 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v11, v13
465 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
466 ; GISEL-NEXT:    v_mul_lo_u32 v13, v15, v1
467 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v12, v11
468 ; GISEL-NEXT:    v_mul_hi_u32 v12, v5, v1
469 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v13, v0
470 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
471 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v12
472 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
473 ; GISEL-NEXT:    v_add_i32_e32 v12, vcc, v13, v12
474 ; GISEL-NEXT:    v_add_i32_e32 v13, vcc, v0, v11
475 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], v10, v13, 0
476 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
477 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v12, v11
478 ; GISEL-NEXT:    v_add_i32_e32 v14, vcc, v14, v11
479 ; GISEL-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v10, v14, v[1:2]
480 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v5, v0
481 ; GISEL-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v4, v13, v[11:12]
482 ; GISEL-NEXT:    v_subb_u32_e64 v1, s[4:5], v15, v11, vcc
483 ; GISEL-NEXT:    v_sub_i32_e64 v5, s[4:5], v15, v11
484 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v1, v4
485 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, -1, s[4:5]
486 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v10
487 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, 0, -1, s[4:5]
488 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v4
489 ; GISEL-NEXT:    v_subb_u32_e32 v1, vcc, v5, v4, vcc
490 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v0, v10
491 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, v11, v12, s[4:5]
492 ; GISEL-NEXT:    v_subbrev_u32_e32 v11, vcc, 0, v1, vcc
493 ; GISEL-NEXT:    v_ashrrev_i32_e32 v5, 31, v7
494 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v6, v5
495 ; GISEL-NEXT:    v_addc_u32_e32 v6, vcc, v7, v5, vcc
496 ; GISEL-NEXT:    v_xor_b32_e32 v7, v1, v5
497 ; GISEL-NEXT:    v_xor_b32_e32 v6, v6, v5
498 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v1, v7
499 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v15, v6
500 ; GISEL-NEXT:    v_add_i32_e32 v16, vcc, 1, v13
501 ; GISEL-NEXT:    v_addc_u32_e32 v17, vcc, 0, v14, vcc
502 ; GISEL-NEXT:    v_mac_f32_e32 v1, 0x4f800000, v15
503 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v1, v1
504 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v11, v4
505 ; GISEL-NEXT:    v_cndmask_b32_e64 v15, 0, -1, vcc
506 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v10
507 ; GISEL-NEXT:    v_mul_f32_e32 v0, 0x5f7ffffc, v1
508 ; GISEL-NEXT:    v_mul_f32_e32 v1, 0x2f800000, v0
509 ; GISEL-NEXT:    v_trunc_f32_e32 v18, v1
510 ; GISEL-NEXT:    v_mac_f32_e32 v0, 0xcf800000, v18
511 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v19, v0
512 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, -1, vcc
513 ; GISEL-NEXT:    v_sub_i32_e32 v20, vcc, 0, v7
514 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], v20, v19, 0
515 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v18, v18
516 ; GISEL-NEXT:    v_subb_u32_e32 v21, vcc, 0, v6, vcc
517 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v11, v4
518 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, v15, v10, vcc
519 ; GISEL-NEXT:    v_mad_u64_u32 v[10:11], s[4:5], v20, v18, v[1:2]
520 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, 1, v16
521 ; GISEL-NEXT:    v_mad_u64_u32 v[10:11], s[4:5], v21, v19, v[10:11]
522 ; GISEL-NEXT:    v_addc_u32_e32 v15, vcc, 0, v17, vcc
523 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v4
524 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, v16, v1, vcc
525 ; GISEL-NEXT:    v_mul_lo_u32 v1, v18, v0
526 ; GISEL-NEXT:    v_mul_lo_u32 v11, v19, v10
527 ; GISEL-NEXT:    v_mul_hi_u32 v16, v19, v0
528 ; GISEL-NEXT:    v_cndmask_b32_e32 v15, v17, v15, vcc
529 ; GISEL-NEXT:    v_mul_hi_u32 v0, v18, v0
530 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v11
531 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
532 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v16
533 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
534 ; GISEL-NEXT:    v_mul_lo_u32 v16, v18, v10
535 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
536 ; GISEL-NEXT:    v_mul_hi_u32 v11, v19, v10
537 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v16, v0
538 ; GISEL-NEXT:    v_cndmask_b32_e64 v16, 0, 1, vcc
539 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v11
540 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
541 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v16, v11
542 ; GISEL-NEXT:    v_mul_hi_u32 v10, v18, v10
543 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
544 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
545 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
546 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v10, v1
547 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v19, v0
548 ; GISEL-NEXT:    v_addc_u32_e32 v11, vcc, v18, v1, vcc
549 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], v20, v10, 0
550 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v12
551 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, v13, v4, vcc
552 ; GISEL-NEXT:    v_xor_b32_e32 v13, v9, v8
553 ; GISEL-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], v20, v11, v[1:2]
554 ; GISEL-NEXT:    v_cndmask_b32_e32 v12, v14, v15, vcc
555 ; GISEL-NEXT:    v_ashrrev_i32_e32 v14, 31, v3
556 ; GISEL-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], v21, v10, v[8:9]
557 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v14
558 ; GISEL-NEXT:    v_xor_b32_e32 v1, v4, v13
559 ; GISEL-NEXT:    v_addc_u32_e32 v3, vcc, v3, v14, vcc
560 ; GISEL-NEXT:    v_xor_b32_e32 v9, v2, v14
561 ; GISEL-NEXT:    v_mul_lo_u32 v2, v11, v0
562 ; GISEL-NEXT:    v_mul_lo_u32 v4, v10, v8
563 ; GISEL-NEXT:    v_xor_b32_e32 v15, v3, v14
564 ; GISEL-NEXT:    v_mul_hi_u32 v3, v10, v0
565 ; GISEL-NEXT:    v_mul_hi_u32 v0, v11, v0
566 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v4
567 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
568 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
569 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
570 ; GISEL-NEXT:    v_mul_lo_u32 v3, v11, v8
571 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v4, v2
572 ; GISEL-NEXT:    v_mul_hi_u32 v4, v10, v8
573 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
574 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
575 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v4
576 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
577 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v4
578 ; GISEL-NEXT:    v_mul_hi_u32 v4, v11, v8
579 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
580 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
581 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
582 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v4, v2
583 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v10, v0
584 ; GISEL-NEXT:    v_addc_u32_e32 v2, vcc, v11, v2, vcc
585 ; GISEL-NEXT:    v_mul_lo_u32 v3, v15, v0
586 ; GISEL-NEXT:    v_mul_lo_u32 v4, v9, v2
587 ; GISEL-NEXT:    v_mul_hi_u32 v10, v9, v0
588 ; GISEL-NEXT:    v_mul_hi_u32 v0, v15, v0
589 ; GISEL-NEXT:    v_mul_hi_u32 v11, v15, v2
590 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v4
591 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
592 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v10
593 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
594 ; GISEL-NEXT:    v_mul_lo_u32 v10, v15, v2
595 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
596 ; GISEL-NEXT:    v_mul_hi_u32 v4, v9, v2
597 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v10, v0
598 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
599 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v4
600 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
601 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v10, v4
602 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v0, v3
603 ; GISEL-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], v7, v10, 0
604 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
605 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v4, v0
606 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v11, v0
607 ; GISEL-NEXT:    v_mov_b32_e32 v0, v3
608 ; GISEL-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v7, v11, v[0:1]
609 ; GISEL-NEXT:    v_xor_b32_e32 v8, v12, v13
610 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v1, v13
611 ; GISEL-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v6, v10, v[3:4]
612 ; GISEL-NEXT:    v_subb_u32_e32 v1, vcc, v8, v13, vcc
613 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v9, v2
614 ; GISEL-NEXT:    v_subb_u32_e64 v4, s[4:5], v15, v3, vcc
615 ; GISEL-NEXT:    v_sub_i32_e64 v3, s[4:5], v15, v3
616 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v4, v6
617 ; GISEL-NEXT:    v_subb_u32_e32 v3, vcc, v3, v6, vcc
618 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]
619 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v2, v7
620 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v7
621 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, -1, s[4:5]
622 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v4, v6
623 ; GISEL-NEXT:    v_subbrev_u32_e32 v3, vcc, 0, v3, vcc
624 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, v8, v9, s[4:5]
625 ; GISEL-NEXT:    v_add_i32_e32 v8, vcc, 1, v10
626 ; GISEL-NEXT:    v_addc_u32_e32 v9, vcc, 0, v11, vcc
627 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v6
628 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, 0, -1, vcc
629 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v2, v7
630 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
631 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v6
632 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v12, v2, vcc
633 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, 1, v8
634 ; GISEL-NEXT:    v_addc_u32_e32 v6, vcc, 0, v9, vcc
635 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
636 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v8, v3, vcc
637 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v9, v6, vcc
638 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v4
639 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v10, v2, vcc
640 ; GISEL-NEXT:    v_xor_b32_e32 v4, v14, v5
641 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v11, v3, vcc
642 ; GISEL-NEXT:    v_xor_b32_e32 v2, v2, v4
643 ; GISEL-NEXT:    v_xor_b32_e32 v3, v3, v4
644 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v4
645 ; GISEL-NEXT:    v_subb_u32_e32 v3, vcc, v3, v4, vcc
646 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
648 ; CGP-LABEL: v_sdiv_v2i64:
649 ; CGP:       ; %bb.0:
650 ; CGP-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
651 ; CGP-NEXT:    v_mov_b32_e32 v11, v1
652 ; CGP-NEXT:    v_mov_b32_e32 v10, v0
653 ; CGP-NEXT:    v_or_b32_e32 v1, v11, v5
654 ; CGP-NEXT:    v_mov_b32_e32 v0, 0
655 ; CGP-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
656 ; CGP-NEXT:    v_mov_b32_e32 v8, v2
657 ; CGP-NEXT:    v_mov_b32_e32 v9, v3
658 ; CGP-NEXT:    ; implicit-def: $vgpr0_vgpr1
659 ; CGP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
660 ; CGP-NEXT:    s_xor_b64 s[6:7], exec, s[4:5]
661 ; CGP-NEXT:    s_cbranch_execz .LBB2_2
662 ; CGP-NEXT:  ; %bb.1:
663 ; CGP-NEXT:    v_ashrrev_i32_e32 v0, 31, v5
664 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v4, v0
665 ; CGP-NEXT:    v_addc_u32_e32 v3, vcc, v5, v0, vcc
666 ; CGP-NEXT:    v_xor_b32_e32 v2, v1, v0
667 ; CGP-NEXT:    v_xor_b32_e32 v1, v3, v0
668 ; CGP-NEXT:    v_cvt_f32_u32_e32 v3, v2
669 ; CGP-NEXT:    v_cvt_f32_u32_e32 v4, v1
670 ; CGP-NEXT:    v_sub_i32_e32 v13, vcc, 0, v2
671 ; CGP-NEXT:    v_subb_u32_e32 v14, vcc, 0, v1, vcc
672 ; CGP-NEXT:    v_mac_f32_e32 v3, 0x4f800000, v4
673 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v3, v3
674 ; CGP-NEXT:    v_mul_f32_e32 v3, 0x5f7ffffc, v3
675 ; CGP-NEXT:    v_mul_f32_e32 v4, 0x2f800000, v3
676 ; CGP-NEXT:    v_trunc_f32_e32 v5, v4
677 ; CGP-NEXT:    v_mac_f32_e32 v3, 0xcf800000, v5
678 ; CGP-NEXT:    v_cvt_u32_f32_e32 v12, v3
679 ; CGP-NEXT:    v_cvt_u32_f32_e32 v15, v5
680 ; CGP-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v13, v12, 0
681 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v13, v15, v[4:5]
682 ; CGP-NEXT:    v_mul_hi_u32 v16, v12, v3
683 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v14, v12, v[4:5]
684 ; CGP-NEXT:    v_mul_lo_u32 v5, v15, v3
685 ; CGP-NEXT:    v_mul_hi_u32 v3, v15, v3
686 ; CGP-NEXT:    v_mul_lo_u32 v17, v12, v4
687 ; CGP-NEXT:    v_mul_lo_u32 v18, v15, v4
688 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v17
689 ; CGP-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
690 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v16
691 ; CGP-NEXT:    v_mul_hi_u32 v16, v12, v4
692 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
693 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v17, v5
694 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v18, v3
695 ; CGP-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
696 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v16
697 ; CGP-NEXT:    v_cndmask_b32_e64 v16, 0, 1, vcc
698 ; CGP-NEXT:    v_add_i32_e32 v16, vcc, v17, v16
699 ; CGP-NEXT:    v_mul_hi_u32 v4, v15, v4
700 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v5
701 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
702 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v16, v5
703 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v4, v5
704 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v12, v3
705 ; CGP-NEXT:    v_addc_u32_e32 v15, vcc, v15, v4, vcc
706 ; CGP-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v13, v12, 0
707 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v13, v15, v[4:5]
708 ; CGP-NEXT:    v_ashrrev_i32_e32 v13, 31, v11
709 ; CGP-NEXT:    v_mul_hi_u32 v16, v12, v3
710 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v14, v12, v[4:5]
711 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v10, v13
712 ; CGP-NEXT:    v_addc_u32_e32 v10, vcc, v11, v13, vcc
713 ; CGP-NEXT:    v_xor_b32_e32 v11, v5, v13
714 ; CGP-NEXT:    v_mul_lo_u32 v5, v15, v3
715 ; CGP-NEXT:    v_mul_lo_u32 v14, v12, v4
716 ; CGP-NEXT:    v_mul_hi_u32 v3, v15, v3
717 ; CGP-NEXT:    v_xor_b32_e32 v10, v10, v13
718 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v14
719 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
720 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v16
721 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
722 ; CGP-NEXT:    v_mul_lo_u32 v16, v15, v4
723 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v14, v5
724 ; CGP-NEXT:    v_mul_hi_u32 v14, v12, v4
725 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v16, v3
726 ; CGP-NEXT:    v_cndmask_b32_e64 v16, 0, 1, vcc
727 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v14
728 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
729 ; CGP-NEXT:    v_add_i32_e32 v14, vcc, v16, v14
730 ; CGP-NEXT:    v_mul_hi_u32 v4, v15, v4
731 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v5
732 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
733 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v14, v5
734 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v4, v5
735 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v12, v3
736 ; CGP-NEXT:    v_addc_u32_e32 v4, vcc, v15, v4, vcc
737 ; CGP-NEXT:    v_mul_lo_u32 v5, v10, v3
738 ; CGP-NEXT:    v_mul_lo_u32 v12, v11, v4
739 ; CGP-NEXT:    v_mul_hi_u32 v14, v11, v3
740 ; CGP-NEXT:    v_mul_hi_u32 v3, v10, v3
741 ; CGP-NEXT:    v_mul_hi_u32 v15, v10, v4
742 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v12
743 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
744 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v14
745 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
746 ; CGP-NEXT:    v_mul_lo_u32 v14, v10, v4
747 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v12, v5
748 ; CGP-NEXT:    v_mul_hi_u32 v12, v11, v4
749 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v14, v3
750 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
751 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v12
752 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
753 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v14, v12
754 ; CGP-NEXT:    v_add_i32_e32 v14, vcc, v3, v5
755 ; CGP-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v2, v14, 0
756 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
757 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v12, v5
758 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v15, v5
759 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v2, v12, v[4:5]
760 ; CGP-NEXT:    v_sub_i32_e32 v3, vcc, v11, v3
761 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v1, v14, v[4:5]
762 ; CGP-NEXT:    v_subb_u32_e64 v5, s[4:5], v10, v4, vcc
763 ; CGP-NEXT:    v_sub_i32_e64 v4, s[4:5], v10, v4
764 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v5, v1
765 ; CGP-NEXT:    v_subb_u32_e32 v4, vcc, v4, v1, vcc
766 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, -1, s[4:5]
767 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v3, v2
768 ; CGP-NEXT:    v_sub_i32_e32 v3, vcc, v3, v2
769 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, -1, s[4:5]
770 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], v5, v1
771 ; CGP-NEXT:    v_subbrev_u32_e32 v4, vcc, 0, v4, vcc
772 ; CGP-NEXT:    v_cndmask_b32_e64 v5, v10, v11, s[4:5]
773 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, 1, v14
774 ; CGP-NEXT:    v_addc_u32_e32 v11, vcc, 0, v12, vcc
775 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v4, v1
776 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, -1, vcc
777 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v2
778 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
779 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
780 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v15, v2, vcc
781 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, 1, v10
782 ; CGP-NEXT:    v_addc_u32_e32 v3, vcc, 0, v11, vcc
783 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v1
784 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v10, v2, vcc
785 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v11, v3, vcc
786 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v5
787 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v14, v1, vcc
788 ; CGP-NEXT:    v_xor_b32_e32 v3, v13, v0
789 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v12, v2, vcc
790 ; CGP-NEXT:    v_xor_b32_e32 v0, v1, v3
791 ; CGP-NEXT:    v_xor_b32_e32 v1, v2, v3
792 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v0, v3
793 ; CGP-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc
794 ; CGP-NEXT:    ; implicit-def: $vgpr4
795 ; CGP-NEXT:    ; implicit-def: $vgpr10
796 ; CGP-NEXT:  .LBB2_2: ; %Flow1
797 ; CGP-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
798 ; CGP-NEXT:    s_cbranch_execz .LBB2_4
799 ; CGP-NEXT:  ; %bb.3:
800 ; CGP-NEXT:    v_cvt_f32_u32_e32 v0, v4
801 ; CGP-NEXT:    v_sub_i32_e32 v1, vcc, 0, v4
802 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v0, v0
803 ; CGP-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0
804 ; CGP-NEXT:    v_cvt_u32_f32_e32 v0, v0
805 ; CGP-NEXT:    v_mul_lo_u32 v1, v1, v0
806 ; CGP-NEXT:    v_mul_hi_u32 v1, v0, v1
807 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
808 ; CGP-NEXT:    v_mul_hi_u32 v0, v10, v0
809 ; CGP-NEXT:    v_mul_lo_u32 v1, v0, v4
810 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
811 ; CGP-NEXT:    v_sub_i32_e32 v1, vcc, v10, v1
812 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v4
813 ; CGP-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
814 ; CGP-NEXT:    v_sub_i32_e64 v2, s[4:5], v1, v4
815 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
816 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
817 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v4
818 ; CGP-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
819 ; CGP-NEXT:    v_mov_b32_e32 v1, 0
820 ; CGP-NEXT:  .LBB2_4:
821 ; CGP-NEXT:    s_or_b64 exec, exec, s[6:7]
822 ; CGP-NEXT:    v_or_b32_e32 v3, v9, v7
823 ; CGP-NEXT:    v_mov_b32_e32 v2, 0
824 ; CGP-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
825 ; CGP-NEXT:    ; implicit-def: $vgpr2_vgpr3
826 ; CGP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
827 ; CGP-NEXT:    s_xor_b64 s[6:7], exec, s[4:5]
828 ; CGP-NEXT:    s_cbranch_execnz .LBB2_7
829 ; CGP-NEXT:  ; %bb.5: ; %Flow
830 ; CGP-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
831 ; CGP-NEXT:    s_cbranch_execnz .LBB2_8
832 ; CGP-NEXT:  .LBB2_6:
833 ; CGP-NEXT:    s_or_b64 exec, exec, s[6:7]
834 ; CGP-NEXT:    s_setpc_b64 s[30:31]
835 ; CGP-NEXT:  .LBB2_7:
836 ; CGP-NEXT:    v_ashrrev_i32_e32 v2, 31, v7
837 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v6, v2
838 ; CGP-NEXT:    v_addc_u32_e32 v5, vcc, v7, v2, vcc
839 ; CGP-NEXT:    v_xor_b32_e32 v4, v3, v2
840 ; CGP-NEXT:    v_xor_b32_e32 v3, v5, v2
841 ; CGP-NEXT:    v_cvt_f32_u32_e32 v5, v4
842 ; CGP-NEXT:    v_cvt_f32_u32_e32 v6, v3
843 ; CGP-NEXT:    v_sub_i32_e32 v11, vcc, 0, v4
844 ; CGP-NEXT:    v_subb_u32_e32 v12, vcc, 0, v3, vcc
845 ; CGP-NEXT:    v_mac_f32_e32 v5, 0x4f800000, v6
846 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v5, v5
847 ; CGP-NEXT:    v_mul_f32_e32 v5, 0x5f7ffffc, v5
848 ; CGP-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v5
849 ; CGP-NEXT:    v_trunc_f32_e32 v7, v6
850 ; CGP-NEXT:    v_mac_f32_e32 v5, 0xcf800000, v7
851 ; CGP-NEXT:    v_cvt_u32_f32_e32 v10, v5
852 ; CGP-NEXT:    v_cvt_u32_f32_e32 v13, v7
853 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v11, v10, 0
854 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v11, v13, v[6:7]
855 ; CGP-NEXT:    v_mul_hi_u32 v14, v10, v5
856 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v12, v10, v[6:7]
857 ; CGP-NEXT:    v_mul_lo_u32 v7, v13, v5
858 ; CGP-NEXT:    v_mul_hi_u32 v5, v13, v5
859 ; CGP-NEXT:    v_mul_lo_u32 v15, v10, v6
860 ; CGP-NEXT:    v_mul_lo_u32 v16, v13, v6
861 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v15
862 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, 1, vcc
863 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v14
864 ; CGP-NEXT:    v_mul_hi_u32 v14, v10, v6
865 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
866 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v15, v7
867 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v16, v5
868 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, 1, vcc
869 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v14
870 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
871 ; CGP-NEXT:    v_add_i32_e32 v14, vcc, v15, v14
872 ; CGP-NEXT:    v_mul_hi_u32 v6, v13, v6
873 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v7
874 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
875 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v14, v7
876 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v7
877 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v5
878 ; CGP-NEXT:    v_addc_u32_e32 v13, vcc, v13, v6, vcc
879 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v11, v10, 0
880 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v11, v13, v[6:7]
881 ; CGP-NEXT:    v_ashrrev_i32_e32 v11, 31, v9
882 ; CGP-NEXT:    v_mul_hi_u32 v14, v10, v5
883 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v12, v10, v[6:7]
884 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v8, v11
885 ; CGP-NEXT:    v_addc_u32_e32 v8, vcc, v9, v11, vcc
886 ; CGP-NEXT:    v_xor_b32_e32 v9, v7, v11
887 ; CGP-NEXT:    v_mul_lo_u32 v7, v13, v5
888 ; CGP-NEXT:    v_mul_lo_u32 v12, v10, v6
889 ; CGP-NEXT:    v_mul_hi_u32 v5, v13, v5
890 ; CGP-NEXT:    v_xor_b32_e32 v8, v8, v11
891 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v12
892 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
893 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v14
894 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
895 ; CGP-NEXT:    v_mul_lo_u32 v14, v13, v6
896 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v12, v7
897 ; CGP-NEXT:    v_mul_hi_u32 v12, v10, v6
898 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v14, v5
899 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
900 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v12
901 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
902 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v14, v12
903 ; CGP-NEXT:    v_mul_hi_u32 v6, v13, v6
904 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v7
905 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
906 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v12, v7
907 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v7
908 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v10, v5
909 ; CGP-NEXT:    v_addc_u32_e32 v6, vcc, v13, v6, vcc
910 ; CGP-NEXT:    v_mul_lo_u32 v7, v8, v5
911 ; CGP-NEXT:    v_mul_lo_u32 v10, v9, v6
912 ; CGP-NEXT:    v_mul_hi_u32 v12, v9, v5
913 ; CGP-NEXT:    v_mul_hi_u32 v5, v8, v5
914 ; CGP-NEXT:    v_mul_hi_u32 v13, v8, v6
915 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v10
916 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
917 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v12
918 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
919 ; CGP-NEXT:    v_mul_lo_u32 v12, v8, v6
920 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v10, v7
921 ; CGP-NEXT:    v_mul_hi_u32 v10, v9, v6
922 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v12, v5
923 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
924 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v10
925 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
926 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v12, v10
927 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v5, v7
928 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v4, v12, 0
929 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
930 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v10, v7
931 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v13, v7
932 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v4, v10, v[6:7]
933 ; CGP-NEXT:    v_sub_i32_e32 v5, vcc, v9, v5
934 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v3, v12, v[6:7]
935 ; CGP-NEXT:    v_subb_u32_e64 v7, s[4:5], v8, v6, vcc
936 ; CGP-NEXT:    v_sub_i32_e64 v6, s[4:5], v8, v6
937 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v7, v3
938 ; CGP-NEXT:    v_subb_u32_e32 v6, vcc, v6, v3, vcc
939 ; CGP-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]
940 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v5, v4
941 ; CGP-NEXT:    v_sub_i32_e32 v5, vcc, v5, v4
942 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, -1, s[4:5]
943 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], v7, v3
944 ; CGP-NEXT:    v_subbrev_u32_e32 v6, vcc, 0, v6, vcc
945 ; CGP-NEXT:    v_cndmask_b32_e64 v7, v8, v9, s[4:5]
946 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, 1, v12
947 ; CGP-NEXT:    v_addc_u32_e32 v9, vcc, 0, v10, vcc
948 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v6, v3
949 ; CGP-NEXT:    v_cndmask_b32_e64 v13, 0, -1, vcc
950 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v5, v4
951 ; CGP-NEXT:    v_cndmask_b32_e64 v4, 0, -1, vcc
952 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v3
953 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v13, v4, vcc
954 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v8
955 ; CGP-NEXT:    v_addc_u32_e32 v5, vcc, 0, v9, vcc
956 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3
957 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v8, v4, vcc
958 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v9, v5, vcc
959 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v7
960 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v12, v3, vcc
961 ; CGP-NEXT:    v_xor_b32_e32 v5, v11, v2
962 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v10, v4, vcc
963 ; CGP-NEXT:    v_xor_b32_e32 v2, v3, v5
964 ; CGP-NEXT:    v_xor_b32_e32 v3, v4, v5
965 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v2, v5
966 ; CGP-NEXT:    v_subb_u32_e32 v3, vcc, v3, v5, vcc
967 ; CGP-NEXT:    ; implicit-def: $vgpr6
968 ; CGP-NEXT:    ; implicit-def: $vgpr8
969 ; CGP-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
970 ; CGP-NEXT:    s_cbranch_execz .LBB2_6
971 ; CGP-NEXT:  .LBB2_8:
972 ; CGP-NEXT:    v_cvt_f32_u32_e32 v2, v6
973 ; CGP-NEXT:    v_sub_i32_e32 v3, vcc, 0, v6
974 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v2, v2
975 ; CGP-NEXT:    v_mul_f32_e32 v2, 0x4f7ffffe, v2
976 ; CGP-NEXT:    v_cvt_u32_f32_e32 v2, v2
977 ; CGP-NEXT:    v_mul_lo_u32 v3, v3, v2
978 ; CGP-NEXT:    v_mul_hi_u32 v3, v2, v3
979 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
980 ; CGP-NEXT:    v_mul_hi_u32 v2, v8, v2
981 ; CGP-NEXT:    v_mul_lo_u32 v3, v2, v6
982 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v2
983 ; CGP-NEXT:    v_sub_i32_e32 v3, vcc, v8, v3
984 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v6
985 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
986 ; CGP-NEXT:    v_sub_i32_e64 v4, s[4:5], v3, v6
987 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
988 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v2
989 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v6
990 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
991 ; CGP-NEXT:    v_mov_b32_e32 v3, 0
992 ; CGP-NEXT:    s_or_b64 exec, exec, s[6:7]
993 ; CGP-NEXT:    s_setpc_b64 s[30:31]
994   %result = sdiv <2 x i64> %num, %den
995   ret <2 x i64> %result
998 define i64 @v_sdiv_i64_pow2k_denom(i64 %num) {
999 ; CHECK-LABEL: v_sdiv_i64_pow2k_denom:
1000 ; CHECK:       ; %bb.0:
1001 ; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1002 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v2, 0x1000
1003 ; CHECK-NEXT:    v_cvt_f32_ubyte0_e32 v3, 0
1004 ; CHECK-NEXT:    s_movk_i32 s6, 0xf000
1005 ; CHECK-NEXT:    v_mac_f32_e32 v2, 0x4f800000, v3
1006 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v2, v2
1007 ; CHECK-NEXT:    v_mul_f32_e32 v2, 0x5f7ffffc, v2
1008 ; CHECK-NEXT:    v_mul_f32_e32 v3, 0x2f800000, v2
1009 ; CHECK-NEXT:    v_trunc_f32_e32 v4, v3
1010 ; CHECK-NEXT:    v_mac_f32_e32 v2, 0xcf800000, v4
1011 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v5, v2
1012 ; CHECK-NEXT:    v_mov_b32_e32 v2, 0xfffff000
1013 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v6, v4
1014 ; CHECK-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], v2, v5, 0
1015 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], s6, v6, v[3:4]
1016 ; CHECK-NEXT:    v_mul_hi_u32 v7, v5, v2
1017 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], -1, v5, v[3:4]
1018 ; CHECK-NEXT:    v_mul_lo_u32 v4, v6, v2
1019 ; CHECK-NEXT:    v_mul_hi_u32 v2, v6, v2
1020 ; CHECK-NEXT:    v_mul_lo_u32 v8, v5, v3
1021 ; CHECK-NEXT:    v_mul_lo_u32 v9, v6, v3
1022 ; CHECK-NEXT:    v_mul_hi_u32 v10, v5, v3
1023 ; CHECK-NEXT:    v_mul_hi_u32 v3, v6, v3
1024 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v8
1025 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1026 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v7
1027 ; CHECK-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1028 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v8, v4
1029 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v9, v2
1030 ; CHECK-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1031 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v10
1032 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1033 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
1034 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v4
1035 ; CHECK-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1036 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v7, v4
1037 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v4
1038 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v2
1039 ; CHECK-NEXT:    v_addc_u32_e32 v6, vcc, v6, v3, vcc
1040 ; CHECK-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], s6, v5, 0
1041 ; CHECK-NEXT:    v_ashrrev_i32_e32 v7, 31, v1
1042 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v0, v7
1043 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], s6, v6, v[3:4]
1044 ; CHECK-NEXT:    v_addc_u32_e32 v9, vcc, v1, v7, vcc
1045 ; CHECK-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], -1, v5, v[3:4]
1046 ; CHECK-NEXT:    v_xor_b32_e32 v3, v8, v7
1047 ; CHECK-NEXT:    v_mul_lo_u32 v1, v6, v2
1048 ; CHECK-NEXT:    v_mul_lo_u32 v8, v5, v0
1049 ; CHECK-NEXT:    v_xor_b32_e32 v4, v9, v7
1050 ; CHECK-NEXT:    v_mul_hi_u32 v9, v5, v2
1051 ; CHECK-NEXT:    v_mul_hi_u32 v2, v6, v2
1052 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v8
1053 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1054 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v9
1055 ; CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1056 ; CHECK-NEXT:    v_mul_lo_u32 v9, v6, v0
1057 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v8, v1
1058 ; CHECK-NEXT:    v_mul_hi_u32 v8, v5, v0
1059 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v9, v2
1060 ; CHECK-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1061 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
1062 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1063 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v9, v8
1064 ; CHECK-NEXT:    v_mul_hi_u32 v0, v6, v0
1065 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
1066 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1067 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v8, v2
1068 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
1069 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v5, v1
1070 ; CHECK-NEXT:    v_addc_u32_e32 v0, vcc, v6, v0, vcc
1071 ; CHECK-NEXT:    v_mul_lo_u32 v2, v4, v1
1072 ; CHECK-NEXT:    v_mul_lo_u32 v5, v3, v0
1073 ; CHECK-NEXT:    v_mul_hi_u32 v8, v3, v1
1074 ; CHECK-NEXT:    v_mul_hi_u32 v1, v4, v1
1075 ; CHECK-NEXT:    s_movk_i32 s6, 0x1000
1076 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v5
1077 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1078 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
1079 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1080 ; CHECK-NEXT:    v_mul_lo_u32 v8, v4, v0
1081 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
1082 ; CHECK-NEXT:    v_mul_hi_u32 v5, v3, v0
1083 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v8, v1
1084 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1085 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v5
1086 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1087 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v8, v5
1088 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v1, v2
1089 ; CHECK-NEXT:    v_mul_hi_u32 v9, v4, v0
1090 ; CHECK-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v8, 0
1091 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1092 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
1093 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v9, v2
1094 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[4:5], s6, v5, v[1:2]
1095 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v3, v0
1096 ; CHECK-NEXT:    v_subb_u32_e64 v2, s[4:5], v4, v1, vcc
1097 ; CHECK-NEXT:    v_sub_i32_e64 v1, s[4:5], v4, v1
1098 ; CHECK-NEXT:    v_mov_b32_e32 v6, 0x1000
1099 ; CHECK-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v1, vcc
1100 ; CHECK-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v6
1101 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v0, v6
1102 ; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, -1, s[4:5]
1103 ; CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v2
1104 ; CHECK-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v1, vcc
1105 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, -1, v3, s[4:5]
1106 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, 1, v8
1107 ; CHECK-NEXT:    v_addc_u32_e32 v4, vcc, 0, v5, vcc
1108 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v6
1109 ; CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc
1110 ; CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
1111 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc
1112 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, 1, v3
1113 ; CHECK-NEXT:    v_addc_u32_e32 v6, vcc, 0, v4, vcc
1114 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0
1115 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
1116 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v4, v6, vcc
1117 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
1118 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v8, v0, vcc
1119 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1120 ; CHECK-NEXT:    v_xor_b32_e32 v0, v0, v7
1121 ; CHECK-NEXT:    v_xor_b32_e32 v1, v1, v7
1122 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v0, v7
1123 ; CHECK-NEXT:    v_subb_u32_e32 v1, vcc, v1, v7, vcc
1124 ; CHECK-NEXT:    s_setpc_b64 s[30:31]
1125   %result = sdiv i64 %num, 4096
1126   ret i64 %result
1129 define <2 x i64> @v_sdiv_v2i64_pow2k_denom(<2 x i64> %num) {
1130 ; GISEL-LABEL: v_sdiv_v2i64_pow2k_denom:
1131 ; GISEL:       ; %bb.0:
1132 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1133 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v4, 0x1000
1134 ; GISEL-NEXT:    v_cvt_f32_ubyte0_e32 v6, 0
1135 ; GISEL-NEXT:    s_sub_u32 s6, 0, 0x1000
1136 ; GISEL-NEXT:    s_subb_u32 s7, 0, 0
1137 ; GISEL-NEXT:    v_mac_f32_e32 v4, 0x4f800000, v6
1138 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v4, v4
1139 ; GISEL-NEXT:    v_mul_f32_e32 v4, 0x5f7ffffc, v4
1140 ; GISEL-NEXT:    v_mul_f32_e32 v5, 0x2f800000, v4
1141 ; GISEL-NEXT:    v_trunc_f32_e32 v7, v5
1142 ; GISEL-NEXT:    v_mac_f32_e32 v4, 0xcf800000, v7
1143 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v9, v4
1144 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v10, v7
1145 ; GISEL-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], s6, v9, 0
1146 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s6, v10, v[5:6]
1147 ; GISEL-NEXT:    v_mul_lo_u32 v5, v10, v4
1148 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s7, v9, v[7:8]
1149 ; GISEL-NEXT:    v_mul_hi_u32 v8, v9, v4
1150 ; GISEL-NEXT:    v_mul_hi_u32 v4, v10, v4
1151 ; GISEL-NEXT:    v_mul_lo_u32 v11, v9, v7
1152 ; GISEL-NEXT:    v_mul_lo_u32 v12, v10, v7
1153 ; GISEL-NEXT:    v_mul_hi_u32 v13, v9, v7
1154 ; GISEL-NEXT:    v_mul_hi_u32 v7, v10, v7
1155 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v11
1156 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1157 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
1158 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1159 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v11, v5
1160 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v12, v4
1161 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1162 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v13
1163 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1164 ; GISEL-NEXT:    v_add_i32_e32 v8, vcc, v8, v11
1165 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v5
1166 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1167 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v8, v5
1168 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
1169 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v9, v4
1170 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s6, v11, 0
1171 ; GISEL-NEXT:    v_addc_u32_e32 v5, vcc, v10, v5, vcc
1172 ; GISEL-NEXT:    v_mov_b32_e32 v4, v8
1173 ; GISEL-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], s6, v5, v[4:5]
1174 ; GISEL-NEXT:    v_ashrrev_i32_e32 v4, 31, v1
1175 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v4
1176 ; GISEL-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], s7, v11, v[8:9]
1177 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v1, v4, vcc
1178 ; GISEL-NEXT:    v_xor_b32_e32 v9, v0, v4
1179 ; GISEL-NEXT:    v_mul_lo_u32 v0, v5, v7
1180 ; GISEL-NEXT:    v_mul_lo_u32 v10, v11, v8
1181 ; GISEL-NEXT:    v_xor_b32_e32 v12, v1, v4
1182 ; GISEL-NEXT:    v_mul_hi_u32 v1, v11, v7
1183 ; GISEL-NEXT:    v_mul_hi_u32 v7, v5, v7
1184 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v10
1185 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1186 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
1187 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1188 ; GISEL-NEXT:    v_mul_lo_u32 v1, v5, v8
1189 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v10, v0
1190 ; GISEL-NEXT:    v_mul_hi_u32 v10, v11, v8
1191 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v7
1192 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1193 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v10
1194 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1195 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v10
1196 ; GISEL-NEXT:    v_mul_hi_u32 v8, v5, v8
1197 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v1, v0
1198 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1199 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v7, v1
1200 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v8, v1
1201 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v11, v0
1202 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v5, v1, vcc
1203 ; GISEL-NEXT:    v_mul_lo_u32 v7, v12, v0
1204 ; GISEL-NEXT:    v_mul_lo_u32 v8, v9, v1
1205 ; GISEL-NEXT:    v_mul_hi_u32 v10, v9, v0
1206 ; GISEL-NEXT:    v_mul_hi_u32 v0, v12, v0
1207 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x1000
1208 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
1209 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1210 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v10
1211 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1212 ; GISEL-NEXT:    v_mul_lo_u32 v10, v12, v1
1213 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
1214 ; GISEL-NEXT:    v_mul_hi_u32 v8, v9, v1
1215 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v10, v0
1216 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1217 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v8
1218 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1219 ; GISEL-NEXT:    v_add_i32_e32 v8, vcc, v10, v8
1220 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v0, v7
1221 ; GISEL-NEXT:    v_mul_hi_u32 v11, v12, v1
1222 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], v5, v10, 0
1223 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1224 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
1225 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v11, v7
1226 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v5, v11, v[1:2]
1227 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v9, v0
1228 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], 0, v10, v[7:8]
1229 ; GISEL-NEXT:    s_sub_u32 s6, 0, 0x1000
1230 ; GISEL-NEXT:    s_subb_u32 s7, 0, 0
1231 ; GISEL-NEXT:    v_subb_u32_e64 v1, s[4:5], v12, v7, vcc
1232 ; GISEL-NEXT:    v_sub_i32_e64 v7, s[4:5], v12, v7
1233 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v5
1234 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]
1235 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v1
1236 ; GISEL-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v7, vcc
1237 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v7, 0x1000
1238 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v0, v5
1239 ; GISEL-NEXT:    v_subbrev_u32_e32 v9, vcc, 0, v1, vcc
1240 ; GISEL-NEXT:    v_mac_f32_e32 v7, 0x4f800000, v6
1241 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v1, v7
1242 ; GISEL-NEXT:    v_add_i32_e32 v12, vcc, 1, v10
1243 ; GISEL-NEXT:    v_addc_u32_e32 v13, vcc, 0, v11, vcc
1244 ; GISEL-NEXT:    v_mul_f32_e32 v1, 0x5f7ffffc, v1
1245 ; GISEL-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v1
1246 ; GISEL-NEXT:    v_trunc_f32_e32 v6, v6
1247 ; GISEL-NEXT:    v_mac_f32_e32 v1, 0xcf800000, v6
1248 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v14, v1
1249 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, -1, v8, s[4:5]
1250 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v5
1251 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v15, v6
1252 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v14, 0
1253 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, -1, vcc
1254 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v9
1255 ; GISEL-NEXT:    v_cndmask_b32_e32 v9, -1, v7, vcc
1256 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s6, v15, v[1:2]
1257 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, 1, v12
1258 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v14, v[6:7]
1259 ; GISEL-NEXT:    v_addc_u32_e32 v16, vcc, 0, v13, vcc
1260 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v9
1261 ; GISEL-NEXT:    v_cndmask_b32_e32 v7, v12, v1, vcc
1262 ; GISEL-NEXT:    v_mul_lo_u32 v1, v15, v0
1263 ; GISEL-NEXT:    v_mul_lo_u32 v9, v14, v6
1264 ; GISEL-NEXT:    v_cndmask_b32_e32 v12, v13, v16, vcc
1265 ; GISEL-NEXT:    v_mul_hi_u32 v13, v14, v0
1266 ; GISEL-NEXT:    v_mul_hi_u32 v0, v15, v0
1267 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v9
1268 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1269 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v13
1270 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1271 ; GISEL-NEXT:    v_mul_lo_u32 v13, v15, v6
1272 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
1273 ; GISEL-NEXT:    v_mul_hi_u32 v9, v14, v6
1274 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v13, v0
1275 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
1276 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v9
1277 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1278 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v13, v9
1279 ; GISEL-NEXT:    v_mul_hi_u32 v6, v15, v6
1280 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
1281 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1282 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
1283 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v6, v1
1284 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v14, v0
1285 ; GISEL-NEXT:    v_addc_u32_e32 v13, vcc, v15, v1, vcc
1286 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v9, 0
1287 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v8
1288 ; GISEL-NEXT:    v_cndmask_b32_e32 v8, v10, v7, vcc
1289 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s6, v13, v[1:2]
1290 ; GISEL-NEXT:    v_xor_b32_e32 v1, v8, v4
1291 ; GISEL-NEXT:    v_ashrrev_i32_e32 v8, 31, v3
1292 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v9, v[6:7]
1293 ; GISEL-NEXT:    v_cndmask_b32_e32 v10, v11, v12, vcc
1294 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
1295 ; GISEL-NEXT:    v_addc_u32_e32 v3, vcc, v3, v8, vcc
1296 ; GISEL-NEXT:    v_xor_b32_e32 v11, v2, v8
1297 ; GISEL-NEXT:    v_mul_lo_u32 v2, v13, v0
1298 ; GISEL-NEXT:    v_mul_lo_u32 v7, v9, v6
1299 ; GISEL-NEXT:    v_xor_b32_e32 v12, v3, v8
1300 ; GISEL-NEXT:    v_mul_hi_u32 v3, v9, v0
1301 ; GISEL-NEXT:    v_mul_hi_u32 v0, v13, v0
1302 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v7
1303 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1304 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
1305 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1306 ; GISEL-NEXT:    v_mul_lo_u32 v3, v13, v6
1307 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v7, v2
1308 ; GISEL-NEXT:    v_mul_hi_u32 v7, v9, v6
1309 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
1310 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
1311 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v7
1312 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1313 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v7
1314 ; GISEL-NEXT:    v_mul_hi_u32 v6, v13, v6
1315 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
1316 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1317 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
1318 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v6, v2
1319 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v9, v0
1320 ; GISEL-NEXT:    v_addc_u32_e32 v2, vcc, v13, v2, vcc
1321 ; GISEL-NEXT:    v_mul_lo_u32 v3, v12, v0
1322 ; GISEL-NEXT:    v_mul_lo_u32 v6, v11, v2
1323 ; GISEL-NEXT:    v_mul_hi_u32 v7, v11, v0
1324 ; GISEL-NEXT:    v_mul_hi_u32 v0, v12, v0
1325 ; GISEL-NEXT:    v_xor_b32_e32 v9, v10, v4
1326 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v6
1327 ; GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1328 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v7
1329 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
1330 ; GISEL-NEXT:    v_mul_lo_u32 v7, v12, v2
1331 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v6, v3
1332 ; GISEL-NEXT:    v_mul_hi_u32 v6, v11, v2
1333 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v7, v0
1334 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1335 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v6
1336 ; GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1337 ; GISEL-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
1338 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v0, v3
1339 ; GISEL-NEXT:    v_mul_hi_u32 v7, v12, v2
1340 ; GISEL-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], v5, v10, 0
1341 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1342 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v6, v0
1343 ; GISEL-NEXT:    v_add_i32_e32 v13, vcc, v7, v0
1344 ; GISEL-NEXT:    v_mov_b32_e32 v0, v3
1345 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v5, v13, v[0:1]
1346 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v1, v4
1347 ; GISEL-NEXT:    v_subb_u32_e32 v1, vcc, v9, v4, vcc
1348 ; GISEL-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], 0, v10, v[6:7]
1349 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v11, v2
1350 ; GISEL-NEXT:    v_subb_u32_e64 v4, s[4:5], v12, v3, vcc
1351 ; GISEL-NEXT:    v_sub_i32_e64 v3, s[4:5], v12, v3
1352 ; GISEL-NEXT:    v_subbrev_u32_e32 v3, vcc, 0, v3, vcc
1353 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v2, v5
1354 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v5
1355 ; GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, -1, s[4:5]
1356 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
1357 ; GISEL-NEXT:    v_subbrev_u32_e32 v3, vcc, 0, v3, vcc
1358 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, -1, v6, s[4:5]
1359 ; GISEL-NEXT:    v_add_i32_e32 v6, vcc, 1, v10
1360 ; GISEL-NEXT:    v_addc_u32_e32 v7, vcc, 0, v13, vcc
1361 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v2, v5
1362 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
1363 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v3
1364 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, -1, v2, vcc
1365 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, 1, v6
1366 ; GISEL-NEXT:    v_addc_u32_e32 v5, vcc, 0, v7, vcc
1367 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
1368 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v6, v3, vcc
1369 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v7, v5, vcc
1370 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v4
1371 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v10, v2, vcc
1372 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v13, v3, vcc
1373 ; GISEL-NEXT:    v_xor_b32_e32 v2, v2, v8
1374 ; GISEL-NEXT:    v_xor_b32_e32 v3, v3, v8
1375 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v8
1376 ; GISEL-NEXT:    v_subb_u32_e32 v3, vcc, v3, v8, vcc
1377 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1379 ; CGP-LABEL: v_sdiv_v2i64_pow2k_denom:
1380 ; CGP:       ; %bb.0:
1381 ; CGP-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1382 ; CGP-NEXT:    v_cvt_f32_u32_e32 v4, 0x1000
1383 ; CGP-NEXT:    v_cvt_f32_ubyte0_e32 v5, 0
1384 ; CGP-NEXT:    s_movk_i32 s7, 0xf000
1385 ; CGP-NEXT:    s_movk_i32 s6, 0x1000
1386 ; CGP-NEXT:    v_mac_f32_e32 v4, 0x4f800000, v5
1387 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v4, v4
1388 ; CGP-NEXT:    v_mul_f32_e32 v4, 0x5f7ffffc, v4
1389 ; CGP-NEXT:    v_mul_f32_e32 v5, 0x2f800000, v4
1390 ; CGP-NEXT:    v_trunc_f32_e32 v6, v5
1391 ; CGP-NEXT:    v_mac_f32_e32 v4, 0xcf800000, v6
1392 ; CGP-NEXT:    v_cvt_u32_f32_e32 v7, v4
1393 ; CGP-NEXT:    v_mov_b32_e32 v4, 0xfffff000
1394 ; CGP-NEXT:    v_cvt_u32_f32_e32 v8, v6
1395 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v4, v7, 0
1396 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], s7, v8, v[5:6]
1397 ; CGP-NEXT:    v_mul_hi_u32 v9, v7, v4
1398 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], -1, v7, v[5:6]
1399 ; CGP-NEXT:    v_mul_lo_u32 v6, v8, v4
1400 ; CGP-NEXT:    v_mul_hi_u32 v4, v8, v4
1401 ; CGP-NEXT:    v_mul_lo_u32 v10, v7, v5
1402 ; CGP-NEXT:    v_mul_lo_u32 v11, v8, v5
1403 ; CGP-NEXT:    v_mul_hi_u32 v12, v7, v5
1404 ; CGP-NEXT:    v_mul_hi_u32 v5, v8, v5
1405 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v10
1406 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1407 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v9
1408 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1409 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v10, v6
1410 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v11, v4
1411 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1412 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v4, v12
1413 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1414 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v9, v10
1415 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v4, v6
1416 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1417 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v9, v6
1418 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v6
1419 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v7, v4
1420 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v9, 0
1421 ; CGP-NEXT:    v_addc_u32_e32 v10, vcc, v8, v5, vcc
1422 ; CGP-NEXT:    v_ashrrev_i32_e32 v5, 31, v1
1423 ; CGP-NEXT:    v_mov_b32_e32 v4, v7
1424 ; CGP-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s7, v10, v[4:5]
1425 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v0, v5
1426 ; CGP-NEXT:    v_addc_u32_e32 v11, vcc, v1, v5, vcc
1427 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], -1, v9, v[7:8]
1428 ; CGP-NEXT:    v_xor_b32_e32 v8, v4, v5
1429 ; CGP-NEXT:    v_mul_lo_u32 v1, v10, v6
1430 ; CGP-NEXT:    v_mul_lo_u32 v4, v9, v0
1431 ; CGP-NEXT:    v_mul_hi_u32 v7, v9, v6
1432 ; CGP-NEXT:    v_mul_hi_u32 v6, v10, v6
1433 ; CGP-NEXT:    v_xor_b32_e32 v11, v11, v5
1434 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v4
1435 ; CGP-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1436 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v7
1437 ; CGP-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1438 ; CGP-NEXT:    v_mul_lo_u32 v7, v10, v0
1439 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v4, v1
1440 ; CGP-NEXT:    v_mul_hi_u32 v4, v9, v0
1441 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
1442 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1443 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v6, v4
1444 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1445 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
1446 ; CGP-NEXT:    v_mul_hi_u32 v0, v10, v0
1447 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v4, v1
1448 ; CGP-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1449 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v6, v4
1450 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v4
1451 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
1452 ; CGP-NEXT:    v_addc_u32_e32 v0, vcc, v10, v0, vcc
1453 ; CGP-NEXT:    v_mul_lo_u32 v6, v11, v1
1454 ; CGP-NEXT:    v_mul_lo_u32 v7, v8, v0
1455 ; CGP-NEXT:    v_mul_hi_u32 v9, v8, v1
1456 ; CGP-NEXT:    v_mul_hi_u32 v1, v11, v1
1457 ; CGP-NEXT:    v_mul_hi_u32 v10, v11, v0
1458 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v7
1459 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1460 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v9
1461 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1462 ; CGP-NEXT:    v_mul_lo_u32 v9, v11, v0
1463 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
1464 ; CGP-NEXT:    v_mul_hi_u32 v7, v8, v0
1465 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
1466 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1467 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v7
1468 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1469 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v9, v7
1470 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v1, v6
1471 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v9, 0
1472 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1473 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
1474 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v6
1475 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s6, v10, v[1:2]
1476 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v8, v0
1477 ; CGP-NEXT:    v_mov_b32_e32 v4, 0x1000
1478 ; CGP-NEXT:    v_subb_u32_e64 v1, s[4:5], v11, v6, vcc
1479 ; CGP-NEXT:    v_sub_i32_e64 v6, s[4:5], v11, v6
1480 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v4
1481 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]
1482 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v1
1483 ; CGP-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v6, vcc
1484 ; CGP-NEXT:    v_cvt_f32_u32_e32 v6, 0x1000
1485 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v0, v4
1486 ; CGP-NEXT:    v_cndmask_b32_e64 v8, -1, v7, s[4:5]
1487 ; CGP-NEXT:    v_subbrev_u32_e32 v7, vcc, 0, v1, vcc
1488 ; CGP-NEXT:    v_cvt_f32_ubyte0_e32 v1, 0
1489 ; CGP-NEXT:    v_mac_f32_e32 v6, 0x4f800000, v1
1490 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v1, v6
1491 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, 1, v9
1492 ; CGP-NEXT:    v_addc_u32_e32 v12, vcc, 0, v10, vcc
1493 ; CGP-NEXT:    v_mul_f32_e32 v1, 0x5f7ffffc, v1
1494 ; CGP-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v1
1495 ; CGP-NEXT:    v_trunc_f32_e32 v6, v6
1496 ; CGP-NEXT:    v_mac_f32_e32 v1, 0xcf800000, v6
1497 ; CGP-NEXT:    v_cvt_u32_f32_e32 v13, v1
1498 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v4
1499 ; CGP-NEXT:    v_cvt_u32_f32_e32 v15, v6
1500 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, -1, vcc
1501 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s7, v13, 0
1502 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v7
1503 ; CGP-NEXT:    v_cndmask_b32_e32 v14, -1, v14, vcc
1504 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v15, v[1:2]
1505 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, 1, v11
1506 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], -1, v13, v[6:7]
1507 ; CGP-NEXT:    v_addc_u32_e32 v16, vcc, 0, v12, vcc
1508 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v14
1509 ; CGP-NEXT:    v_cndmask_b32_e32 v7, v11, v1, vcc
1510 ; CGP-NEXT:    v_mul_lo_u32 v1, v15, v0
1511 ; CGP-NEXT:    v_mul_lo_u32 v11, v13, v6
1512 ; CGP-NEXT:    v_mul_hi_u32 v14, v13, v0
1513 ; CGP-NEXT:    v_cndmask_b32_e32 v12, v12, v16, vcc
1514 ; CGP-NEXT:    v_mul_hi_u32 v0, v15, v0
1515 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v11
1516 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1517 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v14
1518 ; CGP-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1519 ; CGP-NEXT:    v_mul_lo_u32 v14, v15, v6
1520 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
1521 ; CGP-NEXT:    v_mul_hi_u32 v11, v13, v6
1522 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v14, v0
1523 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
1524 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v11
1525 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1526 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v14, v11
1527 ; CGP-NEXT:    v_mul_hi_u32 v6, v15, v6
1528 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
1529 ; CGP-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1530 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
1531 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v6, v1
1532 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v13, v0
1533 ; CGP-NEXT:    v_addc_u32_e32 v13, vcc, v15, v1, vcc
1534 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s7, v11, 0
1535 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v8
1536 ; CGP-NEXT:    v_cndmask_b32_e32 v6, v9, v7, vcc
1537 ; CGP-NEXT:    v_xor_b32_e32 v9, v6, v5
1538 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v13, v[1:2]
1539 ; CGP-NEXT:    v_cndmask_b32_e32 v8, v10, v12, vcc
1540 ; CGP-NEXT:    v_xor_b32_e32 v1, v8, v5
1541 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], -1, v11, v[6:7]
1542 ; CGP-NEXT:    v_ashrrev_i32_e32 v8, 31, v3
1543 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
1544 ; CGP-NEXT:    v_addc_u32_e32 v3, vcc, v3, v8, vcc
1545 ; CGP-NEXT:    v_xor_b32_e32 v7, v2, v8
1546 ; CGP-NEXT:    v_mul_lo_u32 v2, v13, v0
1547 ; CGP-NEXT:    v_mul_lo_u32 v10, v11, v6
1548 ; CGP-NEXT:    v_xor_b32_e32 v12, v3, v8
1549 ; CGP-NEXT:    v_mul_hi_u32 v3, v11, v0
1550 ; CGP-NEXT:    v_mul_hi_u32 v0, v13, v0
1551 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v10
1552 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1553 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
1554 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1555 ; CGP-NEXT:    v_mul_lo_u32 v3, v13, v6
1556 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v10, v2
1557 ; CGP-NEXT:    v_mul_hi_u32 v10, v11, v6
1558 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
1559 ; CGP-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
1560 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v10
1561 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1562 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v10
1563 ; CGP-NEXT:    v_mul_hi_u32 v6, v13, v6
1564 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
1565 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1566 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
1567 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v6, v2
1568 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v11, v0
1569 ; CGP-NEXT:    v_addc_u32_e32 v2, vcc, v13, v2, vcc
1570 ; CGP-NEXT:    v_mul_lo_u32 v6, v12, v3
1571 ; CGP-NEXT:    v_mul_lo_u32 v10, v7, v2
1572 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v9, v5
1573 ; CGP-NEXT:    v_subb_u32_e32 v1, vcc, v1, v5, vcc
1574 ; CGP-NEXT:    v_mul_hi_u32 v5, v7, v3
1575 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v10
1576 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1577 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
1578 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1579 ; CGP-NEXT:    v_mul_lo_u32 v6, v12, v2
1580 ; CGP-NEXT:    v_mul_hi_u32 v3, v12, v3
1581 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v9, v5
1582 ; CGP-NEXT:    v_mul_hi_u32 v9, v7, v2
1583 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v6, v3
1584 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1585 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v9
1586 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1587 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v9
1588 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v3, v5
1589 ; CGP-NEXT:    v_mul_hi_u32 v10, v12, v2
1590 ; CGP-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], s6, v9, 0
1591 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1592 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
1593 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v5
1594 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], s6, v10, v[3:4]
1595 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v7, v2
1596 ; CGP-NEXT:    v_subb_u32_e64 v3, s[4:5], v12, v5, vcc
1597 ; CGP-NEXT:    v_sub_i32_e64 v5, s[4:5], v12, v5
1598 ; CGP-NEXT:    v_subbrev_u32_e32 v5, vcc, 0, v5, vcc
1599 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v2, v4
1600 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v2, v4
1601 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, -1, s[4:5]
1602 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v3
1603 ; CGP-NEXT:    v_subbrev_u32_e32 v5, vcc, 0, v5, vcc
1604 ; CGP-NEXT:    v_cndmask_b32_e64 v3, -1, v6, s[4:5]
1605 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, 1, v9
1606 ; CGP-NEXT:    v_addc_u32_e32 v7, vcc, 0, v10, vcc
1607 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v2, v4
1608 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
1609 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v5
1610 ; CGP-NEXT:    v_cndmask_b32_e32 v2, -1, v2, vcc
1611 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v6
1612 ; CGP-NEXT:    v_addc_u32_e32 v5, vcc, 0, v7, vcc
1613 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
1614 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v6, v4, vcc
1615 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v7, v5, vcc
1616 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3
1617 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v9, v2, vcc
1618 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v10, v4, vcc
1619 ; CGP-NEXT:    v_xor_b32_e32 v2, v2, v8
1620 ; CGP-NEXT:    v_xor_b32_e32 v3, v3, v8
1621 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v2, v8
1622 ; CGP-NEXT:    v_subb_u32_e32 v3, vcc, v3, v8, vcc
1623 ; CGP-NEXT:    s_setpc_b64 s[30:31]
1624   %result = sdiv <2 x i64> %num, <i64 4096, i64 4096>
1625   ret <2 x i64> %result
1628 define i64 @v_sdiv_i64_oddk_denom(i64 %num) {
1629 ; CHECK-LABEL: v_sdiv_i64_oddk_denom:
1630 ; CHECK:       ; %bb.0:
1631 ; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1632 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v2, 0x12d8fb
1633 ; CHECK-NEXT:    v_cvt_f32_ubyte0_e32 v3, 0
1634 ; CHECK-NEXT:    s_mov_b32 s6, 0xffed2705
1635 ; CHECK-NEXT:    v_mac_f32_e32 v2, 0x4f800000, v3
1636 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v2, v2
1637 ; CHECK-NEXT:    v_mul_f32_e32 v2, 0x5f7ffffc, v2
1638 ; CHECK-NEXT:    v_mul_f32_e32 v3, 0x2f800000, v2
1639 ; CHECK-NEXT:    v_trunc_f32_e32 v4, v3
1640 ; CHECK-NEXT:    v_mac_f32_e32 v2, 0xcf800000, v4
1641 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v5, v2
1642 ; CHECK-NEXT:    v_mov_b32_e32 v2, 0xffed2705
1643 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v6, v4
1644 ; CHECK-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], v2, v5, 0
1645 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], s6, v6, v[3:4]
1646 ; CHECK-NEXT:    v_mul_hi_u32 v7, v5, v2
1647 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], -1, v5, v[3:4]
1648 ; CHECK-NEXT:    v_mul_lo_u32 v4, v6, v2
1649 ; CHECK-NEXT:    v_mul_hi_u32 v2, v6, v2
1650 ; CHECK-NEXT:    v_mul_lo_u32 v8, v5, v3
1651 ; CHECK-NEXT:    v_mul_lo_u32 v9, v6, v3
1652 ; CHECK-NEXT:    v_mul_hi_u32 v10, v5, v3
1653 ; CHECK-NEXT:    v_mul_hi_u32 v3, v6, v3
1654 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v8
1655 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1656 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v7
1657 ; CHECK-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1658 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v8, v4
1659 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v9, v2
1660 ; CHECK-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1661 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v10
1662 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1663 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
1664 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v4
1665 ; CHECK-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1666 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v7, v4
1667 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v4
1668 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v2
1669 ; CHECK-NEXT:    v_addc_u32_e32 v6, vcc, v6, v3, vcc
1670 ; CHECK-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], s6, v5, 0
1671 ; CHECK-NEXT:    v_ashrrev_i32_e32 v7, 31, v1
1672 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v0, v7
1673 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], s6, v6, v[3:4]
1674 ; CHECK-NEXT:    v_addc_u32_e32 v9, vcc, v1, v7, vcc
1675 ; CHECK-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], -1, v5, v[3:4]
1676 ; CHECK-NEXT:    v_xor_b32_e32 v3, v8, v7
1677 ; CHECK-NEXT:    v_mul_lo_u32 v1, v6, v2
1678 ; CHECK-NEXT:    v_mul_lo_u32 v8, v5, v0
1679 ; CHECK-NEXT:    v_xor_b32_e32 v4, v9, v7
1680 ; CHECK-NEXT:    v_mul_hi_u32 v9, v5, v2
1681 ; CHECK-NEXT:    v_mul_hi_u32 v2, v6, v2
1682 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v8
1683 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1684 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v9
1685 ; CHECK-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1686 ; CHECK-NEXT:    v_mul_lo_u32 v9, v6, v0
1687 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v8, v1
1688 ; CHECK-NEXT:    v_mul_hi_u32 v8, v5, v0
1689 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v9, v2
1690 ; CHECK-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1691 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
1692 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1693 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v9, v8
1694 ; CHECK-NEXT:    v_mul_hi_u32 v0, v6, v0
1695 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
1696 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1697 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v8, v2
1698 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
1699 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v5, v1
1700 ; CHECK-NEXT:    v_addc_u32_e32 v0, vcc, v6, v0, vcc
1701 ; CHECK-NEXT:    v_mul_lo_u32 v2, v4, v1
1702 ; CHECK-NEXT:    v_mul_lo_u32 v5, v3, v0
1703 ; CHECK-NEXT:    v_mul_hi_u32 v8, v3, v1
1704 ; CHECK-NEXT:    v_mul_hi_u32 v1, v4, v1
1705 ; CHECK-NEXT:    s_mov_b32 s6, 0x12d8fb
1706 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v5
1707 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1708 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
1709 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1710 ; CHECK-NEXT:    v_mul_lo_u32 v8, v4, v0
1711 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
1712 ; CHECK-NEXT:    v_mul_hi_u32 v5, v3, v0
1713 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v8, v1
1714 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1715 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v1, v5
1716 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1717 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v8, v5
1718 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v1, v2
1719 ; CHECK-NEXT:    v_mul_hi_u32 v9, v4, v0
1720 ; CHECK-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v8, 0
1721 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1722 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, v5, v2
1723 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v9, v2
1724 ; CHECK-NEXT:    v_mad_u64_u32 v[1:2], s[4:5], s6, v5, v[1:2]
1725 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v3, v0
1726 ; CHECK-NEXT:    v_subb_u32_e64 v2, s[4:5], v4, v1, vcc
1727 ; CHECK-NEXT:    v_sub_i32_e64 v1, s[4:5], v4, v1
1728 ; CHECK-NEXT:    v_mov_b32_e32 v6, 0x12d8fb
1729 ; CHECK-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v1, vcc
1730 ; CHECK-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v6
1731 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v0, v6
1732 ; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, -1, s[4:5]
1733 ; CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v2
1734 ; CHECK-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v1, vcc
1735 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, -1, v3, s[4:5]
1736 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, 1, v8
1737 ; CHECK-NEXT:    v_addc_u32_e32 v4, vcc, 0, v5, vcc
1738 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v6
1739 ; CHECK-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc
1740 ; CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
1741 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, -1, v0, vcc
1742 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, 1, v3
1743 ; CHECK-NEXT:    v_addc_u32_e32 v6, vcc, 0, v4, vcc
1744 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0
1745 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
1746 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v4, v6, vcc
1747 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
1748 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v8, v0, vcc
1749 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1750 ; CHECK-NEXT:    v_xor_b32_e32 v0, v0, v7
1751 ; CHECK-NEXT:    v_xor_b32_e32 v1, v1, v7
1752 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v0, v7
1753 ; CHECK-NEXT:    v_subb_u32_e32 v1, vcc, v1, v7, vcc
1754 ; CHECK-NEXT:    s_setpc_b64 s[30:31]
1755   %result = sdiv i64 %num, 1235195
1756   ret i64 %result
1759 define <2 x i64> @v_sdiv_v2i64_oddk_denom(<2 x i64> %num) {
1760 ; GISEL-LABEL: v_sdiv_v2i64_oddk_denom:
1761 ; GISEL:       ; %bb.0:
1762 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1763 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v4, 0x12d8fb
1764 ; GISEL-NEXT:    v_cvt_f32_ubyte0_e32 v6, 0
1765 ; GISEL-NEXT:    s_sub_u32 s6, 0, 0x12d8fb
1766 ; GISEL-NEXT:    s_subb_u32 s7, 0, 0
1767 ; GISEL-NEXT:    v_mac_f32_e32 v4, 0x4f800000, v6
1768 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v4, v4
1769 ; GISEL-NEXT:    v_mul_f32_e32 v4, 0x5f7ffffc, v4
1770 ; GISEL-NEXT:    v_mul_f32_e32 v5, 0x2f800000, v4
1771 ; GISEL-NEXT:    v_trunc_f32_e32 v7, v5
1772 ; GISEL-NEXT:    v_mac_f32_e32 v4, 0xcf800000, v7
1773 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v9, v4
1774 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v10, v7
1775 ; GISEL-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], s6, v9, 0
1776 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s6, v10, v[5:6]
1777 ; GISEL-NEXT:    v_mul_lo_u32 v5, v10, v4
1778 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s7, v9, v[7:8]
1779 ; GISEL-NEXT:    v_mul_hi_u32 v8, v9, v4
1780 ; GISEL-NEXT:    v_mul_hi_u32 v4, v10, v4
1781 ; GISEL-NEXT:    v_mul_lo_u32 v11, v9, v7
1782 ; GISEL-NEXT:    v_mul_lo_u32 v12, v10, v7
1783 ; GISEL-NEXT:    v_mul_hi_u32 v13, v9, v7
1784 ; GISEL-NEXT:    v_mul_hi_u32 v7, v10, v7
1785 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v11
1786 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1787 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
1788 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1789 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v11, v5
1790 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v12, v4
1791 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1792 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v13
1793 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1794 ; GISEL-NEXT:    v_add_i32_e32 v8, vcc, v8, v11
1795 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v5
1796 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1797 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v8, v5
1798 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
1799 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v9, v4
1800 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s6, v11, 0
1801 ; GISEL-NEXT:    v_addc_u32_e32 v5, vcc, v10, v5, vcc
1802 ; GISEL-NEXT:    v_mov_b32_e32 v4, v8
1803 ; GISEL-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], s6, v5, v[4:5]
1804 ; GISEL-NEXT:    v_ashrrev_i32_e32 v4, 31, v1
1805 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v4
1806 ; GISEL-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], s7, v11, v[8:9]
1807 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v1, v4, vcc
1808 ; GISEL-NEXT:    v_xor_b32_e32 v9, v0, v4
1809 ; GISEL-NEXT:    v_mul_lo_u32 v0, v5, v7
1810 ; GISEL-NEXT:    v_mul_lo_u32 v10, v11, v8
1811 ; GISEL-NEXT:    v_xor_b32_e32 v12, v1, v4
1812 ; GISEL-NEXT:    v_mul_hi_u32 v1, v11, v7
1813 ; GISEL-NEXT:    v_mul_hi_u32 v7, v5, v7
1814 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v10
1815 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1816 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
1817 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1818 ; GISEL-NEXT:    v_mul_lo_u32 v1, v5, v8
1819 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v10, v0
1820 ; GISEL-NEXT:    v_mul_hi_u32 v10, v11, v8
1821 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v7
1822 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1823 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v10
1824 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1825 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v10
1826 ; GISEL-NEXT:    v_mul_hi_u32 v8, v5, v8
1827 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v1, v0
1828 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1829 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v7, v1
1830 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v8, v1
1831 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v11, v0
1832 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v5, v1, vcc
1833 ; GISEL-NEXT:    v_mul_lo_u32 v7, v12, v0
1834 ; GISEL-NEXT:    v_mul_lo_u32 v8, v9, v1
1835 ; GISEL-NEXT:    v_mul_hi_u32 v10, v9, v0
1836 ; GISEL-NEXT:    v_mul_hi_u32 v0, v12, v0
1837 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x12d8fb
1838 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
1839 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1840 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v10
1841 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1842 ; GISEL-NEXT:    v_mul_lo_u32 v10, v12, v1
1843 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
1844 ; GISEL-NEXT:    v_mul_hi_u32 v8, v9, v1
1845 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v10, v0
1846 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1847 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v8
1848 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1849 ; GISEL-NEXT:    v_add_i32_e32 v8, vcc, v10, v8
1850 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v0, v7
1851 ; GISEL-NEXT:    v_mul_hi_u32 v11, v12, v1
1852 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], v5, v10, 0
1853 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1854 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
1855 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v11, v7
1856 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v5, v11, v[1:2]
1857 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v9, v0
1858 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], 0, v10, v[7:8]
1859 ; GISEL-NEXT:    s_sub_u32 s6, 0, 0x12d8fb
1860 ; GISEL-NEXT:    s_subb_u32 s7, 0, 0
1861 ; GISEL-NEXT:    v_subb_u32_e64 v1, s[4:5], v12, v7, vcc
1862 ; GISEL-NEXT:    v_sub_i32_e64 v7, s[4:5], v12, v7
1863 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v5
1864 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]
1865 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v1
1866 ; GISEL-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v7, vcc
1867 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v7, 0x12d8fb
1868 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v0, v5
1869 ; GISEL-NEXT:    v_subbrev_u32_e32 v9, vcc, 0, v1, vcc
1870 ; GISEL-NEXT:    v_mac_f32_e32 v7, 0x4f800000, v6
1871 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v1, v7
1872 ; GISEL-NEXT:    v_add_i32_e32 v12, vcc, 1, v10
1873 ; GISEL-NEXT:    v_addc_u32_e32 v13, vcc, 0, v11, vcc
1874 ; GISEL-NEXT:    v_mul_f32_e32 v1, 0x5f7ffffc, v1
1875 ; GISEL-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v1
1876 ; GISEL-NEXT:    v_trunc_f32_e32 v6, v6
1877 ; GISEL-NEXT:    v_mac_f32_e32 v1, 0xcf800000, v6
1878 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v14, v1
1879 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, -1, v8, s[4:5]
1880 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v5
1881 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v15, v6
1882 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v14, 0
1883 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, -1, vcc
1884 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v9
1885 ; GISEL-NEXT:    v_cndmask_b32_e32 v9, -1, v7, vcc
1886 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s6, v15, v[1:2]
1887 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, 1, v12
1888 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v14, v[6:7]
1889 ; GISEL-NEXT:    v_addc_u32_e32 v16, vcc, 0, v13, vcc
1890 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v9
1891 ; GISEL-NEXT:    v_cndmask_b32_e32 v7, v12, v1, vcc
1892 ; GISEL-NEXT:    v_mul_lo_u32 v1, v15, v0
1893 ; GISEL-NEXT:    v_mul_lo_u32 v9, v14, v6
1894 ; GISEL-NEXT:    v_cndmask_b32_e32 v12, v13, v16, vcc
1895 ; GISEL-NEXT:    v_mul_hi_u32 v13, v14, v0
1896 ; GISEL-NEXT:    v_mul_hi_u32 v0, v15, v0
1897 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v9
1898 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1899 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v13
1900 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1901 ; GISEL-NEXT:    v_mul_lo_u32 v13, v15, v6
1902 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
1903 ; GISEL-NEXT:    v_mul_hi_u32 v9, v14, v6
1904 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v13, v0
1905 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
1906 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v9
1907 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
1908 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v13, v9
1909 ; GISEL-NEXT:    v_mul_hi_u32 v6, v15, v6
1910 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
1911 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1912 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
1913 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v6, v1
1914 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v14, v0
1915 ; GISEL-NEXT:    v_addc_u32_e32 v13, vcc, v15, v1, vcc
1916 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v9, 0
1917 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v8
1918 ; GISEL-NEXT:    v_cndmask_b32_e32 v8, v10, v7, vcc
1919 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s6, v13, v[1:2]
1920 ; GISEL-NEXT:    v_xor_b32_e32 v1, v8, v4
1921 ; GISEL-NEXT:    v_ashrrev_i32_e32 v8, 31, v3
1922 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v9, v[6:7]
1923 ; GISEL-NEXT:    v_cndmask_b32_e32 v10, v11, v12, vcc
1924 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
1925 ; GISEL-NEXT:    v_addc_u32_e32 v3, vcc, v3, v8, vcc
1926 ; GISEL-NEXT:    v_xor_b32_e32 v11, v2, v8
1927 ; GISEL-NEXT:    v_mul_lo_u32 v2, v13, v0
1928 ; GISEL-NEXT:    v_mul_lo_u32 v7, v9, v6
1929 ; GISEL-NEXT:    v_xor_b32_e32 v12, v3, v8
1930 ; GISEL-NEXT:    v_mul_hi_u32 v3, v9, v0
1931 ; GISEL-NEXT:    v_mul_hi_u32 v0, v13, v0
1932 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v7
1933 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1934 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
1935 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1936 ; GISEL-NEXT:    v_mul_lo_u32 v3, v13, v6
1937 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v7, v2
1938 ; GISEL-NEXT:    v_mul_hi_u32 v7, v9, v6
1939 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
1940 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
1941 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v7
1942 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1943 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v7
1944 ; GISEL-NEXT:    v_mul_hi_u32 v6, v13, v6
1945 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
1946 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1947 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
1948 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v6, v2
1949 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v9, v0
1950 ; GISEL-NEXT:    v_addc_u32_e32 v2, vcc, v13, v2, vcc
1951 ; GISEL-NEXT:    v_mul_lo_u32 v3, v12, v0
1952 ; GISEL-NEXT:    v_mul_lo_u32 v6, v11, v2
1953 ; GISEL-NEXT:    v_mul_hi_u32 v7, v11, v0
1954 ; GISEL-NEXT:    v_mul_hi_u32 v0, v12, v0
1955 ; GISEL-NEXT:    v_xor_b32_e32 v9, v10, v4
1956 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v6
1957 ; GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1958 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v7
1959 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
1960 ; GISEL-NEXT:    v_mul_lo_u32 v7, v12, v2
1961 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v6, v3
1962 ; GISEL-NEXT:    v_mul_hi_u32 v6, v11, v2
1963 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v7, v0
1964 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1965 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v6
1966 ; GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1967 ; GISEL-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
1968 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v0, v3
1969 ; GISEL-NEXT:    v_mul_hi_u32 v7, v12, v2
1970 ; GISEL-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], v5, v10, 0
1971 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1972 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v6, v0
1973 ; GISEL-NEXT:    v_add_i32_e32 v13, vcc, v7, v0
1974 ; GISEL-NEXT:    v_mov_b32_e32 v0, v3
1975 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v5, v13, v[0:1]
1976 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v1, v4
1977 ; GISEL-NEXT:    v_subb_u32_e32 v1, vcc, v9, v4, vcc
1978 ; GISEL-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], 0, v10, v[6:7]
1979 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v11, v2
1980 ; GISEL-NEXT:    v_subb_u32_e64 v4, s[4:5], v12, v3, vcc
1981 ; GISEL-NEXT:    v_sub_i32_e64 v3, s[4:5], v12, v3
1982 ; GISEL-NEXT:    v_subbrev_u32_e32 v3, vcc, 0, v3, vcc
1983 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v2, v5
1984 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v5
1985 ; GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, -1, s[4:5]
1986 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
1987 ; GISEL-NEXT:    v_subbrev_u32_e32 v3, vcc, 0, v3, vcc
1988 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, -1, v6, s[4:5]
1989 ; GISEL-NEXT:    v_add_i32_e32 v6, vcc, 1, v10
1990 ; GISEL-NEXT:    v_addc_u32_e32 v7, vcc, 0, v13, vcc
1991 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v2, v5
1992 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
1993 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v3
1994 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, -1, v2, vcc
1995 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, 1, v6
1996 ; GISEL-NEXT:    v_addc_u32_e32 v5, vcc, 0, v7, vcc
1997 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
1998 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v6, v3, vcc
1999 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v7, v5, vcc
2000 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v4
2001 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v10, v2, vcc
2002 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v13, v3, vcc
2003 ; GISEL-NEXT:    v_xor_b32_e32 v2, v2, v8
2004 ; GISEL-NEXT:    v_xor_b32_e32 v3, v3, v8
2005 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v8
2006 ; GISEL-NEXT:    v_subb_u32_e32 v3, vcc, v3, v8, vcc
2007 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2009 ; CGP-LABEL: v_sdiv_v2i64_oddk_denom:
2010 ; CGP:       ; %bb.0:
2011 ; CGP-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2012 ; CGP-NEXT:    v_cvt_f32_u32_e32 v4, 0x12d8fb
2013 ; CGP-NEXT:    v_cvt_f32_ubyte0_e32 v5, 0
2014 ; CGP-NEXT:    s_mov_b32 s7, 0xffed2705
2015 ; CGP-NEXT:    s_mov_b32 s6, 0x12d8fb
2016 ; CGP-NEXT:    v_mac_f32_e32 v4, 0x4f800000, v5
2017 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v4, v4
2018 ; CGP-NEXT:    v_mul_f32_e32 v4, 0x5f7ffffc, v4
2019 ; CGP-NEXT:    v_mul_f32_e32 v5, 0x2f800000, v4
2020 ; CGP-NEXT:    v_trunc_f32_e32 v6, v5
2021 ; CGP-NEXT:    v_mac_f32_e32 v4, 0xcf800000, v6
2022 ; CGP-NEXT:    v_cvt_u32_f32_e32 v7, v4
2023 ; CGP-NEXT:    v_mov_b32_e32 v4, 0xffed2705
2024 ; CGP-NEXT:    v_cvt_u32_f32_e32 v8, v6
2025 ; CGP-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v4, v7, 0
2026 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], s7, v8, v[5:6]
2027 ; CGP-NEXT:    v_mul_hi_u32 v9, v7, v4
2028 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], -1, v7, v[5:6]
2029 ; CGP-NEXT:    v_mul_lo_u32 v6, v8, v4
2030 ; CGP-NEXT:    v_mul_hi_u32 v4, v8, v4
2031 ; CGP-NEXT:    v_mul_lo_u32 v10, v7, v5
2032 ; CGP-NEXT:    v_mul_lo_u32 v11, v8, v5
2033 ; CGP-NEXT:    v_mul_hi_u32 v12, v7, v5
2034 ; CGP-NEXT:    v_mul_hi_u32 v5, v8, v5
2035 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v10
2036 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2037 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v9
2038 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2039 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v10, v6
2040 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v11, v4
2041 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2042 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v4, v12
2043 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2044 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v9, v10
2045 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v4, v6
2046 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2047 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v9, v6
2048 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v6
2049 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v7, v4
2050 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v9, 0
2051 ; CGP-NEXT:    v_addc_u32_e32 v10, vcc, v8, v5, vcc
2052 ; CGP-NEXT:    v_ashrrev_i32_e32 v5, 31, v1
2053 ; CGP-NEXT:    v_mov_b32_e32 v4, v7
2054 ; CGP-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], s7, v10, v[4:5]
2055 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v0, v5
2056 ; CGP-NEXT:    v_addc_u32_e32 v11, vcc, v1, v5, vcc
2057 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], -1, v9, v[7:8]
2058 ; CGP-NEXT:    v_xor_b32_e32 v8, v4, v5
2059 ; CGP-NEXT:    v_mul_lo_u32 v1, v10, v6
2060 ; CGP-NEXT:    v_mul_lo_u32 v4, v9, v0
2061 ; CGP-NEXT:    v_mul_hi_u32 v7, v9, v6
2062 ; CGP-NEXT:    v_mul_hi_u32 v6, v10, v6
2063 ; CGP-NEXT:    v_xor_b32_e32 v11, v11, v5
2064 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v4
2065 ; CGP-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2066 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v7
2067 ; CGP-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2068 ; CGP-NEXT:    v_mul_lo_u32 v7, v10, v0
2069 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v4, v1
2070 ; CGP-NEXT:    v_mul_hi_u32 v4, v9, v0
2071 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
2072 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2073 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v6, v4
2074 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2075 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
2076 ; CGP-NEXT:    v_mul_hi_u32 v0, v10, v0
2077 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v4, v1
2078 ; CGP-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2079 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, v6, v4
2080 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v4
2081 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
2082 ; CGP-NEXT:    v_addc_u32_e32 v0, vcc, v10, v0, vcc
2083 ; CGP-NEXT:    v_mul_lo_u32 v6, v11, v1
2084 ; CGP-NEXT:    v_mul_lo_u32 v7, v8, v0
2085 ; CGP-NEXT:    v_mul_hi_u32 v9, v8, v1
2086 ; CGP-NEXT:    v_mul_hi_u32 v1, v11, v1
2087 ; CGP-NEXT:    v_mul_hi_u32 v10, v11, v0
2088 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v7
2089 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2090 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v9
2091 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2092 ; CGP-NEXT:    v_mul_lo_u32 v9, v11, v0
2093 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
2094 ; CGP-NEXT:    v_mul_hi_u32 v7, v8, v0
2095 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
2096 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2097 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v7
2098 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2099 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v9, v7
2100 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v1, v6
2101 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s6, v9, 0
2102 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2103 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
2104 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v6
2105 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s6, v10, v[1:2]
2106 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v8, v0
2107 ; CGP-NEXT:    v_mov_b32_e32 v4, 0x12d8fb
2108 ; CGP-NEXT:    v_subb_u32_e64 v1, s[4:5], v11, v6, vcc
2109 ; CGP-NEXT:    v_sub_i32_e64 v6, s[4:5], v11, v6
2110 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v4
2111 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]
2112 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v1
2113 ; CGP-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v6, vcc
2114 ; CGP-NEXT:    v_cvt_f32_u32_e32 v6, 0x12d8fb
2115 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v0, v4
2116 ; CGP-NEXT:    v_cndmask_b32_e64 v8, -1, v7, s[4:5]
2117 ; CGP-NEXT:    v_subbrev_u32_e32 v7, vcc, 0, v1, vcc
2118 ; CGP-NEXT:    v_cvt_f32_ubyte0_e32 v1, 0
2119 ; CGP-NEXT:    v_mac_f32_e32 v6, 0x4f800000, v1
2120 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v1, v6
2121 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, 1, v9
2122 ; CGP-NEXT:    v_addc_u32_e32 v12, vcc, 0, v10, vcc
2123 ; CGP-NEXT:    v_mul_f32_e32 v1, 0x5f7ffffc, v1
2124 ; CGP-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v1
2125 ; CGP-NEXT:    v_trunc_f32_e32 v6, v6
2126 ; CGP-NEXT:    v_mac_f32_e32 v1, 0xcf800000, v6
2127 ; CGP-NEXT:    v_cvt_u32_f32_e32 v13, v1
2128 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v4
2129 ; CGP-NEXT:    v_cvt_u32_f32_e32 v15, v6
2130 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, -1, vcc
2131 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s7, v13, 0
2132 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v7
2133 ; CGP-NEXT:    v_cndmask_b32_e32 v14, -1, v14, vcc
2134 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v15, v[1:2]
2135 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, 1, v11
2136 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], -1, v13, v[6:7]
2137 ; CGP-NEXT:    v_addc_u32_e32 v16, vcc, 0, v12, vcc
2138 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v14
2139 ; CGP-NEXT:    v_cndmask_b32_e32 v7, v11, v1, vcc
2140 ; CGP-NEXT:    v_mul_lo_u32 v1, v15, v0
2141 ; CGP-NEXT:    v_mul_lo_u32 v11, v13, v6
2142 ; CGP-NEXT:    v_mul_hi_u32 v14, v13, v0
2143 ; CGP-NEXT:    v_cndmask_b32_e32 v12, v12, v16, vcc
2144 ; CGP-NEXT:    v_mul_hi_u32 v0, v15, v0
2145 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v11
2146 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2147 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v1, v14
2148 ; CGP-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2149 ; CGP-NEXT:    v_mul_lo_u32 v14, v15, v6
2150 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
2151 ; CGP-NEXT:    v_mul_hi_u32 v11, v13, v6
2152 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v14, v0
2153 ; CGP-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
2154 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v11
2155 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2156 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v14, v11
2157 ; CGP-NEXT:    v_mul_hi_u32 v6, v15, v6
2158 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
2159 ; CGP-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2160 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
2161 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v6, v1
2162 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v13, v0
2163 ; CGP-NEXT:    v_addc_u32_e32 v13, vcc, v15, v1, vcc
2164 ; CGP-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], s7, v11, 0
2165 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v8
2166 ; CGP-NEXT:    v_cndmask_b32_e32 v6, v9, v7, vcc
2167 ; CGP-NEXT:    v_xor_b32_e32 v9, v6, v5
2168 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], s7, v13, v[1:2]
2169 ; CGP-NEXT:    v_cndmask_b32_e32 v8, v10, v12, vcc
2170 ; CGP-NEXT:    v_xor_b32_e32 v1, v8, v5
2171 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], -1, v11, v[6:7]
2172 ; CGP-NEXT:    v_ashrrev_i32_e32 v8, 31, v3
2173 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v8
2174 ; CGP-NEXT:    v_addc_u32_e32 v3, vcc, v3, v8, vcc
2175 ; CGP-NEXT:    v_xor_b32_e32 v7, v2, v8
2176 ; CGP-NEXT:    v_mul_lo_u32 v2, v13, v0
2177 ; CGP-NEXT:    v_mul_lo_u32 v10, v11, v6
2178 ; CGP-NEXT:    v_xor_b32_e32 v12, v3, v8
2179 ; CGP-NEXT:    v_mul_hi_u32 v3, v11, v0
2180 ; CGP-NEXT:    v_mul_hi_u32 v0, v13, v0
2181 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v10
2182 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2183 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
2184 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2185 ; CGP-NEXT:    v_mul_lo_u32 v3, v13, v6
2186 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v10, v2
2187 ; CGP-NEXT:    v_mul_hi_u32 v10, v11, v6
2188 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
2189 ; CGP-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
2190 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v10
2191 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2192 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v10
2193 ; CGP-NEXT:    v_mul_hi_u32 v6, v13, v6
2194 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
2195 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2196 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
2197 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v6, v2
2198 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v11, v0
2199 ; CGP-NEXT:    v_addc_u32_e32 v2, vcc, v13, v2, vcc
2200 ; CGP-NEXT:    v_mul_lo_u32 v6, v12, v3
2201 ; CGP-NEXT:    v_mul_lo_u32 v10, v7, v2
2202 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v9, v5
2203 ; CGP-NEXT:    v_subb_u32_e32 v1, vcc, v1, v5, vcc
2204 ; CGP-NEXT:    v_mul_hi_u32 v5, v7, v3
2205 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v10
2206 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2207 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
2208 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2209 ; CGP-NEXT:    v_mul_lo_u32 v6, v12, v2
2210 ; CGP-NEXT:    v_mul_hi_u32 v3, v12, v3
2211 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v9, v5
2212 ; CGP-NEXT:    v_mul_hi_u32 v9, v7, v2
2213 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v6, v3
2214 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2215 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v3, v9
2216 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2217 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v9
2218 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v3, v5
2219 ; CGP-NEXT:    v_mul_hi_u32 v10, v12, v2
2220 ; CGP-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], s6, v9, 0
2221 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2222 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
2223 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v5
2224 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], s6, v10, v[3:4]
2225 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v7, v2
2226 ; CGP-NEXT:    v_subb_u32_e64 v3, s[4:5], v12, v5, vcc
2227 ; CGP-NEXT:    v_sub_i32_e64 v5, s[4:5], v12, v5
2228 ; CGP-NEXT:    v_subbrev_u32_e32 v5, vcc, 0, v5, vcc
2229 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v2, v4
2230 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v2, v4
2231 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, -1, s[4:5]
2232 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v3
2233 ; CGP-NEXT:    v_subbrev_u32_e32 v5, vcc, 0, v5, vcc
2234 ; CGP-NEXT:    v_cndmask_b32_e64 v3, -1, v6, s[4:5]
2235 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, 1, v9
2236 ; CGP-NEXT:    v_addc_u32_e32 v7, vcc, 0, v10, vcc
2237 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v2, v4
2238 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
2239 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v5
2240 ; CGP-NEXT:    v_cndmask_b32_e32 v2, -1, v2, vcc
2241 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v6
2242 ; CGP-NEXT:    v_addc_u32_e32 v5, vcc, 0, v7, vcc
2243 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
2244 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v6, v4, vcc
2245 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v7, v5, vcc
2246 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3
2247 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v9, v2, vcc
2248 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v10, v4, vcc
2249 ; CGP-NEXT:    v_xor_b32_e32 v2, v2, v8
2250 ; CGP-NEXT:    v_xor_b32_e32 v3, v3, v8
2251 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v2, v8
2252 ; CGP-NEXT:    v_subb_u32_e32 v3, vcc, v3, v8, vcc
2253 ; CGP-NEXT:    s_setpc_b64 s[30:31]
2254   %result = sdiv <2 x i64> %num, <i64 1235195, i64 1235195>
2255   ret <2 x i64> %result
2258 define i64 @v_sdiv_i64_pow2_shl_denom(i64 %x, i64 %y) {
2259 ; CHECK-LABEL: v_sdiv_i64_pow2_shl_denom:
2260 ; CHECK:       ; %bb.0:
2261 ; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2262 ; CHECK-NEXT:    v_mov_b32_e32 v3, v0
2263 ; CHECK-NEXT:    v_mov_b32_e32 v4, v1
2264 ; CHECK-NEXT:    v_mov_b32_e32 v0, 0x1000
2265 ; CHECK-NEXT:    v_mov_b32_e32 v1, 0
2266 ; CHECK-NEXT:    v_lshl_b64 v[5:6], v[0:1], v2
2267 ; CHECK-NEXT:    v_mov_b32_e32 v0, 0
2268 ; CHECK-NEXT:    v_or_b32_e32 v1, v4, v6
2269 ; CHECK-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
2270 ; CHECK-NEXT:    ; implicit-def: $vgpr0_vgpr1
2271 ; CHECK-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2272 ; CHECK-NEXT:    s_xor_b64 s[6:7], exec, s[4:5]
2273 ; CHECK-NEXT:    s_cbranch_execnz .LBB7_3
2274 ; CHECK-NEXT:  ; %bb.1: ; %Flow
2275 ; CHECK-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
2276 ; CHECK-NEXT:    s_cbranch_execnz .LBB7_4
2277 ; CHECK-NEXT:  .LBB7_2:
2278 ; CHECK-NEXT:    s_or_b64 exec, exec, s[6:7]
2279 ; CHECK-NEXT:    s_setpc_b64 s[30:31]
2280 ; CHECK-NEXT:  .LBB7_3:
2281 ; CHECK-NEXT:    v_ashrrev_i32_e32 v0, 31, v6
2282 ; CHECK-NEXT:    v_add_i32_e32 v1, vcc, v5, v0
2283 ; CHECK-NEXT:    v_addc_u32_e32 v5, vcc, v6, v0, vcc
2284 ; CHECK-NEXT:    v_xor_b32_e32 v2, v1, v0
2285 ; CHECK-NEXT:    v_xor_b32_e32 v1, v5, v0
2286 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v5, v2
2287 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v6, v1
2288 ; CHECK-NEXT:    v_sub_i32_e32 v9, vcc, 0, v2
2289 ; CHECK-NEXT:    v_subb_u32_e32 v10, vcc, 0, v1, vcc
2290 ; CHECK-NEXT:    v_mac_f32_e32 v5, 0x4f800000, v6
2291 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v5, v5
2292 ; CHECK-NEXT:    v_mul_f32_e32 v5, 0x5f7ffffc, v5
2293 ; CHECK-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v5
2294 ; CHECK-NEXT:    v_trunc_f32_e32 v7, v6
2295 ; CHECK-NEXT:    v_mac_f32_e32 v5, 0xcf800000, v7
2296 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v8, v5
2297 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v11, v7
2298 ; CHECK-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v9, v8, 0
2299 ; CHECK-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v9, v11, v[6:7]
2300 ; CHECK-NEXT:    v_mul_hi_u32 v12, v8, v5
2301 ; CHECK-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v10, v8, v[6:7]
2302 ; CHECK-NEXT:    v_mul_lo_u32 v7, v11, v5
2303 ; CHECK-NEXT:    v_mul_hi_u32 v5, v11, v5
2304 ; CHECK-NEXT:    v_mul_lo_u32 v13, v8, v6
2305 ; CHECK-NEXT:    v_mul_lo_u32 v14, v11, v6
2306 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, v7, v13
2307 ; CHECK-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
2308 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, v7, v12
2309 ; CHECK-NEXT:    v_mul_hi_u32 v12, v8, v6
2310 ; CHECK-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2311 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, v13, v7
2312 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v14, v5
2313 ; CHECK-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
2314 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v12
2315 ; CHECK-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
2316 ; CHECK-NEXT:    v_add_i32_e32 v12, vcc, v13, v12
2317 ; CHECK-NEXT:    v_mul_hi_u32 v6, v11, v6
2318 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v7
2319 ; CHECK-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2320 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, v12, v7
2321 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v6, v7
2322 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v8, v5
2323 ; CHECK-NEXT:    v_addc_u32_e32 v11, vcc, v11, v6, vcc
2324 ; CHECK-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v9, v8, 0
2325 ; CHECK-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v9, v11, v[6:7]
2326 ; CHECK-NEXT:    v_ashrrev_i32_e32 v9, 31, v4
2327 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v9
2328 ; CHECK-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v10, v8, v[6:7]
2329 ; CHECK-NEXT:    v_addc_u32_e32 v4, vcc, v4, v9, vcc
2330 ; CHECK-NEXT:    v_xor_b32_e32 v7, v3, v9
2331 ; CHECK-NEXT:    v_mul_lo_u32 v3, v11, v5
2332 ; CHECK-NEXT:    v_mul_lo_u32 v10, v8, v6
2333 ; CHECK-NEXT:    v_xor_b32_e32 v12, v4, v9
2334 ; CHECK-NEXT:    v_mul_hi_u32 v4, v8, v5
2335 ; CHECK-NEXT:    v_mul_hi_u32 v5, v11, v5
2336 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v10
2337 ; CHECK-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2338 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v4
2339 ; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
2340 ; CHECK-NEXT:    v_mul_lo_u32 v4, v11, v6
2341 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v10, v3
2342 ; CHECK-NEXT:    v_mul_hi_u32 v10, v8, v6
2343 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v5
2344 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2345 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v4, v10
2346 ; CHECK-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2347 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v10
2348 ; CHECK-NEXT:    v_mul_hi_u32 v6, v11, v6
2349 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
2350 ; CHECK-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2351 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v5, v4
2352 ; CHECK-NEXT:    v_add_i32_e32 v4, vcc, v6, v4
2353 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v8, v3
2354 ; CHECK-NEXT:    v_addc_u32_e32 v4, vcc, v11, v4, vcc
2355 ; CHECK-NEXT:    v_mul_lo_u32 v5, v12, v3
2356 ; CHECK-NEXT:    v_mul_lo_u32 v6, v7, v4
2357 ; CHECK-NEXT:    v_mul_hi_u32 v8, v7, v3
2358 ; CHECK-NEXT:    v_mul_hi_u32 v3, v12, v3
2359 ; CHECK-NEXT:    v_mul_hi_u32 v10, v12, v4
2360 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v6
2361 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2362 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
2363 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2364 ; CHECK-NEXT:    v_mul_lo_u32 v8, v12, v4
2365 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
2366 ; CHECK-NEXT:    v_mul_hi_u32 v6, v7, v4
2367 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v8, v3
2368 ; CHECK-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
2369 ; CHECK-NEXT:    v_add_i32_e32 v3, vcc, v3, v6
2370 ; CHECK-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2371 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v8, v6
2372 ; CHECK-NEXT:    v_add_i32_e32 v8, vcc, v3, v5
2373 ; CHECK-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v2, v8, 0
2374 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2375 ; CHECK-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
2376 ; CHECK-NEXT:    v_add_i32_e32 v6, vcc, v10, v5
2377 ; CHECK-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v2, v6, v[4:5]
2378 ; CHECK-NEXT:    v_sub_i32_e32 v3, vcc, v7, v3
2379 ; CHECK-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v1, v8, v[4:5]
2380 ; CHECK-NEXT:    v_subb_u32_e64 v5, s[4:5], v12, v4, vcc
2381 ; CHECK-NEXT:    v_sub_i32_e64 v4, s[4:5], v12, v4
2382 ; CHECK-NEXT:    v_cmp_ge_u32_e64 s[4:5], v5, v1
2383 ; CHECK-NEXT:    v_subb_u32_e32 v4, vcc, v4, v1, vcc
2384 ; CHECK-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]
2385 ; CHECK-NEXT:    v_cmp_ge_u32_e64 s[4:5], v3, v2
2386 ; CHECK-NEXT:    v_sub_i32_e32 v3, vcc, v3, v2
2387 ; CHECK-NEXT:    v_cndmask_b32_e64 v10, 0, -1, s[4:5]
2388 ; CHECK-NEXT:    v_cmp_eq_u32_e64 s[4:5], v5, v1
2389 ; CHECK-NEXT:    v_subbrev_u32_e32 v4, vcc, 0, v4, vcc
2390 ; CHECK-NEXT:    v_cndmask_b32_e64 v5, v7, v10, s[4:5]
2391 ; CHECK-NEXT:    v_add_i32_e32 v7, vcc, 1, v8
2392 ; CHECK-NEXT:    v_addc_u32_e32 v10, vcc, 0, v6, vcc
2393 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v4, v1
2394 ; CHECK-NEXT:    v_cndmask_b32_e64 v11, 0, -1, vcc
2395 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v2
2396 ; CHECK-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
2397 ; CHECK-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
2398 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v11, v2, vcc
2399 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, 1, v7
2400 ; CHECK-NEXT:    v_addc_u32_e32 v3, vcc, 0, v10, vcc
2401 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v1
2402 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v7, v2, vcc
2403 ; CHECK-NEXT:    v_cndmask_b32_e32 v2, v10, v3, vcc
2404 ; CHECK-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v5
2405 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v8, v1, vcc
2406 ; CHECK-NEXT:    v_xor_b32_e32 v3, v9, v0
2407 ; CHECK-NEXT:    v_cndmask_b32_e32 v2, v6, v2, vcc
2408 ; CHECK-NEXT:    v_xor_b32_e32 v0, v1, v3
2409 ; CHECK-NEXT:    v_xor_b32_e32 v1, v2, v3
2410 ; CHECK-NEXT:    v_sub_i32_e32 v0, vcc, v0, v3
2411 ; CHECK-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc
2412 ; CHECK-NEXT:    ; implicit-def: $vgpr5_vgpr6
2413 ; CHECK-NEXT:    ; implicit-def: $vgpr3
2414 ; CHECK-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
2415 ; CHECK-NEXT:    s_cbranch_execz .LBB7_2
2416 ; CHECK-NEXT:  .LBB7_4:
2417 ; CHECK-NEXT:    v_cvt_f32_u32_e32 v0, v5
2418 ; CHECK-NEXT:    v_sub_i32_e32 v1, vcc, 0, v5
2419 ; CHECK-NEXT:    v_rcp_iflag_f32_e32 v0, v0
2420 ; CHECK-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0
2421 ; CHECK-NEXT:    v_cvt_u32_f32_e32 v0, v0
2422 ; CHECK-NEXT:    v_mul_lo_u32 v1, v1, v0
2423 ; CHECK-NEXT:    v_mul_hi_u32 v1, v0, v1
2424 ; CHECK-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
2425 ; CHECK-NEXT:    v_mul_hi_u32 v0, v3, v0
2426 ; CHECK-NEXT:    v_mul_lo_u32 v1, v0, v5
2427 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
2428 ; CHECK-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
2429 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v5
2430 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
2431 ; CHECK-NEXT:    v_sub_i32_e64 v2, s[4:5], v1, v5
2432 ; CHECK-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
2433 ; CHECK-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
2434 ; CHECK-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v5
2435 ; CHECK-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
2436 ; CHECK-NEXT:    v_mov_b32_e32 v1, 0
2437 ; CHECK-NEXT:    s_or_b64 exec, exec, s[6:7]
2438 ; CHECK-NEXT:    s_setpc_b64 s[30:31]
2439   %shl.y = shl i64 4096, %y
2440   %r = sdiv i64 %x, %shl.y
2441   ret i64 %r
2444 define <2 x i64> @v_sdiv_v2i64_pow2_shl_denom(<2 x i64> %x, <2 x i64> %y) {
2445 ; GISEL-LABEL: v_sdiv_v2i64_pow2_shl_denom:
2446 ; GISEL:       ; %bb.0:
2447 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2448 ; GISEL-NEXT:    s_mov_b64 s[4:5], 0x1000
2449 ; GISEL-NEXT:    v_lshl_b64 v[7:8], s[4:5], v4
2450 ; GISEL-NEXT:    v_ashrrev_i32_e32 v4, 31, v8
2451 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v4
2452 ; GISEL-NEXT:    v_addc_u32_e32 v7, vcc, v8, v4, vcc
2453 ; GISEL-NEXT:    v_xor_b32_e32 v8, v5, v4
2454 ; GISEL-NEXT:    v_xor_b32_e32 v5, v7, v4
2455 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v7, v8
2456 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v9, v5
2457 ; GISEL-NEXT:    v_sub_i32_e32 v13, vcc, 0, v8
2458 ; GISEL-NEXT:    v_subb_u32_e32 v14, vcc, 0, v5, vcc
2459 ; GISEL-NEXT:    v_mac_f32_e32 v7, 0x4f800000, v9
2460 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v7, v7
2461 ; GISEL-NEXT:    v_mul_f32_e32 v7, 0x5f7ffffc, v7
2462 ; GISEL-NEXT:    v_mul_f32_e32 v9, 0x2f800000, v7
2463 ; GISEL-NEXT:    v_trunc_f32_e32 v11, v9
2464 ; GISEL-NEXT:    v_mac_f32_e32 v7, 0xcf800000, v11
2465 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v12, v7
2466 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v15, v11
2467 ; GISEL-NEXT:    v_mad_u64_u32 v[9:10], s[6:7], v13, v12, 0
2468 ; GISEL-NEXT:    v_mov_b32_e32 v7, v10
2469 ; GISEL-NEXT:    v_mad_u64_u32 v[10:11], s[6:7], v13, v15, v[7:8]
2470 ; GISEL-NEXT:    v_mul_lo_u32 v7, v15, v9
2471 ; GISEL-NEXT:    v_mul_hi_u32 v16, v12, v9
2472 ; GISEL-NEXT:    v_mad_u64_u32 v[10:11], s[6:7], v14, v12, v[10:11]
2473 ; GISEL-NEXT:    v_mul_hi_u32 v9, v15, v9
2474 ; GISEL-NEXT:    v_mul_lo_u32 v11, v12, v10
2475 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v11
2476 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2477 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v16
2478 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2479 ; GISEL-NEXT:    v_mul_lo_u32 v16, v15, v10
2480 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v11, v7
2481 ; GISEL-NEXT:    v_mul_hi_u32 v11, v12, v10
2482 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v16, v9
2483 ; GISEL-NEXT:    v_cndmask_b32_e64 v16, 0, 1, vcc
2484 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v9, v11
2485 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2486 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v16, v11
2487 ; GISEL-NEXT:    v_mul_hi_u32 v10, v15, v10
2488 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v9, v7
2489 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2490 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v11, v9
2491 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v10, v9
2492 ; GISEL-NEXT:    v_add_i32_e32 v12, vcc, v12, v7
2493 ; GISEL-NEXT:    v_addc_u32_e32 v15, vcc, v15, v9, vcc
2494 ; GISEL-NEXT:    v_mad_u64_u32 v[9:10], s[6:7], v13, v12, 0
2495 ; GISEL-NEXT:    v_mov_b32_e32 v7, v10
2496 ; GISEL-NEXT:    v_mad_u64_u32 v[10:11], s[6:7], v13, v15, v[7:8]
2497 ; GISEL-NEXT:    v_ashrrev_i32_e32 v7, 31, v1
2498 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v7
2499 ; GISEL-NEXT:    v_mad_u64_u32 v[10:11], s[6:7], v14, v12, v[10:11]
2500 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v1, v7, vcc
2501 ; GISEL-NEXT:    v_xor_b32_e32 v13, v0, v7
2502 ; GISEL-NEXT:    v_mul_lo_u32 v0, v15, v9
2503 ; GISEL-NEXT:    v_mul_lo_u32 v11, v12, v10
2504 ; GISEL-NEXT:    v_xor_b32_e32 v14, v1, v7
2505 ; GISEL-NEXT:    v_mul_hi_u32 v1, v12, v9
2506 ; GISEL-NEXT:    v_mul_hi_u32 v9, v15, v9
2507 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v11
2508 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2509 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
2510 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
2511 ; GISEL-NEXT:    v_mul_lo_u32 v1, v15, v10
2512 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v11, v0
2513 ; GISEL-NEXT:    v_mul_hi_u32 v11, v12, v10
2514 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v9
2515 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2516 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v11
2517 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2518 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v9, v11
2519 ; GISEL-NEXT:    v_mul_hi_u32 v10, v15, v10
2520 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v1, v0
2521 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2522 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v9, v1
2523 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v10, v1
2524 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v12, v0
2525 ; GISEL-NEXT:    v_addc_u32_e32 v1, vcc, v15, v1, vcc
2526 ; GISEL-NEXT:    v_mul_lo_u32 v9, v14, v0
2527 ; GISEL-NEXT:    v_mul_lo_u32 v10, v13, v1
2528 ; GISEL-NEXT:    v_mul_hi_u32 v11, v13, v0
2529 ; GISEL-NEXT:    v_mul_hi_u32 v0, v14, v0
2530 ; GISEL-NEXT:    v_xor_b32_e32 v7, v7, v4
2531 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v9, v10
2532 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2533 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v9, v11
2534 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2535 ; GISEL-NEXT:    v_mul_lo_u32 v11, v14, v1
2536 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v10, v9
2537 ; GISEL-NEXT:    v_mul_hi_u32 v10, v13, v1
2538 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v11, v0
2539 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2540 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v10
2541 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2542 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v11, v10
2543 ; GISEL-NEXT:    v_add_i32_e32 v15, vcc, v0, v9
2544 ; GISEL-NEXT:    v_mul_hi_u32 v11, v14, v1
2545 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[6:7], v8, v15, 0
2546 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2547 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v10, v9
2548 ; GISEL-NEXT:    v_add_i32_e32 v16, vcc, v11, v9
2549 ; GISEL-NEXT:    v_mad_u64_u32 v[9:10], s[6:7], v8, v16, v[1:2]
2550 ; GISEL-NEXT:    v_lshl_b64 v[11:12], s[4:5], v6
2551 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v13, v0
2552 ; GISEL-NEXT:    v_mad_u64_u32 v[9:10], s[4:5], v5, v15, v[9:10]
2553 ; GISEL-NEXT:    v_subb_u32_e64 v1, s[4:5], v14, v9, vcc
2554 ; GISEL-NEXT:    v_sub_i32_e64 v6, s[4:5], v14, v9
2555 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v1, v5
2556 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, -1, s[4:5]
2557 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v0, v8
2558 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, -1, s[4:5]
2559 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v5
2560 ; GISEL-NEXT:    v_subb_u32_e32 v1, vcc, v6, v5, vcc
2561 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v0, v8
2562 ; GISEL-NEXT:    v_subbrev_u32_e32 v14, vcc, 0, v1, vcc
2563 ; GISEL-NEXT:    v_ashrrev_i32_e32 v6, 31, v12
2564 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v11, v6
2565 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, v9, v10, s[4:5]
2566 ; GISEL-NEXT:    v_addc_u32_e32 v9, vcc, v12, v6, vcc
2567 ; GISEL-NEXT:    v_xor_b32_e32 v10, v1, v6
2568 ; GISEL-NEXT:    v_xor_b32_e32 v9, v9, v6
2569 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v1, v10
2570 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v11, v9
2571 ; GISEL-NEXT:    v_add_i32_e32 v17, vcc, 1, v15
2572 ; GISEL-NEXT:    v_addc_u32_e32 v18, vcc, 0, v16, vcc
2573 ; GISEL-NEXT:    v_mac_f32_e32 v1, 0x4f800000, v11
2574 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v1, v1
2575 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v14, v5
2576 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, -1, vcc
2577 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v8
2578 ; GISEL-NEXT:    v_mul_f32_e32 v0, 0x5f7ffffc, v1
2579 ; GISEL-NEXT:    v_mul_f32_e32 v1, 0x2f800000, v0
2580 ; GISEL-NEXT:    v_trunc_f32_e32 v12, v1
2581 ; GISEL-NEXT:    v_mac_f32_e32 v0, 0xcf800000, v12
2582 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v19, v0
2583 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, -1, vcc
2584 ; GISEL-NEXT:    v_sub_i32_e32 v20, vcc, 0, v10
2585 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], v20, v19, 0
2586 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v22, v12
2587 ; GISEL-NEXT:    v_subb_u32_e32 v21, vcc, 0, v9, vcc
2588 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v14, v5
2589 ; GISEL-NEXT:    v_cndmask_b32_e32 v5, v11, v8, vcc
2590 ; GISEL-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v20, v22, v[1:2]
2591 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, 1, v17
2592 ; GISEL-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v21, v19, v[11:12]
2593 ; GISEL-NEXT:    v_addc_u32_e32 v8, vcc, 0, v18, vcc
2594 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v5
2595 ; GISEL-NEXT:    v_cndmask_b32_e32 v5, v17, v1, vcc
2596 ; GISEL-NEXT:    v_mul_lo_u32 v1, v22, v0
2597 ; GISEL-NEXT:    v_mul_lo_u32 v12, v19, v11
2598 ; GISEL-NEXT:    v_mul_hi_u32 v14, v19, v0
2599 ; GISEL-NEXT:    v_cndmask_b32_e32 v8, v18, v8, vcc
2600 ; GISEL-NEXT:    v_mul_hi_u32 v0, v22, v0
2601 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v12
2602 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
2603 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v1, v14
2604 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2605 ; GISEL-NEXT:    v_mul_lo_u32 v14, v22, v11
2606 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v12, v1
2607 ; GISEL-NEXT:    v_mul_hi_u32 v12, v19, v11
2608 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v14, v0
2609 ; GISEL-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
2610 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v12
2611 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
2612 ; GISEL-NEXT:    v_add_i32_e32 v12, vcc, v14, v12
2613 ; GISEL-NEXT:    v_mul_hi_u32 v11, v22, v11
2614 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
2615 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2616 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v12, v1
2617 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v11, v1
2618 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v19, v0
2619 ; GISEL-NEXT:    v_addc_u32_e32 v12, vcc, v22, v1, vcc
2620 ; GISEL-NEXT:    v_mad_u64_u32 v[0:1], s[4:5], v20, v11, 0
2621 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v13
2622 ; GISEL-NEXT:    v_cndmask_b32_e32 v13, v15, v5, vcc
2623 ; GISEL-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v20, v12, v[1:2]
2624 ; GISEL-NEXT:    v_xor_b32_e32 v1, v13, v7
2625 ; GISEL-NEXT:    v_ashrrev_i32_e32 v13, 31, v3
2626 ; GISEL-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v21, v11, v[4:5]
2627 ; GISEL-NEXT:    v_cndmask_b32_e32 v8, v16, v8, vcc
2628 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v13
2629 ; GISEL-NEXT:    v_addc_u32_e32 v3, vcc, v3, v13, vcc
2630 ; GISEL-NEXT:    v_xor_b32_e32 v5, v2, v13
2631 ; GISEL-NEXT:    v_mul_lo_u32 v2, v12, v0
2632 ; GISEL-NEXT:    v_mul_lo_u32 v14, v11, v4
2633 ; GISEL-NEXT:    v_xor_b32_e32 v15, v3, v13
2634 ; GISEL-NEXT:    v_mul_hi_u32 v3, v11, v0
2635 ; GISEL-NEXT:    v_mul_hi_u32 v0, v12, v0
2636 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v14
2637 ; GISEL-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
2638 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
2639 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2640 ; GISEL-NEXT:    v_mul_lo_u32 v3, v12, v4
2641 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v14, v2
2642 ; GISEL-NEXT:    v_mul_hi_u32 v14, v11, v4
2643 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
2644 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
2645 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v14
2646 ; GISEL-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
2647 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v14
2648 ; GISEL-NEXT:    v_mul_hi_u32 v4, v12, v4
2649 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v2
2650 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2651 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
2652 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v4, v2
2653 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v11, v0
2654 ; GISEL-NEXT:    v_addc_u32_e32 v2, vcc, v12, v2, vcc
2655 ; GISEL-NEXT:    v_mul_lo_u32 v3, v15, v0
2656 ; GISEL-NEXT:    v_mul_lo_u32 v4, v5, v2
2657 ; GISEL-NEXT:    v_mul_hi_u32 v11, v5, v0
2658 ; GISEL-NEXT:    v_mul_hi_u32 v0, v15, v0
2659 ; GISEL-NEXT:    v_mul_hi_u32 v12, v15, v2
2660 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v4
2661 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2662 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v3, v11
2663 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
2664 ; GISEL-NEXT:    v_mul_lo_u32 v11, v15, v2
2665 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
2666 ; GISEL-NEXT:    v_mul_hi_u32 v4, v5, v2
2667 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v11, v0
2668 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2669 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v4
2670 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2671 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v11, v4
2672 ; GISEL-NEXT:    v_add_i32_e32 v11, vcc, v0, v3
2673 ; GISEL-NEXT:    v_mad_u64_u32 v[2:3], s[4:5], v10, v11, 0
2674 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
2675 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v4, v0
2676 ; GISEL-NEXT:    v_add_i32_e32 v12, vcc, v12, v0
2677 ; GISEL-NEXT:    v_mov_b32_e32 v0, v3
2678 ; GISEL-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v10, v12, v[0:1]
2679 ; GISEL-NEXT:    v_xor_b32_e32 v8, v8, v7
2680 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v1, v7
2681 ; GISEL-NEXT:    v_mad_u64_u32 v[3:4], s[4:5], v9, v11, v[3:4]
2682 ; GISEL-NEXT:    v_subb_u32_e32 v1, vcc, v8, v7, vcc
2683 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v5, v2
2684 ; GISEL-NEXT:    v_subb_u32_e64 v4, s[4:5], v15, v3, vcc
2685 ; GISEL-NEXT:    v_sub_i32_e64 v3, s[4:5], v15, v3
2686 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v4, v9
2687 ; GISEL-NEXT:    v_subb_u32_e32 v3, vcc, v3, v9, vcc
2688 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, -1, s[4:5]
2689 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v2, v10
2690 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v10
2691 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]
2692 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v4, v9
2693 ; GISEL-NEXT:    v_subbrev_u32_e32 v3, vcc, 0, v3, vcc
2694 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, v5, v7, s[4:5]
2695 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, 1, v11
2696 ; GISEL-NEXT:    v_addc_u32_e32 v7, vcc, 0, v12, vcc
2697 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v9
2698 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, -1, vcc
2699 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v2, v10
2700 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, -1, vcc
2701 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v9
2702 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v8, v2, vcc
2703 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, 1, v5
2704 ; GISEL-NEXT:    v_addc_u32_e32 v8, vcc, 0, v7, vcc
2705 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
2706 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v5, v3, vcc
2707 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v7, v8, vcc
2708 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v4
2709 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v11, v2, vcc
2710 ; GISEL-NEXT:    v_xor_b32_e32 v4, v13, v6
2711 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v12, v3, vcc
2712 ; GISEL-NEXT:    v_xor_b32_e32 v2, v2, v4
2713 ; GISEL-NEXT:    v_xor_b32_e32 v3, v3, v4
2714 ; GISEL-NEXT:    v_sub_i32_e32 v2, vcc, v2, v4
2715 ; GISEL-NEXT:    v_subb_u32_e32 v3, vcc, v3, v4, vcc
2716 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2718 ; CGP-LABEL: v_sdiv_v2i64_pow2_shl_denom:
2719 ; CGP:       ; %bb.0:
2720 ; CGP-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2721 ; CGP-NEXT:    s_mov_b64 s[4:5], 0x1000
2722 ; CGP-NEXT:    v_lshl_b64 v[11:12], s[4:5], v4
2723 ; CGP-NEXT:    v_mov_b32_e32 v9, v1
2724 ; CGP-NEXT:    v_mov_b32_e32 v8, v0
2725 ; CGP-NEXT:    v_or_b32_e32 v1, v9, v12
2726 ; CGP-NEXT:    v_mov_b32_e32 v0, 0
2727 ; CGP-NEXT:    v_mov_b32_e32 v5, v2
2728 ; CGP-NEXT:    v_mov_b32_e32 v7, v3
2729 ; CGP-NEXT:    v_mov_b32_e32 v2, 0x1000
2730 ; CGP-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
2731 ; CGP-NEXT:    v_mov_b32_e32 v3, 0
2732 ; CGP-NEXT:    ; implicit-def: $vgpr0_vgpr1
2733 ; CGP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2734 ; CGP-NEXT:    s_xor_b64 s[6:7], exec, s[4:5]
2735 ; CGP-NEXT:    s_cbranch_execz .LBB8_2
2736 ; CGP-NEXT:  ; %bb.1:
2737 ; CGP-NEXT:    v_ashrrev_i32_e32 v0, 31, v12
2738 ; CGP-NEXT:    v_add_i32_e32 v1, vcc, v11, v0
2739 ; CGP-NEXT:    v_addc_u32_e32 v10, vcc, v12, v0, vcc
2740 ; CGP-NEXT:    v_xor_b32_e32 v4, v1, v0
2741 ; CGP-NEXT:    v_xor_b32_e32 v1, v10, v0
2742 ; CGP-NEXT:    v_cvt_f32_u32_e32 v10, v4
2743 ; CGP-NEXT:    v_cvt_f32_u32_e32 v11, v1
2744 ; CGP-NEXT:    v_sub_i32_e32 v14, vcc, 0, v4
2745 ; CGP-NEXT:    v_subb_u32_e32 v15, vcc, 0, v1, vcc
2746 ; CGP-NEXT:    v_mac_f32_e32 v10, 0x4f800000, v11
2747 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v10, v10
2748 ; CGP-NEXT:    v_mul_f32_e32 v10, 0x5f7ffffc, v10
2749 ; CGP-NEXT:    v_mul_f32_e32 v11, 0x2f800000, v10
2750 ; CGP-NEXT:    v_trunc_f32_e32 v12, v11
2751 ; CGP-NEXT:    v_mac_f32_e32 v10, 0xcf800000, v12
2752 ; CGP-NEXT:    v_cvt_u32_f32_e32 v13, v10
2753 ; CGP-NEXT:    v_cvt_u32_f32_e32 v16, v12
2754 ; CGP-NEXT:    v_mad_u64_u32 v[10:11], s[4:5], v14, v13, 0
2755 ; CGP-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v14, v16, v[11:12]
2756 ; CGP-NEXT:    v_mul_hi_u32 v17, v13, v10
2757 ; CGP-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v15, v13, v[11:12]
2758 ; CGP-NEXT:    v_mul_lo_u32 v12, v16, v10
2759 ; CGP-NEXT:    v_mul_hi_u32 v10, v16, v10
2760 ; CGP-NEXT:    v_mul_lo_u32 v18, v13, v11
2761 ; CGP-NEXT:    v_mul_lo_u32 v19, v16, v11
2762 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v12, v18
2763 ; CGP-NEXT:    v_cndmask_b32_e64 v18, 0, 1, vcc
2764 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v12, v17
2765 ; CGP-NEXT:    v_mul_hi_u32 v17, v13, v11
2766 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
2767 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v18, v12
2768 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v19, v10
2769 ; CGP-NEXT:    v_cndmask_b32_e64 v18, 0, 1, vcc
2770 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v17
2771 ; CGP-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
2772 ; CGP-NEXT:    v_add_i32_e32 v17, vcc, v18, v17
2773 ; CGP-NEXT:    v_mul_hi_u32 v11, v16, v11
2774 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v12
2775 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
2776 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, v17, v12
2777 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v11, v12
2778 ; CGP-NEXT:    v_add_i32_e32 v13, vcc, v13, v10
2779 ; CGP-NEXT:    v_addc_u32_e32 v16, vcc, v16, v11, vcc
2780 ; CGP-NEXT:    v_mad_u64_u32 v[10:11], s[4:5], v14, v13, 0
2781 ; CGP-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v14, v16, v[11:12]
2782 ; CGP-NEXT:    v_ashrrev_i32_e32 v14, 31, v9
2783 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v8, v14
2784 ; CGP-NEXT:    v_mad_u64_u32 v[11:12], s[4:5], v15, v13, v[11:12]
2785 ; CGP-NEXT:    v_addc_u32_e32 v9, vcc, v9, v14, vcc
2786 ; CGP-NEXT:    v_xor_b32_e32 v12, v8, v14
2787 ; CGP-NEXT:    v_mul_lo_u32 v8, v16, v10
2788 ; CGP-NEXT:    v_mul_lo_u32 v15, v13, v11
2789 ; CGP-NEXT:    v_xor_b32_e32 v17, v9, v14
2790 ; CGP-NEXT:    v_mul_hi_u32 v9, v13, v10
2791 ; CGP-NEXT:    v_mul_hi_u32 v10, v16, v10
2792 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v8, v15
2793 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, 1, vcc
2794 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v8, v9
2795 ; CGP-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
2796 ; CGP-NEXT:    v_mul_lo_u32 v9, v16, v11
2797 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v15, v8
2798 ; CGP-NEXT:    v_mul_hi_u32 v15, v13, v11
2799 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v9, v10
2800 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2801 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v9, v15
2802 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, 1, vcc
2803 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v15
2804 ; CGP-NEXT:    v_mul_hi_u32 v11, v16, v11
2805 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v9, v8
2806 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
2807 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v10, v9
2808 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v11, v9
2809 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v13, v8
2810 ; CGP-NEXT:    v_addc_u32_e32 v9, vcc, v16, v9, vcc
2811 ; CGP-NEXT:    v_mul_lo_u32 v10, v17, v8
2812 ; CGP-NEXT:    v_mul_lo_u32 v11, v12, v9
2813 ; CGP-NEXT:    v_mul_hi_u32 v13, v12, v8
2814 ; CGP-NEXT:    v_mul_hi_u32 v8, v17, v8
2815 ; CGP-NEXT:    v_mul_hi_u32 v15, v17, v9
2816 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v11
2817 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2818 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v10, v13
2819 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2820 ; CGP-NEXT:    v_mul_lo_u32 v13, v17, v9
2821 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v11, v10
2822 ; CGP-NEXT:    v_mul_hi_u32 v11, v12, v9
2823 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v13, v8
2824 ; CGP-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
2825 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v8, v11
2826 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
2827 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v13, v11
2828 ; CGP-NEXT:    v_add_i32_e32 v13, vcc, v8, v10
2829 ; CGP-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], v4, v13, 0
2830 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2831 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v11, v10
2832 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v15, v10
2833 ; CGP-NEXT:    v_mad_u64_u32 v[9:10], s[4:5], v4, v11, v[9:10]
2834 ; CGP-NEXT:    v_sub_i32_e32 v8, vcc, v12, v8
2835 ; CGP-NEXT:    v_mad_u64_u32 v[9:10], s[4:5], v1, v13, v[9:10]
2836 ; CGP-NEXT:    v_subb_u32_e64 v10, s[4:5], v17, v9, vcc
2837 ; CGP-NEXT:    v_sub_i32_e64 v9, s[4:5], v17, v9
2838 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v10, v1
2839 ; CGP-NEXT:    v_subb_u32_e32 v9, vcc, v9, v1, vcc
2840 ; CGP-NEXT:    v_cndmask_b32_e64 v12, 0, -1, s[4:5]
2841 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v8, v4
2842 ; CGP-NEXT:    v_sub_i32_e32 v8, vcc, v8, v4
2843 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, -1, s[4:5]
2844 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], v10, v1
2845 ; CGP-NEXT:    v_subbrev_u32_e32 v9, vcc, 0, v9, vcc
2846 ; CGP-NEXT:    v_cndmask_b32_e64 v10, v12, v15, s[4:5]
2847 ; CGP-NEXT:    v_add_i32_e32 v12, vcc, 1, v13
2848 ; CGP-NEXT:    v_addc_u32_e32 v15, vcc, 0, v11, vcc
2849 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v9, v1
2850 ; CGP-NEXT:    v_cndmask_b32_e64 v16, 0, -1, vcc
2851 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v8, v4
2852 ; CGP-NEXT:    v_cndmask_b32_e64 v4, 0, -1, vcc
2853 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, v9, v1
2854 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v16, v4, vcc
2855 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v12
2856 ; CGP-NEXT:    v_addc_u32_e32 v8, vcc, 0, v15, vcc
2857 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v1
2858 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v12, v4, vcc
2859 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v15, v8, vcc
2860 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v10
2861 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v13, v1, vcc
2862 ; CGP-NEXT:    v_xor_b32_e32 v8, v14, v0
2863 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v11, v4, vcc
2864 ; CGP-NEXT:    v_xor_b32_e32 v0, v1, v8
2865 ; CGP-NEXT:    v_xor_b32_e32 v1, v4, v8
2866 ; CGP-NEXT:    v_sub_i32_e32 v0, vcc, v0, v8
2867 ; CGP-NEXT:    v_subb_u32_e32 v1, vcc, v1, v8, vcc
2868 ; CGP-NEXT:    ; implicit-def: $vgpr11_vgpr12
2869 ; CGP-NEXT:    ; implicit-def: $vgpr8
2870 ; CGP-NEXT:  .LBB8_2: ; %Flow1
2871 ; CGP-NEXT:    s_or_saveexec_b64 s[6:7], s[6:7]
2872 ; CGP-NEXT:    v_lshl_b64 v[9:10], v[2:3], v6
2873 ; CGP-NEXT:    s_xor_b64 exec, exec, s[6:7]
2874 ; CGP-NEXT:    s_cbranch_execz .LBB8_4
2875 ; CGP-NEXT:  ; %bb.3:
2876 ; CGP-NEXT:    v_cvt_f32_u32_e32 v0, v11
2877 ; CGP-NEXT:    v_sub_i32_e32 v1, vcc, 0, v11
2878 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v0, v0
2879 ; CGP-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0
2880 ; CGP-NEXT:    v_cvt_u32_f32_e32 v0, v0
2881 ; CGP-NEXT:    v_mul_lo_u32 v1, v1, v0
2882 ; CGP-NEXT:    v_mul_hi_u32 v1, v0, v1
2883 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
2884 ; CGP-NEXT:    v_mul_hi_u32 v0, v8, v0
2885 ; CGP-NEXT:    v_mul_lo_u32 v1, v0, v11
2886 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
2887 ; CGP-NEXT:    v_sub_i32_e32 v1, vcc, v8, v1
2888 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v11
2889 ; CGP-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
2890 ; CGP-NEXT:    v_sub_i32_e64 v2, s[4:5], v1, v11
2891 ; CGP-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
2892 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, 1, v0
2893 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v11
2894 ; CGP-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
2895 ; CGP-NEXT:    v_mov_b32_e32 v1, 0
2896 ; CGP-NEXT:  .LBB8_4:
2897 ; CGP-NEXT:    s_or_b64 exec, exec, s[6:7]
2898 ; CGP-NEXT:    v_or_b32_e32 v3, v7, v10
2899 ; CGP-NEXT:    v_mov_b32_e32 v2, 0
2900 ; CGP-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
2901 ; CGP-NEXT:    ; implicit-def: $vgpr2_vgpr3
2902 ; CGP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2903 ; CGP-NEXT:    s_xor_b64 s[6:7], exec, s[4:5]
2904 ; CGP-NEXT:    s_cbranch_execnz .LBB8_7
2905 ; CGP-NEXT:  ; %bb.5: ; %Flow
2906 ; CGP-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
2907 ; CGP-NEXT:    s_cbranch_execnz .LBB8_8
2908 ; CGP-NEXT:  .LBB8_6:
2909 ; CGP-NEXT:    s_or_b64 exec, exec, s[6:7]
2910 ; CGP-NEXT:    s_setpc_b64 s[30:31]
2911 ; CGP-NEXT:  .LBB8_7:
2912 ; CGP-NEXT:    v_ashrrev_i32_e32 v2, 31, v10
2913 ; CGP-NEXT:    v_add_i32_e32 v3, vcc, v9, v2
2914 ; CGP-NEXT:    v_addc_u32_e32 v6, vcc, v10, v2, vcc
2915 ; CGP-NEXT:    v_xor_b32_e32 v4, v3, v2
2916 ; CGP-NEXT:    v_xor_b32_e32 v3, v6, v2
2917 ; CGP-NEXT:    v_cvt_f32_u32_e32 v6, v4
2918 ; CGP-NEXT:    v_cvt_f32_u32_e32 v8, v3
2919 ; CGP-NEXT:    v_sub_i32_e32 v12, vcc, 0, v4
2920 ; CGP-NEXT:    v_subb_u32_e32 v13, vcc, 0, v3, vcc
2921 ; CGP-NEXT:    v_mac_f32_e32 v6, 0x4f800000, v8
2922 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v6, v6
2923 ; CGP-NEXT:    v_mul_f32_e32 v6, 0x5f7ffffc, v6
2924 ; CGP-NEXT:    v_mul_f32_e32 v8, 0x2f800000, v6
2925 ; CGP-NEXT:    v_trunc_f32_e32 v10, v8
2926 ; CGP-NEXT:    v_mac_f32_e32 v6, 0xcf800000, v10
2927 ; CGP-NEXT:    v_cvt_u32_f32_e32 v11, v6
2928 ; CGP-NEXT:    v_cvt_u32_f32_e32 v14, v10
2929 ; CGP-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], v12, v11, 0
2930 ; CGP-NEXT:    v_mov_b32_e32 v6, v9
2931 ; CGP-NEXT:    v_mad_u64_u32 v[9:10], s[4:5], v12, v14, v[6:7]
2932 ; CGP-NEXT:    v_mul_lo_u32 v6, v14, v8
2933 ; CGP-NEXT:    v_mad_u64_u32 v[9:10], s[4:5], v13, v11, v[9:10]
2934 ; CGP-NEXT:    v_mul_hi_u32 v10, v11, v8
2935 ; CGP-NEXT:    v_mul_hi_u32 v8, v14, v8
2936 ; CGP-NEXT:    v_mul_lo_u32 v15, v11, v9
2937 ; CGP-NEXT:    v_mul_lo_u32 v16, v14, v9
2938 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v15
2939 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, 1, vcc
2940 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v10
2941 ; CGP-NEXT:    v_mul_hi_u32 v10, v11, v9
2942 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2943 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v15, v6
2944 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v16, v8
2945 ; CGP-NEXT:    v_cndmask_b32_e64 v15, 0, 1, vcc
2946 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v8, v10
2947 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
2948 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, v15, v10
2949 ; CGP-NEXT:    v_mul_hi_u32 v9, v14, v9
2950 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v8, v6
2951 ; CGP-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
2952 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v10, v8
2953 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v9, v8
2954 ; CGP-NEXT:    v_add_i32_e32 v11, vcc, v11, v6
2955 ; CGP-NEXT:    v_addc_u32_e32 v14, vcc, v14, v8, vcc
2956 ; CGP-NEXT:    v_mad_u64_u32 v[8:9], s[4:5], v12, v11, 0
2957 ; CGP-NEXT:    v_mov_b32_e32 v6, v9
2958 ; CGP-NEXT:    v_mad_u64_u32 v[9:10], s[4:5], v12, v14, v[6:7]
2959 ; CGP-NEXT:    v_ashrrev_i32_e32 v12, 31, v7
2960 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v12
2961 ; CGP-NEXT:    v_mad_u64_u32 v[9:10], s[4:5], v13, v11, v[9:10]
2962 ; CGP-NEXT:    v_addc_u32_e32 v6, vcc, v7, v12, vcc
2963 ; CGP-NEXT:    v_xor_b32_e32 v10, v5, v12
2964 ; CGP-NEXT:    v_mul_lo_u32 v5, v14, v8
2965 ; CGP-NEXT:    v_mul_lo_u32 v7, v11, v9
2966 ; CGP-NEXT:    v_xor_b32_e32 v13, v6, v12
2967 ; CGP-NEXT:    v_mul_hi_u32 v6, v11, v8
2968 ; CGP-NEXT:    v_mul_hi_u32 v8, v14, v8
2969 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v7
2970 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2971 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v6
2972 ; CGP-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2973 ; CGP-NEXT:    v_mul_lo_u32 v6, v14, v9
2974 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
2975 ; CGP-NEXT:    v_mul_hi_u32 v7, v11, v9
2976 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v8
2977 ; CGP-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
2978 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v6, v7
2979 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2980 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
2981 ; CGP-NEXT:    v_mul_hi_u32 v8, v14, v9
2982 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
2983 ; CGP-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2984 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
2985 ; CGP-NEXT:    v_add_i32_e32 v6, vcc, v8, v6
2986 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v11, v5
2987 ; CGP-NEXT:    v_addc_u32_e32 v6, vcc, v14, v6, vcc
2988 ; CGP-NEXT:    v_mul_lo_u32 v7, v13, v5
2989 ; CGP-NEXT:    v_mul_lo_u32 v8, v10, v6
2990 ; CGP-NEXT:    v_mul_hi_u32 v9, v10, v5
2991 ; CGP-NEXT:    v_mul_hi_u32 v5, v13, v5
2992 ; CGP-NEXT:    v_mul_hi_u32 v11, v13, v6
2993 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
2994 ; CGP-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
2995 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v7, v9
2996 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
2997 ; CGP-NEXT:    v_mul_lo_u32 v9, v13, v6
2998 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
2999 ; CGP-NEXT:    v_mul_hi_u32 v8, v10, v6
3000 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v9, v5
3001 ; CGP-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
3002 ; CGP-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
3003 ; CGP-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3004 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v9, v8
3005 ; CGP-NEXT:    v_add_i32_e32 v9, vcc, v5, v7
3006 ; CGP-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v4, v9, 0
3007 ; CGP-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
3008 ; CGP-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
3009 ; CGP-NEXT:    v_add_i32_e32 v8, vcc, v11, v7
3010 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v4, v8, v[6:7]
3011 ; CGP-NEXT:    v_sub_i32_e32 v5, vcc, v10, v5
3012 ; CGP-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v3, v9, v[6:7]
3013 ; CGP-NEXT:    v_subb_u32_e64 v7, s[4:5], v13, v6, vcc
3014 ; CGP-NEXT:    v_sub_i32_e64 v6, s[4:5], v13, v6
3015 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v7, v3
3016 ; CGP-NEXT:    v_subb_u32_e32 v6, vcc, v6, v3, vcc
3017 ; CGP-NEXT:    v_cndmask_b32_e64 v10, 0, -1, s[4:5]
3018 ; CGP-NEXT:    v_cmp_ge_u32_e64 s[4:5], v5, v4
3019 ; CGP-NEXT:    v_sub_i32_e32 v5, vcc, v5, v4
3020 ; CGP-NEXT:    v_cndmask_b32_e64 v11, 0, -1, s[4:5]
3021 ; CGP-NEXT:    v_cmp_eq_u32_e64 s[4:5], v7, v3
3022 ; CGP-NEXT:    v_subbrev_u32_e32 v6, vcc, 0, v6, vcc
3023 ; CGP-NEXT:    v_cndmask_b32_e64 v7, v10, v11, s[4:5]
3024 ; CGP-NEXT:    v_add_i32_e32 v10, vcc, 1, v9
3025 ; CGP-NEXT:    v_addc_u32_e32 v11, vcc, 0, v8, vcc
3026 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v6, v3
3027 ; CGP-NEXT:    v_cndmask_b32_e64 v13, 0, -1, vcc
3028 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v5, v4
3029 ; CGP-NEXT:    v_cndmask_b32_e64 v4, 0, -1, vcc
3030 ; CGP-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v3
3031 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v13, v4, vcc
3032 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v10
3033 ; CGP-NEXT:    v_addc_u32_e32 v5, vcc, 0, v11, vcc
3034 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3
3035 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v10, v4, vcc
3036 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v11, v5, vcc
3037 ; CGP-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v7
3038 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v9, v3, vcc
3039 ; CGP-NEXT:    v_xor_b32_e32 v5, v12, v2
3040 ; CGP-NEXT:    v_cndmask_b32_e32 v4, v8, v4, vcc
3041 ; CGP-NEXT:    v_xor_b32_e32 v2, v3, v5
3042 ; CGP-NEXT:    v_xor_b32_e32 v3, v4, v5
3043 ; CGP-NEXT:    v_sub_i32_e32 v2, vcc, v2, v5
3044 ; CGP-NEXT:    v_subb_u32_e32 v3, vcc, v3, v5, vcc
3045 ; CGP-NEXT:    ; implicit-def: $vgpr9_vgpr10
3046 ; CGP-NEXT:    ; implicit-def: $vgpr5
3047 ; CGP-NEXT:    s_andn2_saveexec_b64 s[6:7], s[6:7]
3048 ; CGP-NEXT:    s_cbranch_execz .LBB8_6
3049 ; CGP-NEXT:  .LBB8_8:
3050 ; CGP-NEXT:    v_cvt_f32_u32_e32 v2, v9
3051 ; CGP-NEXT:    v_sub_i32_e32 v3, vcc, 0, v9
3052 ; CGP-NEXT:    v_rcp_iflag_f32_e32 v2, v2
3053 ; CGP-NEXT:    v_mul_f32_e32 v2, 0x4f7ffffe, v2
3054 ; CGP-NEXT:    v_cvt_u32_f32_e32 v2, v2
3055 ; CGP-NEXT:    v_mul_lo_u32 v3, v3, v2
3056 ; CGP-NEXT:    v_mul_hi_u32 v3, v2, v3
3057 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
3058 ; CGP-NEXT:    v_mul_hi_u32 v2, v5, v2
3059 ; CGP-NEXT:    v_mul_lo_u32 v3, v2, v9
3060 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v2
3061 ; CGP-NEXT:    v_sub_i32_e32 v3, vcc, v5, v3
3062 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v9
3063 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
3064 ; CGP-NEXT:    v_sub_i32_e64 v4, s[4:5], v3, v9
3065 ; CGP-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
3066 ; CGP-NEXT:    v_add_i32_e32 v4, vcc, 1, v2
3067 ; CGP-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v9
3068 ; CGP-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
3069 ; CGP-NEXT:    v_mov_b32_e32 v3, 0
3070 ; CGP-NEXT:    s_or_b64 exec, exec, s[6:7]
3071 ; CGP-NEXT:    s_setpc_b64 s[30:31]
3072   %shl.y = shl <2 x i64> <i64 4096, i64 4096>, %y
3073   %r = sdiv <2 x i64> %x, %shl.y
3074   ret <2 x i64> %r
3077 define i64 @v_sdiv_i64_24bit(i64 %num, i64 %den) {
3078 ; GISEL-LABEL: v_sdiv_i64_24bit:
3079 ; GISEL:       ; %bb.0:
3080 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3081 ; GISEL-NEXT:    v_and_b32_e32 v1, 0xffffff, v2
3082 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v2, v1
3083 ; GISEL-NEXT:    v_sub_i32_e32 v3, vcc, 0, v1
3084 ; GISEL-NEXT:    v_and_b32_e32 v0, 0xffffff, v0
3085 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v2, v2
3086 ; GISEL-NEXT:    v_mul_f32_e32 v2, 0x4f7ffffe, v2
3087 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v2, v2
3088 ; GISEL-NEXT:    v_mul_lo_u32 v3, v3, v2
3089 ; GISEL-NEXT:    v_mul_hi_u32 v3, v2, v3
3090 ; GISEL-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
3091 ; GISEL-NEXT:    v_mul_hi_u32 v2, v0, v2
3092 ; GISEL-NEXT:    v_mul_lo_u32 v3, v2, v1
3093 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, 1, v2
3094 ; GISEL-NEXT:    v_sub_i32_e32 v0, vcc, v0, v3
3095 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v1
3096 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
3097 ; GISEL-NEXT:    v_sub_i32_e64 v3, s[4:5], v0, v1
3098 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
3099 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, 1, v2
3100 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v1
3101 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
3102 ; GISEL-NEXT:    v_mov_b32_e32 v1, 0
3103 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3105 ; CGP-LABEL: v_sdiv_i64_24bit:
3106 ; CGP:       ; %bb.0:
3107 ; CGP-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3108 ; CGP-NEXT:    v_and_b32_e32 v1, 0xffffff, v2
3109 ; CGP-NEXT:    v_cvt_f32_i32_e32 v1, v1
3110 ; CGP-NEXT:    v_and_b32_e32 v0, 0xffffff, v0
3111 ; CGP-NEXT:    v_cvt_f32_i32_e32 v0, v0
3112 ; CGP-NEXT:    v_rcp_f32_e32 v2, v1
3113 ; CGP-NEXT:    v_mul_f32_e32 v2, v0, v2
3114 ; CGP-NEXT:    v_trunc_f32_e32 v2, v2
3115 ; CGP-NEXT:    v_mad_f32 v0, -v2, v1, v0
3116 ; CGP-NEXT:    v_cvt_i32_f32_e32 v2, v2
3117 ; CGP-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v0|, |v1|
3118 ; CGP-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]
3119 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v2, v0
3120 ; CGP-NEXT:    v_bfe_i32 v0, v0, 0, 25
3121 ; CGP-NEXT:    v_ashrrev_i32_e32 v1, 31, v0
3122 ; CGP-NEXT:    s_setpc_b64 s[30:31]
3123   %num.mask = and i64 %num, 16777215
3124   %den.mask = and i64 %den, 16777215
3125   %result = sdiv i64 %num.mask, %den.mask
3126   ret i64 %result
3129 define <2 x i64> @v_sdiv_v2i64_24bit(<2 x i64> %num, <2 x i64> %den) {
3130 ; GISEL-LABEL: v_sdiv_v2i64_24bit:
3131 ; GISEL:       ; %bb.0:
3132 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3133 ; GISEL-NEXT:    v_and_b32_e32 v1, 0xffffff, v4
3134 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, 0, v1
3135 ; GISEL-NEXT:    v_addc_u32_e64 v1, s[4:5], 0, 0, vcc
3136 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v4, v3
3137 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v5, v1
3138 ; GISEL-NEXT:    v_sub_i32_e32 v10, vcc, 0, v3
3139 ; GISEL-NEXT:    v_subb_u32_e32 v11, vcc, 0, v1, vcc
3140 ; GISEL-NEXT:    v_mac_f32_e32 v4, 0x4f800000, v5
3141 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v4, v4
3142 ; GISEL-NEXT:    v_and_b32_e32 v0, 0xffffff, v0
3143 ; GISEL-NEXT:    v_mul_f32_e32 v4, 0x5f7ffffc, v4
3144 ; GISEL-NEXT:    v_mul_f32_e32 v5, 0x2f800000, v4
3145 ; GISEL-NEXT:    v_trunc_f32_e32 v7, v5
3146 ; GISEL-NEXT:    v_mac_f32_e32 v4, 0xcf800000, v7
3147 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v9, v4
3148 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v12, v7
3149 ; GISEL-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v10, v9, 0
3150 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v10, v12, v[5:6]
3151 ; GISEL-NEXT:    v_mul_lo_u32 v5, v12, v4
3152 ; GISEL-NEXT:    v_mul_hi_u32 v13, v9, v4
3153 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v11, v9, v[7:8]
3154 ; GISEL-NEXT:    v_mul_hi_u32 v4, v12, v4
3155 ; GISEL-NEXT:    v_mul_lo_u32 v8, v9, v7
3156 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
3157 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3158 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v13
3159 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
3160 ; GISEL-NEXT:    v_mul_lo_u32 v13, v12, v7
3161 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v8, v5
3162 ; GISEL-NEXT:    v_mul_hi_u32 v8, v9, v7
3163 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v13, v4
3164 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
3165 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v8
3166 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3167 ; GISEL-NEXT:    v_add_i32_e32 v8, vcc, v13, v8
3168 ; GISEL-NEXT:    v_mul_hi_u32 v7, v12, v7
3169 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v5
3170 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
3171 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v8, v5
3172 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
3173 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v9, v4
3174 ; GISEL-NEXT:    v_addc_u32_e32 v12, vcc, v12, v5, vcc
3175 ; GISEL-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v10, v9, 0
3176 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v10, v12, v[5:6]
3177 ; GISEL-NEXT:    v_mul_lo_u32 v5, v12, v4
3178 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, 0, v0
3179 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v11, v9, v[7:8]
3180 ; GISEL-NEXT:    v_mul_hi_u32 v0, v9, v4
3181 ; GISEL-NEXT:    v_addc_u32_e64 v11, s[4:5], 0, 0, vcc
3182 ; GISEL-NEXT:    v_mul_lo_u32 v8, v9, v7
3183 ; GISEL-NEXT:    v_mul_hi_u32 v4, v12, v4
3184 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
3185 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3186 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v5, v0
3187 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
3188 ; GISEL-NEXT:    v_mul_lo_u32 v5, v12, v7
3189 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v8, v0
3190 ; GISEL-NEXT:    v_mul_hi_u32 v8, v9, v7
3191 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v5, v4
3192 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
3193 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v4, v8
3194 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3195 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
3196 ; GISEL-NEXT:    v_mul_hi_u32 v7, v12, v7
3197 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v4, v0
3198 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
3199 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v5, v4
3200 ; GISEL-NEXT:    v_add_i32_e32 v4, vcc, v7, v4
3201 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v9, v0
3202 ; GISEL-NEXT:    v_addc_u32_e32 v4, vcc, v12, v4, vcc
3203 ; GISEL-NEXT:    v_mul_lo_u32 v5, v11, v0
3204 ; GISEL-NEXT:    v_mul_lo_u32 v7, v10, v4
3205 ; GISEL-NEXT:    v_mul_hi_u32 v8, v10, v0
3206 ; GISEL-NEXT:    v_mul_hi_u32 v0, v11, v0
3207 ; GISEL-NEXT:    v_and_b32_e32 v12, 0xffffff, v2
3208 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v7
3209 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
3210 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
3211 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
3212 ; GISEL-NEXT:    v_mul_lo_u32 v8, v11, v4
3213 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
3214 ; GISEL-NEXT:    v_mul_hi_u32 v7, v10, v4
3215 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v8, v0
3216 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3217 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v0, v7
3218 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
3219 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
3220 ; GISEL-NEXT:    v_add_i32_e32 v9, vcc, v0, v5
3221 ; GISEL-NEXT:    v_mul_hi_u32 v8, v11, v4
3222 ; GISEL-NEXT:    v_mad_u64_u32 v[4:5], s[4:5], v3, v9, 0
3223 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
3224 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v7, v0
3225 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v8, v0
3226 ; GISEL-NEXT:    v_mad_u64_u32 v[7:8], s[4:5], v3, v0, v[5:6]
3227 ; GISEL-NEXT:    v_and_b32_e32 v2, 0xffffff, v6
3228 ; GISEL-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v1, v9, v[7:8]
3229 ; GISEL-NEXT:    v_sub_i32_e32 v6, vcc, v10, v4
3230 ; GISEL-NEXT:    v_subb_u32_e64 v7, s[4:5], v11, v5, vcc
3231 ; GISEL-NEXT:    v_sub_i32_e64 v5, s[4:5], v11, v5
3232 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v7, v1
3233 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]
3234 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v6, v3
3235 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, -1, s[4:5]
3236 ; GISEL-NEXT:    v_add_i32_e64 v4, s[4:5], 0, v2
3237 ; GISEL-NEXT:    v_addc_u32_e64 v2, s[4:5], 0, 0, s[4:5]
3238 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v11, v4
3239 ; GISEL-NEXT:    v_cvt_f32_u32_e32 v13, v2
3240 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v7, v1
3241 ; GISEL-NEXT:    v_subb_u32_e32 v5, vcc, v5, v1, vcc
3242 ; GISEL-NEXT:    v_mac_f32_e32 v11, 0x4f800000, v13
3243 ; GISEL-NEXT:    v_rcp_iflag_f32_e32 v7, v11
3244 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, v8, v10, s[4:5]
3245 ; GISEL-NEXT:    v_sub_i32_e32 v10, vcc, v6, v3
3246 ; GISEL-NEXT:    v_subbrev_u32_e32 v11, vcc, 0, v5, vcc
3247 ; GISEL-NEXT:    v_mul_f32_e32 v5, 0x5f7ffffc, v7
3248 ; GISEL-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v5
3249 ; GISEL-NEXT:    v_trunc_f32_e32 v6, v6
3250 ; GISEL-NEXT:    v_mac_f32_e32 v5, 0xcf800000, v6
3251 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v13, v5
3252 ; GISEL-NEXT:    v_sub_i32_e32 v15, vcc, 0, v4
3253 ; GISEL-NEXT:    v_cvt_u32_f32_e32 v14, v6
3254 ; GISEL-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v15, v13, 0
3255 ; GISEL-NEXT:    v_subb_u32_e32 v16, vcc, 0, v2, vcc
3256 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v15, v14, v[6:7]
3257 ; GISEL-NEXT:    v_add_i32_e32 v17, vcc, 1, v9
3258 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v16, v13, v[6:7]
3259 ; GISEL-NEXT:    v_addc_u32_e32 v18, vcc, 0, v0, vcc
3260 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v11, v1
3261 ; GISEL-NEXT:    v_cndmask_b32_e64 v19, 0, -1, vcc
3262 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v10, v3
3263 ; GISEL-NEXT:    v_mul_lo_u32 v7, v14, v5
3264 ; GISEL-NEXT:    v_mul_lo_u32 v10, v13, v6
3265 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, -1, vcc
3266 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v11, v1
3267 ; GISEL-NEXT:    v_mul_hi_u32 v1, v13, v5
3268 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v19, v3, vcc
3269 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v10
3270 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
3271 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v7, v1
3272 ; GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3273 ; GISEL-NEXT:    v_mul_lo_u32 v7, v14, v6
3274 ; GISEL-NEXT:    v_mul_hi_u32 v5, v14, v5
3275 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v10, v1
3276 ; GISEL-NEXT:    v_mul_hi_u32 v10, v13, v6
3277 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
3278 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
3279 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v10
3280 ; GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
3281 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v10
3282 ; GISEL-NEXT:    v_mul_hi_u32 v6, v14, v6
3283 ; GISEL-NEXT:    v_add_i32_e32 v1, vcc, v5, v1
3284 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
3285 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
3286 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
3287 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v13, v1
3288 ; GISEL-NEXT:    v_addc_u32_e32 v11, vcc, v14, v5, vcc
3289 ; GISEL-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v15, v10, 0
3290 ; GISEL-NEXT:    v_add_i32_e32 v13, vcc, 1, v17
3291 ; GISEL-NEXT:    v_mov_b32_e32 v1, v6
3292 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v15, v11, v[1:2]
3293 ; GISEL-NEXT:    v_addc_u32_e32 v14, vcc, 0, v18, vcc
3294 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v16, v10, v[6:7]
3295 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3
3296 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v17, v13, vcc
3297 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v18, v14, vcc
3298 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v8
3299 ; GISEL-NEXT:    v_mul_lo_u32 v7, v11, v5
3300 ; GISEL-NEXT:    v_mul_lo_u32 v8, v10, v6
3301 ; GISEL-NEXT:    v_mul_hi_u32 v13, v10, v5
3302 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v9, v1, vcc
3303 ; GISEL-NEXT:    v_add_i32_e64 v9, s[4:5], 0, v12
3304 ; GISEL-NEXT:    v_addc_u32_e64 v12, s[4:5], 0, 0, s[4:5]
3305 ; GISEL-NEXT:    v_add_i32_e64 v7, s[4:5], v7, v8
3306 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, s[4:5]
3307 ; GISEL-NEXT:    v_add_i32_e64 v7, s[4:5], v7, v13
3308 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, s[4:5]
3309 ; GISEL-NEXT:    v_mul_lo_u32 v13, v11, v6
3310 ; GISEL-NEXT:    v_mul_hi_u32 v5, v11, v5
3311 ; GISEL-NEXT:    v_add_i32_e64 v7, s[4:5], v8, v7
3312 ; GISEL-NEXT:    v_mul_hi_u32 v8, v10, v6
3313 ; GISEL-NEXT:    v_add_i32_e64 v5, s[4:5], v13, v5
3314 ; GISEL-NEXT:    v_cndmask_b32_e64 v13, 0, 1, s[4:5]
3315 ; GISEL-NEXT:    v_add_i32_e64 v5, s[4:5], v5, v8
3316 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, s[4:5]
3317 ; GISEL-NEXT:    v_add_i32_e64 v8, s[4:5], v13, v8
3318 ; GISEL-NEXT:    v_mul_hi_u32 v6, v11, v6
3319 ; GISEL-NEXT:    v_add_i32_e64 v5, s[4:5], v5, v7
3320 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, s[4:5]
3321 ; GISEL-NEXT:    v_add_i32_e64 v7, s[4:5], v8, v7
3322 ; GISEL-NEXT:    v_add_i32_e64 v6, s[4:5], v6, v7
3323 ; GISEL-NEXT:    v_add_i32_e64 v5, s[4:5], v10, v5
3324 ; GISEL-NEXT:    v_addc_u32_e64 v6, s[4:5], v11, v6, s[4:5]
3325 ; GISEL-NEXT:    v_mul_lo_u32 v7, v12, v5
3326 ; GISEL-NEXT:    v_mul_lo_u32 v8, v9, v6
3327 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc
3328 ; GISEL-NEXT:    v_mul_hi_u32 v0, v9, v5
3329 ; GISEL-NEXT:    v_mul_hi_u32 v5, v12, v5
3330 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
3331 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3332 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v7, v0
3333 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
3334 ; GISEL-NEXT:    v_mul_lo_u32 v7, v12, v6
3335 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v8, v0
3336 ; GISEL-NEXT:    v_mul_hi_u32 v8, v9, v6
3337 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v7, v5
3338 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
3339 ; GISEL-NEXT:    v_add_i32_e32 v5, vcc, v5, v8
3340 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
3341 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
3342 ; GISEL-NEXT:    v_add_i32_e32 v8, vcc, v5, v0
3343 ; GISEL-NEXT:    v_mul_hi_u32 v10, v12, v6
3344 ; GISEL-NEXT:    v_mad_u64_u32 v[5:6], s[4:5], v4, v8, 0
3345 ; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
3346 ; GISEL-NEXT:    v_add_i32_e32 v0, vcc, v7, v0
3347 ; GISEL-NEXT:    v_add_i32_e32 v10, vcc, v10, v0
3348 ; GISEL-NEXT:    v_mov_b32_e32 v0, v6
3349 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v4, v10, v[0:1]
3350 ; GISEL-NEXT:    v_subrev_i32_e32 v0, vcc, 0, v1
3351 ; GISEL-NEXT:    v_mad_u64_u32 v[6:7], s[4:5], v2, v8, v[6:7]
3352 ; GISEL-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v3, vcc
3353 ; GISEL-NEXT:    v_sub_i32_e32 v3, vcc, v9, v5
3354 ; GISEL-NEXT:    v_subb_u32_e64 v5, s[4:5], v12, v6, vcc
3355 ; GISEL-NEXT:    v_sub_i32_e64 v6, s[4:5], v12, v6
3356 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v5, v2
3357 ; GISEL-NEXT:    v_subb_u32_e32 v6, vcc, v6, v2, vcc
3358 ; GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]
3359 ; GISEL-NEXT:    v_cmp_ge_u32_e64 s[4:5], v3, v4
3360 ; GISEL-NEXT:    v_sub_i32_e32 v3, vcc, v3, v4
3361 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, -1, s[4:5]
3362 ; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v5, v2
3363 ; GISEL-NEXT:    v_subbrev_u32_e32 v6, vcc, 0, v6, vcc
3364 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, v7, v9, s[4:5]
3365 ; GISEL-NEXT:    v_add_i32_e32 v7, vcc, 1, v8
3366 ; GISEL-NEXT:    v_addc_u32_e32 v9, vcc, 0, v10, vcc
3367 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v6, v2
3368 ; GISEL-NEXT:    v_cndmask_b32_e64 v11, 0, -1, vcc
3369 ; GISEL-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v4
3370 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, -1, vcc
3371 ; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v2
3372 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v11, v3, vcc
3373 ; GISEL-NEXT:    v_add_i32_e32 v3, vcc, 1, v7
3374 ; GISEL-NEXT:    v_addc_u32_e32 v4, vcc, 0, v9, vcc
3375 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
3376 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v7, v3, vcc
3377 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v9, v4, vcc
3378 ; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v5
3379 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, v8, v2, vcc
3380 ; GISEL-NEXT:    v_cndmask_b32_e32 v3, v10, v3, vcc
3381 ; GISEL-NEXT:    v_subrev_i32_e32 v2, vcc, 0, v2
3382 ; GISEL-NEXT:    v_subbrev_u32_e32 v3, vcc, 0, v3, vcc
3383 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3385 ; CGP-LABEL: v_sdiv_v2i64_24bit:
3386 ; CGP:       ; %bb.0:
3387 ; CGP-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3388 ; CGP-NEXT:    v_and_b32_e32 v1, 0xffffff, v4
3389 ; CGP-NEXT:    v_cvt_f32_i32_e32 v1, v1
3390 ; CGP-NEXT:    v_and_b32_e32 v0, 0xffffff, v0
3391 ; CGP-NEXT:    v_cvt_f32_i32_e32 v0, v0
3392 ; CGP-NEXT:    v_and_b32_e32 v4, 0xffffff, v6
3393 ; CGP-NEXT:    v_rcp_f32_e32 v3, v1
3394 ; CGP-NEXT:    v_cvt_f32_i32_e32 v4, v4
3395 ; CGP-NEXT:    v_and_b32_e32 v2, 0xffffff, v2
3396 ; CGP-NEXT:    v_cvt_f32_i32_e32 v2, v2
3397 ; CGP-NEXT:    v_mul_f32_e32 v3, v0, v3
3398 ; CGP-NEXT:    v_trunc_f32_e32 v3, v3
3399 ; CGP-NEXT:    v_mad_f32 v0, -v3, v1, v0
3400 ; CGP-NEXT:    v_cvt_i32_f32_e32 v3, v3
3401 ; CGP-NEXT:    v_rcp_f32_e32 v5, v4
3402 ; CGP-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v0|, |v1|
3403 ; CGP-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]
3404 ; CGP-NEXT:    v_add_i32_e32 v0, vcc, v3, v0
3405 ; CGP-NEXT:    v_mul_f32_e32 v3, v2, v5
3406 ; CGP-NEXT:    v_trunc_f32_e32 v3, v3
3407 ; CGP-NEXT:    v_mad_f32 v2, -v3, v4, v2
3408 ; CGP-NEXT:    v_cvt_i32_f32_e32 v3, v3
3409 ; CGP-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v2|, |v4|
3410 ; CGP-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
3411 ; CGP-NEXT:    v_bfe_i32 v0, v0, 0, 25
3412 ; CGP-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
3413 ; CGP-NEXT:    v_bfe_i32 v2, v2, 0, 25
3414 ; CGP-NEXT:    v_ashrrev_i32_e32 v1, 31, v0
3415 ; CGP-NEXT:    v_ashrrev_i32_e32 v3, 31, v2
3416 ; CGP-NEXT:    s_setpc_b64 s[30:31]
3417   %num.mask = and <2 x i64> %num, <i64 16777215, i64 16777215>
3418   %den.mask = and <2 x i64> %den, <i64 16777215, i64 16777215>
3419   %result = sdiv <2 x i64> %num.mask, %den.mask
3420   ret <2 x i64> %result