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