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