xref: /llvm-project/llvm/test/CodeGen/AMDGPU/itofp.i128.ll (revision 17f3e00911b860d535f41185e605c47babcc2039)
1c7c561efSMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2c7c561efSMatt Arsenault; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,SDAG %s
3c7c561efSMatt Arsenault; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GISEL %s
4c7c561efSMatt Arsenault
5c7c561efSMatt Arsenaultdefine float @sitofp_i128_to_f32(i128 %x) {
6c7c561efSMatt Arsenault; SDAG-LABEL: sitofp_i128_to_f32:
7c7c561efSMatt Arsenault; SDAG:       ; %bb.0: ; %itofp-entry
8c7c561efSMatt Arsenault; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v5, v1, v3
10c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v4, v0, v2
11c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
12c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v4, 0
13c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[6:7], vcc
14092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB0_14
15c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.1: ; %itofp-if-end
16af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_sub_co_u32_e32 v4, vcc, 0, v0
17af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v5, vcc, 0, v1, vcc
18af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v6, vcc, 0, v2, vcc
19af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v7, vcc, 0, v3, vcc
20af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cmp_gt_i64_e32 vcc, 0, v[2:3]
21af3ffff3SSimon Pilgrim; SDAG-NEXT:    ; implicit-def: $vgpr8
22af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
23af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v4, v2, v6, vcc
24af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
25af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v5, v3, v7, vcc
26c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v2, v4
27c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v2, 32, v2
28c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v6, v5
29c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v2, v2, v6
30c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v6, v0
31c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v6, 32, v6
32c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v7, v1
33c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v6, v6, v7
34c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
35c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v6, 64, v6
36092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v6, v2, vcc
37092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v6, 0x80, v7
38092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v2, 0x7f, v7
39092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_i32_e32 vcc, 25, v6
40c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
41c7c561efSMatt Arsenault; SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
42c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.2: ; %itofp-if-else
43092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v4, 0xffffff98, v7
44c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
45c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v4
46092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, 0, v0, vcc
47092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr6
48c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr0_vgpr1
49092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr7
50c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr4_vgpr5
51092999e7SJay Foad; SDAG-NEXT:  ; %bb.3: ; %Flow3
52c7c561efSMatt Arsenault; SDAG-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
53092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB0_13
54c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.4: ; %NodeBlock
55092999e7SJay Foad; SDAG-NEXT:    v_cmp_lt_i32_e32 vcc, 25, v6
56092999e7SJay Foad; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
57092999e7SJay Foad; SDAG-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
58092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB0_8
59092999e7SJay Foad; SDAG-NEXT:  ; %bb.5: ; %LeafBlock
60092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v6
61c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[12:13], vcc
62092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB0_7
63092999e7SJay Foad; SDAG-NEXT:  ; %bb.6: ; %itofp-sw-default
64092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v12, 0x66, v7
65c7c561efSMatt Arsenault; SDAG-NEXT:    v_sub_u32_e32 v10, 64, v12
66092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[8:9], v12, v[0:1]
67c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[10:11], v10, v[4:5]
68092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v13, 38, v7
69092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v11, v9, v11
70092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v8, v10
71092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[8:9], v13, v[4:5]
72c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v12
73092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v14, 26, v7
74092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v9, v9, v11, vcc
75c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v12
76092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v8, v10, vcc
77c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[10:11], v13, v[0:1]
78c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[12:13], v14, v[4:5]
79092999e7SJay Foad; SDAG-NEXT:    v_subrev_u32_e32 v7, 38, v7
80092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v15, v8, v0, s[4:5]
81092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[7:8], v7, v[0:1]
82092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v9, v9, v1, s[4:5]
83092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v11, v13, v11
84092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v12, v10
85c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v14
86092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v14, v[0:1]
87092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v8, v11, vcc
88c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v14
89092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v7, v10, vcc
90092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v5, v8, v5, s[4:5]
91092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v4, v7, v4, s[4:5]
92092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
93092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
94092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v1, v1, v5
95092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v0, v0, v4
96092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
97092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
98092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v8, v15, v0
99092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v0, v8
100092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v1, v9
101092999e7SJay Foad; SDAG-NEXT:  .LBB0_7: ; %Flow1
102c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[12:13]
103092999e7SJay Foad; SDAG-NEXT:  .LBB0_8: ; %Flow2
104092999e7SJay Foad; SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
105092999e7SJay Foad; SDAG-NEXT:  ; %bb.9: ; %itofp-sw-bb
106092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
107092999e7SJay Foad; SDAG-NEXT:  ; %bb.10: ; %itofp-sw-epilog
108c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
109092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v4, 2, v0
110092999e7SJay Foad; SDAG-NEXT:    v_and_or_b32 v0, v4, 1, v0
111c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
112092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
113c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v4, 0x4000000, v0
114c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v4
115092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v8, v1, v0, 2
116c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
117092999e7SJay Foad; SDAG-NEXT:  ; %bb.11: ; %itofp-if-then20
118092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v8, v1, v0, 3
119092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v2, v6
120092999e7SJay Foad; SDAG-NEXT:  ; %bb.12: ; %Flow
121c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
122092999e7SJay Foad; SDAG-NEXT:  .LBB0_13: ; %Flow4
123c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[8:9]
124c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v0, 0x80000000, v3
125c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshl_add_u32 v1, v2, 23, 1.0
126092999e7SJay Foad; SDAG-NEXT:    v_and_b32_e32 v2, 0x7fffff, v8
127c7c561efSMatt Arsenault; SDAG-NEXT:    v_or3_b32 v4, v2, v0, v1
128092999e7SJay Foad; SDAG-NEXT:  .LBB0_14: ; %Flow5
129c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[6:7]
130c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v0, v4
131c7c561efSMatt Arsenault; SDAG-NEXT:    s_setpc_b64 s[30:31]
132c7c561efSMatt Arsenault;
133c7c561efSMatt Arsenault; GISEL-LABEL: sitofp_i128_to_f32:
134c7c561efSMatt Arsenault; GISEL:       ; %bb.0: ; %itofp-entry
135c7c561efSMatt Arsenault; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
136c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v4, v0, v2
137c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v5, v1, v3
138c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
139c7c561efSMatt Arsenault; GISEL-NEXT:    s_mov_b32 s4, 0
140c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v4, s4
141c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[6:7], vcc
142092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB0_14
143c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.1: ; %itofp-if-end
144092999e7SJay Foad; GISEL-NEXT:    v_ashrrev_i32_e32 v6, 31, v3
145092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v0, v6, v0
146092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v1, v6, v1
147092999e7SJay Foad; GISEL-NEXT:    v_sub_co_u32_e32 v0, vcc, v0, v6
148092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v2, v6, v2
149092999e7SJay Foad; GISEL-NEXT:    v_subb_co_u32_e32 v1, vcc, v1, v6, vcc
150092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v3, v6, v3
151092999e7SJay Foad; GISEL-NEXT:    v_subb_co_u32_e32 v2, vcc, v2, v6, vcc
152092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v0
153092999e7SJay Foad; GISEL-NEXT:    v_subb_co_u32_e32 v3, vcc, v3, v6, vcc
154092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v4, v1
155092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v5, 32, v5
156092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v7, v2
157092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v4, v4, v5
158092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v3
159092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v7, 32, v7
160092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[2:3]
161092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v4, 64, v4
162092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v5, v5, v7
163092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v5, v5, v4, vcc
164092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v8, 0x80, v5
165092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v7, 0x7f, v5
166092999e7SJay Foad; GISEL-NEXT:    v_cmp_ge_i32_e32 vcc, 24, v8
167092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr4
168c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
169c7c561efSMatt Arsenault; GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
170c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.2: ; %itofp-if-else
171092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v2, 0xffffff98, v5
172c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
173c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
174092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v0, vcc
175092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr8
176c7c561efSMatt Arsenault; GISEL-NEXT:    ; implicit-def: $vgpr0
177092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr5
178092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr2
179092999e7SJay Foad; GISEL-NEXT:  ; %bb.3: ; %Flow3
180c7c561efSMatt Arsenault; GISEL-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
181092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB0_13
182c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.4: ; %NodeBlock
183092999e7SJay Foad; GISEL-NEXT:    v_cmp_le_i32_e32 vcc, 26, v8
184092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
185092999e7SJay Foad; GISEL-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
186092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB0_8
187092999e7SJay Foad; GISEL-NEXT:  ; %bb.5: ; %LeafBlock
188092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v8
189c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[12:13], vcc
190092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB0_7
191092999e7SJay Foad; GISEL-NEXT:  ; %bb.6: ; %itofp-sw-default
192092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v4, 0x66, v5
193092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v11, 64, v4
194092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[9:10], v4, v[0:1]
195092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[11:12], v11, v[2:3]
196*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v13, 0xffffffc0, v4
197092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v11, v9, v11
198092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v12, v10, v12
199092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[9:10], v13, v[2:3]
200092999e7SJay Foad; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v4
201*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v14, 26, v5
202092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, v9, v11, vcc
203092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v10, v10, v12, vcc
204092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
205*17f3e009SCraig Topper; GISEL-NEXT:    v_sub_u32_e32 v11, 64, v14
206092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v13, v9, v0, vcc
207092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, v10, v1, vcc
208*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[9:10], v14, -1
209c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[11:12], v11, -1
210*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v5, 0xffffffda, v5
211092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v15, v9, v11
212092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v16, v10, v12
213*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[11:12], v5, -1
214*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v14
215*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v5, v11, v15, vcc
216*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v11, v12, v16, vcc
217*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v14
218092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, 0, v9, vcc
219092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v10, vcc
220*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v5, v5, -1, s[4:5]
221*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v11, v11, -1, s[4:5]
222092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, v9, v2
223092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v3, v10, v3
224092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v0, v5, v0, v2
225092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v1, v11, v1, v3
226092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
227092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
228092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v3, v13, v0
229092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v3
230092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v1, v4
231092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v2, v5
232092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, v6
233092999e7SJay Foad; GISEL-NEXT:  .LBB0_7: ; %Flow1
234c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[12:13]
235092999e7SJay Foad; GISEL-NEXT:  .LBB0_8: ; %Flow2
236092999e7SJay Foad; GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
237092999e7SJay Foad; GISEL-NEXT:  ; %bb.9: ; %itofp-sw-bb
238092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
239092999e7SJay Foad; GISEL-NEXT:  ; %bb.10: ; %itofp-sw-epilog
240c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
241092999e7SJay Foad; GISEL-NEXT:    v_bfe_u32 v2, v0, 2, 1
242092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v0, v0, v2
243c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
244092999e7SJay Foad; GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
245092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, 0x4000000, v0
246092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, 0
247092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 2, v[0:1]
248092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
249c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
250092999e7SJay Foad; GISEL-NEXT:  ; %bb.11: ; %itofp-if-then20
251092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 3, v[0:1]
252092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v7, v8
253092999e7SJay Foad; GISEL-NEXT:  ; %bb.12: ; %Flow
254c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
255092999e7SJay Foad; GISEL-NEXT:  .LBB0_13: ; %Flow4
256c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[8:9]
257092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v0, 0x80000000, v6
258092999e7SJay Foad; GISEL-NEXT:    v_lshl_add_u32 v1, v7, 23, 1.0
259092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, 0x7fffff, v4
260c7c561efSMatt Arsenault; GISEL-NEXT:    v_or3_b32 v4, v2, v0, v1
261092999e7SJay Foad; GISEL-NEXT:  .LBB0_14: ; %Flow5
262c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[6:7]
263c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v0, v4
264c7c561efSMatt Arsenault; GISEL-NEXT:    s_setpc_b64 s[30:31]
265c7c561efSMatt Arsenault  %cvt = sitofp i128 %x to float
266c7c561efSMatt Arsenault  ret float %cvt
267c7c561efSMatt Arsenault}
268c7c561efSMatt Arsenault
269c7c561efSMatt Arsenaultdefine float @uitofp_i128_to_f32(i128 %x) {
270c7c561efSMatt Arsenault; SDAG-LABEL: uitofp_i128_to_f32:
271c7c561efSMatt Arsenault; SDAG:       ; %bb.0: ; %itofp-entry
272c7c561efSMatt Arsenault; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
273c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v5, v1, v3
274c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v4, v0, v2
275c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
276c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v4, 0
277c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[6:7], vcc
278092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB1_14
279c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.1: ; %itofp-if-end
280c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v4, v2
281c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v4, 32, v4
282c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v5, v3
283c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v4, v4, v5
284c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v5, v0
285c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v5, 32, v5
286c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v6, v1
287c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v5, v5, v6
288c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
289c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v5, 64, v5
290092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v6, v5, v4, vcc
291092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v5, 0x80, v6
292092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v4, 0x7f, v6
293092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_i32_e32 vcc, 25, v5
294092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr7
295c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
296c7c561efSMatt Arsenault; SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
297c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.2: ; %itofp-if-else
298092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v2, 0xffffff98, v6
299c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
300c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
301092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, 0, v0, vcc
302092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr5
303c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr0_vgpr1
304092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr6
305c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr2_vgpr3
306092999e7SJay Foad; SDAG-NEXT:  ; %bb.3: ; %Flow3
307c7c561efSMatt Arsenault; SDAG-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
308092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB1_13
309c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.4: ; %NodeBlock
310092999e7SJay Foad; SDAG-NEXT:    v_cmp_lt_i32_e32 vcc, 25, v5
311092999e7SJay Foad; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
312092999e7SJay Foad; SDAG-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
313092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB1_8
314092999e7SJay Foad; SDAG-NEXT:  ; %bb.5: ; %LeafBlock
315092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v5
316c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[12:13], vcc
317092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB1_7
318092999e7SJay Foad; SDAG-NEXT:  ; %bb.6: ; %itofp-sw-default
319092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v11, 0x66, v6
320c7c561efSMatt Arsenault; SDAG-NEXT:    v_sub_u32_e32 v9, 64, v11
321092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[7:8], v11, v[0:1]
322c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[9:10], v9, v[2:3]
323092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v12, 38, v6
324092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v8, v10
325092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v9, v7, v9
326092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[7:8], v12, v[2:3]
327c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v11
328092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v13, 26, v6
329092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v8, v10, vcc
330c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v11
331092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v7, v9, vcc
332c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[9:10], v12, v[0:1]
333c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[11:12], v13, v[2:3]
334092999e7SJay Foad; SDAG-NEXT:    v_subrev_u32_e32 v6, 38, v6
335092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v14, v7, v0, s[4:5]
336092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[6:7], v6, v[0:1]
337092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v8, v8, v1, s[4:5]
338092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v12, v10
339092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v9, v11, v9
340c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v13
341092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v13, v[0:1]
342092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v7, v10, vcc
343c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v13
344092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v6, v6, v9, vcc
345092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
346092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
347092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
348092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
349092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v1, v1, v3
350092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v0, v0, v2
351092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
352092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
353092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v7, v14, v0
354092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v0, v7
355092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v1, v8
356092999e7SJay Foad; SDAG-NEXT:  .LBB1_7: ; %Flow1
357c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[12:13]
358092999e7SJay Foad; SDAG-NEXT:  .LBB1_8: ; %Flow2
359092999e7SJay Foad; SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
360092999e7SJay Foad; SDAG-NEXT:  ; %bb.9: ; %itofp-sw-bb
361092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
362092999e7SJay Foad; SDAG-NEXT:  ; %bb.10: ; %itofp-sw-epilog
363c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
364092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 2, v0
365092999e7SJay Foad; SDAG-NEXT:    v_and_or_b32 v0, v2, 1, v0
366c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
367092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
368c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v2, 0x4000000, v0
369c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
370092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v7, v1, v0, 2
371c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
372092999e7SJay Foad; SDAG-NEXT:  ; %bb.11: ; %itofp-if-then20
373092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v7, v1, v0, 3
374092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v4, v5
375092999e7SJay Foad; SDAG-NEXT:  ; %bb.12: ; %Flow
376c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
377092999e7SJay Foad; SDAG-NEXT:  .LBB1_13: ; %Flow4
378c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[8:9]
379092999e7SJay Foad; SDAG-NEXT:    v_and_b32_e32 v0, 0x7fffff, v7
380092999e7SJay Foad; SDAG-NEXT:    v_lshl_or_b32 v0, v4, 23, v0
381c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v4, 1.0, v0
382092999e7SJay Foad; SDAG-NEXT:  .LBB1_14: ; %Flow5
383c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[6:7]
384c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v0, v4
385c7c561efSMatt Arsenault; SDAG-NEXT:    s_setpc_b64 s[30:31]
386c7c561efSMatt Arsenault;
387c7c561efSMatt Arsenault; GISEL-LABEL: uitofp_i128_to_f32:
388c7c561efSMatt Arsenault; GISEL:       ; %bb.0: ; %itofp-entry
389c7c561efSMatt Arsenault; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
390092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v4, v0, v2
391092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v5, v1, v3
392092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
393c7c561efSMatt Arsenault; GISEL-NEXT:    s_mov_b32 s4, 0
394092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v4, s4
395c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[6:7], vcc
396092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB1_14
397c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.1: ; %itofp-if-end
398092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v0
399092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v4, v1
400092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v5, 32, v5
401092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v6, v2
402092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v4, v4, v5
403092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v3
404c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_u32_e32 v6, 32, v6
405092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[2:3]
406092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v4, 64, v4
407092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v5, v5, v6
408092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v5, v5, v4, vcc
409092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v7, 0x80, v5
410092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v6, 0x7f, v5
411092999e7SJay Foad; GISEL-NEXT:    v_cmp_ge_i32_e32 vcc, 24, v7
412092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr4
413c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
414c7c561efSMatt Arsenault; GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
415c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.2: ; %itofp-if-else
416092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v2, 0xffffff98, v5
417c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
418c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
419092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v0, vcc
420092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr7
421c7c561efSMatt Arsenault; GISEL-NEXT:    ; implicit-def: $vgpr0
422092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr5
423092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr2
424092999e7SJay Foad; GISEL-NEXT:  ; %bb.3: ; %Flow3
425c7c561efSMatt Arsenault; GISEL-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
426092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB1_13
427c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.4: ; %NodeBlock
428092999e7SJay Foad; GISEL-NEXT:    v_cmp_le_i32_e32 vcc, 26, v7
429c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
430092999e7SJay Foad; GISEL-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
431092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB1_8
432092999e7SJay Foad; GISEL-NEXT:  ; %bb.5: ; %LeafBlock
433092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v7
434092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[12:13], vcc
435092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB1_7
436092999e7SJay Foad; GISEL-NEXT:  ; %bb.6: ; %itofp-sw-default
437092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v4, 0x66, v5
438092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v10, 64, v4
439092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[8:9], v4, v[0:1]
440092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[10:11], v10, v[2:3]
441*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v12, 0xffffffc0, v4
442092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v10, v8, v10
443092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v11, v9, v11
444092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[8:9], v12, v[2:3]
445092999e7SJay Foad; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v4
446*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v13, 26, v5
447092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v8, v8, v10, vcc
448092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, v9, v11, vcc
449092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
450*17f3e009SCraig Topper; GISEL-NEXT:    v_sub_u32_e32 v10, 64, v13
451092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v12, v8, v0, vcc
452092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, v9, v1, vcc
453*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[8:9], v13, -1
454092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[10:11], v10, -1
455*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v5, 0xffffffda, v5
456092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v14, v8, v10
457092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v15, v9, v11
458*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[10:11], v5, -1
459*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v13
460*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v5, v10, v14, vcc
461*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v10, v11, v15, vcc
462*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v13
463092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v8, vcc
464092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, 0, v9, vcc
465*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v5, v5, -1, s[4:5]
466*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v10, v10, -1, s[4:5]
467092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, v8, v2
468092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v3, v9, v3
469092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v0, v5, v0, v2
470092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v1, v10, v1, v3
471092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
472092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
473092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v3, v12, v0
474092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v3
475092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v1, v4
476092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v2, v5
477092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, v6
478092999e7SJay Foad; GISEL-NEXT:  .LBB1_7: ; %Flow1
479092999e7SJay Foad; GISEL-NEXT:    s_or_b64 exec, exec, s[12:13]
480092999e7SJay Foad; GISEL-NEXT:  .LBB1_8: ; %Flow2
481092999e7SJay Foad; GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
482092999e7SJay Foad; GISEL-NEXT:  ; %bb.9: ; %itofp-sw-bb
483092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
484092999e7SJay Foad; GISEL-NEXT:  ; %bb.10: ; %itofp-sw-epilog
485c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
486092999e7SJay Foad; GISEL-NEXT:    v_bfe_u32 v2, v0, 2, 1
487092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v0, v0, v2
488092999e7SJay Foad; GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
489092999e7SJay Foad; GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
490092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, 0x4000000, v0
491092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, 0
492092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 2, v[0:1]
493092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
494092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
495092999e7SJay Foad; GISEL-NEXT:  ; %bb.11: ; %itofp-if-then20
496092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 3, v[0:1]
497092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v6, v7
498092999e7SJay Foad; GISEL-NEXT:  ; %bb.12: ; %Flow
499092999e7SJay Foad; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
500092999e7SJay Foad; GISEL-NEXT:  .LBB1_13: ; %Flow4
501c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[8:9]
502092999e7SJay Foad; GISEL-NEXT:    v_lshl_add_u32 v0, v6, 23, 1.0
503c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v1, 0x7fffff
504092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v4, v4, v1, v0
505092999e7SJay Foad; GISEL-NEXT:  .LBB1_14: ; %Flow5
506c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[6:7]
507092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v4
508c7c561efSMatt Arsenault; GISEL-NEXT:    s_setpc_b64 s[30:31]
509c7c561efSMatt Arsenault  %cvt = uitofp i128 %x to float
510c7c561efSMatt Arsenault  ret float %cvt
511c7c561efSMatt Arsenault}
512c7c561efSMatt Arsenault
513c7c561efSMatt Arsenaultdefine double @sitofp_i128_to_f64(i128 %x) {
514c7c561efSMatt Arsenault; SDAG-LABEL: sitofp_i128_to_f64:
515c7c561efSMatt Arsenault; SDAG:       ; %bb.0: ; %itofp-entry
516c7c561efSMatt Arsenault; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
517c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v5, v1
518c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v4, v0
519c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v1, v5, v3
520c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v0, v4, v2
521c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
522c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v0, 0
523c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v1, 0
524c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[6:7], vcc
525092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB2_14
526c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.1: ; %itofp-if-end
527af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_sub_co_u32_e32 v0, vcc, 0, v4
528af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v1, vcc, 0, v5, vcc
529af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v6, vcc, 0, v2, vcc
530af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v7, vcc, 0, v3, vcc
531af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cmp_gt_i64_e32 vcc, 0, v[2:3]
532af3ffff3SSimon Pilgrim; SDAG-NEXT:    ; implicit-def: $vgpr10
533af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v6, v2, v6, vcc
534af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v4, v4, v0, vcc
535af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v7, v3, v7, vcc
536c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v0, v6
537af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v5, v5, v1, vcc
538c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v0, 32, v0
539c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v1, v7
540c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v0, v0, v1
541c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v1, v4
542c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v1, 32, v1
543c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v2, v5
544c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v1, v1, v2
545c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[6:7]
546c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v1, 64, v1
547092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v9, v1, v0, vcc
548092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v8, 0x80, v9
549092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v2, 0x7f, v9
550092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_i32_e32 vcc, 54, v8
551c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr0_vgpr1
552c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
553c7c561efSMatt Arsenault; SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
554c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.2: ; %itofp-if-else
555092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v6, 0xffffffb5, v9
556c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v6, v[4:5]
557c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v6
558092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v1, vcc
559c7c561efSMatt Arsenault; SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
560092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr8
561c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr6_vgpr7
562c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr4_vgpr5
563092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr9
564092999e7SJay Foad; SDAG-NEXT:  ; %bb.3: ; %Flow3
565c7c561efSMatt Arsenault; SDAG-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
566092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB2_13
567c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.4: ; %NodeBlock
568092999e7SJay Foad; SDAG-NEXT:    v_cmp_lt_i32_e32 vcc, 54, v8
569092999e7SJay Foad; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
570092999e7SJay Foad; SDAG-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
571092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB2_8
572092999e7SJay Foad; SDAG-NEXT:  ; %bb.5: ; %LeafBlock
573092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 55, v8
574c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[12:13], vcc
575092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB2_7
576092999e7SJay Foad; SDAG-NEXT:  ; %bb.6: ; %itofp-sw-default
577092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v12, 0x49, v9
578092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v10, 64, v12
579c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[0:1], v12, v[4:5]
580092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[10:11], v10, v[6:7]
581092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v13, 9, v9
582092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v11, v1, v11
583092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v0, v10
584c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[0:1], v13, v[6:7]
585c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v12
586092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v16, 55, v9
587092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v11, vcc
588c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v12
589092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v10, vcc
590092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[10:11], v12, v[6:7]
591c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[12:13], v13, v[4:5]
592092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[14:15], v16, v[6:7]
593092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v9, -9, v9
594092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v15, v15, v13
595c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v14, v14, v12
596092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[12:13], v9, v[4:5]
597092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v11, 0, v11, vcc
598092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v10, vcc
599092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v16
600c7c561efSMatt Arsenault; SDAG-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[4:5]
601c7c561efSMatt Arsenault; SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[4:5]
602092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v9, v13, v15, vcc
603092999e7SJay Foad; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v16
604092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[4:5], v16, v[4:5]
605092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v7, v9, v7, s[4:5]
606092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v9, v12, v14, vcc
607092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v6, v9, v6, s[4:5]
608092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v5, vcc
609092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
610092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v5, v5, v7
611092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v4, v4, v6
612092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
613092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v6, v10
614092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
615092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v0, v0, v4
616092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v5, v1
617092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v4, v0
618092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v7, v11
619092999e7SJay Foad; SDAG-NEXT:  .LBB2_7: ; %Flow1
620c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[12:13]
621092999e7SJay Foad; SDAG-NEXT:  .LBB2_8: ; %Flow2
622092999e7SJay Foad; SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
623092999e7SJay Foad; SDAG-NEXT:  ; %bb.9: ; %itofp-sw-bb
624092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[6:7], 1, v[6:7]
625092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v0, 31, v5
626092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[4:5], 1, v[4:5]
627092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v6, v6, v0
628092999e7SJay Foad; SDAG-NEXT:  ; %bb.10: ; %itofp-sw-epilog
629c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
630092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v0, 2, v4
631092999e7SJay Foad; SDAG-NEXT:    v_and_or_b32 v0, v0, 1, v4
632c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_co_u32_e32 v4, vcc, 1, v0
633092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v5, vcc, 0, v5, vcc
634092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v6, vcc, 0, v6, vcc
635c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[0:1], 2, v[4:5]
636c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b32_e32 v7, 30, v6
637092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v1, v7
638c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v1, 0x800000, v5
639c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v1
640c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
641092999e7SJay Foad; SDAG-NEXT:  ; %bb.11: ; %itofp-if-then20
642c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[0:1], 3, v[4:5]
643c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 29, v6
644092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v1, v2
645092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v2, v8
646092999e7SJay Foad; SDAG-NEXT:  ; %bb.12: ; %Flow
647c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
648092999e7SJay Foad; SDAG-NEXT:  .LBB2_13: ; %Flow4
649c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[8:9]
650c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v1, 0x80000000, v3
651c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v3, 0x3ff00000
652c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshl_add_u32 v2, v2, 20, v3
653092999e7SJay Foad; SDAG-NEXT:    v_and_b32_e32 v3, 0xfffff, v10
654c7c561efSMatt Arsenault; SDAG-NEXT:    v_or3_b32 v1, v3, v1, v2
655092999e7SJay Foad; SDAG-NEXT:  .LBB2_14: ; %Flow5
656c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[6:7]
657c7c561efSMatt Arsenault; SDAG-NEXT:    s_setpc_b64 s[30:31]
658c7c561efSMatt Arsenault;
659c7c561efSMatt Arsenault; GISEL-LABEL: sitofp_i128_to_f64:
660c7c561efSMatt Arsenault; GISEL:       ; %bb.0: ; %itofp-entry
661c7c561efSMatt Arsenault; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
662c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v4, v0
663c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v5, v1
664c7c561efSMatt Arsenault; GISEL-NEXT:    s_mov_b64 s[4:5], 0
665c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v0, v4, v2
666c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v1, v5, v3
667c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
668c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v0, s4
669c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v1, s5
670c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[6:7], vcc
671092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB2_14
672c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.1: ; %itofp-if-end
673092999e7SJay Foad; GISEL-NEXT:    v_ashrrev_i32_e32 v6, 31, v3
674092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v0, v6, v4
675092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v1, v6, v5
67614d006c5SPetar Avramovic; GISEL-NEXT:    v_xor_b32_e32 v4, v6, v2
67714d006c5SPetar Avramovic; GISEL-NEXT:    v_sub_co_u32_e32 v2, vcc, v0, v6
67814d006c5SPetar Avramovic; GISEL-NEXT:    v_xor_b32_e32 v5, v6, v3
67914d006c5SPetar Avramovic; GISEL-NEXT:    v_subb_co_u32_e32 v3, vcc, v1, v6, vcc
68014d006c5SPetar Avramovic; GISEL-NEXT:    v_subb_co_u32_e32 v4, vcc, v4, v6, vcc
68114d006c5SPetar Avramovic; GISEL-NEXT:    v_ffbh_u32_e32 v1, v2
68214d006c5SPetar Avramovic; GISEL-NEXT:    v_subb_co_u32_e32 v5, vcc, v5, v6, vcc
68314d006c5SPetar Avramovic; GISEL-NEXT:    v_ffbh_u32_e32 v0, v3
68414d006c5SPetar Avramovic; GISEL-NEXT:    v_add_u32_e32 v1, 32, v1
68514d006c5SPetar Avramovic; GISEL-NEXT:    v_ffbh_u32_e32 v7, v4
68614d006c5SPetar Avramovic; GISEL-NEXT:    v_min_u32_e32 v0, v0, v1
68714d006c5SPetar Avramovic; GISEL-NEXT:    v_ffbh_u32_e32 v1, v5
688092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v7, 32, v7
68914d006c5SPetar Avramovic; GISEL-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[4:5]
69014d006c5SPetar Avramovic; GISEL-NEXT:    v_add_u32_e32 v0, 64, v0
69114d006c5SPetar Avramovic; GISEL-NEXT:    v_min_u32_e32 v1, v1, v7
69214d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e32 v9, v1, v0, vcc
693092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v8, 0x80, v9
694092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v7, 0x7f, v9
695092999e7SJay Foad; GISEL-NEXT:    v_cmp_ge_i32_e32 vcc, 53, v8
696092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr10
69714d006c5SPetar Avramovic; GISEL-NEXT:    ; implicit-def: $vgpr0_vgpr1
698c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
699c7c561efSMatt Arsenault; GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
700c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.2: ; %itofp-if-else
70114d006c5SPetar Avramovic; GISEL-NEXT:    v_add_u32_e32 v4, 0xffffffb5, v9
70214d006c5SPetar Avramovic; GISEL-NEXT:    v_lshlrev_b64 v[0:1], v4, v[2:3]
70314d006c5SPetar Avramovic; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v4
70414d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
705092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v1, vcc
706092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr8
70714d006c5SPetar Avramovic; GISEL-NEXT:    ; implicit-def: $vgpr2
708092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr9
709092999e7SJay Foad; GISEL-NEXT:  ; %bb.3: ; %Flow3
710c7c561efSMatt Arsenault; GISEL-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
711092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB2_13
712c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.4: ; %NodeBlock
713092999e7SJay Foad; GISEL-NEXT:    v_cmp_le_i32_e32 vcc, 55, v8
714c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
715092999e7SJay Foad; GISEL-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
716092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB2_8
717092999e7SJay Foad; GISEL-NEXT:  ; %bb.5: ; %LeafBlock
718092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 55, v8
719092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[12:13], vcc
720092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB2_7
721092999e7SJay Foad; GISEL-NEXT:  ; %bb.6: ; %itofp-sw-default
722092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v14, 0x49, v9
723092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v10, 64, v14
72414d006c5SPetar Avramovic; GISEL-NEXT:    v_lshrrev_b64 v[0:1], v14, v[2:3]
72514d006c5SPetar Avramovic; GISEL-NEXT:    v_lshlrev_b64 v[10:11], v10, v[4:5]
726*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v15, 0xffffffc0, v14
72714d006c5SPetar Avramovic; GISEL-NEXT:    v_lshrrev_b64 v[12:13], v14, v[4:5]
72814d006c5SPetar Avramovic; GISEL-NEXT:    v_or_b32_e32 v10, v0, v10
72914d006c5SPetar Avramovic; GISEL-NEXT:    v_or_b32_e32 v11, v1, v11
73014d006c5SPetar Avramovic; GISEL-NEXT:    v_lshrrev_b64 v[0:1], v15, v[4:5]
731092999e7SJay Foad; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v14
732*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v15, 55, v9
73314d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v10, vcc
73414d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v11, vcc
735092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v14
73614d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e32 v11, 0, v12, vcc
737*17f3e009SCraig Topper; GISEL-NEXT:    v_sub_u32_e32 v12, 64, v15
73814d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e64 v14, v0, v2, s[4:5]
73914d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e64 v10, v1, v3, s[4:5]
740*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[0:1], v15, -1
74114d006c5SPetar Avramovic; GISEL-NEXT:    v_lshlrev_b64 v[12:13], v12, -1
742*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v9, -9, v9
74314d006c5SPetar Avramovic; GISEL-NEXT:    v_or_b32_e32 v16, v0, v12
74414d006c5SPetar Avramovic; GISEL-NEXT:    v_or_b32_e32 v17, v1, v13
745*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[12:13], v9, -1
746*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v15
747*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v9, v12, v16, vcc
748*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v12, v13, v17, vcc
749*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v15
75014d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
75114d006c5SPetar Avramovic; GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
752*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v9, v9, -1, s[4:5]
753*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v12, v12, -1, s[4:5]
75414d006c5SPetar Avramovic; GISEL-NEXT:    v_and_b32_e32 v0, v0, v4
75514d006c5SPetar Avramovic; GISEL-NEXT:    v_and_b32_e32 v1, v1, v5
75614d006c5SPetar Avramovic; GISEL-NEXT:    v_and_or_b32 v0, v9, v2, v0
75714d006c5SPetar Avramovic; GISEL-NEXT:    v_and_or_b32 v1, v12, v3, v1
758092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
759092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
76014d006c5SPetar Avramovic; GISEL-NEXT:    v_or_b32_e32 v9, v14, v0
76114d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v2, v9
76214d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v3, v10
76314d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v4, v11
76414d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v5, v12
765092999e7SJay Foad; GISEL-NEXT:  .LBB2_7: ; %Flow1
766092999e7SJay Foad; GISEL-NEXT:    s_or_b64 exec, exec, s[12:13]
767092999e7SJay Foad; GISEL-NEXT:  .LBB2_8: ; %Flow2
768092999e7SJay Foad; GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
7692d5f3b0aSJuan Manuel Martinez Caamaño; GISEL-NEXT:    s_cbranch_execz .LBB2_10
770092999e7SJay Foad; GISEL-NEXT:  ; %bb.9: ; %itofp-sw-bb
77114d006c5SPetar Avramovic; GISEL-NEXT:    v_lshlrev_b64 v[4:5], 1, v[4:5]
77214d006c5SPetar Avramovic; GISEL-NEXT:    v_lshlrev_b64 v[0:1], 1, v[2:3]
77314d006c5SPetar Avramovic; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 31, v3
77414d006c5SPetar Avramovic; GISEL-NEXT:    v_or_b32_e32 v2, v4, v2
77514d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v5, v3
77614d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v4, v2
77714d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v3, v1
77814d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v2, v0
7792d5f3b0aSJuan Manuel Martinez Caamaño; GISEL-NEXT:  .LBB2_10: ; %itofp-sw-epilog
780c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
78114d006c5SPetar Avramovic; GISEL-NEXT:    v_bfe_u32 v0, v2, 2, 1
78214d006c5SPetar Avramovic; GISEL-NEXT:    v_or_b32_e32 v0, v2, v0
78314d006c5SPetar Avramovic; GISEL-NEXT:    v_add_co_u32_e32 v2, vcc, 1, v0
78414d006c5SPetar Avramovic; GISEL-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc
78514d006c5SPetar Avramovic; GISEL-NEXT:    v_addc_co_u32_e32 v4, vcc, 0, v4, vcc
78614d006c5SPetar Avramovic; GISEL-NEXT:    v_lshrrev_b64 v[0:1], 2, v[2:3]
787092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v9, 0
78814d006c5SPetar Avramovic; GISEL-NEXT:    v_and_b32_e32 v10, 0x800000, v3
789092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[9:10]
79014d006c5SPetar Avramovic; GISEL-NEXT:    v_lshl_or_b32 v10, v4, 30, v1
791092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
792092999e7SJay Foad; GISEL-NEXT:  ; %bb.11: ; %itofp-if-then20
79314d006c5SPetar Avramovic; GISEL-NEXT:    v_lshrrev_b64 v[0:1], 3, v[2:3]
794092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v7, v8
79514d006c5SPetar Avramovic; GISEL-NEXT:    v_lshl_or_b32 v10, v4, 29, v1
796092999e7SJay Foad; GISEL-NEXT:  ; %bb.12: ; %Flow
797092999e7SJay Foad; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
798092999e7SJay Foad; GISEL-NEXT:  .LBB2_13: ; %Flow4
799c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[8:9]
80014d006c5SPetar Avramovic; GISEL-NEXT:    v_and_b32_e32 v1, 0x80000000, v6
80114d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v2, 0x3ff00000
80214d006c5SPetar Avramovic; GISEL-NEXT:    v_mov_b32_e32 v3, 0xfffff
80314d006c5SPetar Avramovic; GISEL-NEXT:    v_lshl_add_u32 v2, v7, 20, v2
80414d006c5SPetar Avramovic; GISEL-NEXT:    v_and_or_b32 v1, v10, v3, v1
80514d006c5SPetar Avramovic; GISEL-NEXT:    v_or3_b32 v1, v1, v2, 0
806092999e7SJay Foad; GISEL-NEXT:  .LBB2_14: ; %Flow5
807c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[6:7]
808c7c561efSMatt Arsenault; GISEL-NEXT:    s_setpc_b64 s[30:31]
809c7c561efSMatt Arsenault  %cvt = sitofp i128 %x to double
810c7c561efSMatt Arsenault  ret double %cvt
811c7c561efSMatt Arsenault}
812c7c561efSMatt Arsenault
813c7c561efSMatt Arsenaultdefine double @uitofp_i128_to_f64(i128 %x) {
814c7c561efSMatt Arsenault; SDAG-LABEL: uitofp_i128_to_f64:
815c7c561efSMatt Arsenault; SDAG:       ; %bb.0: ; %itofp-entry
816c7c561efSMatt Arsenault; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
817c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v5, v1, v3
818c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v4, v0, v2
819c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
820c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v4, 0
821c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v5, 0
822c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[6:7], vcc
823092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB3_14
824c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.1: ; %itofp-if-end
825c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v4, v2
826c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v4, 32, v4
827c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v5, v3
828c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v4, v4, v5
829c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v5, v0
830c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v5, 32, v5
831c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v6, v1
832c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v5, v5, v6
833c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
834c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v5, 64, v5
835092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v5, v4, vcc
836092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v7, 0x80, v8
837092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v6, 0x7f, v8
838092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_i32_e32 vcc, 54, v7
839092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr9
840c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr4_vgpr5
841c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
842c7c561efSMatt Arsenault; SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
843c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.2: ; %itofp-if-else
844092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v2, 0xffffffb5, v8
845c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
846c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
847092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v9, 0, v1, vcc
848c7c561efSMatt Arsenault; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v0, vcc
849092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr7
850c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr2_vgpr3
851c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr0_vgpr1
852092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr8
853092999e7SJay Foad; SDAG-NEXT:  ; %bb.3: ; %Flow3
854c7c561efSMatt Arsenault; SDAG-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
855092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB3_13
856c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.4: ; %NodeBlock
857092999e7SJay Foad; SDAG-NEXT:    v_cmp_lt_i32_e32 vcc, 54, v7
858092999e7SJay Foad; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
859092999e7SJay Foad; SDAG-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
860092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB3_8
861092999e7SJay Foad; SDAG-NEXT:  ; %bb.5: ; %LeafBlock
862092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 55, v7
863c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[12:13], vcc
864092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB3_7
865092999e7SJay Foad; SDAG-NEXT:  ; %bb.6: ; %itofp-sw-default
866092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v11, 0x49, v8
867092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v9, 64, v11
868092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[4:5], v11, v[0:1]
869092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[9:10], v9, v[2:3]
870092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v12, 9, v8
871092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v5, v10
872092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v9, v4, v9
873092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[4:5], v12, v[2:3]
874092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v11
875092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v15, 55, v8
876092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v5, v5, v10, vcc
877092999e7SJay Foad; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v11
878092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v4, v4, v9, vcc
879092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[9:10], v11, v[2:3]
880092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[11:12], v12, v[0:1]
881092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[13:14], v15, v[2:3]
882092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v8, -9, v8
883092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v14, v14, v12
884092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v13, v13, v11
885092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[11:12], v8, v[0:1]
886092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v10, vcc
887092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v9, 0, v9, vcc
888092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v15
889092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v5, v5, v1, s[4:5]
890092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v4, v4, v0, s[4:5]
891092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v12, v14, vcc
892092999e7SJay Foad; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v15
893092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v15, v[0:1]
894092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v3, v8, v3, s[4:5]
895092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v11, v13, vcc
896092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v2, v8, v2, s[4:5]
897092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
898092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
899092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v1, v1, v3
900092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v0, v0, v2
901092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
902092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v2, v9
903092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
904092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v4, v4, v0
905092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v0, v4
906092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v1, v5
907092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v3, v10
908092999e7SJay Foad; SDAG-NEXT:  .LBB3_7: ; %Flow1
909c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[12:13]
910092999e7SJay Foad; SDAG-NEXT:  .LBB3_8: ; %Flow2
911092999e7SJay Foad; SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
912092999e7SJay Foad; SDAG-NEXT:  ; %bb.9: ; %itofp-sw-bb
913092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[2:3], 1, v[2:3]
914092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v3, 31, v1
915092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
916092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v2, v2, v3
917092999e7SJay Foad; SDAG-NEXT:  ; %bb.10: ; %itofp-sw-epilog
918c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
919092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v3, 2, v0
920092999e7SJay Foad; SDAG-NEXT:    v_and_or_b32 v0, v3, 1, v0
921c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
922092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
923092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v2, vcc, 0, v2, vcc
924c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[4:5], 2, v[0:1]
925c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v3, 0x800000, v1
926c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v3
927092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v9, v2, v1, 2
928c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
929092999e7SJay Foad; SDAG-NEXT:  ; %bb.11: ; %itofp-if-then20
930c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[4:5], 3, v[0:1]
931092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v9, v2, v1, 3
932092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v6, v7
933092999e7SJay Foad; SDAG-NEXT:  ; %bb.12: ; %Flow
934c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
935092999e7SJay Foad; SDAG-NEXT:  .LBB3_13: ; %Flow4
936c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[8:9]
937092999e7SJay Foad; SDAG-NEXT:    v_and_b32_e32 v0, 0xfffff, v9
938092999e7SJay Foad; SDAG-NEXT:    v_lshl_or_b32 v0, v6, 20, v0
939c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v5, 0x3ff00000, v0
940092999e7SJay Foad; SDAG-NEXT:  .LBB3_14: ; %Flow5
941c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[6:7]
942c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v0, v4
943c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v1, v5
944c7c561efSMatt Arsenault; SDAG-NEXT:    s_setpc_b64 s[30:31]
945c7c561efSMatt Arsenault;
946c7c561efSMatt Arsenault; GISEL-LABEL: uitofp_i128_to_f64:
947c7c561efSMatt Arsenault; GISEL:       ; %bb.0: ; %itofp-entry
948c7c561efSMatt Arsenault; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
949c7c561efSMatt Arsenault; GISEL-NEXT:    s_mov_b64 s[4:5], 0
950c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v4, v0, v2
951c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v5, v1, v3
952c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
953c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v4, s4
954c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v5, s5
955c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[6:7], vcc
956092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB3_14
957c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.1: ; %itofp-if-end
958c7c561efSMatt Arsenault; GISEL-NEXT:    v_ffbh_u32_e32 v5, v0
959c7c561efSMatt Arsenault; GISEL-NEXT:    v_ffbh_u32_e32 v4, v1
960c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_u32_e32 v5, 32, v5
961c7c561efSMatt Arsenault; GISEL-NEXT:    v_ffbh_u32_e32 v6, v2
962c7c561efSMatt Arsenault; GISEL-NEXT:    v_min_u32_e32 v4, v4, v5
963c7c561efSMatt Arsenault; GISEL-NEXT:    v_ffbh_u32_e32 v5, v3
964c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_u32_e32 v6, 32, v6
965c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[2:3]
966c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_u32_e32 v4, 64, v4
967c7c561efSMatt Arsenault; GISEL-NEXT:    v_min_u32_e32 v5, v5, v6
968092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v8, v5, v4, vcc
969092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v7, 0x80, v8
970092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v6, 0x7f, v8
971092999e7SJay Foad; GISEL-NEXT:    v_cmp_ge_i32_e32 vcc, 53, v7
972092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr9
973c7c561efSMatt Arsenault; GISEL-NEXT:    ; implicit-def: $vgpr4_vgpr5
974c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
975c7c561efSMatt Arsenault; GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
976c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.2: ; %itofp-if-else
977092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v2, 0xffffffb5, v8
978c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
979c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
980c7c561efSMatt Arsenault; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v0, vcc
981092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, 0, v1, vcc
982092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr7
983c7c561efSMatt Arsenault; GISEL-NEXT:    ; implicit-def: $vgpr0
984092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr8
985092999e7SJay Foad; GISEL-NEXT:  ; %bb.3: ; %Flow3
986c7c561efSMatt Arsenault; GISEL-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
987092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB3_13
988c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.4: ; %NodeBlock
989092999e7SJay Foad; GISEL-NEXT:    v_cmp_le_i32_e32 vcc, 55, v7
990092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
991092999e7SJay Foad; GISEL-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
992092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB3_8
993092999e7SJay Foad; GISEL-NEXT:  ; %bb.5: ; %LeafBlock
994092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 55, v7
995c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[12:13], vcc
996092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB3_7
997092999e7SJay Foad; GISEL-NEXT:  ; %bb.6: ; %itofp-sw-default
998092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v13, 0x49, v8
999092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v9, 64, v13
1000c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshrrev_b64 v[4:5], v13, v[0:1]
1001092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[9:10], v9, v[2:3]
1002*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v14, 0xffffffc0, v13
1003c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshrrev_b64 v[11:12], v13, v[2:3]
1004092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v9, v4, v9
1005092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v10, v5, v10
1006c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshrrev_b64 v[4:5], v14, v[2:3]
1007c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v13
1008*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v15, 55, v8
1009092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, v4, v9, vcc
1010092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v5, v5, v10, vcc
1011c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v13
1012092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v11, vcc
1013092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v11, 0, v12, vcc
1014*17f3e009SCraig Topper; GISEL-NEXT:    v_sub_u32_e32 v12, 64, v15
1015092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v14, v4, v0, s[4:5]
1016092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v9, v5, v1, s[4:5]
1017*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[4:5], v15, -1
1018c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[12:13], v12, -1
1019*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v8, -9, v8
1020092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v16, v4, v12
1021092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v17, v5, v13
1022*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[12:13], v8, -1
1023*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v15
1024*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v8, v12, v16, vcc
1025*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v12, v13, v17, vcc
1026*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v15
1027092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1028092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v5, 0, v5, vcc
1029*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v8, v8, -1, s[4:5]
1030*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v12, v12, -1, s[4:5]
1031092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, v4, v2
1032092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v3, v5, v3
1033092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v0, v8, v0, v2
1034092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v1, v12, v1, v3
1035092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
1036092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1037092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v8, v14, v0
1038092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v8
1039092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v1, v9
1040092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v2, v10
1041092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, v11
1042092999e7SJay Foad; GISEL-NEXT:  .LBB3_7: ; %Flow1
1043c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[12:13]
1044092999e7SJay Foad; GISEL-NEXT:  .LBB3_8: ; %Flow2
1045092999e7SJay Foad; GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
10462d5f3b0aSJuan Manuel Martinez Caamaño; GISEL-NEXT:    s_cbranch_execz .LBB3_10
1047092999e7SJay Foad; GISEL-NEXT:  ; %bb.9: ; %itofp-sw-bb
1048092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[8:9], 1, v[0:1]
1049092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[10:11], 1, v[2:3]
1050c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 31, v1
1051092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v10, v10, v0
1052092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v8
1053092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v1, v9
1054092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v2, v10
1055092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, v11
10562d5f3b0aSJuan Manuel Martinez Caamaño; GISEL-NEXT:  .LBB3_10: ; %itofp-sw-epilog
1057c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
1058092999e7SJay Foad; GISEL-NEXT:    v_bfe_u32 v4, v0, 2, 1
1059092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v0, v0, v4
1060c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
1061092999e7SJay Foad; GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
1062092999e7SJay Foad; GISEL-NEXT:    v_addc_co_u32_e32 v2, vcc, 0, v2, vcc
1063092999e7SJay Foad; GISEL-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc
1064092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v8, 0
1065092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v9, 0x800000, v1
1066c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 2, v[0:1]
1067092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[8:9]
1068092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[8:9], 30, v[2:3]
1069092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 2, v1
1070092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v9, v5, v8
1071c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1072092999e7SJay Foad; GISEL-NEXT:  ; %bb.11: ; %itofp-if-then20
1073c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[2:3], 29, v[2:3]
1074c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 3, v[0:1]
1075c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 3, v1
1076092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v9, v0, v2
1077092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v6, v7
1078092999e7SJay Foad; GISEL-NEXT:  ; %bb.12: ; %Flow
1079c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
1080092999e7SJay Foad; GISEL-NEXT:  .LBB3_13: ; %Flow4
1081c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[8:9]
1082c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v0, 0x3ff00000
1083092999e7SJay Foad; GISEL-NEXT:    v_lshl_add_u32 v0, v6, 20, v0
1084092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff, v9
1085c7c561efSMatt Arsenault; GISEL-NEXT:    v_or3_b32 v5, v1, v0, 0
1086092999e7SJay Foad; GISEL-NEXT:  .LBB3_14: ; %Flow5
1087c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[6:7]
1088c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v0, v4
1089c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v1, v5
1090c7c561efSMatt Arsenault; GISEL-NEXT:    s_setpc_b64 s[30:31]
1091c7c561efSMatt Arsenault  %cvt = uitofp i128 %x to double
1092c7c561efSMatt Arsenault  ret double %cvt
1093c7c561efSMatt Arsenault}
1094c7c561efSMatt Arsenault
1095c7c561efSMatt Arsenaultdefine half @sitofp_i128_to_f16(i128 %x) {
1096c7c561efSMatt Arsenault; SDAG-LABEL: sitofp_i128_to_f16:
1097c7c561efSMatt Arsenault; SDAG:       ; %bb.0: ; %itofp-entry
1098c7c561efSMatt Arsenault; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1099c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v5, v1, v3
1100c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v4, v0, v2
1101c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
1102c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v4, 0
1103c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[6:7], vcc
1104092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB4_14
1105c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.1: ; %itofp-if-end
1106af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_sub_co_u32_e32 v4, vcc, 0, v0
1107af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v5, vcc, 0, v1, vcc
1108af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v6, vcc, 0, v2, vcc
1109af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_subb_co_u32_e32 v7, vcc, 0, v3, vcc
1110af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cmp_gt_i64_e32 vcc, 0, v[2:3]
1111af3ffff3SSimon Pilgrim; SDAG-NEXT:    ; implicit-def: $vgpr8
1112af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
1113af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v4, v2, v6, vcc
1114af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
1115af3ffff3SSimon Pilgrim; SDAG-NEXT:    v_cndmask_b32_e32 v5, v3, v7, vcc
1116c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v2, v4
1117c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v2, 32, v2
1118c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v6, v5
1119c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v2, v2, v6
1120c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v6, v0
1121c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v6, 32, v6
1122c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v7, v1
1123c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v6, v6, v7
1124c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
1125c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v6, 64, v6
1126092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v6, v2, vcc
1127092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v6, 0x80, v7
1128092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v2, 0x7f, v7
1129092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_i32_e32 vcc, 25, v6
1130c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1131c7c561efSMatt Arsenault; SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
1132c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.2: ; %itofp-if-else
1133092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v4, 0xffffff98, v7
1134c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
1135c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v4
1136092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, 0, v0, vcc
1137092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr6
1138c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr0_vgpr1
1139092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr7
1140c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr4_vgpr5
1141092999e7SJay Foad; SDAG-NEXT:  ; %bb.3: ; %Flow3
1142c7c561efSMatt Arsenault; SDAG-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
1143092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB4_13
1144c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.4: ; %NodeBlock
1145092999e7SJay Foad; SDAG-NEXT:    v_cmp_lt_i32_e32 vcc, 25, v6
1146092999e7SJay Foad; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1147092999e7SJay Foad; SDAG-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
1148092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB4_8
1149092999e7SJay Foad; SDAG-NEXT:  ; %bb.5: ; %LeafBlock
1150092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v6
1151c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[12:13], vcc
1152092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB4_7
1153092999e7SJay Foad; SDAG-NEXT:  ; %bb.6: ; %itofp-sw-default
1154092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v12, 0x66, v7
1155c7c561efSMatt Arsenault; SDAG-NEXT:    v_sub_u32_e32 v10, 64, v12
1156092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[8:9], v12, v[0:1]
1157c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[10:11], v10, v[4:5]
1158092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v13, 38, v7
1159092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v11, v9, v11
1160092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v8, v10
1161092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[8:9], v13, v[4:5]
1162c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v12
1163092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v14, 26, v7
1164092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v9, v9, v11, vcc
1165c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v12
1166092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v8, v10, vcc
1167c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[10:11], v13, v[0:1]
1168c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[12:13], v14, v[4:5]
1169092999e7SJay Foad; SDAG-NEXT:    v_subrev_u32_e32 v7, 38, v7
1170092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v15, v8, v0, s[4:5]
1171092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[7:8], v7, v[0:1]
1172092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v9, v9, v1, s[4:5]
1173092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v11, v13, v11
1174092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v12, v10
1175c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v14
1176092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v14, v[0:1]
1177092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v8, v11, vcc
1178c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v14
1179092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v7, v10, vcc
1180092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v5, v8, v5, s[4:5]
1181092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v4, v7, v4, s[4:5]
1182092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1183092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
1184092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v1, v1, v5
1185092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v0, v0, v4
1186092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
1187092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1188092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v8, v15, v0
1189092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v0, v8
1190092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v1, v9
1191092999e7SJay Foad; SDAG-NEXT:  .LBB4_7: ; %Flow1
1192c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[12:13]
1193092999e7SJay Foad; SDAG-NEXT:  .LBB4_8: ; %Flow2
1194092999e7SJay Foad; SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
1195092999e7SJay Foad; SDAG-NEXT:  ; %bb.9: ; %itofp-sw-bb
1196092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
1197092999e7SJay Foad; SDAG-NEXT:  ; %bb.10: ; %itofp-sw-epilog
1198c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
1199092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v4, 2, v0
1200092999e7SJay Foad; SDAG-NEXT:    v_and_or_b32 v0, v4, 1, v0
1201c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
1202092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
1203c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v4, 0x4000000, v0
1204c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v4
1205092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v8, v1, v0, 2
1206c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1207092999e7SJay Foad; SDAG-NEXT:  ; %bb.11: ; %itofp-if-then20
1208092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v8, v1, v0, 3
1209092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v2, v6
1210092999e7SJay Foad; SDAG-NEXT:  ; %bb.12: ; %Flow
1211c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
1212092999e7SJay Foad; SDAG-NEXT:  .LBB4_13: ; %Flow4
1213c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[8:9]
1214c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v0, 0x80000000, v3
1215c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshl_add_u32 v1, v2, 23, 1.0
1216092999e7SJay Foad; SDAG-NEXT:    v_and_b32_e32 v2, 0x7fffff, v8
1217c7c561efSMatt Arsenault; SDAG-NEXT:    v_or3_b32 v0, v2, v0, v1
1218c7c561efSMatt Arsenault; SDAG-NEXT:    v_cvt_f16_f32_e32 v4, v0
1219092999e7SJay Foad; SDAG-NEXT:  .LBB4_14: ; %Flow5
1220c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[6:7]
1221c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v0, v4
1222c7c561efSMatt Arsenault; SDAG-NEXT:    s_setpc_b64 s[30:31]
1223c7c561efSMatt Arsenault;
1224c7c561efSMatt Arsenault; GISEL-LABEL: sitofp_i128_to_f16:
1225c7c561efSMatt Arsenault; GISEL:       ; %bb.0: ; %itofp-entry
1226c7c561efSMatt Arsenault; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1227c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v4, v0, v2
1228c7c561efSMatt Arsenault; GISEL-NEXT:    v_or_b32_e32 v5, v1, v3
1229c7c561efSMatt Arsenault; GISEL-NEXT:    s_mov_b32 s4, 0
1230c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
1231c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v4, s4
1232c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[6:7], vcc
1233092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB4_14
1234c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.1: ; %itofp-if-end
1235092999e7SJay Foad; GISEL-NEXT:    v_ashrrev_i32_e32 v6, 31, v3
1236092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v0, v6, v0
1237092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v1, v6, v1
1238092999e7SJay Foad; GISEL-NEXT:    v_sub_co_u32_e32 v0, vcc, v0, v6
1239092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v2, v6, v2
1240092999e7SJay Foad; GISEL-NEXT:    v_subb_co_u32_e32 v1, vcc, v1, v6, vcc
1241092999e7SJay Foad; GISEL-NEXT:    v_xor_b32_e32 v3, v6, v3
1242092999e7SJay Foad; GISEL-NEXT:    v_subb_co_u32_e32 v2, vcc, v2, v6, vcc
1243092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v0
1244092999e7SJay Foad; GISEL-NEXT:    v_subb_co_u32_e32 v3, vcc, v3, v6, vcc
1245092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v4, v1
1246092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v5, 32, v5
1247092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v7, v2
1248092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v4, v4, v5
1249092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v3
1250092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v7, 32, v7
1251092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[2:3]
1252092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v4, 64, v4
1253092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v5, v5, v7
1254092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v5, v5, v4, vcc
1255092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v8, 0x80, v5
1256092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v7, 0x7f, v5
1257092999e7SJay Foad; GISEL-NEXT:    v_cmp_ge_i32_e32 vcc, 24, v8
1258092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr4
1259c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1260c7c561efSMatt Arsenault; GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
1261c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.2: ; %itofp-if-else
1262092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v2, 0xffffff98, v5
1263c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
1264c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
1265092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v0, vcc
1266092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr8
1267c7c561efSMatt Arsenault; GISEL-NEXT:    ; implicit-def: $vgpr0
1268092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr5
1269092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr2
1270092999e7SJay Foad; GISEL-NEXT:  ; %bb.3: ; %Flow3
1271c7c561efSMatt Arsenault; GISEL-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
1272092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB4_13
1273c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.4: ; %NodeBlock
1274092999e7SJay Foad; GISEL-NEXT:    v_cmp_le_i32_e32 vcc, 26, v8
1275092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1276092999e7SJay Foad; GISEL-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
1277092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB4_8
1278092999e7SJay Foad; GISEL-NEXT:  ; %bb.5: ; %LeafBlock
1279092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v8
1280c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[12:13], vcc
1281092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB4_7
1282092999e7SJay Foad; GISEL-NEXT:  ; %bb.6: ; %itofp-sw-default
1283092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v4, 0x66, v5
1284092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v11, 64, v4
1285092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[9:10], v4, v[0:1]
1286092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[11:12], v11, v[2:3]
1287*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v13, 0xffffffc0, v4
1288092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v11, v9, v11
1289092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v12, v10, v12
1290092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[9:10], v13, v[2:3]
1291092999e7SJay Foad; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v4
1292*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v14, 26, v5
1293092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, v9, v11, vcc
1294092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v10, v10, v12, vcc
1295092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
1296*17f3e009SCraig Topper; GISEL-NEXT:    v_sub_u32_e32 v11, 64, v14
1297092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v13, v9, v0, vcc
1298092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, v10, v1, vcc
1299*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[9:10], v14, -1
1300c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[11:12], v11, -1
1301*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v5, 0xffffffda, v5
1302092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v15, v9, v11
1303092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v16, v10, v12
1304*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[11:12], v5, -1
1305*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v14
1306*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v5, v11, v15, vcc
1307*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v11, v12, v16, vcc
1308*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v14
1309092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, 0, v9, vcc
1310092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v10, vcc
1311*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v5, v5, -1, s[4:5]
1312*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v11, v11, -1, s[4:5]
1313092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, v9, v2
1314092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v3, v10, v3
1315092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v0, v5, v0, v2
1316092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v1, v11, v1, v3
1317092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
1318092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1319092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v3, v13, v0
1320092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v3
1321092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v1, v4
1322092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v2, v5
1323092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, v6
1324092999e7SJay Foad; GISEL-NEXT:  .LBB4_7: ; %Flow1
1325c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[12:13]
1326092999e7SJay Foad; GISEL-NEXT:  .LBB4_8: ; %Flow2
1327092999e7SJay Foad; GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
1328092999e7SJay Foad; GISEL-NEXT:  ; %bb.9: ; %itofp-sw-bb
1329092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
1330092999e7SJay Foad; GISEL-NEXT:  ; %bb.10: ; %itofp-sw-epilog
1331c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
1332092999e7SJay Foad; GISEL-NEXT:    v_bfe_u32 v2, v0, 2, 1
1333092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v0, v0, v2
1334c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
1335092999e7SJay Foad; GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
1336092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, 0x4000000, v0
1337092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, 0
1338092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 2, v[0:1]
1339092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
1340c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1341092999e7SJay Foad; GISEL-NEXT:  ; %bb.11: ; %itofp-if-then20
1342092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 3, v[0:1]
1343092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v7, v8
1344092999e7SJay Foad; GISEL-NEXT:  ; %bb.12: ; %Flow
1345c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
1346092999e7SJay Foad; GISEL-NEXT:  .LBB4_13: ; %Flow4
1347c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[8:9]
1348092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v0, 0x80000000, v6
1349092999e7SJay Foad; GISEL-NEXT:    v_lshl_add_u32 v1, v7, 23, 1.0
1350092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, 0x7fffff, v4
1351c7c561efSMatt Arsenault; GISEL-NEXT:    v_or3_b32 v0, v2, v0, v1
1352c7c561efSMatt Arsenault; GISEL-NEXT:    v_cvt_f16_f32_e32 v4, v0
1353092999e7SJay Foad; GISEL-NEXT:  .LBB4_14: ; %Flow5
1354c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[6:7]
1355c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v0, v4
1356c7c561efSMatt Arsenault; GISEL-NEXT:    s_setpc_b64 s[30:31]
1357c7c561efSMatt Arsenault  %cvt = sitofp i128 %x to half
1358c7c561efSMatt Arsenault  ret half %cvt
1359c7c561efSMatt Arsenault}
1360c7c561efSMatt Arsenault
1361c7c561efSMatt Arsenaultdefine half @uitofp_i128_to_f16(i128 %x) {
1362c7c561efSMatt Arsenault; SDAG-LABEL: uitofp_i128_to_f16:
1363c7c561efSMatt Arsenault; SDAG:       ; %bb.0: ; %itofp-entry
1364c7c561efSMatt Arsenault; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1365c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v5, v1, v3
1366c7c561efSMatt Arsenault; SDAG-NEXT:    v_or_b32_e32 v4, v0, v2
1367c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
1368c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v4, 0
1369c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[6:7], vcc
1370092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB5_14
1371c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.1: ; %itofp-if-end
1372c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v4, v2
1373c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v4, 32, v4
1374c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v5, v3
1375c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v4, v4, v5
1376c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v5, v0
1377c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v5, 32, v5
1378c7c561efSMatt Arsenault; SDAG-NEXT:    v_ffbh_u32_e32 v6, v1
1379c7c561efSMatt Arsenault; SDAG-NEXT:    v_min_u32_e32 v5, v5, v6
1380c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
1381c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v5, 64, v5
1382092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v6, v5, v4, vcc
1383092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v5, 0x80, v6
1384092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v4, 0x7f, v6
1385092999e7SJay Foad; SDAG-NEXT:    v_cmp_gt_i32_e32 vcc, 25, v5
1386092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr7
1387c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1388c7c561efSMatt Arsenault; SDAG-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
1389c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.2: ; %itofp-if-else
1390092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v2, 0xffffff98, v6
1391c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
1392c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
1393092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, 0, v0, vcc
1394092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr5
1395c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr0_vgpr1
1396092999e7SJay Foad; SDAG-NEXT:    ; implicit-def: $vgpr6
1397c7c561efSMatt Arsenault; SDAG-NEXT:    ; implicit-def: $vgpr2_vgpr3
1398092999e7SJay Foad; SDAG-NEXT:  ; %bb.3: ; %Flow3
1399c7c561efSMatt Arsenault; SDAG-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
1400092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB5_13
1401c7c561efSMatt Arsenault; SDAG-NEXT:  ; %bb.4: ; %NodeBlock
1402092999e7SJay Foad; SDAG-NEXT:    v_cmp_lt_i32_e32 vcc, 25, v5
1403092999e7SJay Foad; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1404092999e7SJay Foad; SDAG-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
1405092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB5_8
1406092999e7SJay Foad; SDAG-NEXT:  ; %bb.5: ; %LeafBlock
1407092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v5
1408c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[12:13], vcc
1409092999e7SJay Foad; SDAG-NEXT:    s_cbranch_execz .LBB5_7
1410092999e7SJay Foad; SDAG-NEXT:  ; %bb.6: ; %itofp-sw-default
1411092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v11, 0x66, v6
1412c7c561efSMatt Arsenault; SDAG-NEXT:    v_sub_u32_e32 v9, 64, v11
1413092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[7:8], v11, v[0:1]
1414c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[9:10], v9, v[2:3]
1415092999e7SJay Foad; SDAG-NEXT:    v_sub_u32_e32 v12, 38, v6
1416092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v8, v10
1417092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v9, v7, v9
1418092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b64 v[7:8], v12, v[2:3]
1419c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v11
1420092999e7SJay Foad; SDAG-NEXT:    v_add_u32_e32 v13, 26, v6
1421092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v8, v8, v10, vcc
1422c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v11
1423092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v7, v9, vcc
1424c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshrrev_b64 v[9:10], v12, v[0:1]
1425c7c561efSMatt Arsenault; SDAG-NEXT:    v_lshlrev_b64 v[11:12], v13, v[2:3]
1426092999e7SJay Foad; SDAG-NEXT:    v_subrev_u32_e32 v6, 38, v6
1427092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v14, v7, v0, s[4:5]
1428092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[6:7], v6, v[0:1]
1429092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v8, v8, v1, s[4:5]
1430092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v10, v12, v10
1431092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v9, v11, v9
1432c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v13
1433092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], v13, v[0:1]
1434092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v7, v7, v10, vcc
1435c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v13
1436092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v6, v6, v9, vcc
1437092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1438092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1439092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1440092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc
1441092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v1, v1, v3
1442092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v0, v0, v2
1443092999e7SJay Foad; SDAG-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
1444092999e7SJay Foad; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1445092999e7SJay Foad; SDAG-NEXT:    v_or_b32_e32 v7, v14, v0
1446092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v0, v7
1447092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v1, v8
1448092999e7SJay Foad; SDAG-NEXT:  .LBB5_7: ; %Flow1
1449c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[12:13]
1450092999e7SJay Foad; SDAG-NEXT:  .LBB5_8: ; %Flow2
1451092999e7SJay Foad; SDAG-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
1452092999e7SJay Foad; SDAG-NEXT:  ; %bb.9: ; %itofp-sw-bb
1453092999e7SJay Foad; SDAG-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
1454092999e7SJay Foad; SDAG-NEXT:  ; %bb.10: ; %itofp-sw-epilog
1455c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
1456092999e7SJay Foad; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 2, v0
1457092999e7SJay Foad; SDAG-NEXT:    v_and_or_b32 v0, v2, 1, v0
1458c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
1459092999e7SJay Foad; SDAG-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
1460c7c561efSMatt Arsenault; SDAG-NEXT:    v_and_b32_e32 v2, 0x4000000, v0
1461c7c561efSMatt Arsenault; SDAG-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2
1462092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v7, v1, v0, 2
1463c7c561efSMatt Arsenault; SDAG-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1464092999e7SJay Foad; SDAG-NEXT:  ; %bb.11: ; %itofp-if-then20
1465092999e7SJay Foad; SDAG-NEXT:    v_alignbit_b32 v7, v1, v0, 3
1466092999e7SJay Foad; SDAG-NEXT:    v_mov_b32_e32 v4, v5
1467092999e7SJay Foad; SDAG-NEXT:  ; %bb.12: ; %Flow
1468c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[4:5]
1469092999e7SJay Foad; SDAG-NEXT:  .LBB5_13: ; %Flow4
1470c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[8:9]
1471092999e7SJay Foad; SDAG-NEXT:    v_and_b32_e32 v0, 0x7fffff, v7
1472092999e7SJay Foad; SDAG-NEXT:    v_lshl_or_b32 v0, v4, 23, v0
1473c7c561efSMatt Arsenault; SDAG-NEXT:    v_add_u32_e32 v0, 1.0, v0
1474c7c561efSMatt Arsenault; SDAG-NEXT:    v_cvt_f16_f32_e32 v4, v0
1475092999e7SJay Foad; SDAG-NEXT:  .LBB5_14: ; %Flow5
1476c7c561efSMatt Arsenault; SDAG-NEXT:    s_or_b64 exec, exec, s[6:7]
1477c7c561efSMatt Arsenault; SDAG-NEXT:    v_mov_b32_e32 v0, v4
1478c7c561efSMatt Arsenault; SDAG-NEXT:    s_setpc_b64 s[30:31]
1479c7c561efSMatt Arsenault;
1480c7c561efSMatt Arsenault; GISEL-LABEL: uitofp_i128_to_f16:
1481c7c561efSMatt Arsenault; GISEL:       ; %bb.0: ; %itofp-entry
1482c7c561efSMatt Arsenault; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1483092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v4, v0, v2
1484092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v5, v1, v3
1485c7c561efSMatt Arsenault; GISEL-NEXT:    s_mov_b32 s4, 0
1486092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[4:5]
1487092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v4, s4
1488c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[6:7], vcc
1489092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB5_14
1490c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.1: ; %itofp-if-end
1491092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v0
1492092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v4, v1
1493092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v5, 32, v5
1494092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v6, v2
1495092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v4, v4, v5
1496092999e7SJay Foad; GISEL-NEXT:    v_ffbh_u32_e32 v5, v3
1497c7c561efSMatt Arsenault; GISEL-NEXT:    v_add_u32_e32 v6, 32, v6
1498092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[2:3]
1499092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v4, 64, v4
1500092999e7SJay Foad; GISEL-NEXT:    v_min_u32_e32 v5, v5, v6
1501092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v5, v5, v4, vcc
1502092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v7, 0x80, v5
1503092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v6, 0x7f, v5
1504092999e7SJay Foad; GISEL-NEXT:    v_cmp_ge_i32_e32 vcc, 24, v7
1505092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr4
1506c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1507c7c561efSMatt Arsenault; GISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]
1508c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.2: ; %itofp-if-else
1509092999e7SJay Foad; GISEL-NEXT:    v_add_u32_e32 v2, 0xffffff98, v5
1510c7c561efSMatt Arsenault; GISEL-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
1511c7c561efSMatt Arsenault; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v2
1512092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v0, vcc
1513092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr7
1514c7c561efSMatt Arsenault; GISEL-NEXT:    ; implicit-def: $vgpr0
1515092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr5
1516092999e7SJay Foad; GISEL-NEXT:    ; implicit-def: $vgpr2
1517092999e7SJay Foad; GISEL-NEXT:  ; %bb.3: ; %Flow3
1518c7c561efSMatt Arsenault; GISEL-NEXT:    s_andn2_saveexec_b64 s[8:9], s[4:5]
1519092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB5_13
1520c7c561efSMatt Arsenault; GISEL-NEXT:  ; %bb.4: ; %NodeBlock
1521092999e7SJay Foad; GISEL-NEXT:    v_cmp_le_i32_e32 vcc, 26, v7
1522c7c561efSMatt Arsenault; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1523092999e7SJay Foad; GISEL-NEXT:    s_xor_b64 s[10:11], exec, s[4:5]
1524092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB5_8
1525092999e7SJay Foad; GISEL-NEXT:  ; %bb.5: ; %LeafBlock
1526092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u32_e32 vcc, 26, v7
1527092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[12:13], vcc
1528092999e7SJay Foad; GISEL-NEXT:    s_cbranch_execz .LBB5_7
1529092999e7SJay Foad; GISEL-NEXT:  ; %bb.6: ; %itofp-sw-default
1530092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v4, 0x66, v5
1531092999e7SJay Foad; GISEL-NEXT:    v_sub_u32_e32 v10, 64, v4
1532092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[8:9], v4, v[0:1]
1533092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[10:11], v10, v[2:3]
1534*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v12, 0xffffffc0, v4
1535092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v10, v8, v10
1536092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v11, v9, v11
1537092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[8:9], v12, v[2:3]
1538092999e7SJay Foad; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v4
1539*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v13, 26, v5
1540092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v8, v8, v10, vcc
1541092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, v9, v11, vcc
1542092999e7SJay Foad; GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
1543*17f3e009SCraig Topper; GISEL-NEXT:    v_sub_u32_e32 v10, 64, v13
1544092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v12, v8, v0, vcc
1545092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v4, v9, v1, vcc
1546*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[8:9], v13, -1
1547092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[10:11], v10, -1
1548*17f3e009SCraig Topper; GISEL-NEXT:    v_add_u32_e32 v5, 0xffffffda, v5
1549092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v14, v8, v10
1550092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v15, v9, v11
1551*17f3e009SCraig Topper; GISEL-NEXT:    v_lshrrev_b64 v[10:11], v5, -1
1552*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_gt_u32_e32 vcc, 64, v13
1553*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v5, v10, v14, vcc
1554*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e32 v10, v11, v15, vcc
1555*17f3e009SCraig Topper; GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v13
1556092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v8, vcc
1557092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e32 v9, 0, v9, vcc
1558*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v5, v5, -1, s[4:5]
1559*17f3e009SCraig Topper; GISEL-NEXT:    v_cndmask_b32_e64 v10, v10, -1, s[4:5]
1560092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, v8, v2
1561092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v3, v9, v3
1562092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v0, v5, v0, v2
1563092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v1, v10, v1, v3
1564092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[0:1]
1565092999e7SJay Foad; GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
1566092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v3, v12, v0
1567092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v3
1568092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v1, v4
1569092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v2, v5
1570092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, v6
1571092999e7SJay Foad; GISEL-NEXT:  .LBB5_7: ; %Flow1
1572092999e7SJay Foad; GISEL-NEXT:    s_or_b64 exec, exec, s[12:13]
1573092999e7SJay Foad; GISEL-NEXT:  .LBB5_8: ; %Flow2
1574092999e7SJay Foad; GISEL-NEXT:    s_andn2_saveexec_b64 s[4:5], s[10:11]
1575092999e7SJay Foad; GISEL-NEXT:  ; %bb.9: ; %itofp-sw-bb
1576092999e7SJay Foad; GISEL-NEXT:    v_lshlrev_b64 v[0:1], 1, v[0:1]
1577092999e7SJay Foad; GISEL-NEXT:  ; %bb.10: ; %itofp-sw-epilog
1578c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
1579092999e7SJay Foad; GISEL-NEXT:    v_bfe_u32 v2, v0, 2, 1
1580092999e7SJay Foad; GISEL-NEXT:    v_or_b32_e32 v0, v0, v2
1581092999e7SJay Foad; GISEL-NEXT:    v_add_co_u32_e32 v0, vcc, 1, v0
1582092999e7SJay Foad; GISEL-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc
1583092999e7SJay Foad; GISEL-NEXT:    v_and_b32_e32 v2, 0x4000000, v0
1584092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v3, 0
1585092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 2, v[0:1]
1586092999e7SJay Foad; GISEL-NEXT:    v_cmp_ne_u64_e32 vcc, 0, v[2:3]
1587092999e7SJay Foad; GISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1588092999e7SJay Foad; GISEL-NEXT:  ; %bb.11: ; %itofp-if-then20
1589092999e7SJay Foad; GISEL-NEXT:    v_lshrrev_b64 v[4:5], 3, v[0:1]
1590092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v6, v7
1591092999e7SJay Foad; GISEL-NEXT:  ; %bb.12: ; %Flow
1592092999e7SJay Foad; GISEL-NEXT:    s_or_b64 exec, exec, s[4:5]
1593092999e7SJay Foad; GISEL-NEXT:  .LBB5_13: ; %Flow4
1594c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[8:9]
1595092999e7SJay Foad; GISEL-NEXT:    v_lshl_add_u32 v0, v6, 23, 1.0
1596c7c561efSMatt Arsenault; GISEL-NEXT:    v_mov_b32_e32 v1, 0x7fffff
1597092999e7SJay Foad; GISEL-NEXT:    v_and_or_b32 v0, v4, v1, v0
1598092999e7SJay Foad; GISEL-NEXT:    v_cvt_f16_f32_e32 v4, v0
1599092999e7SJay Foad; GISEL-NEXT:  .LBB5_14: ; %Flow5
1600c7c561efSMatt Arsenault; GISEL-NEXT:    s_or_b64 exec, exec, s[6:7]
1601092999e7SJay Foad; GISEL-NEXT:    v_mov_b32_e32 v0, v4
1602c7c561efSMatt Arsenault; GISEL-NEXT:    s_setpc_b64 s[30:31]
1603c7c561efSMatt Arsenault  %cvt = uitofp i128 %x to half
1604c7c561efSMatt Arsenault  ret half %cvt
1605c7c561efSMatt Arsenault}
1606c7c561efSMatt Arsenault
1607c7c561efSMatt Arsenault;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
1608c7c561efSMatt Arsenault; GCN: {{.*}}
1609