1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,SDAG %s 3; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GISEL %s 4 5define float @sitofp_i128_to_f32(i128 %x) { 6; SDAG-LABEL: sitofp_i128_to_f32: 7; SDAG: ; %bb.0: ; %itofp-entry 8; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 9; SDAG-NEXT: v_or_b32_e32 v5, v1, v3 10; SDAG-NEXT: v_or_b32_e32 v4, v0, v2 11; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 12; SDAG-NEXT: v_mov_b32_e32 v4, 0 13; SDAG-NEXT: s_and_saveexec_b64 s[6:7], vcc 14; SDAG-NEXT: s_cbranch_execz .LBB0_14 15; SDAG-NEXT: ; %bb.1: ; %itofp-if-end 16; SDAG-NEXT: v_sub_co_u32_e32 v4, vcc, 0, v0 17; SDAG-NEXT: v_subb_co_u32_e32 v5, vcc, 0, v1, vcc 18; SDAG-NEXT: v_subb_co_u32_e32 v6, vcc, 0, v2, vcc 19; SDAG-NEXT: v_subb_co_u32_e32 v7, vcc, 0, v3, vcc 20; SDAG-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[2:3] 21; SDAG-NEXT: ; implicit-def: $vgpr8 22; SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc 23; SDAG-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc 24; SDAG-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc 25; SDAG-NEXT: v_cndmask_b32_e32 v5, v3, v7, vcc 26; SDAG-NEXT: v_ffbh_u32_e32 v2, v4 27; SDAG-NEXT: v_add_u32_e32 v2, 32, v2 28; SDAG-NEXT: v_ffbh_u32_e32 v6, v5 29; SDAG-NEXT: v_min_u32_e32 v2, v2, v6 30; SDAG-NEXT: v_ffbh_u32_e32 v6, v0 31; SDAG-NEXT: v_add_u32_e32 v6, 32, v6 32; SDAG-NEXT: v_ffbh_u32_e32 v7, v1 33; SDAG-NEXT: v_min_u32_e32 v6, v6, v7 34; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 35; SDAG-NEXT: v_add_u32_e32 v6, 64, v6 36; SDAG-NEXT: v_cndmask_b32_e32 v7, v6, v2, vcc 37; SDAG-NEXT: v_sub_u32_e32 v6, 0x80, v7 38; SDAG-NEXT: v_sub_u32_e32 v2, 0x7f, v7 39; SDAG-NEXT: v_cmp_gt_i32_e32 vcc, 25, v6 40; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 41; SDAG-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 42; SDAG-NEXT: ; %bb.2: ; %itofp-if-else 43; SDAG-NEXT: v_add_u32_e32 v4, 0xffffff98, v7 44; SDAG-NEXT: v_lshlrev_b64 v[0:1], v4, v[0:1] 45; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v4 46; SDAG-NEXT: v_cndmask_b32_e32 v8, 0, v0, vcc 47; SDAG-NEXT: ; implicit-def: $vgpr6 48; SDAG-NEXT: ; implicit-def: $vgpr0_vgpr1 49; SDAG-NEXT: ; implicit-def: $vgpr7 50; SDAG-NEXT: ; implicit-def: $vgpr4_vgpr5 51; SDAG-NEXT: ; %bb.3: ; %Flow3 52; SDAG-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 53; SDAG-NEXT: s_cbranch_execz .LBB0_13 54; SDAG-NEXT: ; %bb.4: ; %NodeBlock 55; SDAG-NEXT: v_cmp_lt_i32_e32 vcc, 25, v6 56; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 57; SDAG-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 58; SDAG-NEXT: s_cbranch_execz .LBB0_8 59; SDAG-NEXT: ; %bb.5: ; %LeafBlock 60; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 26, v6 61; SDAG-NEXT: s_and_saveexec_b64 s[12:13], vcc 62; SDAG-NEXT: s_cbranch_execz .LBB0_7 63; SDAG-NEXT: ; %bb.6: ; %itofp-sw-default 64; SDAG-NEXT: v_sub_u32_e32 v12, 0x66, v7 65; SDAG-NEXT: v_sub_u32_e32 v10, 64, v12 66; SDAG-NEXT: v_lshrrev_b64 v[8:9], v12, v[0:1] 67; SDAG-NEXT: v_lshlrev_b64 v[10:11], v10, v[4:5] 68; SDAG-NEXT: v_sub_u32_e32 v13, 38, v7 69; SDAG-NEXT: v_or_b32_e32 v11, v9, v11 70; SDAG-NEXT: v_or_b32_e32 v10, v8, v10 71; SDAG-NEXT: v_lshrrev_b64 v[8:9], v13, v[4:5] 72; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v12 73; SDAG-NEXT: v_add_u32_e32 v14, 26, v7 74; SDAG-NEXT: v_cndmask_b32_e32 v9, v9, v11, vcc 75; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v12 76; SDAG-NEXT: v_cndmask_b32_e32 v8, v8, v10, vcc 77; SDAG-NEXT: v_lshrrev_b64 v[10:11], v13, v[0:1] 78; SDAG-NEXT: v_lshlrev_b64 v[12:13], v14, v[4:5] 79; SDAG-NEXT: v_subrev_u32_e32 v7, 38, v7 80; SDAG-NEXT: v_cndmask_b32_e64 v15, v8, v0, s[4:5] 81; SDAG-NEXT: v_lshlrev_b64 v[7:8], v7, v[0:1] 82; SDAG-NEXT: v_cndmask_b32_e64 v9, v9, v1, s[4:5] 83; SDAG-NEXT: v_or_b32_e32 v11, v13, v11 84; SDAG-NEXT: v_or_b32_e32 v10, v12, v10 85; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v14 86; SDAG-NEXT: v_lshlrev_b64 v[0:1], v14, v[0:1] 87; SDAG-NEXT: v_cndmask_b32_e32 v8, v8, v11, vcc 88; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v14 89; SDAG-NEXT: v_cndmask_b32_e32 v7, v7, v10, vcc 90; SDAG-NEXT: v_cndmask_b32_e64 v5, v8, v5, s[4:5] 91; SDAG-NEXT: v_cndmask_b32_e64 v4, v7, v4, s[4:5] 92; SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 93; SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 94; SDAG-NEXT: v_or_b32_e32 v1, v1, v5 95; SDAG-NEXT: v_or_b32_e32 v0, v0, v4 96; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 97; SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 98; SDAG-NEXT: v_or_b32_e32 v8, v15, v0 99; SDAG-NEXT: v_mov_b32_e32 v0, v8 100; SDAG-NEXT: v_mov_b32_e32 v1, v9 101; SDAG-NEXT: .LBB0_7: ; %Flow1 102; SDAG-NEXT: s_or_b64 exec, exec, s[12:13] 103; SDAG-NEXT: .LBB0_8: ; %Flow2 104; SDAG-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 105; SDAG-NEXT: ; %bb.9: ; %itofp-sw-bb 106; SDAG-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 107; SDAG-NEXT: ; %bb.10: ; %itofp-sw-epilog 108; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 109; SDAG-NEXT: v_lshrrev_b32_e32 v4, 2, v0 110; SDAG-NEXT: v_and_or_b32 v0, v4, 1, v0 111; SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 112; SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 113; SDAG-NEXT: v_and_b32_e32 v4, 0x4000000, v0 114; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v4 115; SDAG-NEXT: v_alignbit_b32 v8, v1, v0, 2 116; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 117; SDAG-NEXT: ; %bb.11: ; %itofp-if-then20 118; SDAG-NEXT: v_alignbit_b32 v8, v1, v0, 3 119; SDAG-NEXT: v_mov_b32_e32 v2, v6 120; SDAG-NEXT: ; %bb.12: ; %Flow 121; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 122; SDAG-NEXT: .LBB0_13: ; %Flow4 123; SDAG-NEXT: s_or_b64 exec, exec, s[8:9] 124; SDAG-NEXT: v_and_b32_e32 v0, 0x80000000, v3 125; SDAG-NEXT: v_lshl_add_u32 v1, v2, 23, 1.0 126; SDAG-NEXT: v_and_b32_e32 v2, 0x7fffff, v8 127; SDAG-NEXT: v_or3_b32 v4, v2, v0, v1 128; SDAG-NEXT: .LBB0_14: ; %Flow5 129; SDAG-NEXT: s_or_b64 exec, exec, s[6:7] 130; SDAG-NEXT: v_mov_b32_e32 v0, v4 131; SDAG-NEXT: s_setpc_b64 s[30:31] 132; 133; GISEL-LABEL: sitofp_i128_to_f32: 134; GISEL: ; %bb.0: ; %itofp-entry 135; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 136; GISEL-NEXT: v_or_b32_e32 v4, v0, v2 137; GISEL-NEXT: v_or_b32_e32 v5, v1, v3 138; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 139; GISEL-NEXT: s_mov_b32 s4, 0 140; GISEL-NEXT: v_mov_b32_e32 v4, s4 141; GISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc 142; GISEL-NEXT: s_cbranch_execz .LBB0_14 143; GISEL-NEXT: ; %bb.1: ; %itofp-if-end 144; GISEL-NEXT: v_ashrrev_i32_e32 v6, 31, v3 145; GISEL-NEXT: v_xor_b32_e32 v0, v6, v0 146; GISEL-NEXT: v_xor_b32_e32 v1, v6, v1 147; GISEL-NEXT: v_sub_co_u32_e32 v0, vcc, v0, v6 148; GISEL-NEXT: v_xor_b32_e32 v2, v6, v2 149; GISEL-NEXT: v_subb_co_u32_e32 v1, vcc, v1, v6, vcc 150; GISEL-NEXT: v_xor_b32_e32 v3, v6, v3 151; GISEL-NEXT: v_subb_co_u32_e32 v2, vcc, v2, v6, vcc 152; GISEL-NEXT: v_ffbh_u32_e32 v5, v0 153; GISEL-NEXT: v_subb_co_u32_e32 v3, vcc, v3, v6, vcc 154; GISEL-NEXT: v_ffbh_u32_e32 v4, v1 155; GISEL-NEXT: v_add_u32_e32 v5, 32, v5 156; GISEL-NEXT: v_ffbh_u32_e32 v7, v2 157; GISEL-NEXT: v_min_u32_e32 v4, v4, v5 158; GISEL-NEXT: v_ffbh_u32_e32 v5, v3 159; GISEL-NEXT: v_add_u32_e32 v7, 32, v7 160; GISEL-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[2:3] 161; GISEL-NEXT: v_add_u32_e32 v4, 64, v4 162; GISEL-NEXT: v_min_u32_e32 v5, v5, v7 163; GISEL-NEXT: v_cndmask_b32_e32 v5, v5, v4, vcc 164; GISEL-NEXT: v_sub_u32_e32 v8, 0x80, v5 165; GISEL-NEXT: v_sub_u32_e32 v7, 0x7f, v5 166; GISEL-NEXT: v_cmp_ge_i32_e32 vcc, 24, v8 167; GISEL-NEXT: ; implicit-def: $vgpr4 168; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 169; GISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 170; GISEL-NEXT: ; %bb.2: ; %itofp-if-else 171; GISEL-NEXT: v_add_u32_e32 v2, 0xffffff98, v5 172; GISEL-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 173; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 174; GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v0, vcc 175; GISEL-NEXT: ; implicit-def: $vgpr8 176; GISEL-NEXT: ; implicit-def: $vgpr0 177; GISEL-NEXT: ; implicit-def: $vgpr5 178; GISEL-NEXT: ; implicit-def: $vgpr2 179; GISEL-NEXT: ; %bb.3: ; %Flow3 180; GISEL-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 181; GISEL-NEXT: s_cbranch_execz .LBB0_13 182; GISEL-NEXT: ; %bb.4: ; %NodeBlock 183; GISEL-NEXT: v_cmp_le_i32_e32 vcc, 26, v8 184; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 185; GISEL-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 186; GISEL-NEXT: s_cbranch_execz .LBB0_8 187; GISEL-NEXT: ; %bb.5: ; %LeafBlock 188; GISEL-NEXT: v_cmp_ne_u32_e32 vcc, 26, v8 189; GISEL-NEXT: s_and_saveexec_b64 s[12:13], vcc 190; GISEL-NEXT: s_cbranch_execz .LBB0_7 191; GISEL-NEXT: ; %bb.6: ; %itofp-sw-default 192; GISEL-NEXT: v_sub_u32_e32 v4, 0x66, v5 193; GISEL-NEXT: v_sub_u32_e32 v11, 64, v4 194; GISEL-NEXT: v_lshrrev_b64 v[9:10], v4, v[0:1] 195; GISEL-NEXT: v_lshlrev_b64 v[11:12], v11, v[2:3] 196; GISEL-NEXT: v_add_u32_e32 v13, 0xffffffc0, v4 197; GISEL-NEXT: v_or_b32_e32 v11, v9, v11 198; GISEL-NEXT: v_or_b32_e32 v12, v10, v12 199; GISEL-NEXT: v_lshrrev_b64 v[9:10], v13, v[2:3] 200; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v4 201; GISEL-NEXT: v_add_u32_e32 v14, 26, v5 202; GISEL-NEXT: v_cndmask_b32_e32 v9, v9, v11, vcc 203; GISEL-NEXT: v_cndmask_b32_e32 v10, v10, v12, vcc 204; GISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v4 205; GISEL-NEXT: v_sub_u32_e32 v11, 64, v14 206; GISEL-NEXT: v_cndmask_b32_e32 v13, v9, v0, vcc 207; GISEL-NEXT: v_cndmask_b32_e32 v4, v10, v1, vcc 208; GISEL-NEXT: v_lshrrev_b64 v[9:10], v14, -1 209; GISEL-NEXT: v_lshlrev_b64 v[11:12], v11, -1 210; GISEL-NEXT: v_add_u32_e32 v5, 0xffffffda, v5 211; GISEL-NEXT: v_or_b32_e32 v15, v9, v11 212; GISEL-NEXT: v_or_b32_e32 v16, v10, v12 213; GISEL-NEXT: v_lshrrev_b64 v[11:12], v5, -1 214; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v14 215; GISEL-NEXT: v_cndmask_b32_e32 v5, v11, v15, vcc 216; GISEL-NEXT: v_cndmask_b32_e32 v11, v12, v16, vcc 217; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v14 218; GISEL-NEXT: v_cndmask_b32_e32 v9, 0, v9, vcc 219; GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v10, vcc 220; GISEL-NEXT: v_cndmask_b32_e64 v5, v5, -1, s[4:5] 221; GISEL-NEXT: v_cndmask_b32_e64 v11, v11, -1, s[4:5] 222; GISEL-NEXT: v_and_b32_e32 v2, v9, v2 223; GISEL-NEXT: v_and_b32_e32 v3, v10, v3 224; GISEL-NEXT: v_and_or_b32 v0, v5, v0, v2 225; GISEL-NEXT: v_and_or_b32 v1, v11, v1, v3 226; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 227; GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 228; GISEL-NEXT: v_or_b32_e32 v3, v13, v0 229; GISEL-NEXT: v_mov_b32_e32 v0, v3 230; GISEL-NEXT: v_mov_b32_e32 v1, v4 231; GISEL-NEXT: v_mov_b32_e32 v2, v5 232; GISEL-NEXT: v_mov_b32_e32 v3, v6 233; GISEL-NEXT: .LBB0_7: ; %Flow1 234; GISEL-NEXT: s_or_b64 exec, exec, s[12:13] 235; GISEL-NEXT: .LBB0_8: ; %Flow2 236; GISEL-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 237; GISEL-NEXT: ; %bb.9: ; %itofp-sw-bb 238; GISEL-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 239; GISEL-NEXT: ; %bb.10: ; %itofp-sw-epilog 240; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 241; GISEL-NEXT: v_bfe_u32 v2, v0, 2, 1 242; GISEL-NEXT: v_or_b32_e32 v0, v0, v2 243; GISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 244; GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 245; GISEL-NEXT: v_and_b32_e32 v2, 0x4000000, v0 246; GISEL-NEXT: v_mov_b32_e32 v3, 0 247; GISEL-NEXT: v_lshrrev_b64 v[4:5], 2, v[0:1] 248; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] 249; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 250; GISEL-NEXT: ; %bb.11: ; %itofp-if-then20 251; GISEL-NEXT: v_lshrrev_b64 v[4:5], 3, v[0:1] 252; GISEL-NEXT: v_mov_b32_e32 v7, v8 253; GISEL-NEXT: ; %bb.12: ; %Flow 254; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 255; GISEL-NEXT: .LBB0_13: ; %Flow4 256; GISEL-NEXT: s_or_b64 exec, exec, s[8:9] 257; GISEL-NEXT: v_and_b32_e32 v0, 0x80000000, v6 258; GISEL-NEXT: v_lshl_add_u32 v1, v7, 23, 1.0 259; GISEL-NEXT: v_and_b32_e32 v2, 0x7fffff, v4 260; GISEL-NEXT: v_or3_b32 v4, v2, v0, v1 261; GISEL-NEXT: .LBB0_14: ; %Flow5 262; GISEL-NEXT: s_or_b64 exec, exec, s[6:7] 263; GISEL-NEXT: v_mov_b32_e32 v0, v4 264; GISEL-NEXT: s_setpc_b64 s[30:31] 265 %cvt = sitofp i128 %x to float 266 ret float %cvt 267} 268 269define float @uitofp_i128_to_f32(i128 %x) { 270; SDAG-LABEL: uitofp_i128_to_f32: 271; SDAG: ; %bb.0: ; %itofp-entry 272; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 273; SDAG-NEXT: v_or_b32_e32 v5, v1, v3 274; SDAG-NEXT: v_or_b32_e32 v4, v0, v2 275; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 276; SDAG-NEXT: v_mov_b32_e32 v4, 0 277; SDAG-NEXT: s_and_saveexec_b64 s[6:7], vcc 278; SDAG-NEXT: s_cbranch_execz .LBB1_14 279; SDAG-NEXT: ; %bb.1: ; %itofp-if-end 280; SDAG-NEXT: v_ffbh_u32_e32 v4, v2 281; SDAG-NEXT: v_add_u32_e32 v4, 32, v4 282; SDAG-NEXT: v_ffbh_u32_e32 v5, v3 283; SDAG-NEXT: v_min_u32_e32 v4, v4, v5 284; SDAG-NEXT: v_ffbh_u32_e32 v5, v0 285; SDAG-NEXT: v_add_u32_e32 v5, 32, v5 286; SDAG-NEXT: v_ffbh_u32_e32 v6, v1 287; SDAG-NEXT: v_min_u32_e32 v5, v5, v6 288; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] 289; SDAG-NEXT: v_add_u32_e32 v5, 64, v5 290; SDAG-NEXT: v_cndmask_b32_e32 v6, v5, v4, vcc 291; SDAG-NEXT: v_sub_u32_e32 v5, 0x80, v6 292; SDAG-NEXT: v_sub_u32_e32 v4, 0x7f, v6 293; SDAG-NEXT: v_cmp_gt_i32_e32 vcc, 25, v5 294; SDAG-NEXT: ; implicit-def: $vgpr7 295; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 296; SDAG-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 297; SDAG-NEXT: ; %bb.2: ; %itofp-if-else 298; SDAG-NEXT: v_add_u32_e32 v2, 0xffffff98, v6 299; SDAG-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 300; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 301; SDAG-NEXT: v_cndmask_b32_e32 v7, 0, v0, vcc 302; SDAG-NEXT: ; implicit-def: $vgpr5 303; SDAG-NEXT: ; implicit-def: $vgpr0_vgpr1 304; SDAG-NEXT: ; implicit-def: $vgpr6 305; SDAG-NEXT: ; implicit-def: $vgpr2_vgpr3 306; SDAG-NEXT: ; %bb.3: ; %Flow3 307; SDAG-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 308; SDAG-NEXT: s_cbranch_execz .LBB1_13 309; SDAG-NEXT: ; %bb.4: ; %NodeBlock 310; SDAG-NEXT: v_cmp_lt_i32_e32 vcc, 25, v5 311; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 312; SDAG-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 313; SDAG-NEXT: s_cbranch_execz .LBB1_8 314; SDAG-NEXT: ; %bb.5: ; %LeafBlock 315; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 26, v5 316; SDAG-NEXT: s_and_saveexec_b64 s[12:13], vcc 317; SDAG-NEXT: s_cbranch_execz .LBB1_7 318; SDAG-NEXT: ; %bb.6: ; %itofp-sw-default 319; SDAG-NEXT: v_sub_u32_e32 v11, 0x66, v6 320; SDAG-NEXT: v_sub_u32_e32 v9, 64, v11 321; SDAG-NEXT: v_lshrrev_b64 v[7:8], v11, v[0:1] 322; SDAG-NEXT: v_lshlrev_b64 v[9:10], v9, v[2:3] 323; SDAG-NEXT: v_sub_u32_e32 v12, 38, v6 324; SDAG-NEXT: v_or_b32_e32 v10, v8, v10 325; SDAG-NEXT: v_or_b32_e32 v9, v7, v9 326; SDAG-NEXT: v_lshrrev_b64 v[7:8], v12, v[2:3] 327; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v11 328; SDAG-NEXT: v_add_u32_e32 v13, 26, v6 329; SDAG-NEXT: v_cndmask_b32_e32 v8, v8, v10, vcc 330; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v11 331; SDAG-NEXT: v_cndmask_b32_e32 v7, v7, v9, vcc 332; SDAG-NEXT: v_lshrrev_b64 v[9:10], v12, v[0:1] 333; SDAG-NEXT: v_lshlrev_b64 v[11:12], v13, v[2:3] 334; SDAG-NEXT: v_subrev_u32_e32 v6, 38, v6 335; SDAG-NEXT: v_cndmask_b32_e64 v14, v7, v0, s[4:5] 336; SDAG-NEXT: v_lshlrev_b64 v[6:7], v6, v[0:1] 337; SDAG-NEXT: v_cndmask_b32_e64 v8, v8, v1, s[4:5] 338; SDAG-NEXT: v_or_b32_e32 v10, v12, v10 339; SDAG-NEXT: v_or_b32_e32 v9, v11, v9 340; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v13 341; SDAG-NEXT: v_lshlrev_b64 v[0:1], v13, v[0:1] 342; SDAG-NEXT: v_cndmask_b32_e32 v7, v7, v10, vcc 343; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13 344; SDAG-NEXT: v_cndmask_b32_e32 v6, v6, v9, vcc 345; SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5] 346; SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5] 347; SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 348; SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 349; SDAG-NEXT: v_or_b32_e32 v1, v1, v3 350; SDAG-NEXT: v_or_b32_e32 v0, v0, v2 351; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 352; SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 353; SDAG-NEXT: v_or_b32_e32 v7, v14, v0 354; SDAG-NEXT: v_mov_b32_e32 v0, v7 355; SDAG-NEXT: v_mov_b32_e32 v1, v8 356; SDAG-NEXT: .LBB1_7: ; %Flow1 357; SDAG-NEXT: s_or_b64 exec, exec, s[12:13] 358; SDAG-NEXT: .LBB1_8: ; %Flow2 359; SDAG-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 360; SDAG-NEXT: ; %bb.9: ; %itofp-sw-bb 361; SDAG-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 362; SDAG-NEXT: ; %bb.10: ; %itofp-sw-epilog 363; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 364; SDAG-NEXT: v_lshrrev_b32_e32 v2, 2, v0 365; SDAG-NEXT: v_and_or_b32 v0, v2, 1, v0 366; SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 367; SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 368; SDAG-NEXT: v_and_b32_e32 v2, 0x4000000, v0 369; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v2 370; SDAG-NEXT: v_alignbit_b32 v7, v1, v0, 2 371; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 372; SDAG-NEXT: ; %bb.11: ; %itofp-if-then20 373; SDAG-NEXT: v_alignbit_b32 v7, v1, v0, 3 374; SDAG-NEXT: v_mov_b32_e32 v4, v5 375; SDAG-NEXT: ; %bb.12: ; %Flow 376; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 377; SDAG-NEXT: .LBB1_13: ; %Flow4 378; SDAG-NEXT: s_or_b64 exec, exec, s[8:9] 379; SDAG-NEXT: v_and_b32_e32 v0, 0x7fffff, v7 380; SDAG-NEXT: v_lshl_or_b32 v0, v4, 23, v0 381; SDAG-NEXT: v_add_u32_e32 v4, 1.0, v0 382; SDAG-NEXT: .LBB1_14: ; %Flow5 383; SDAG-NEXT: s_or_b64 exec, exec, s[6:7] 384; SDAG-NEXT: v_mov_b32_e32 v0, v4 385; SDAG-NEXT: s_setpc_b64 s[30:31] 386; 387; GISEL-LABEL: uitofp_i128_to_f32: 388; GISEL: ; %bb.0: ; %itofp-entry 389; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 390; GISEL-NEXT: v_or_b32_e32 v4, v0, v2 391; GISEL-NEXT: v_or_b32_e32 v5, v1, v3 392; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 393; GISEL-NEXT: s_mov_b32 s4, 0 394; GISEL-NEXT: v_mov_b32_e32 v4, s4 395; GISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc 396; GISEL-NEXT: s_cbranch_execz .LBB1_14 397; GISEL-NEXT: ; %bb.1: ; %itofp-if-end 398; GISEL-NEXT: v_ffbh_u32_e32 v5, v0 399; GISEL-NEXT: v_ffbh_u32_e32 v4, v1 400; GISEL-NEXT: v_add_u32_e32 v5, 32, v5 401; GISEL-NEXT: v_ffbh_u32_e32 v6, v2 402; GISEL-NEXT: v_min_u32_e32 v4, v4, v5 403; GISEL-NEXT: v_ffbh_u32_e32 v5, v3 404; GISEL-NEXT: v_add_u32_e32 v6, 32, v6 405; GISEL-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[2:3] 406; GISEL-NEXT: v_add_u32_e32 v4, 64, v4 407; GISEL-NEXT: v_min_u32_e32 v5, v5, v6 408; GISEL-NEXT: v_cndmask_b32_e32 v5, v5, v4, vcc 409; GISEL-NEXT: v_sub_u32_e32 v7, 0x80, v5 410; GISEL-NEXT: v_sub_u32_e32 v6, 0x7f, v5 411; GISEL-NEXT: v_cmp_ge_i32_e32 vcc, 24, v7 412; GISEL-NEXT: ; implicit-def: $vgpr4 413; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 414; GISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 415; GISEL-NEXT: ; %bb.2: ; %itofp-if-else 416; GISEL-NEXT: v_add_u32_e32 v2, 0xffffff98, v5 417; GISEL-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 418; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 419; GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v0, vcc 420; GISEL-NEXT: ; implicit-def: $vgpr7 421; GISEL-NEXT: ; implicit-def: $vgpr0 422; GISEL-NEXT: ; implicit-def: $vgpr5 423; GISEL-NEXT: ; implicit-def: $vgpr2 424; GISEL-NEXT: ; %bb.3: ; %Flow3 425; GISEL-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 426; GISEL-NEXT: s_cbranch_execz .LBB1_13 427; GISEL-NEXT: ; %bb.4: ; %NodeBlock 428; GISEL-NEXT: v_cmp_le_i32_e32 vcc, 26, v7 429; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 430; GISEL-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 431; GISEL-NEXT: s_cbranch_execz .LBB1_8 432; GISEL-NEXT: ; %bb.5: ; %LeafBlock 433; GISEL-NEXT: v_cmp_ne_u32_e32 vcc, 26, v7 434; GISEL-NEXT: s_and_saveexec_b64 s[12:13], vcc 435; GISEL-NEXT: s_cbranch_execz .LBB1_7 436; GISEL-NEXT: ; %bb.6: ; %itofp-sw-default 437; GISEL-NEXT: v_sub_u32_e32 v4, 0x66, v5 438; GISEL-NEXT: v_sub_u32_e32 v10, 64, v4 439; GISEL-NEXT: v_lshrrev_b64 v[8:9], v4, v[0:1] 440; GISEL-NEXT: v_lshlrev_b64 v[10:11], v10, v[2:3] 441; GISEL-NEXT: v_add_u32_e32 v12, 0xffffffc0, v4 442; GISEL-NEXT: v_or_b32_e32 v10, v8, v10 443; GISEL-NEXT: v_or_b32_e32 v11, v9, v11 444; GISEL-NEXT: v_lshrrev_b64 v[8:9], v12, v[2:3] 445; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v4 446; GISEL-NEXT: v_add_u32_e32 v13, 26, v5 447; GISEL-NEXT: v_cndmask_b32_e32 v8, v8, v10, vcc 448; GISEL-NEXT: v_cndmask_b32_e32 v9, v9, v11, vcc 449; GISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v4 450; GISEL-NEXT: v_sub_u32_e32 v10, 64, v13 451; GISEL-NEXT: v_cndmask_b32_e32 v12, v8, v0, vcc 452; GISEL-NEXT: v_cndmask_b32_e32 v4, v9, v1, vcc 453; GISEL-NEXT: v_lshrrev_b64 v[8:9], v13, -1 454; GISEL-NEXT: v_lshlrev_b64 v[10:11], v10, -1 455; GISEL-NEXT: v_add_u32_e32 v5, 0xffffffda, v5 456; GISEL-NEXT: v_or_b32_e32 v14, v8, v10 457; GISEL-NEXT: v_or_b32_e32 v15, v9, v11 458; GISEL-NEXT: v_lshrrev_b64 v[10:11], v5, -1 459; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v13 460; GISEL-NEXT: v_cndmask_b32_e32 v5, v10, v14, vcc 461; GISEL-NEXT: v_cndmask_b32_e32 v10, v11, v15, vcc 462; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13 463; GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v8, vcc 464; GISEL-NEXT: v_cndmask_b32_e32 v9, 0, v9, vcc 465; GISEL-NEXT: v_cndmask_b32_e64 v5, v5, -1, s[4:5] 466; GISEL-NEXT: v_cndmask_b32_e64 v10, v10, -1, s[4:5] 467; GISEL-NEXT: v_and_b32_e32 v2, v8, v2 468; GISEL-NEXT: v_and_b32_e32 v3, v9, v3 469; GISEL-NEXT: v_and_or_b32 v0, v5, v0, v2 470; GISEL-NEXT: v_and_or_b32 v1, v10, v1, v3 471; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 472; GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 473; GISEL-NEXT: v_or_b32_e32 v3, v12, v0 474; GISEL-NEXT: v_mov_b32_e32 v0, v3 475; GISEL-NEXT: v_mov_b32_e32 v1, v4 476; GISEL-NEXT: v_mov_b32_e32 v2, v5 477; GISEL-NEXT: v_mov_b32_e32 v3, v6 478; GISEL-NEXT: .LBB1_7: ; %Flow1 479; GISEL-NEXT: s_or_b64 exec, exec, s[12:13] 480; GISEL-NEXT: .LBB1_8: ; %Flow2 481; GISEL-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 482; GISEL-NEXT: ; %bb.9: ; %itofp-sw-bb 483; GISEL-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 484; GISEL-NEXT: ; %bb.10: ; %itofp-sw-epilog 485; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 486; GISEL-NEXT: v_bfe_u32 v2, v0, 2, 1 487; GISEL-NEXT: v_or_b32_e32 v0, v0, v2 488; GISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 489; GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 490; GISEL-NEXT: v_and_b32_e32 v2, 0x4000000, v0 491; GISEL-NEXT: v_mov_b32_e32 v3, 0 492; GISEL-NEXT: v_lshrrev_b64 v[4:5], 2, v[0:1] 493; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] 494; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 495; GISEL-NEXT: ; %bb.11: ; %itofp-if-then20 496; GISEL-NEXT: v_lshrrev_b64 v[4:5], 3, v[0:1] 497; GISEL-NEXT: v_mov_b32_e32 v6, v7 498; GISEL-NEXT: ; %bb.12: ; %Flow 499; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 500; GISEL-NEXT: .LBB1_13: ; %Flow4 501; GISEL-NEXT: s_or_b64 exec, exec, s[8:9] 502; GISEL-NEXT: v_lshl_add_u32 v0, v6, 23, 1.0 503; GISEL-NEXT: v_mov_b32_e32 v1, 0x7fffff 504; GISEL-NEXT: v_and_or_b32 v4, v4, v1, v0 505; GISEL-NEXT: .LBB1_14: ; %Flow5 506; GISEL-NEXT: s_or_b64 exec, exec, s[6:7] 507; GISEL-NEXT: v_mov_b32_e32 v0, v4 508; GISEL-NEXT: s_setpc_b64 s[30:31] 509 %cvt = uitofp i128 %x to float 510 ret float %cvt 511} 512 513define double @sitofp_i128_to_f64(i128 %x) { 514; SDAG-LABEL: sitofp_i128_to_f64: 515; SDAG: ; %bb.0: ; %itofp-entry 516; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 517; SDAG-NEXT: v_mov_b32_e32 v5, v1 518; SDAG-NEXT: v_mov_b32_e32 v4, v0 519; SDAG-NEXT: v_or_b32_e32 v1, v5, v3 520; SDAG-NEXT: v_or_b32_e32 v0, v4, v2 521; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 522; SDAG-NEXT: v_mov_b32_e32 v0, 0 523; SDAG-NEXT: v_mov_b32_e32 v1, 0 524; SDAG-NEXT: s_and_saveexec_b64 s[6:7], vcc 525; SDAG-NEXT: s_cbranch_execz .LBB2_14 526; SDAG-NEXT: ; %bb.1: ; %itofp-if-end 527; SDAG-NEXT: v_sub_co_u32_e32 v0, vcc, 0, v4 528; SDAG-NEXT: v_subb_co_u32_e32 v1, vcc, 0, v5, vcc 529; SDAG-NEXT: v_subb_co_u32_e32 v6, vcc, 0, v2, vcc 530; SDAG-NEXT: v_subb_co_u32_e32 v7, vcc, 0, v3, vcc 531; SDAG-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[2:3] 532; SDAG-NEXT: ; implicit-def: $vgpr10 533; SDAG-NEXT: v_cndmask_b32_e32 v6, v2, v6, vcc 534; SDAG-NEXT: v_cndmask_b32_e32 v4, v4, v0, vcc 535; SDAG-NEXT: v_cndmask_b32_e32 v7, v3, v7, vcc 536; SDAG-NEXT: v_ffbh_u32_e32 v0, v6 537; SDAG-NEXT: v_cndmask_b32_e32 v5, v5, v1, vcc 538; SDAG-NEXT: v_add_u32_e32 v0, 32, v0 539; SDAG-NEXT: v_ffbh_u32_e32 v1, v7 540; SDAG-NEXT: v_min_u32_e32 v0, v0, v1 541; SDAG-NEXT: v_ffbh_u32_e32 v1, v4 542; SDAG-NEXT: v_add_u32_e32 v1, 32, v1 543; SDAG-NEXT: v_ffbh_u32_e32 v2, v5 544; SDAG-NEXT: v_min_u32_e32 v1, v1, v2 545; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[6:7] 546; SDAG-NEXT: v_add_u32_e32 v1, 64, v1 547; SDAG-NEXT: v_cndmask_b32_e32 v9, v1, v0, vcc 548; SDAG-NEXT: v_sub_u32_e32 v8, 0x80, v9 549; SDAG-NEXT: v_sub_u32_e32 v2, 0x7f, v9 550; SDAG-NEXT: v_cmp_gt_i32_e32 vcc, 54, v8 551; SDAG-NEXT: ; implicit-def: $vgpr0_vgpr1 552; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 553; SDAG-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 554; SDAG-NEXT: ; %bb.2: ; %itofp-if-else 555; SDAG-NEXT: v_add_u32_e32 v6, 0xffffffb5, v9 556; SDAG-NEXT: v_lshlrev_b64 v[0:1], v6, v[4:5] 557; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v6 558; SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v1, vcc 559; SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 560; SDAG-NEXT: ; implicit-def: $vgpr8 561; SDAG-NEXT: ; implicit-def: $vgpr6_vgpr7 562; SDAG-NEXT: ; implicit-def: $vgpr4_vgpr5 563; SDAG-NEXT: ; implicit-def: $vgpr9 564; SDAG-NEXT: ; %bb.3: ; %Flow3 565; SDAG-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 566; SDAG-NEXT: s_cbranch_execz .LBB2_13 567; SDAG-NEXT: ; %bb.4: ; %NodeBlock 568; SDAG-NEXT: v_cmp_lt_i32_e32 vcc, 54, v8 569; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 570; SDAG-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 571; SDAG-NEXT: s_cbranch_execz .LBB2_8 572; SDAG-NEXT: ; %bb.5: ; %LeafBlock 573; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 55, v8 574; SDAG-NEXT: s_and_saveexec_b64 s[12:13], vcc 575; SDAG-NEXT: s_cbranch_execz .LBB2_7 576; SDAG-NEXT: ; %bb.6: ; %itofp-sw-default 577; SDAG-NEXT: v_sub_u32_e32 v12, 0x49, v9 578; SDAG-NEXT: v_sub_u32_e32 v10, 64, v12 579; SDAG-NEXT: v_lshrrev_b64 v[0:1], v12, v[4:5] 580; SDAG-NEXT: v_lshlrev_b64 v[10:11], v10, v[6:7] 581; SDAG-NEXT: v_sub_u32_e32 v13, 9, v9 582; SDAG-NEXT: v_or_b32_e32 v11, v1, v11 583; SDAG-NEXT: v_or_b32_e32 v10, v0, v10 584; SDAG-NEXT: v_lshrrev_b64 v[0:1], v13, v[6:7] 585; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v12 586; SDAG-NEXT: v_add_u32_e32 v16, 55, v9 587; SDAG-NEXT: v_cndmask_b32_e32 v1, v1, v11, vcc 588; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v12 589; SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v10, vcc 590; SDAG-NEXT: v_lshrrev_b64 v[10:11], v12, v[6:7] 591; SDAG-NEXT: v_lshrrev_b64 v[12:13], v13, v[4:5] 592; SDAG-NEXT: v_lshlrev_b64 v[14:15], v16, v[6:7] 593; SDAG-NEXT: v_add_u32_e32 v9, -9, v9 594; SDAG-NEXT: v_or_b32_e32 v15, v15, v13 595; SDAG-NEXT: v_or_b32_e32 v14, v14, v12 596; SDAG-NEXT: v_lshlrev_b64 v[12:13], v9, v[4:5] 597; SDAG-NEXT: v_cndmask_b32_e32 v11, 0, v11, vcc 598; SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v10, vcc 599; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v16 600; SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[4:5] 601; SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[4:5] 602; SDAG-NEXT: v_cndmask_b32_e32 v9, v13, v15, vcc 603; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v16 604; SDAG-NEXT: v_lshlrev_b64 v[4:5], v16, v[4:5] 605; SDAG-NEXT: v_cndmask_b32_e64 v7, v9, v7, s[4:5] 606; SDAG-NEXT: v_cndmask_b32_e32 v9, v12, v14, vcc 607; SDAG-NEXT: v_cndmask_b32_e64 v6, v9, v6, s[4:5] 608; SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v5, vcc 609; SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc 610; SDAG-NEXT: v_or_b32_e32 v5, v5, v7 611; SDAG-NEXT: v_or_b32_e32 v4, v4, v6 612; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 613; SDAG-NEXT: v_mov_b32_e32 v6, v10 614; SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc 615; SDAG-NEXT: v_or_b32_e32 v0, v0, v4 616; SDAG-NEXT: v_mov_b32_e32 v5, v1 617; SDAG-NEXT: v_mov_b32_e32 v4, v0 618; SDAG-NEXT: v_mov_b32_e32 v7, v11 619; SDAG-NEXT: .LBB2_7: ; %Flow1 620; SDAG-NEXT: s_or_b64 exec, exec, s[12:13] 621; SDAG-NEXT: .LBB2_8: ; %Flow2 622; SDAG-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 623; SDAG-NEXT: ; %bb.9: ; %itofp-sw-bb 624; SDAG-NEXT: v_lshlrev_b64 v[6:7], 1, v[6:7] 625; SDAG-NEXT: v_lshrrev_b32_e32 v0, 31, v5 626; SDAG-NEXT: v_lshlrev_b64 v[4:5], 1, v[4:5] 627; SDAG-NEXT: v_or_b32_e32 v6, v6, v0 628; SDAG-NEXT: ; %bb.10: ; %itofp-sw-epilog 629; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 630; SDAG-NEXT: v_lshrrev_b32_e32 v0, 2, v4 631; SDAG-NEXT: v_and_or_b32 v0, v0, 1, v4 632; SDAG-NEXT: v_add_co_u32_e32 v4, vcc, 1, v0 633; SDAG-NEXT: v_addc_co_u32_e32 v5, vcc, 0, v5, vcc 634; SDAG-NEXT: v_addc_co_u32_e32 v6, vcc, 0, v6, vcc 635; SDAG-NEXT: v_lshrrev_b64 v[0:1], 2, v[4:5] 636; SDAG-NEXT: v_lshlrev_b32_e32 v7, 30, v6 637; SDAG-NEXT: v_or_b32_e32 v10, v1, v7 638; SDAG-NEXT: v_and_b32_e32 v1, 0x800000, v5 639; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v1 640; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 641; SDAG-NEXT: ; %bb.11: ; %itofp-if-then20 642; SDAG-NEXT: v_lshrrev_b64 v[0:1], 3, v[4:5] 643; SDAG-NEXT: v_lshlrev_b32_e32 v2, 29, v6 644; SDAG-NEXT: v_or_b32_e32 v10, v1, v2 645; SDAG-NEXT: v_mov_b32_e32 v2, v8 646; SDAG-NEXT: ; %bb.12: ; %Flow 647; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 648; SDAG-NEXT: .LBB2_13: ; %Flow4 649; SDAG-NEXT: s_or_b64 exec, exec, s[8:9] 650; SDAG-NEXT: v_and_b32_e32 v1, 0x80000000, v3 651; SDAG-NEXT: v_mov_b32_e32 v3, 0x3ff00000 652; SDAG-NEXT: v_lshl_add_u32 v2, v2, 20, v3 653; SDAG-NEXT: v_and_b32_e32 v3, 0xfffff, v10 654; SDAG-NEXT: v_or3_b32 v1, v3, v1, v2 655; SDAG-NEXT: .LBB2_14: ; %Flow5 656; SDAG-NEXT: s_or_b64 exec, exec, s[6:7] 657; SDAG-NEXT: s_setpc_b64 s[30:31] 658; 659; GISEL-LABEL: sitofp_i128_to_f64: 660; GISEL: ; %bb.0: ; %itofp-entry 661; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 662; GISEL-NEXT: v_mov_b32_e32 v4, v0 663; GISEL-NEXT: v_mov_b32_e32 v5, v1 664; GISEL-NEXT: s_mov_b64 s[4:5], 0 665; GISEL-NEXT: v_or_b32_e32 v0, v4, v2 666; GISEL-NEXT: v_or_b32_e32 v1, v5, v3 667; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 668; GISEL-NEXT: v_mov_b32_e32 v0, s4 669; GISEL-NEXT: v_mov_b32_e32 v1, s5 670; GISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc 671; GISEL-NEXT: s_cbranch_execz .LBB2_14 672; GISEL-NEXT: ; %bb.1: ; %itofp-if-end 673; GISEL-NEXT: v_ashrrev_i32_e32 v6, 31, v3 674; GISEL-NEXT: v_xor_b32_e32 v0, v6, v4 675; GISEL-NEXT: v_xor_b32_e32 v1, v6, v5 676; GISEL-NEXT: v_xor_b32_e32 v4, v6, v2 677; GISEL-NEXT: v_sub_co_u32_e32 v2, vcc, v0, v6 678; GISEL-NEXT: v_xor_b32_e32 v5, v6, v3 679; GISEL-NEXT: v_subb_co_u32_e32 v3, vcc, v1, v6, vcc 680; GISEL-NEXT: v_subb_co_u32_e32 v4, vcc, v4, v6, vcc 681; GISEL-NEXT: v_ffbh_u32_e32 v1, v2 682; GISEL-NEXT: v_subb_co_u32_e32 v5, vcc, v5, v6, vcc 683; GISEL-NEXT: v_ffbh_u32_e32 v0, v3 684; GISEL-NEXT: v_add_u32_e32 v1, 32, v1 685; GISEL-NEXT: v_ffbh_u32_e32 v7, v4 686; GISEL-NEXT: v_min_u32_e32 v0, v0, v1 687; GISEL-NEXT: v_ffbh_u32_e32 v1, v5 688; GISEL-NEXT: v_add_u32_e32 v7, 32, v7 689; GISEL-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[4:5] 690; GISEL-NEXT: v_add_u32_e32 v0, 64, v0 691; GISEL-NEXT: v_min_u32_e32 v1, v1, v7 692; GISEL-NEXT: v_cndmask_b32_e32 v9, v1, v0, vcc 693; GISEL-NEXT: v_sub_u32_e32 v8, 0x80, v9 694; GISEL-NEXT: v_sub_u32_e32 v7, 0x7f, v9 695; GISEL-NEXT: v_cmp_ge_i32_e32 vcc, 53, v8 696; GISEL-NEXT: ; implicit-def: $vgpr10 697; GISEL-NEXT: ; implicit-def: $vgpr0_vgpr1 698; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 699; GISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 700; GISEL-NEXT: ; %bb.2: ; %itofp-if-else 701; GISEL-NEXT: v_add_u32_e32 v4, 0xffffffb5, v9 702; GISEL-NEXT: v_lshlrev_b64 v[0:1], v4, v[2:3] 703; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v4 704; GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 705; GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v1, vcc 706; GISEL-NEXT: ; implicit-def: $vgpr8 707; GISEL-NEXT: ; implicit-def: $vgpr2 708; GISEL-NEXT: ; implicit-def: $vgpr9 709; GISEL-NEXT: ; %bb.3: ; %Flow3 710; GISEL-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 711; GISEL-NEXT: s_cbranch_execz .LBB2_13 712; GISEL-NEXT: ; %bb.4: ; %NodeBlock 713; GISEL-NEXT: v_cmp_le_i32_e32 vcc, 55, v8 714; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 715; GISEL-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 716; GISEL-NEXT: s_cbranch_execz .LBB2_8 717; GISEL-NEXT: ; %bb.5: ; %LeafBlock 718; GISEL-NEXT: v_cmp_ne_u32_e32 vcc, 55, v8 719; GISEL-NEXT: s_and_saveexec_b64 s[12:13], vcc 720; GISEL-NEXT: s_cbranch_execz .LBB2_7 721; GISEL-NEXT: ; %bb.6: ; %itofp-sw-default 722; GISEL-NEXT: v_sub_u32_e32 v14, 0x49, v9 723; GISEL-NEXT: v_sub_u32_e32 v10, 64, v14 724; GISEL-NEXT: v_lshrrev_b64 v[0:1], v14, v[2:3] 725; GISEL-NEXT: v_lshlrev_b64 v[10:11], v10, v[4:5] 726; GISEL-NEXT: v_add_u32_e32 v15, 0xffffffc0, v14 727; GISEL-NEXT: v_lshrrev_b64 v[12:13], v14, v[4:5] 728; GISEL-NEXT: v_or_b32_e32 v10, v0, v10 729; GISEL-NEXT: v_or_b32_e32 v11, v1, v11 730; GISEL-NEXT: v_lshrrev_b64 v[0:1], v15, v[4:5] 731; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v14 732; GISEL-NEXT: v_add_u32_e32 v15, 55, v9 733; GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v10, vcc 734; GISEL-NEXT: v_cndmask_b32_e32 v1, v1, v11, vcc 735; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v14 736; GISEL-NEXT: v_cndmask_b32_e32 v11, 0, v12, vcc 737; GISEL-NEXT: v_sub_u32_e32 v12, 64, v15 738; GISEL-NEXT: v_cndmask_b32_e64 v14, v0, v2, s[4:5] 739; GISEL-NEXT: v_cndmask_b32_e64 v10, v1, v3, s[4:5] 740; GISEL-NEXT: v_lshrrev_b64 v[0:1], v15, -1 741; GISEL-NEXT: v_lshlrev_b64 v[12:13], v12, -1 742; GISEL-NEXT: v_add_u32_e32 v9, -9, v9 743; GISEL-NEXT: v_or_b32_e32 v16, v0, v12 744; GISEL-NEXT: v_or_b32_e32 v17, v1, v13 745; GISEL-NEXT: v_lshrrev_b64 v[12:13], v9, -1 746; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v15 747; GISEL-NEXT: v_cndmask_b32_e32 v9, v12, v16, vcc 748; GISEL-NEXT: v_cndmask_b32_e32 v12, v13, v17, vcc 749; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v15 750; GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 751; GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 752; GISEL-NEXT: v_cndmask_b32_e64 v9, v9, -1, s[4:5] 753; GISEL-NEXT: v_cndmask_b32_e64 v12, v12, -1, s[4:5] 754; GISEL-NEXT: v_and_b32_e32 v0, v0, v4 755; GISEL-NEXT: v_and_b32_e32 v1, v1, v5 756; GISEL-NEXT: v_and_or_b32 v0, v9, v2, v0 757; GISEL-NEXT: v_and_or_b32 v1, v12, v3, v1 758; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 759; GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 760; GISEL-NEXT: v_or_b32_e32 v9, v14, v0 761; GISEL-NEXT: v_mov_b32_e32 v2, v9 762; GISEL-NEXT: v_mov_b32_e32 v3, v10 763; GISEL-NEXT: v_mov_b32_e32 v4, v11 764; GISEL-NEXT: v_mov_b32_e32 v5, v12 765; GISEL-NEXT: .LBB2_7: ; %Flow1 766; GISEL-NEXT: s_or_b64 exec, exec, s[12:13] 767; GISEL-NEXT: .LBB2_8: ; %Flow2 768; GISEL-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 769; GISEL-NEXT: s_cbranch_execz .LBB2_10 770; GISEL-NEXT: ; %bb.9: ; %itofp-sw-bb 771; GISEL-NEXT: v_lshlrev_b64 v[4:5], 1, v[4:5] 772; GISEL-NEXT: v_lshlrev_b64 v[0:1], 1, v[2:3] 773; GISEL-NEXT: v_lshrrev_b32_e32 v2, 31, v3 774; GISEL-NEXT: v_or_b32_e32 v2, v4, v2 775; GISEL-NEXT: v_mov_b32_e32 v5, v3 776; GISEL-NEXT: v_mov_b32_e32 v4, v2 777; GISEL-NEXT: v_mov_b32_e32 v3, v1 778; GISEL-NEXT: v_mov_b32_e32 v2, v0 779; GISEL-NEXT: .LBB2_10: ; %itofp-sw-epilog 780; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 781; GISEL-NEXT: v_bfe_u32 v0, v2, 2, 1 782; GISEL-NEXT: v_or_b32_e32 v0, v2, v0 783; GISEL-NEXT: v_add_co_u32_e32 v2, vcc, 1, v0 784; GISEL-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc 785; GISEL-NEXT: v_addc_co_u32_e32 v4, vcc, 0, v4, vcc 786; GISEL-NEXT: v_lshrrev_b64 v[0:1], 2, v[2:3] 787; GISEL-NEXT: v_mov_b32_e32 v9, 0 788; GISEL-NEXT: v_and_b32_e32 v10, 0x800000, v3 789; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[9:10] 790; GISEL-NEXT: v_lshl_or_b32 v10, v4, 30, v1 791; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 792; GISEL-NEXT: ; %bb.11: ; %itofp-if-then20 793; GISEL-NEXT: v_lshrrev_b64 v[0:1], 3, v[2:3] 794; GISEL-NEXT: v_mov_b32_e32 v7, v8 795; GISEL-NEXT: v_lshl_or_b32 v10, v4, 29, v1 796; GISEL-NEXT: ; %bb.12: ; %Flow 797; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 798; GISEL-NEXT: .LBB2_13: ; %Flow4 799; GISEL-NEXT: s_or_b64 exec, exec, s[8:9] 800; GISEL-NEXT: v_and_b32_e32 v1, 0x80000000, v6 801; GISEL-NEXT: v_mov_b32_e32 v2, 0x3ff00000 802; GISEL-NEXT: v_mov_b32_e32 v3, 0xfffff 803; GISEL-NEXT: v_lshl_add_u32 v2, v7, 20, v2 804; GISEL-NEXT: v_and_or_b32 v1, v10, v3, v1 805; GISEL-NEXT: v_or3_b32 v1, v1, v2, 0 806; GISEL-NEXT: .LBB2_14: ; %Flow5 807; GISEL-NEXT: s_or_b64 exec, exec, s[6:7] 808; GISEL-NEXT: s_setpc_b64 s[30:31] 809 %cvt = sitofp i128 %x to double 810 ret double %cvt 811} 812 813define double @uitofp_i128_to_f64(i128 %x) { 814; SDAG-LABEL: uitofp_i128_to_f64: 815; SDAG: ; %bb.0: ; %itofp-entry 816; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 817; SDAG-NEXT: v_or_b32_e32 v5, v1, v3 818; SDAG-NEXT: v_or_b32_e32 v4, v0, v2 819; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 820; SDAG-NEXT: v_mov_b32_e32 v4, 0 821; SDAG-NEXT: v_mov_b32_e32 v5, 0 822; SDAG-NEXT: s_and_saveexec_b64 s[6:7], vcc 823; SDAG-NEXT: s_cbranch_execz .LBB3_14 824; SDAG-NEXT: ; %bb.1: ; %itofp-if-end 825; SDAG-NEXT: v_ffbh_u32_e32 v4, v2 826; SDAG-NEXT: v_add_u32_e32 v4, 32, v4 827; SDAG-NEXT: v_ffbh_u32_e32 v5, v3 828; SDAG-NEXT: v_min_u32_e32 v4, v4, v5 829; SDAG-NEXT: v_ffbh_u32_e32 v5, v0 830; SDAG-NEXT: v_add_u32_e32 v5, 32, v5 831; SDAG-NEXT: v_ffbh_u32_e32 v6, v1 832; SDAG-NEXT: v_min_u32_e32 v5, v5, v6 833; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] 834; SDAG-NEXT: v_add_u32_e32 v5, 64, v5 835; SDAG-NEXT: v_cndmask_b32_e32 v8, v5, v4, vcc 836; SDAG-NEXT: v_sub_u32_e32 v7, 0x80, v8 837; SDAG-NEXT: v_sub_u32_e32 v6, 0x7f, v8 838; SDAG-NEXT: v_cmp_gt_i32_e32 vcc, 54, v7 839; SDAG-NEXT: ; implicit-def: $vgpr9 840; SDAG-NEXT: ; implicit-def: $vgpr4_vgpr5 841; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 842; SDAG-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 843; SDAG-NEXT: ; %bb.2: ; %itofp-if-else 844; SDAG-NEXT: v_add_u32_e32 v2, 0xffffffb5, v8 845; SDAG-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 846; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 847; SDAG-NEXT: v_cndmask_b32_e32 v9, 0, v1, vcc 848; SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v0, vcc 849; SDAG-NEXT: ; implicit-def: $vgpr7 850; SDAG-NEXT: ; implicit-def: $vgpr2_vgpr3 851; SDAG-NEXT: ; implicit-def: $vgpr0_vgpr1 852; SDAG-NEXT: ; implicit-def: $vgpr8 853; SDAG-NEXT: ; %bb.3: ; %Flow3 854; SDAG-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 855; SDAG-NEXT: s_cbranch_execz .LBB3_13 856; SDAG-NEXT: ; %bb.4: ; %NodeBlock 857; SDAG-NEXT: v_cmp_lt_i32_e32 vcc, 54, v7 858; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 859; SDAG-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 860; SDAG-NEXT: s_cbranch_execz .LBB3_8 861; SDAG-NEXT: ; %bb.5: ; %LeafBlock 862; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 55, v7 863; SDAG-NEXT: s_and_saveexec_b64 s[12:13], vcc 864; SDAG-NEXT: s_cbranch_execz .LBB3_7 865; SDAG-NEXT: ; %bb.6: ; %itofp-sw-default 866; SDAG-NEXT: v_sub_u32_e32 v11, 0x49, v8 867; SDAG-NEXT: v_sub_u32_e32 v9, 64, v11 868; SDAG-NEXT: v_lshrrev_b64 v[4:5], v11, v[0:1] 869; SDAG-NEXT: v_lshlrev_b64 v[9:10], v9, v[2:3] 870; SDAG-NEXT: v_sub_u32_e32 v12, 9, v8 871; SDAG-NEXT: v_or_b32_e32 v10, v5, v10 872; SDAG-NEXT: v_or_b32_e32 v9, v4, v9 873; SDAG-NEXT: v_lshrrev_b64 v[4:5], v12, v[2:3] 874; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v11 875; SDAG-NEXT: v_add_u32_e32 v15, 55, v8 876; SDAG-NEXT: v_cndmask_b32_e32 v5, v5, v10, vcc 877; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v11 878; SDAG-NEXT: v_cndmask_b32_e32 v4, v4, v9, vcc 879; SDAG-NEXT: v_lshrrev_b64 v[9:10], v11, v[2:3] 880; SDAG-NEXT: v_lshrrev_b64 v[11:12], v12, v[0:1] 881; SDAG-NEXT: v_lshlrev_b64 v[13:14], v15, v[2:3] 882; SDAG-NEXT: v_add_u32_e32 v8, -9, v8 883; SDAG-NEXT: v_or_b32_e32 v14, v14, v12 884; SDAG-NEXT: v_or_b32_e32 v13, v13, v11 885; SDAG-NEXT: v_lshlrev_b64 v[11:12], v8, v[0:1] 886; SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v10, vcc 887; SDAG-NEXT: v_cndmask_b32_e32 v9, 0, v9, vcc 888; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v15 889; SDAG-NEXT: v_cndmask_b32_e64 v5, v5, v1, s[4:5] 890; SDAG-NEXT: v_cndmask_b32_e64 v4, v4, v0, s[4:5] 891; SDAG-NEXT: v_cndmask_b32_e32 v8, v12, v14, vcc 892; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v15 893; SDAG-NEXT: v_lshlrev_b64 v[0:1], v15, v[0:1] 894; SDAG-NEXT: v_cndmask_b32_e64 v3, v8, v3, s[4:5] 895; SDAG-NEXT: v_cndmask_b32_e32 v8, v11, v13, vcc 896; SDAG-NEXT: v_cndmask_b32_e64 v2, v8, v2, s[4:5] 897; SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 898; SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 899; SDAG-NEXT: v_or_b32_e32 v1, v1, v3 900; SDAG-NEXT: v_or_b32_e32 v0, v0, v2 901; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 902; SDAG-NEXT: v_mov_b32_e32 v2, v9 903; SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 904; SDAG-NEXT: v_or_b32_e32 v4, v4, v0 905; SDAG-NEXT: v_mov_b32_e32 v0, v4 906; SDAG-NEXT: v_mov_b32_e32 v1, v5 907; SDAG-NEXT: v_mov_b32_e32 v3, v10 908; SDAG-NEXT: .LBB3_7: ; %Flow1 909; SDAG-NEXT: s_or_b64 exec, exec, s[12:13] 910; SDAG-NEXT: .LBB3_8: ; %Flow2 911; SDAG-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 912; SDAG-NEXT: ; %bb.9: ; %itofp-sw-bb 913; SDAG-NEXT: v_lshlrev_b64 v[2:3], 1, v[2:3] 914; SDAG-NEXT: v_lshrrev_b32_e32 v3, 31, v1 915; SDAG-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 916; SDAG-NEXT: v_or_b32_e32 v2, v2, v3 917; SDAG-NEXT: ; %bb.10: ; %itofp-sw-epilog 918; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 919; SDAG-NEXT: v_lshrrev_b32_e32 v3, 2, v0 920; SDAG-NEXT: v_and_or_b32 v0, v3, 1, v0 921; SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 922; SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 923; SDAG-NEXT: v_addc_co_u32_e32 v2, vcc, 0, v2, vcc 924; SDAG-NEXT: v_lshrrev_b64 v[4:5], 2, v[0:1] 925; SDAG-NEXT: v_and_b32_e32 v3, 0x800000, v1 926; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v3 927; SDAG-NEXT: v_alignbit_b32 v9, v2, v1, 2 928; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 929; SDAG-NEXT: ; %bb.11: ; %itofp-if-then20 930; SDAG-NEXT: v_lshrrev_b64 v[4:5], 3, v[0:1] 931; SDAG-NEXT: v_alignbit_b32 v9, v2, v1, 3 932; SDAG-NEXT: v_mov_b32_e32 v6, v7 933; SDAG-NEXT: ; %bb.12: ; %Flow 934; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 935; SDAG-NEXT: .LBB3_13: ; %Flow4 936; SDAG-NEXT: s_or_b64 exec, exec, s[8:9] 937; SDAG-NEXT: v_and_b32_e32 v0, 0xfffff, v9 938; SDAG-NEXT: v_lshl_or_b32 v0, v6, 20, v0 939; SDAG-NEXT: v_add_u32_e32 v5, 0x3ff00000, v0 940; SDAG-NEXT: .LBB3_14: ; %Flow5 941; SDAG-NEXT: s_or_b64 exec, exec, s[6:7] 942; SDAG-NEXT: v_mov_b32_e32 v0, v4 943; SDAG-NEXT: v_mov_b32_e32 v1, v5 944; SDAG-NEXT: s_setpc_b64 s[30:31] 945; 946; GISEL-LABEL: uitofp_i128_to_f64: 947; GISEL: ; %bb.0: ; %itofp-entry 948; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 949; GISEL-NEXT: s_mov_b64 s[4:5], 0 950; GISEL-NEXT: v_or_b32_e32 v4, v0, v2 951; GISEL-NEXT: v_or_b32_e32 v5, v1, v3 952; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 953; GISEL-NEXT: v_mov_b32_e32 v4, s4 954; GISEL-NEXT: v_mov_b32_e32 v5, s5 955; GISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc 956; GISEL-NEXT: s_cbranch_execz .LBB3_14 957; GISEL-NEXT: ; %bb.1: ; %itofp-if-end 958; GISEL-NEXT: v_ffbh_u32_e32 v5, v0 959; GISEL-NEXT: v_ffbh_u32_e32 v4, v1 960; GISEL-NEXT: v_add_u32_e32 v5, 32, v5 961; GISEL-NEXT: v_ffbh_u32_e32 v6, v2 962; GISEL-NEXT: v_min_u32_e32 v4, v4, v5 963; GISEL-NEXT: v_ffbh_u32_e32 v5, v3 964; GISEL-NEXT: v_add_u32_e32 v6, 32, v6 965; GISEL-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[2:3] 966; GISEL-NEXT: v_add_u32_e32 v4, 64, v4 967; GISEL-NEXT: v_min_u32_e32 v5, v5, v6 968; GISEL-NEXT: v_cndmask_b32_e32 v8, v5, v4, vcc 969; GISEL-NEXT: v_sub_u32_e32 v7, 0x80, v8 970; GISEL-NEXT: v_sub_u32_e32 v6, 0x7f, v8 971; GISEL-NEXT: v_cmp_ge_i32_e32 vcc, 53, v7 972; GISEL-NEXT: ; implicit-def: $vgpr9 973; GISEL-NEXT: ; implicit-def: $vgpr4_vgpr5 974; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 975; GISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 976; GISEL-NEXT: ; %bb.2: ; %itofp-if-else 977; GISEL-NEXT: v_add_u32_e32 v2, 0xffffffb5, v8 978; GISEL-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 979; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 980; GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v0, vcc 981; GISEL-NEXT: v_cndmask_b32_e32 v9, 0, v1, vcc 982; GISEL-NEXT: ; implicit-def: $vgpr7 983; GISEL-NEXT: ; implicit-def: $vgpr0 984; GISEL-NEXT: ; implicit-def: $vgpr8 985; GISEL-NEXT: ; %bb.3: ; %Flow3 986; GISEL-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 987; GISEL-NEXT: s_cbranch_execz .LBB3_13 988; GISEL-NEXT: ; %bb.4: ; %NodeBlock 989; GISEL-NEXT: v_cmp_le_i32_e32 vcc, 55, v7 990; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 991; GISEL-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 992; GISEL-NEXT: s_cbranch_execz .LBB3_8 993; GISEL-NEXT: ; %bb.5: ; %LeafBlock 994; GISEL-NEXT: v_cmp_ne_u32_e32 vcc, 55, v7 995; GISEL-NEXT: s_and_saveexec_b64 s[12:13], vcc 996; GISEL-NEXT: s_cbranch_execz .LBB3_7 997; GISEL-NEXT: ; %bb.6: ; %itofp-sw-default 998; GISEL-NEXT: v_sub_u32_e32 v13, 0x49, v8 999; GISEL-NEXT: v_sub_u32_e32 v9, 64, v13 1000; GISEL-NEXT: v_lshrrev_b64 v[4:5], v13, v[0:1] 1001; GISEL-NEXT: v_lshlrev_b64 v[9:10], v9, v[2:3] 1002; GISEL-NEXT: v_add_u32_e32 v14, 0xffffffc0, v13 1003; GISEL-NEXT: v_lshrrev_b64 v[11:12], v13, v[2:3] 1004; GISEL-NEXT: v_or_b32_e32 v9, v4, v9 1005; GISEL-NEXT: v_or_b32_e32 v10, v5, v10 1006; GISEL-NEXT: v_lshrrev_b64 v[4:5], v14, v[2:3] 1007; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v13 1008; GISEL-NEXT: v_add_u32_e32 v15, 55, v8 1009; GISEL-NEXT: v_cndmask_b32_e32 v4, v4, v9, vcc 1010; GISEL-NEXT: v_cndmask_b32_e32 v5, v5, v10, vcc 1011; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13 1012; GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v11, vcc 1013; GISEL-NEXT: v_cndmask_b32_e32 v11, 0, v12, vcc 1014; GISEL-NEXT: v_sub_u32_e32 v12, 64, v15 1015; GISEL-NEXT: v_cndmask_b32_e64 v14, v4, v0, s[4:5] 1016; GISEL-NEXT: v_cndmask_b32_e64 v9, v5, v1, s[4:5] 1017; GISEL-NEXT: v_lshrrev_b64 v[4:5], v15, -1 1018; GISEL-NEXT: v_lshlrev_b64 v[12:13], v12, -1 1019; GISEL-NEXT: v_add_u32_e32 v8, -9, v8 1020; GISEL-NEXT: v_or_b32_e32 v16, v4, v12 1021; GISEL-NEXT: v_or_b32_e32 v17, v5, v13 1022; GISEL-NEXT: v_lshrrev_b64 v[12:13], v8, -1 1023; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v15 1024; GISEL-NEXT: v_cndmask_b32_e32 v8, v12, v16, vcc 1025; GISEL-NEXT: v_cndmask_b32_e32 v12, v13, v17, vcc 1026; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v15 1027; GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc 1028; GISEL-NEXT: v_cndmask_b32_e32 v5, 0, v5, vcc 1029; GISEL-NEXT: v_cndmask_b32_e64 v8, v8, -1, s[4:5] 1030; GISEL-NEXT: v_cndmask_b32_e64 v12, v12, -1, s[4:5] 1031; GISEL-NEXT: v_and_b32_e32 v2, v4, v2 1032; GISEL-NEXT: v_and_b32_e32 v3, v5, v3 1033; GISEL-NEXT: v_and_or_b32 v0, v8, v0, v2 1034; GISEL-NEXT: v_and_or_b32 v1, v12, v1, v3 1035; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 1036; GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1037; GISEL-NEXT: v_or_b32_e32 v8, v14, v0 1038; GISEL-NEXT: v_mov_b32_e32 v0, v8 1039; GISEL-NEXT: v_mov_b32_e32 v1, v9 1040; GISEL-NEXT: v_mov_b32_e32 v2, v10 1041; GISEL-NEXT: v_mov_b32_e32 v3, v11 1042; GISEL-NEXT: .LBB3_7: ; %Flow1 1043; GISEL-NEXT: s_or_b64 exec, exec, s[12:13] 1044; GISEL-NEXT: .LBB3_8: ; %Flow2 1045; GISEL-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 1046; GISEL-NEXT: s_cbranch_execz .LBB3_10 1047; GISEL-NEXT: ; %bb.9: ; %itofp-sw-bb 1048; GISEL-NEXT: v_lshlrev_b64 v[8:9], 1, v[0:1] 1049; GISEL-NEXT: v_lshlrev_b64 v[10:11], 1, v[2:3] 1050; GISEL-NEXT: v_lshrrev_b32_e32 v0, 31, v1 1051; GISEL-NEXT: v_or_b32_e32 v10, v10, v0 1052; GISEL-NEXT: v_mov_b32_e32 v0, v8 1053; GISEL-NEXT: v_mov_b32_e32 v1, v9 1054; GISEL-NEXT: v_mov_b32_e32 v2, v10 1055; GISEL-NEXT: v_mov_b32_e32 v3, v11 1056; GISEL-NEXT: .LBB3_10: ; %itofp-sw-epilog 1057; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 1058; GISEL-NEXT: v_bfe_u32 v4, v0, 2, 1 1059; GISEL-NEXT: v_or_b32_e32 v0, v0, v4 1060; GISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 1061; GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 1062; GISEL-NEXT: v_addc_co_u32_e32 v2, vcc, 0, v2, vcc 1063; GISEL-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v3, vcc 1064; GISEL-NEXT: v_mov_b32_e32 v8, 0 1065; GISEL-NEXT: v_and_b32_e32 v9, 0x800000, v1 1066; GISEL-NEXT: v_lshrrev_b64 v[4:5], 2, v[0:1] 1067; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] 1068; GISEL-NEXT: v_lshlrev_b64 v[8:9], 30, v[2:3] 1069; GISEL-NEXT: v_lshrrev_b32_e32 v5, 2, v1 1070; GISEL-NEXT: v_or_b32_e32 v9, v5, v8 1071; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 1072; GISEL-NEXT: ; %bb.11: ; %itofp-if-then20 1073; GISEL-NEXT: v_lshlrev_b64 v[2:3], 29, v[2:3] 1074; GISEL-NEXT: v_lshrrev_b64 v[4:5], 3, v[0:1] 1075; GISEL-NEXT: v_lshrrev_b32_e32 v0, 3, v1 1076; GISEL-NEXT: v_or_b32_e32 v9, v0, v2 1077; GISEL-NEXT: v_mov_b32_e32 v6, v7 1078; GISEL-NEXT: ; %bb.12: ; %Flow 1079; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 1080; GISEL-NEXT: .LBB3_13: ; %Flow4 1081; GISEL-NEXT: s_or_b64 exec, exec, s[8:9] 1082; GISEL-NEXT: v_mov_b32_e32 v0, 0x3ff00000 1083; GISEL-NEXT: v_lshl_add_u32 v0, v6, 20, v0 1084; GISEL-NEXT: v_and_b32_e32 v1, 0xfffff, v9 1085; GISEL-NEXT: v_or3_b32 v5, v1, v0, 0 1086; GISEL-NEXT: .LBB3_14: ; %Flow5 1087; GISEL-NEXT: s_or_b64 exec, exec, s[6:7] 1088; GISEL-NEXT: v_mov_b32_e32 v0, v4 1089; GISEL-NEXT: v_mov_b32_e32 v1, v5 1090; GISEL-NEXT: s_setpc_b64 s[30:31] 1091 %cvt = uitofp i128 %x to double 1092 ret double %cvt 1093} 1094 1095define half @sitofp_i128_to_f16(i128 %x) { 1096; SDAG-LABEL: sitofp_i128_to_f16: 1097; SDAG: ; %bb.0: ; %itofp-entry 1098; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1099; SDAG-NEXT: v_or_b32_e32 v5, v1, v3 1100; SDAG-NEXT: v_or_b32_e32 v4, v0, v2 1101; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 1102; SDAG-NEXT: v_mov_b32_e32 v4, 0 1103; SDAG-NEXT: s_and_saveexec_b64 s[6:7], vcc 1104; SDAG-NEXT: s_cbranch_execz .LBB4_14 1105; SDAG-NEXT: ; %bb.1: ; %itofp-if-end 1106; SDAG-NEXT: v_sub_co_u32_e32 v4, vcc, 0, v0 1107; SDAG-NEXT: v_subb_co_u32_e32 v5, vcc, 0, v1, vcc 1108; SDAG-NEXT: v_subb_co_u32_e32 v6, vcc, 0, v2, vcc 1109; SDAG-NEXT: v_subb_co_u32_e32 v7, vcc, 0, v3, vcc 1110; SDAG-NEXT: v_cmp_gt_i64_e32 vcc, 0, v[2:3] 1111; SDAG-NEXT: ; implicit-def: $vgpr8 1112; SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc 1113; SDAG-NEXT: v_cndmask_b32_e32 v4, v2, v6, vcc 1114; SDAG-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc 1115; SDAG-NEXT: v_cndmask_b32_e32 v5, v3, v7, vcc 1116; SDAG-NEXT: v_ffbh_u32_e32 v2, v4 1117; SDAG-NEXT: v_add_u32_e32 v2, 32, v2 1118; SDAG-NEXT: v_ffbh_u32_e32 v6, v5 1119; SDAG-NEXT: v_min_u32_e32 v2, v2, v6 1120; SDAG-NEXT: v_ffbh_u32_e32 v6, v0 1121; SDAG-NEXT: v_add_u32_e32 v6, 32, v6 1122; SDAG-NEXT: v_ffbh_u32_e32 v7, v1 1123; SDAG-NEXT: v_min_u32_e32 v6, v6, v7 1124; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 1125; SDAG-NEXT: v_add_u32_e32 v6, 64, v6 1126; SDAG-NEXT: v_cndmask_b32_e32 v7, v6, v2, vcc 1127; SDAG-NEXT: v_sub_u32_e32 v6, 0x80, v7 1128; SDAG-NEXT: v_sub_u32_e32 v2, 0x7f, v7 1129; SDAG-NEXT: v_cmp_gt_i32_e32 vcc, 25, v6 1130; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 1131; SDAG-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 1132; SDAG-NEXT: ; %bb.2: ; %itofp-if-else 1133; SDAG-NEXT: v_add_u32_e32 v4, 0xffffff98, v7 1134; SDAG-NEXT: v_lshlrev_b64 v[0:1], v4, v[0:1] 1135; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v4 1136; SDAG-NEXT: v_cndmask_b32_e32 v8, 0, v0, vcc 1137; SDAG-NEXT: ; implicit-def: $vgpr6 1138; SDAG-NEXT: ; implicit-def: $vgpr0_vgpr1 1139; SDAG-NEXT: ; implicit-def: $vgpr7 1140; SDAG-NEXT: ; implicit-def: $vgpr4_vgpr5 1141; SDAG-NEXT: ; %bb.3: ; %Flow3 1142; SDAG-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 1143; SDAG-NEXT: s_cbranch_execz .LBB4_13 1144; SDAG-NEXT: ; %bb.4: ; %NodeBlock 1145; SDAG-NEXT: v_cmp_lt_i32_e32 vcc, 25, v6 1146; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 1147; SDAG-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 1148; SDAG-NEXT: s_cbranch_execz .LBB4_8 1149; SDAG-NEXT: ; %bb.5: ; %LeafBlock 1150; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 26, v6 1151; SDAG-NEXT: s_and_saveexec_b64 s[12:13], vcc 1152; SDAG-NEXT: s_cbranch_execz .LBB4_7 1153; SDAG-NEXT: ; %bb.6: ; %itofp-sw-default 1154; SDAG-NEXT: v_sub_u32_e32 v12, 0x66, v7 1155; SDAG-NEXT: v_sub_u32_e32 v10, 64, v12 1156; SDAG-NEXT: v_lshrrev_b64 v[8:9], v12, v[0:1] 1157; SDAG-NEXT: v_lshlrev_b64 v[10:11], v10, v[4:5] 1158; SDAG-NEXT: v_sub_u32_e32 v13, 38, v7 1159; SDAG-NEXT: v_or_b32_e32 v11, v9, v11 1160; SDAG-NEXT: v_or_b32_e32 v10, v8, v10 1161; SDAG-NEXT: v_lshrrev_b64 v[8:9], v13, v[4:5] 1162; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v12 1163; SDAG-NEXT: v_add_u32_e32 v14, 26, v7 1164; SDAG-NEXT: v_cndmask_b32_e32 v9, v9, v11, vcc 1165; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v12 1166; SDAG-NEXT: v_cndmask_b32_e32 v8, v8, v10, vcc 1167; SDAG-NEXT: v_lshrrev_b64 v[10:11], v13, v[0:1] 1168; SDAG-NEXT: v_lshlrev_b64 v[12:13], v14, v[4:5] 1169; SDAG-NEXT: v_subrev_u32_e32 v7, 38, v7 1170; SDAG-NEXT: v_cndmask_b32_e64 v15, v8, v0, s[4:5] 1171; SDAG-NEXT: v_lshlrev_b64 v[7:8], v7, v[0:1] 1172; SDAG-NEXT: v_cndmask_b32_e64 v9, v9, v1, s[4:5] 1173; SDAG-NEXT: v_or_b32_e32 v11, v13, v11 1174; SDAG-NEXT: v_or_b32_e32 v10, v12, v10 1175; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v14 1176; SDAG-NEXT: v_lshlrev_b64 v[0:1], v14, v[0:1] 1177; SDAG-NEXT: v_cndmask_b32_e32 v8, v8, v11, vcc 1178; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v14 1179; SDAG-NEXT: v_cndmask_b32_e32 v7, v7, v10, vcc 1180; SDAG-NEXT: v_cndmask_b32_e64 v5, v8, v5, s[4:5] 1181; SDAG-NEXT: v_cndmask_b32_e64 v4, v7, v4, s[4:5] 1182; SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 1183; SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 1184; SDAG-NEXT: v_or_b32_e32 v1, v1, v5 1185; SDAG-NEXT: v_or_b32_e32 v0, v0, v4 1186; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 1187; SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1188; SDAG-NEXT: v_or_b32_e32 v8, v15, v0 1189; SDAG-NEXT: v_mov_b32_e32 v0, v8 1190; SDAG-NEXT: v_mov_b32_e32 v1, v9 1191; SDAG-NEXT: .LBB4_7: ; %Flow1 1192; SDAG-NEXT: s_or_b64 exec, exec, s[12:13] 1193; SDAG-NEXT: .LBB4_8: ; %Flow2 1194; SDAG-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 1195; SDAG-NEXT: ; %bb.9: ; %itofp-sw-bb 1196; SDAG-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 1197; SDAG-NEXT: ; %bb.10: ; %itofp-sw-epilog 1198; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 1199; SDAG-NEXT: v_lshrrev_b32_e32 v4, 2, v0 1200; SDAG-NEXT: v_and_or_b32 v0, v4, 1, v0 1201; SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 1202; SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 1203; SDAG-NEXT: v_and_b32_e32 v4, 0x4000000, v0 1204; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v4 1205; SDAG-NEXT: v_alignbit_b32 v8, v1, v0, 2 1206; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 1207; SDAG-NEXT: ; %bb.11: ; %itofp-if-then20 1208; SDAG-NEXT: v_alignbit_b32 v8, v1, v0, 3 1209; SDAG-NEXT: v_mov_b32_e32 v2, v6 1210; SDAG-NEXT: ; %bb.12: ; %Flow 1211; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 1212; SDAG-NEXT: .LBB4_13: ; %Flow4 1213; SDAG-NEXT: s_or_b64 exec, exec, s[8:9] 1214; SDAG-NEXT: v_and_b32_e32 v0, 0x80000000, v3 1215; SDAG-NEXT: v_lshl_add_u32 v1, v2, 23, 1.0 1216; SDAG-NEXT: v_and_b32_e32 v2, 0x7fffff, v8 1217; SDAG-NEXT: v_or3_b32 v0, v2, v0, v1 1218; SDAG-NEXT: v_cvt_f16_f32_e32 v4, v0 1219; SDAG-NEXT: .LBB4_14: ; %Flow5 1220; SDAG-NEXT: s_or_b64 exec, exec, s[6:7] 1221; SDAG-NEXT: v_mov_b32_e32 v0, v4 1222; SDAG-NEXT: s_setpc_b64 s[30:31] 1223; 1224; GISEL-LABEL: sitofp_i128_to_f16: 1225; GISEL: ; %bb.0: ; %itofp-entry 1226; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1227; GISEL-NEXT: v_or_b32_e32 v4, v0, v2 1228; GISEL-NEXT: v_or_b32_e32 v5, v1, v3 1229; GISEL-NEXT: s_mov_b32 s4, 0 1230; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 1231; GISEL-NEXT: v_mov_b32_e32 v4, s4 1232; GISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc 1233; GISEL-NEXT: s_cbranch_execz .LBB4_14 1234; GISEL-NEXT: ; %bb.1: ; %itofp-if-end 1235; GISEL-NEXT: v_ashrrev_i32_e32 v6, 31, v3 1236; GISEL-NEXT: v_xor_b32_e32 v0, v6, v0 1237; GISEL-NEXT: v_xor_b32_e32 v1, v6, v1 1238; GISEL-NEXT: v_sub_co_u32_e32 v0, vcc, v0, v6 1239; GISEL-NEXT: v_xor_b32_e32 v2, v6, v2 1240; GISEL-NEXT: v_subb_co_u32_e32 v1, vcc, v1, v6, vcc 1241; GISEL-NEXT: v_xor_b32_e32 v3, v6, v3 1242; GISEL-NEXT: v_subb_co_u32_e32 v2, vcc, v2, v6, vcc 1243; GISEL-NEXT: v_ffbh_u32_e32 v5, v0 1244; GISEL-NEXT: v_subb_co_u32_e32 v3, vcc, v3, v6, vcc 1245; GISEL-NEXT: v_ffbh_u32_e32 v4, v1 1246; GISEL-NEXT: v_add_u32_e32 v5, 32, v5 1247; GISEL-NEXT: v_ffbh_u32_e32 v7, v2 1248; GISEL-NEXT: v_min_u32_e32 v4, v4, v5 1249; GISEL-NEXT: v_ffbh_u32_e32 v5, v3 1250; GISEL-NEXT: v_add_u32_e32 v7, 32, v7 1251; GISEL-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[2:3] 1252; GISEL-NEXT: v_add_u32_e32 v4, 64, v4 1253; GISEL-NEXT: v_min_u32_e32 v5, v5, v7 1254; GISEL-NEXT: v_cndmask_b32_e32 v5, v5, v4, vcc 1255; GISEL-NEXT: v_sub_u32_e32 v8, 0x80, v5 1256; GISEL-NEXT: v_sub_u32_e32 v7, 0x7f, v5 1257; GISEL-NEXT: v_cmp_ge_i32_e32 vcc, 24, v8 1258; GISEL-NEXT: ; implicit-def: $vgpr4 1259; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 1260; GISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 1261; GISEL-NEXT: ; %bb.2: ; %itofp-if-else 1262; GISEL-NEXT: v_add_u32_e32 v2, 0xffffff98, v5 1263; GISEL-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 1264; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 1265; GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v0, vcc 1266; GISEL-NEXT: ; implicit-def: $vgpr8 1267; GISEL-NEXT: ; implicit-def: $vgpr0 1268; GISEL-NEXT: ; implicit-def: $vgpr5 1269; GISEL-NEXT: ; implicit-def: $vgpr2 1270; GISEL-NEXT: ; %bb.3: ; %Flow3 1271; GISEL-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 1272; GISEL-NEXT: s_cbranch_execz .LBB4_13 1273; GISEL-NEXT: ; %bb.4: ; %NodeBlock 1274; GISEL-NEXT: v_cmp_le_i32_e32 vcc, 26, v8 1275; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 1276; GISEL-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 1277; GISEL-NEXT: s_cbranch_execz .LBB4_8 1278; GISEL-NEXT: ; %bb.5: ; %LeafBlock 1279; GISEL-NEXT: v_cmp_ne_u32_e32 vcc, 26, v8 1280; GISEL-NEXT: s_and_saveexec_b64 s[12:13], vcc 1281; GISEL-NEXT: s_cbranch_execz .LBB4_7 1282; GISEL-NEXT: ; %bb.6: ; %itofp-sw-default 1283; GISEL-NEXT: v_sub_u32_e32 v4, 0x66, v5 1284; GISEL-NEXT: v_sub_u32_e32 v11, 64, v4 1285; GISEL-NEXT: v_lshrrev_b64 v[9:10], v4, v[0:1] 1286; GISEL-NEXT: v_lshlrev_b64 v[11:12], v11, v[2:3] 1287; GISEL-NEXT: v_add_u32_e32 v13, 0xffffffc0, v4 1288; GISEL-NEXT: v_or_b32_e32 v11, v9, v11 1289; GISEL-NEXT: v_or_b32_e32 v12, v10, v12 1290; GISEL-NEXT: v_lshrrev_b64 v[9:10], v13, v[2:3] 1291; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v4 1292; GISEL-NEXT: v_add_u32_e32 v14, 26, v5 1293; GISEL-NEXT: v_cndmask_b32_e32 v9, v9, v11, vcc 1294; GISEL-NEXT: v_cndmask_b32_e32 v10, v10, v12, vcc 1295; GISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v4 1296; GISEL-NEXT: v_sub_u32_e32 v11, 64, v14 1297; GISEL-NEXT: v_cndmask_b32_e32 v13, v9, v0, vcc 1298; GISEL-NEXT: v_cndmask_b32_e32 v4, v10, v1, vcc 1299; GISEL-NEXT: v_lshrrev_b64 v[9:10], v14, -1 1300; GISEL-NEXT: v_lshlrev_b64 v[11:12], v11, -1 1301; GISEL-NEXT: v_add_u32_e32 v5, 0xffffffda, v5 1302; GISEL-NEXT: v_or_b32_e32 v15, v9, v11 1303; GISEL-NEXT: v_or_b32_e32 v16, v10, v12 1304; GISEL-NEXT: v_lshrrev_b64 v[11:12], v5, -1 1305; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v14 1306; GISEL-NEXT: v_cndmask_b32_e32 v5, v11, v15, vcc 1307; GISEL-NEXT: v_cndmask_b32_e32 v11, v12, v16, vcc 1308; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v14 1309; GISEL-NEXT: v_cndmask_b32_e32 v9, 0, v9, vcc 1310; GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v10, vcc 1311; GISEL-NEXT: v_cndmask_b32_e64 v5, v5, -1, s[4:5] 1312; GISEL-NEXT: v_cndmask_b32_e64 v11, v11, -1, s[4:5] 1313; GISEL-NEXT: v_and_b32_e32 v2, v9, v2 1314; GISEL-NEXT: v_and_b32_e32 v3, v10, v3 1315; GISEL-NEXT: v_and_or_b32 v0, v5, v0, v2 1316; GISEL-NEXT: v_and_or_b32 v1, v11, v1, v3 1317; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 1318; GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1319; GISEL-NEXT: v_or_b32_e32 v3, v13, v0 1320; GISEL-NEXT: v_mov_b32_e32 v0, v3 1321; GISEL-NEXT: v_mov_b32_e32 v1, v4 1322; GISEL-NEXT: v_mov_b32_e32 v2, v5 1323; GISEL-NEXT: v_mov_b32_e32 v3, v6 1324; GISEL-NEXT: .LBB4_7: ; %Flow1 1325; GISEL-NEXT: s_or_b64 exec, exec, s[12:13] 1326; GISEL-NEXT: .LBB4_8: ; %Flow2 1327; GISEL-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 1328; GISEL-NEXT: ; %bb.9: ; %itofp-sw-bb 1329; GISEL-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 1330; GISEL-NEXT: ; %bb.10: ; %itofp-sw-epilog 1331; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 1332; GISEL-NEXT: v_bfe_u32 v2, v0, 2, 1 1333; GISEL-NEXT: v_or_b32_e32 v0, v0, v2 1334; GISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 1335; GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 1336; GISEL-NEXT: v_and_b32_e32 v2, 0x4000000, v0 1337; GISEL-NEXT: v_mov_b32_e32 v3, 0 1338; GISEL-NEXT: v_lshrrev_b64 v[4:5], 2, v[0:1] 1339; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] 1340; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 1341; GISEL-NEXT: ; %bb.11: ; %itofp-if-then20 1342; GISEL-NEXT: v_lshrrev_b64 v[4:5], 3, v[0:1] 1343; GISEL-NEXT: v_mov_b32_e32 v7, v8 1344; GISEL-NEXT: ; %bb.12: ; %Flow 1345; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 1346; GISEL-NEXT: .LBB4_13: ; %Flow4 1347; GISEL-NEXT: s_or_b64 exec, exec, s[8:9] 1348; GISEL-NEXT: v_and_b32_e32 v0, 0x80000000, v6 1349; GISEL-NEXT: v_lshl_add_u32 v1, v7, 23, 1.0 1350; GISEL-NEXT: v_and_b32_e32 v2, 0x7fffff, v4 1351; GISEL-NEXT: v_or3_b32 v0, v2, v0, v1 1352; GISEL-NEXT: v_cvt_f16_f32_e32 v4, v0 1353; GISEL-NEXT: .LBB4_14: ; %Flow5 1354; GISEL-NEXT: s_or_b64 exec, exec, s[6:7] 1355; GISEL-NEXT: v_mov_b32_e32 v0, v4 1356; GISEL-NEXT: s_setpc_b64 s[30:31] 1357 %cvt = sitofp i128 %x to half 1358 ret half %cvt 1359} 1360 1361define half @uitofp_i128_to_f16(i128 %x) { 1362; SDAG-LABEL: uitofp_i128_to_f16: 1363; SDAG: ; %bb.0: ; %itofp-entry 1364; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1365; SDAG-NEXT: v_or_b32_e32 v5, v1, v3 1366; SDAG-NEXT: v_or_b32_e32 v4, v0, v2 1367; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 1368; SDAG-NEXT: v_mov_b32_e32 v4, 0 1369; SDAG-NEXT: s_and_saveexec_b64 s[6:7], vcc 1370; SDAG-NEXT: s_cbranch_execz .LBB5_14 1371; SDAG-NEXT: ; %bb.1: ; %itofp-if-end 1372; SDAG-NEXT: v_ffbh_u32_e32 v4, v2 1373; SDAG-NEXT: v_add_u32_e32 v4, 32, v4 1374; SDAG-NEXT: v_ffbh_u32_e32 v5, v3 1375; SDAG-NEXT: v_min_u32_e32 v4, v4, v5 1376; SDAG-NEXT: v_ffbh_u32_e32 v5, v0 1377; SDAG-NEXT: v_add_u32_e32 v5, 32, v5 1378; SDAG-NEXT: v_ffbh_u32_e32 v6, v1 1379; SDAG-NEXT: v_min_u32_e32 v5, v5, v6 1380; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] 1381; SDAG-NEXT: v_add_u32_e32 v5, 64, v5 1382; SDAG-NEXT: v_cndmask_b32_e32 v6, v5, v4, vcc 1383; SDAG-NEXT: v_sub_u32_e32 v5, 0x80, v6 1384; SDAG-NEXT: v_sub_u32_e32 v4, 0x7f, v6 1385; SDAG-NEXT: v_cmp_gt_i32_e32 vcc, 25, v5 1386; SDAG-NEXT: ; implicit-def: $vgpr7 1387; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 1388; SDAG-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 1389; SDAG-NEXT: ; %bb.2: ; %itofp-if-else 1390; SDAG-NEXT: v_add_u32_e32 v2, 0xffffff98, v6 1391; SDAG-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 1392; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 1393; SDAG-NEXT: v_cndmask_b32_e32 v7, 0, v0, vcc 1394; SDAG-NEXT: ; implicit-def: $vgpr5 1395; SDAG-NEXT: ; implicit-def: $vgpr0_vgpr1 1396; SDAG-NEXT: ; implicit-def: $vgpr6 1397; SDAG-NEXT: ; implicit-def: $vgpr2_vgpr3 1398; SDAG-NEXT: ; %bb.3: ; %Flow3 1399; SDAG-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 1400; SDAG-NEXT: s_cbranch_execz .LBB5_13 1401; SDAG-NEXT: ; %bb.4: ; %NodeBlock 1402; SDAG-NEXT: v_cmp_lt_i32_e32 vcc, 25, v5 1403; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 1404; SDAG-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 1405; SDAG-NEXT: s_cbranch_execz .LBB5_8 1406; SDAG-NEXT: ; %bb.5: ; %LeafBlock 1407; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 26, v5 1408; SDAG-NEXT: s_and_saveexec_b64 s[12:13], vcc 1409; SDAG-NEXT: s_cbranch_execz .LBB5_7 1410; SDAG-NEXT: ; %bb.6: ; %itofp-sw-default 1411; SDAG-NEXT: v_sub_u32_e32 v11, 0x66, v6 1412; SDAG-NEXT: v_sub_u32_e32 v9, 64, v11 1413; SDAG-NEXT: v_lshrrev_b64 v[7:8], v11, v[0:1] 1414; SDAG-NEXT: v_lshlrev_b64 v[9:10], v9, v[2:3] 1415; SDAG-NEXT: v_sub_u32_e32 v12, 38, v6 1416; SDAG-NEXT: v_or_b32_e32 v10, v8, v10 1417; SDAG-NEXT: v_or_b32_e32 v9, v7, v9 1418; SDAG-NEXT: v_lshrrev_b64 v[7:8], v12, v[2:3] 1419; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v11 1420; SDAG-NEXT: v_add_u32_e32 v13, 26, v6 1421; SDAG-NEXT: v_cndmask_b32_e32 v8, v8, v10, vcc 1422; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v11 1423; SDAG-NEXT: v_cndmask_b32_e32 v7, v7, v9, vcc 1424; SDAG-NEXT: v_lshrrev_b64 v[9:10], v12, v[0:1] 1425; SDAG-NEXT: v_lshlrev_b64 v[11:12], v13, v[2:3] 1426; SDAG-NEXT: v_subrev_u32_e32 v6, 38, v6 1427; SDAG-NEXT: v_cndmask_b32_e64 v14, v7, v0, s[4:5] 1428; SDAG-NEXT: v_lshlrev_b64 v[6:7], v6, v[0:1] 1429; SDAG-NEXT: v_cndmask_b32_e64 v8, v8, v1, s[4:5] 1430; SDAG-NEXT: v_or_b32_e32 v10, v12, v10 1431; SDAG-NEXT: v_or_b32_e32 v9, v11, v9 1432; SDAG-NEXT: v_cmp_gt_u32_e32 vcc, 64, v13 1433; SDAG-NEXT: v_lshlrev_b64 v[0:1], v13, v[0:1] 1434; SDAG-NEXT: v_cndmask_b32_e32 v7, v7, v10, vcc 1435; SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13 1436; SDAG-NEXT: v_cndmask_b32_e32 v6, v6, v9, vcc 1437; SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5] 1438; SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5] 1439; SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 1440; SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc 1441; SDAG-NEXT: v_or_b32_e32 v1, v1, v3 1442; SDAG-NEXT: v_or_b32_e32 v0, v0, v2 1443; SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 1444; SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1445; SDAG-NEXT: v_or_b32_e32 v7, v14, v0 1446; SDAG-NEXT: v_mov_b32_e32 v0, v7 1447; SDAG-NEXT: v_mov_b32_e32 v1, v8 1448; SDAG-NEXT: .LBB5_7: ; %Flow1 1449; SDAG-NEXT: s_or_b64 exec, exec, s[12:13] 1450; SDAG-NEXT: .LBB5_8: ; %Flow2 1451; SDAG-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 1452; SDAG-NEXT: ; %bb.9: ; %itofp-sw-bb 1453; SDAG-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 1454; SDAG-NEXT: ; %bb.10: ; %itofp-sw-epilog 1455; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 1456; SDAG-NEXT: v_lshrrev_b32_e32 v2, 2, v0 1457; SDAG-NEXT: v_and_or_b32 v0, v2, 1, v0 1458; SDAG-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 1459; SDAG-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 1460; SDAG-NEXT: v_and_b32_e32 v2, 0x4000000, v0 1461; SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v2 1462; SDAG-NEXT: v_alignbit_b32 v7, v1, v0, 2 1463; SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc 1464; SDAG-NEXT: ; %bb.11: ; %itofp-if-then20 1465; SDAG-NEXT: v_alignbit_b32 v7, v1, v0, 3 1466; SDAG-NEXT: v_mov_b32_e32 v4, v5 1467; SDAG-NEXT: ; %bb.12: ; %Flow 1468; SDAG-NEXT: s_or_b64 exec, exec, s[4:5] 1469; SDAG-NEXT: .LBB5_13: ; %Flow4 1470; SDAG-NEXT: s_or_b64 exec, exec, s[8:9] 1471; SDAG-NEXT: v_and_b32_e32 v0, 0x7fffff, v7 1472; SDAG-NEXT: v_lshl_or_b32 v0, v4, 23, v0 1473; SDAG-NEXT: v_add_u32_e32 v0, 1.0, v0 1474; SDAG-NEXT: v_cvt_f16_f32_e32 v4, v0 1475; SDAG-NEXT: .LBB5_14: ; %Flow5 1476; SDAG-NEXT: s_or_b64 exec, exec, s[6:7] 1477; SDAG-NEXT: v_mov_b32_e32 v0, v4 1478; SDAG-NEXT: s_setpc_b64 s[30:31] 1479; 1480; GISEL-LABEL: uitofp_i128_to_f16: 1481; GISEL: ; %bb.0: ; %itofp-entry 1482; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1483; GISEL-NEXT: v_or_b32_e32 v4, v0, v2 1484; GISEL-NEXT: v_or_b32_e32 v5, v1, v3 1485; GISEL-NEXT: s_mov_b32 s4, 0 1486; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] 1487; GISEL-NEXT: v_mov_b32_e32 v4, s4 1488; GISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc 1489; GISEL-NEXT: s_cbranch_execz .LBB5_14 1490; GISEL-NEXT: ; %bb.1: ; %itofp-if-end 1491; GISEL-NEXT: v_ffbh_u32_e32 v5, v0 1492; GISEL-NEXT: v_ffbh_u32_e32 v4, v1 1493; GISEL-NEXT: v_add_u32_e32 v5, 32, v5 1494; GISEL-NEXT: v_ffbh_u32_e32 v6, v2 1495; GISEL-NEXT: v_min_u32_e32 v4, v4, v5 1496; GISEL-NEXT: v_ffbh_u32_e32 v5, v3 1497; GISEL-NEXT: v_add_u32_e32 v6, 32, v6 1498; GISEL-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[2:3] 1499; GISEL-NEXT: v_add_u32_e32 v4, 64, v4 1500; GISEL-NEXT: v_min_u32_e32 v5, v5, v6 1501; GISEL-NEXT: v_cndmask_b32_e32 v5, v5, v4, vcc 1502; GISEL-NEXT: v_sub_u32_e32 v7, 0x80, v5 1503; GISEL-NEXT: v_sub_u32_e32 v6, 0x7f, v5 1504; GISEL-NEXT: v_cmp_ge_i32_e32 vcc, 24, v7 1505; GISEL-NEXT: ; implicit-def: $vgpr4 1506; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 1507; GISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5] 1508; GISEL-NEXT: ; %bb.2: ; %itofp-if-else 1509; GISEL-NEXT: v_add_u32_e32 v2, 0xffffff98, v5 1510; GISEL-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1] 1511; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2 1512; GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v0, vcc 1513; GISEL-NEXT: ; implicit-def: $vgpr7 1514; GISEL-NEXT: ; implicit-def: $vgpr0 1515; GISEL-NEXT: ; implicit-def: $vgpr5 1516; GISEL-NEXT: ; implicit-def: $vgpr2 1517; GISEL-NEXT: ; %bb.3: ; %Flow3 1518; GISEL-NEXT: s_andn2_saveexec_b64 s[8:9], s[4:5] 1519; GISEL-NEXT: s_cbranch_execz .LBB5_13 1520; GISEL-NEXT: ; %bb.4: ; %NodeBlock 1521; GISEL-NEXT: v_cmp_le_i32_e32 vcc, 26, v7 1522; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 1523; GISEL-NEXT: s_xor_b64 s[10:11], exec, s[4:5] 1524; GISEL-NEXT: s_cbranch_execz .LBB5_8 1525; GISEL-NEXT: ; %bb.5: ; %LeafBlock 1526; GISEL-NEXT: v_cmp_ne_u32_e32 vcc, 26, v7 1527; GISEL-NEXT: s_and_saveexec_b64 s[12:13], vcc 1528; GISEL-NEXT: s_cbranch_execz .LBB5_7 1529; GISEL-NEXT: ; %bb.6: ; %itofp-sw-default 1530; GISEL-NEXT: v_sub_u32_e32 v4, 0x66, v5 1531; GISEL-NEXT: v_sub_u32_e32 v10, 64, v4 1532; GISEL-NEXT: v_lshrrev_b64 v[8:9], v4, v[0:1] 1533; GISEL-NEXT: v_lshlrev_b64 v[10:11], v10, v[2:3] 1534; GISEL-NEXT: v_add_u32_e32 v12, 0xffffffc0, v4 1535; GISEL-NEXT: v_or_b32_e32 v10, v8, v10 1536; GISEL-NEXT: v_or_b32_e32 v11, v9, v11 1537; GISEL-NEXT: v_lshrrev_b64 v[8:9], v12, v[2:3] 1538; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v4 1539; GISEL-NEXT: v_add_u32_e32 v13, 26, v5 1540; GISEL-NEXT: v_cndmask_b32_e32 v8, v8, v10, vcc 1541; GISEL-NEXT: v_cndmask_b32_e32 v9, v9, v11, vcc 1542; GISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v4 1543; GISEL-NEXT: v_sub_u32_e32 v10, 64, v13 1544; GISEL-NEXT: v_cndmask_b32_e32 v12, v8, v0, vcc 1545; GISEL-NEXT: v_cndmask_b32_e32 v4, v9, v1, vcc 1546; GISEL-NEXT: v_lshrrev_b64 v[8:9], v13, -1 1547; GISEL-NEXT: v_lshlrev_b64 v[10:11], v10, -1 1548; GISEL-NEXT: v_add_u32_e32 v5, 0xffffffda, v5 1549; GISEL-NEXT: v_or_b32_e32 v14, v8, v10 1550; GISEL-NEXT: v_or_b32_e32 v15, v9, v11 1551; GISEL-NEXT: v_lshrrev_b64 v[10:11], v5, -1 1552; GISEL-NEXT: v_cmp_gt_u32_e32 vcc, 64, v13 1553; GISEL-NEXT: v_cndmask_b32_e32 v5, v10, v14, vcc 1554; GISEL-NEXT: v_cndmask_b32_e32 v10, v11, v15, vcc 1555; GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], 0, v13 1556; GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v8, vcc 1557; GISEL-NEXT: v_cndmask_b32_e32 v9, 0, v9, vcc 1558; GISEL-NEXT: v_cndmask_b32_e64 v5, v5, -1, s[4:5] 1559; GISEL-NEXT: v_cndmask_b32_e64 v10, v10, -1, s[4:5] 1560; GISEL-NEXT: v_and_b32_e32 v2, v8, v2 1561; GISEL-NEXT: v_and_b32_e32 v3, v9, v3 1562; GISEL-NEXT: v_and_or_b32 v0, v5, v0, v2 1563; GISEL-NEXT: v_and_or_b32 v1, v10, v1, v3 1564; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[0:1] 1565; GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1566; GISEL-NEXT: v_or_b32_e32 v3, v12, v0 1567; GISEL-NEXT: v_mov_b32_e32 v0, v3 1568; GISEL-NEXT: v_mov_b32_e32 v1, v4 1569; GISEL-NEXT: v_mov_b32_e32 v2, v5 1570; GISEL-NEXT: v_mov_b32_e32 v3, v6 1571; GISEL-NEXT: .LBB5_7: ; %Flow1 1572; GISEL-NEXT: s_or_b64 exec, exec, s[12:13] 1573; GISEL-NEXT: .LBB5_8: ; %Flow2 1574; GISEL-NEXT: s_andn2_saveexec_b64 s[4:5], s[10:11] 1575; GISEL-NEXT: ; %bb.9: ; %itofp-sw-bb 1576; GISEL-NEXT: v_lshlrev_b64 v[0:1], 1, v[0:1] 1577; GISEL-NEXT: ; %bb.10: ; %itofp-sw-epilog 1578; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 1579; GISEL-NEXT: v_bfe_u32 v2, v0, 2, 1 1580; GISEL-NEXT: v_or_b32_e32 v0, v0, v2 1581; GISEL-NEXT: v_add_co_u32_e32 v0, vcc, 1, v0 1582; GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc 1583; GISEL-NEXT: v_and_b32_e32 v2, 0x4000000, v0 1584; GISEL-NEXT: v_mov_b32_e32 v3, 0 1585; GISEL-NEXT: v_lshrrev_b64 v[4:5], 2, v[0:1] 1586; GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] 1587; GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc 1588; GISEL-NEXT: ; %bb.11: ; %itofp-if-then20 1589; GISEL-NEXT: v_lshrrev_b64 v[4:5], 3, v[0:1] 1590; GISEL-NEXT: v_mov_b32_e32 v6, v7 1591; GISEL-NEXT: ; %bb.12: ; %Flow 1592; GISEL-NEXT: s_or_b64 exec, exec, s[4:5] 1593; GISEL-NEXT: .LBB5_13: ; %Flow4 1594; GISEL-NEXT: s_or_b64 exec, exec, s[8:9] 1595; GISEL-NEXT: v_lshl_add_u32 v0, v6, 23, 1.0 1596; GISEL-NEXT: v_mov_b32_e32 v1, 0x7fffff 1597; GISEL-NEXT: v_and_or_b32 v0, v4, v1, v0 1598; GISEL-NEXT: v_cvt_f16_f32_e32 v4, v0 1599; GISEL-NEXT: .LBB5_14: ; %Flow5 1600; GISEL-NEXT: s_or_b64 exec, exec, s[6:7] 1601; GISEL-NEXT: v_mov_b32_e32 v0, v4 1602; GISEL-NEXT: s_setpc_b64 s[30:31] 1603 %cvt = uitofp i128 %x to half 1604 ret half %cvt 1605} 1606 1607;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 1608; GCN: {{.*}} 1609