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 14; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1100 -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11 %s 15; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1100 -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11 %s 16 17define double @v_fdiv_f64(double %a, double %b) { 18; GFX6-LABEL: v_fdiv_f64: 19; GFX6: ; %bb.0: 20; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 21; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 22; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1] 23; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 24; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5 25; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11 26; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 27; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 28; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 29; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 30; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 31; GFX6-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 32; GFX6-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 33; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 34; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 35; GFX6-NEXT: s_setpc_b64 s[30:31] 36; 37; GFX8-LABEL: v_fdiv_f64: 38; GFX8: ; %bb.0: 39; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 40; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 41; GFX8-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 42; GFX8-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 43; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 44; GFX8-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1] 45; GFX8-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0 46; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7] 47; GFX8-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7] 48; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9] 49; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11] 50; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 51; GFX8-NEXT: s_setpc_b64 s[30:31] 52; 53; GFX9-LABEL: v_fdiv_f64: 54; GFX9: ; %bb.0: 55; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 56; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 57; GFX9-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 58; GFX9-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 59; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 60; GFX9-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1] 61; GFX9-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0 62; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7] 63; GFX9-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7] 64; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9] 65; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11] 66; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 67; GFX9-NEXT: s_setpc_b64 s[30:31] 68; 69; GFX10-LABEL: v_fdiv_f64: 70; GFX10: ; %bb.0: 71; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 72; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 73; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[2:3], v[2:3], v[0:1] 74; GFX10-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1] 75; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 76; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 77; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 78; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 79; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 80; GFX10-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 81; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 82; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 83; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 84; GFX10-NEXT: s_setpc_b64 s[30:31] 85; 86; GFX11-LABEL: v_fdiv_f64: 87; GFX11: ; %bb.0: 88; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 89; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 90; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[2:3], v[2:3], v[0:1] 91; GFX11-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1] 92; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 93; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 94; GFX11-NEXT: s_waitcnt_depctr 0xfff 95; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 96; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 97; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 98; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 99; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 100; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 101; GFX11-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 102; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 103; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 104; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 105; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 106; GFX11-NEXT: s_setpc_b64 s[30:31] 107 %fdiv = fdiv double %a, %b 108 ret double %fdiv 109} 110 111define double @v_fdiv_f64_afn(double %a, double %b) { 112; GCN-LABEL: v_fdiv_f64_afn: 113; GCN: ; %bb.0: 114; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 115; GCN-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 116; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 117; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 118; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 119; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 120; GCN-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5] 121; GCN-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1] 122; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7] 123; GCN-NEXT: s_setpc_b64 s[30:31] 124; 125; GFX10-LABEL: v_fdiv_f64_afn: 126; GFX10: ; %bb.0: 127; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 128; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 129; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 130; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 131; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 132; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 133; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 134; GFX10-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5] 135; GFX10-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1] 136; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7] 137; GFX10-NEXT: s_setpc_b64 s[30:31] 138; 139; GFX11-LABEL: v_fdiv_f64_afn: 140; GFX11: ; %bb.0: 141; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 142; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 143; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 144; GFX11-NEXT: s_waitcnt_depctr 0xfff 145; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 146; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 147; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 148; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 149; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 150; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 151; GFX11-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5] 152; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 153; GFX11-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1] 154; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7] 155; GFX11-NEXT: s_setpc_b64 s[30:31] 156 %fdiv = fdiv afn double %a, %b 157 ret double %fdiv 158} 159 160define double @v_fdiv_f64_ulp25(double %a, double %b) { 161; GFX6-LABEL: v_fdiv_f64_ulp25: 162; GFX6: ; %bb.0: 163; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 164; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 165; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1] 166; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 167; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5 168; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11 169; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 170; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 171; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 172; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 173; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 174; GFX6-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 175; GFX6-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 176; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 177; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 178; GFX6-NEXT: s_setpc_b64 s[30:31] 179; 180; GFX8-LABEL: v_fdiv_f64_ulp25: 181; GFX8: ; %bb.0: 182; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 183; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 184; GFX8-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 185; GFX8-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 186; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 187; GFX8-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1] 188; GFX8-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0 189; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7] 190; GFX8-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7] 191; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9] 192; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11] 193; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 194; GFX8-NEXT: s_setpc_b64 s[30:31] 195; 196; GFX9-LABEL: v_fdiv_f64_ulp25: 197; GFX9: ; %bb.0: 198; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 199; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 200; GFX9-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 201; GFX9-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 202; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 203; GFX9-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1] 204; GFX9-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0 205; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7] 206; GFX9-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7] 207; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9] 208; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11] 209; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 210; GFX9-NEXT: s_setpc_b64 s[30:31] 211; 212; GFX10-LABEL: v_fdiv_f64_ulp25: 213; GFX10: ; %bb.0: 214; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 215; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 216; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[2:3], v[2:3], v[0:1] 217; GFX10-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1] 218; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 219; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 220; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 221; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 222; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 223; GFX10-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 224; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 225; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 226; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 227; GFX10-NEXT: s_setpc_b64 s[30:31] 228; 229; GFX11-LABEL: v_fdiv_f64_ulp25: 230; GFX11: ; %bb.0: 231; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 232; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 233; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[2:3], v[2:3], v[0:1] 234; GFX11-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1] 235; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 236; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 237; GFX11-NEXT: s_waitcnt_depctr 0xfff 238; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 239; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 240; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 241; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 242; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 243; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 244; GFX11-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 245; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 246; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 247; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 248; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 249; GFX11-NEXT: s_setpc_b64 s[30:31] 250 %fdiv = fdiv double %a, %b, !fpmath !0 251 ret double %fdiv 252} 253 254define double @v_rcp_f64(double %x) { 255; GFX6-LABEL: v_rcp_f64: 256; GFX6: ; %bb.0: 257; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 258; GFX6-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 259; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0 260; GFX6-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 261; GFX6-NEXT: v_mov_b32_e32 v10, 0x3ff00000 262; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9 263; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3 264; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 265; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 266; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 267; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 268; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 269; GFX6-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 270; GFX6-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 271; GFX6-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 272; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 273; GFX6-NEXT: s_setpc_b64 s[30:31] 274; 275; GFX8-LABEL: v_rcp_f64: 276; GFX8: ; %bb.0: 277; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 278; GFX8-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 279; GFX8-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 280; GFX8-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 281; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 282; GFX8-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0 283; GFX8-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0 284; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5] 285; GFX8-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5] 286; GFX8-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7] 287; GFX8-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9] 288; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 289; GFX8-NEXT: s_setpc_b64 s[30:31] 290; 291; GFX9-LABEL: v_rcp_f64: 292; GFX9: ; %bb.0: 293; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 294; GFX9-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 295; GFX9-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 296; GFX9-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 297; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 298; GFX9-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0 299; GFX9-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0 300; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5] 301; GFX9-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5] 302; GFX9-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7] 303; GFX9-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9] 304; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 305; GFX9-NEXT: s_setpc_b64 s[30:31] 306; 307; GFX10-LABEL: v_rcp_f64: 308; GFX10: ; %bb.0: 309; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 310; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 311; GFX10-NEXT: v_div_scale_f64 v[2:3], s4, v[0:1], v[0:1], 1.0 312; GFX10-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0 313; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 314; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 315; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 316; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 317; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 318; GFX10-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 319; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 320; GFX10-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 321; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 322; GFX10-NEXT: s_setpc_b64 s[30:31] 323; 324; GFX11-LABEL: v_rcp_f64: 325; GFX11: ; %bb.0: 326; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 327; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 328; GFX11-NEXT: v_div_scale_f64 v[2:3], null, v[0:1], v[0:1], 1.0 329; GFX11-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0 330; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 331; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 332; GFX11-NEXT: s_waitcnt_depctr 0xfff 333; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 334; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 335; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 336; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 337; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 338; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 339; GFX11-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 340; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 341; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 342; GFX11-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 343; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 344; GFX11-NEXT: s_setpc_b64 s[30:31] 345 %fdiv = fdiv double 1.0, %x 346 ret double %fdiv 347} 348 349define double @v_rcp_f64_arcp(double %x) { 350; GFX6-LABEL: v_rcp_f64_arcp: 351; GFX6: ; %bb.0: 352; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 353; GFX6-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 354; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0 355; GFX6-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 356; GFX6-NEXT: v_mov_b32_e32 v10, 0x3ff00000 357; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9 358; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3 359; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 360; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 361; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 362; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 363; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 364; GFX6-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 365; GFX6-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 366; GFX6-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 367; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 368; GFX6-NEXT: s_setpc_b64 s[30:31] 369; 370; GFX8-LABEL: v_rcp_f64_arcp: 371; GFX8: ; %bb.0: 372; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 373; GFX8-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 374; GFX8-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 375; GFX8-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 376; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 377; GFX8-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0 378; GFX8-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0 379; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5] 380; GFX8-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5] 381; GFX8-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7] 382; GFX8-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9] 383; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 384; GFX8-NEXT: s_setpc_b64 s[30:31] 385; 386; GFX9-LABEL: v_rcp_f64_arcp: 387; GFX9: ; %bb.0: 388; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 389; GFX9-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 390; GFX9-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 391; GFX9-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 392; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 393; GFX9-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0 394; GFX9-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0 395; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5] 396; GFX9-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5] 397; GFX9-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7] 398; GFX9-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9] 399; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 400; GFX9-NEXT: s_setpc_b64 s[30:31] 401; 402; GFX10-LABEL: v_rcp_f64_arcp: 403; GFX10: ; %bb.0: 404; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 405; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 406; GFX10-NEXT: v_div_scale_f64 v[2:3], s4, v[0:1], v[0:1], 1.0 407; GFX10-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0 408; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 409; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 410; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 411; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 412; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 413; GFX10-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 414; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 415; GFX10-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 416; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 417; GFX10-NEXT: s_setpc_b64 s[30:31] 418; 419; GFX11-LABEL: v_rcp_f64_arcp: 420; GFX11: ; %bb.0: 421; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 422; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 423; GFX11-NEXT: v_div_scale_f64 v[2:3], null, v[0:1], v[0:1], 1.0 424; GFX11-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0 425; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 426; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 427; GFX11-NEXT: s_waitcnt_depctr 0xfff 428; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 429; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 430; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 431; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 432; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 433; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 434; GFX11-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 435; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 436; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 437; GFX11-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 438; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 439; GFX11-NEXT: s_setpc_b64 s[30:31] 440 %fdiv = fdiv arcp double 1.0, %x 441 ret double %fdiv 442} 443 444define double @v_rcp_f64_arcp_afn(double %x) { 445; GCN-LABEL: v_rcp_f64_arcp_afn: 446; GCN: ; %bb.0: 447; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 448; GCN-NEXT: v_rcp_f64_e32 v[2:3], v[0:1] 449; GCN-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0 450; GCN-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3] 451; GCN-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0 452; GCN-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3] 453; GCN-NEXT: v_mul_f64 v[4:5], 1.0, v[2:3] 454; GCN-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0 455; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5] 456; GCN-NEXT: s_setpc_b64 s[30:31] 457; 458; GFX10-LABEL: v_rcp_f64_arcp_afn: 459; GFX10: ; %bb.0: 460; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 461; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 462; GFX10-NEXT: v_rcp_f64_e32 v[2:3], v[0:1] 463; GFX10-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0 464; GFX10-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3] 465; GFX10-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0 466; GFX10-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3] 467; GFX10-NEXT: v_mul_f64 v[4:5], 1.0, v[2:3] 468; GFX10-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0 469; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5] 470; GFX10-NEXT: s_setpc_b64 s[30:31] 471; 472; GFX11-LABEL: v_rcp_f64_arcp_afn: 473; GFX11: ; %bb.0: 474; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 475; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 476; GFX11-NEXT: v_rcp_f64_e32 v[2:3], v[0:1] 477; GFX11-NEXT: s_waitcnt_depctr 0xfff 478; GFX11-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0 479; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 480; GFX11-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3] 481; GFX11-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0 482; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 483; GFX11-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3] 484; GFX11-NEXT: v_mul_f64 v[4:5], 1.0, v[2:3] 485; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 486; GFX11-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0 487; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5] 488; GFX11-NEXT: s_setpc_b64 s[30:31] 489 %fdiv = fdiv arcp afn double 1.0, %x 490 ret double %fdiv 491} 492 493define double @v_rcp_f64_ulp25(double %x) { 494; GFX6-LABEL: v_rcp_f64_ulp25: 495; GFX6: ; %bb.0: 496; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 497; GFX6-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 498; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0 499; GFX6-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 500; GFX6-NEXT: v_mov_b32_e32 v10, 0x3ff00000 501; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9 502; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3 503; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 504; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 505; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 506; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 507; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 508; GFX6-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 509; GFX6-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 510; GFX6-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 511; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 512; GFX6-NEXT: s_setpc_b64 s[30:31] 513; 514; GFX8-LABEL: v_rcp_f64_ulp25: 515; GFX8: ; %bb.0: 516; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 517; GFX8-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 518; GFX8-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 519; GFX8-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 520; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 521; GFX8-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0 522; GFX8-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0 523; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5] 524; GFX8-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5] 525; GFX8-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7] 526; GFX8-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9] 527; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 528; GFX8-NEXT: s_setpc_b64 s[30:31] 529; 530; GFX9-LABEL: v_rcp_f64_ulp25: 531; GFX9: ; %bb.0: 532; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 533; GFX9-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0 534; GFX9-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 535; GFX9-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 536; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 537; GFX9-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0 538; GFX9-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0 539; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5] 540; GFX9-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5] 541; GFX9-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7] 542; GFX9-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9] 543; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 544; GFX9-NEXT: s_setpc_b64 s[30:31] 545; 546; GFX10-LABEL: v_rcp_f64_ulp25: 547; GFX10: ; %bb.0: 548; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 549; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 550; GFX10-NEXT: v_div_scale_f64 v[2:3], s4, v[0:1], v[0:1], 1.0 551; GFX10-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0 552; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 553; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 554; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 555; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 556; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 557; GFX10-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 558; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 559; GFX10-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 560; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 561; GFX10-NEXT: s_setpc_b64 s[30:31] 562; 563; GFX11-LABEL: v_rcp_f64_ulp25: 564; GFX11: ; %bb.0: 565; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 566; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 567; GFX11-NEXT: v_div_scale_f64 v[2:3], null, v[0:1], v[0:1], 1.0 568; GFX11-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0 569; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 570; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 571; GFX11-NEXT: s_waitcnt_depctr 0xfff 572; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 573; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 574; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 575; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 576; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5] 577; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 578; GFX11-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5] 579; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9] 580; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 581; GFX11-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7] 582; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0 583; GFX11-NEXT: s_setpc_b64 s[30:31] 584 %fdiv = fdiv double 1.0, %x, !fpmath !0 585 ret double %fdiv 586} 587 588define double @v_fdiv_f64_afn_ulp25(double %a, double %b) { 589; GCN-LABEL: v_fdiv_f64_afn_ulp25: 590; GCN: ; %bb.0: 591; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 592; GCN-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 593; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 594; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 595; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 596; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 597; GCN-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5] 598; GCN-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1] 599; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7] 600; GCN-NEXT: s_setpc_b64 s[30:31] 601; 602; GFX10-LABEL: v_fdiv_f64_afn_ulp25: 603; GFX10: ; %bb.0: 604; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 605; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 606; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 607; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 608; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 609; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 610; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 611; GFX10-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5] 612; GFX10-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1] 613; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7] 614; GFX10-NEXT: s_setpc_b64 s[30:31] 615; 616; GFX11-LABEL: v_fdiv_f64_afn_ulp25: 617; GFX11: ; %bb.0: 618; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 619; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 620; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3] 621; GFX11-NEXT: s_waitcnt_depctr 0xfff 622; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 623; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 624; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 625; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0 626; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 627; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5] 628; GFX11-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5] 629; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 630; GFX11-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1] 631; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7] 632; GFX11-NEXT: s_setpc_b64 s[30:31] 633 %fdiv = fdiv afn double %a, %b, !fpmath !0 634 ret double %fdiv 635} 636 637define double @v_fdiv_f64_arcp_ulp25(double %a, double %b) { 638; GFX6-LABEL: v_fdiv_f64_arcp_ulp25: 639; GFX6: ; %bb.0: 640; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 641; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 642; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1] 643; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 644; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5 645; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11 646; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 647; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 648; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 649; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 650; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 651; GFX6-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 652; GFX6-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 653; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 654; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 655; GFX6-NEXT: s_setpc_b64 s[30:31] 656; 657; GFX8-LABEL: v_fdiv_f64_arcp_ulp25: 658; GFX8: ; %bb.0: 659; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 660; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 661; GFX8-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 662; GFX8-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 663; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 664; GFX8-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1] 665; GFX8-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0 666; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7] 667; GFX8-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7] 668; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9] 669; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11] 670; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 671; GFX8-NEXT: s_setpc_b64 s[30:31] 672; 673; GFX9-LABEL: v_fdiv_f64_arcp_ulp25: 674; GFX9: ; %bb.0: 675; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 676; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1] 677; GFX9-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 678; GFX9-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 679; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 680; GFX9-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1] 681; GFX9-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0 682; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7] 683; GFX9-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7] 684; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9] 685; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11] 686; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 687; GFX9-NEXT: s_setpc_b64 s[30:31] 688; 689; GFX10-LABEL: v_fdiv_f64_arcp_ulp25: 690; GFX10: ; %bb.0: 691; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 692; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 693; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[2:3], v[2:3], v[0:1] 694; GFX10-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1] 695; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 696; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 697; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 698; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 699; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 700; GFX10-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 701; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 702; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 703; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 704; GFX10-NEXT: s_setpc_b64 s[30:31] 705; 706; GFX11-LABEL: v_fdiv_f64_arcp_ulp25: 707; GFX11: ; %bb.0: 708; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 709; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 710; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[2:3], v[2:3], v[0:1] 711; GFX11-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1] 712; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 713; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 714; GFX11-NEXT: s_waitcnt_depctr 0xfff 715; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 716; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 717; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 718; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 719; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 720; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 721; GFX11-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7] 722; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11] 723; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 724; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9] 725; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1] 726; GFX11-NEXT: s_setpc_b64 s[30:31] 727 %fdiv = fdiv arcp double %a, %b, !fpmath !0 728 ret double %fdiv 729} 730 731define <2 x double> @v_fdiv_v2f64(<2 x double> %a, <2 x double> %b) { 732; GFX6-LABEL: v_fdiv_v2f64: 733; GFX6: ; %bb.0: 734; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 735; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 736; GFX6-NEXT: v_div_scale_f64 v[14:15], s[4:5], v[6:7], v[6:7], v[2:3] 737; GFX6-NEXT: v_rcp_f64_e32 v[10:11], v[8:9] 738; GFX6-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[0:1], v[4:5], v[0:1] 739; GFX6-NEXT: v_rcp_f64_e32 v[16:17], v[14:15] 740; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0 741; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v19 742; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11] 743; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v5, v9 744; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0 745; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 746; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11] 747; GFX6-NEXT: v_fma_f64 v[12:13], -v[14:15], v[16:17], 1.0 748; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v7, v15 749; GFX6-NEXT: v_fma_f64 v[12:13], v[16:17], v[12:13], v[16:17] 750; GFX6-NEXT: v_mul_f64 v[16:17], v[18:19], v[10:11] 751; GFX6-NEXT: v_fma_f64 v[18:19], -v[8:9], v[16:17], v[18:19] 752; GFX6-NEXT: v_fma_f64 v[8:9], -v[14:15], v[12:13], 1.0 753; GFX6-NEXT: v_div_fmas_f64 v[10:11], v[18:19], v[10:11], v[16:17] 754; GFX6-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13] 755; GFX6-NEXT: v_div_scale_f64 v[12:13], s[6:7], v[2:3], v[6:7], v[2:3] 756; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[10:11], v[4:5], v[0:1] 757; GFX6-NEXT: v_mul_f64 v[16:17], v[12:13], v[8:9] 758; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v3, v13 759; GFX6-NEXT: v_fma_f64 v[18:19], -v[14:15], v[16:17], v[12:13] 760; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 761; GFX6-NEXT: s_nop 1 762; GFX6-NEXT: v_div_fmas_f64 v[8:9], v[18:19], v[8:9], v[16:17] 763; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[8:9], v[6:7], v[2:3] 764; GFX6-NEXT: s_setpc_b64 s[30:31] 765; 766; GFX8-LABEL: v_fdiv_v2f64: 767; GFX8: ; %bb.0: 768; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 769; GFX8-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 770; GFX8-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3] 771; GFX8-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 772; GFX8-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 773; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 774; GFX8-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 775; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 776; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 777; GFX8-NEXT: v_div_scale_f64 v[18:19], vcc, v[0:1], v[4:5], v[0:1] 778; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 779; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 780; GFX8-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 781; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 782; GFX8-NEXT: v_mul_f64 v[16:17], v[18:19], v[12:13] 783; GFX8-NEXT: v_fma_f64 v[8:9], -v[8:9], v[16:17], v[18:19] 784; GFX8-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[2:3], v[6:7], v[2:3] 785; GFX8-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[16:17] 786; GFX8-NEXT: s_mov_b64 vcc, s[4:5] 787; GFX8-NEXT: v_mul_f64 v[20:21], v[18:19], v[14:15] 788; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 789; GFX8-NEXT: v_fma_f64 v[10:11], -v[10:11], v[20:21], v[18:19] 790; GFX8-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[20:21] 791; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 792; GFX8-NEXT: s_setpc_b64 s[30:31] 793; 794; GFX9-LABEL: v_fdiv_v2f64: 795; GFX9: ; %bb.0: 796; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 797; GFX9-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 798; GFX9-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3] 799; GFX9-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 800; GFX9-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 801; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 802; GFX9-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 803; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 804; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 805; GFX9-NEXT: v_div_scale_f64 v[18:19], vcc, v[0:1], v[4:5], v[0:1] 806; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 807; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 808; GFX9-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 809; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 810; GFX9-NEXT: v_mul_f64 v[16:17], v[18:19], v[12:13] 811; GFX9-NEXT: v_fma_f64 v[8:9], -v[8:9], v[16:17], v[18:19] 812; GFX9-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[2:3], v[6:7], v[2:3] 813; GFX9-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[16:17] 814; GFX9-NEXT: s_mov_b64 vcc, s[4:5] 815; GFX9-NEXT: v_mul_f64 v[20:21], v[18:19], v[14:15] 816; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 817; GFX9-NEXT: v_fma_f64 v[10:11], -v[10:11], v[20:21], v[18:19] 818; GFX9-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[20:21] 819; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 820; GFX9-NEXT: s_setpc_b64 s[30:31] 821; 822; GFX10-LABEL: v_fdiv_v2f64: 823; GFX10: ; %bb.0: 824; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 825; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 826; GFX10-NEXT: v_div_scale_f64 v[8:9], s4, v[4:5], v[4:5], v[0:1] 827; GFX10-NEXT: v_div_scale_f64 v[10:11], s4, v[6:7], v[6:7], v[2:3] 828; GFX10-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1] 829; GFX10-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 830; GFX10-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 831; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 832; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 833; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 834; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 835; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 836; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 837; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 838; GFX10-NEXT: v_div_scale_f64 v[16:17], s4, v[2:3], v[6:7], v[2:3] 839; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 840; GFX10-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13] 841; GFX10-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15] 842; GFX10-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21] 843; GFX10-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17] 844; GFX10-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19] 845; GFX10-NEXT: s_mov_b32 vcc_lo, s4 846; GFX10-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23] 847; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 848; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 849; GFX10-NEXT: s_setpc_b64 s[30:31] 850; 851; GFX11-LABEL: v_fdiv_v2f64: 852; GFX11: ; %bb.0: 853; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 854; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 855; GFX11-NEXT: v_div_scale_f64 v[8:9], null, v[4:5], v[4:5], v[0:1] 856; GFX11-NEXT: v_div_scale_f64 v[10:11], null, v[6:7], v[6:7], v[2:3] 857; GFX11-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1] 858; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 859; GFX11-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 860; GFX11-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 861; GFX11-NEXT: s_waitcnt_depctr 0xfff 862; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 863; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 864; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 865; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 866; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 867; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 868; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 869; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 870; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3) 871; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 872; GFX11-NEXT: v_div_scale_f64 v[16:17], s0, v[2:3], v[6:7], v[2:3] 873; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 874; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 875; GFX11-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13] 876; GFX11-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15] 877; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 878; GFX11-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21] 879; GFX11-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17] 880; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 881; GFX11-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19] 882; GFX11-NEXT: s_mov_b32 vcc_lo, s0 883; GFX11-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23] 884; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 885; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 886; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 887; GFX11-NEXT: s_setpc_b64 s[30:31] 888 %fdiv = fdiv <2 x double> %a, %b 889 ret <2 x double> %fdiv 890} 891 892define <2 x double> @v_fdiv_v2f64_afn(<2 x double> %a, <2 x double> %b) { 893; GCN-LABEL: v_fdiv_v2f64_afn: 894; GCN: ; %bb.0: 895; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 896; GCN-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 897; GCN-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 898; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 899; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 900; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 901; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 902; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 903; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 904; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 905; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 906; GCN-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 907; GCN-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 908; GCN-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 909; GCN-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 910; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 911; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 912; GCN-NEXT: s_setpc_b64 s[30:31] 913; 914; GFX10-LABEL: v_fdiv_v2f64_afn: 915; GFX10: ; %bb.0: 916; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 917; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 918; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 919; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 920; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 921; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 922; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 923; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 924; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 925; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 926; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 927; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 928; GFX10-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 929; GFX10-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 930; GFX10-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 931; GFX10-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 932; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 933; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 934; GFX10-NEXT: s_setpc_b64 s[30:31] 935; 936; GFX11-LABEL: v_fdiv_v2f64_afn: 937; GFX11: ; %bb.0: 938; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 939; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 940; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 941; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 942; GFX11-NEXT: s_waitcnt_depctr 0xfff 943; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 944; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 945; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 946; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 947; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 948; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 949; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 950; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 951; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 952; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 953; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 954; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 955; GFX11-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 956; GFX11-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 957; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 958; GFX11-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 959; GFX11-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 960; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 961; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 962; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 963; GFX11-NEXT: s_setpc_b64 s[30:31] 964 %fdiv = fdiv afn <2 x double> %a, %b 965 ret <2 x double> %fdiv 966} 967 968define <2 x double> @v_fdiv_v2f64_ulp25(<2 x double> %a, <2 x double> %b) { 969; GFX6-LABEL: v_fdiv_v2f64_ulp25: 970; GFX6: ; %bb.0: 971; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 972; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 973; GFX6-NEXT: v_div_scale_f64 v[14:15], s[4:5], v[6:7], v[6:7], v[2:3] 974; GFX6-NEXT: v_rcp_f64_e32 v[10:11], v[8:9] 975; GFX6-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[0:1], v[4:5], v[0:1] 976; GFX6-NEXT: v_rcp_f64_e32 v[16:17], v[14:15] 977; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0 978; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v19 979; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11] 980; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v5, v9 981; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0 982; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 983; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11] 984; GFX6-NEXT: v_fma_f64 v[12:13], -v[14:15], v[16:17], 1.0 985; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v7, v15 986; GFX6-NEXT: v_fma_f64 v[12:13], v[16:17], v[12:13], v[16:17] 987; GFX6-NEXT: v_mul_f64 v[16:17], v[18:19], v[10:11] 988; GFX6-NEXT: v_fma_f64 v[18:19], -v[8:9], v[16:17], v[18:19] 989; GFX6-NEXT: v_fma_f64 v[8:9], -v[14:15], v[12:13], 1.0 990; GFX6-NEXT: v_div_fmas_f64 v[10:11], v[18:19], v[10:11], v[16:17] 991; GFX6-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13] 992; GFX6-NEXT: v_div_scale_f64 v[12:13], s[6:7], v[2:3], v[6:7], v[2:3] 993; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[10:11], v[4:5], v[0:1] 994; GFX6-NEXT: v_mul_f64 v[16:17], v[12:13], v[8:9] 995; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v3, v13 996; GFX6-NEXT: v_fma_f64 v[18:19], -v[14:15], v[16:17], v[12:13] 997; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 998; GFX6-NEXT: s_nop 1 999; GFX6-NEXT: v_div_fmas_f64 v[8:9], v[18:19], v[8:9], v[16:17] 1000; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[8:9], v[6:7], v[2:3] 1001; GFX6-NEXT: s_setpc_b64 s[30:31] 1002; 1003; GFX8-LABEL: v_fdiv_v2f64_ulp25: 1004; GFX8: ; %bb.0: 1005; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1006; GFX8-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 1007; GFX8-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3] 1008; GFX8-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1009; GFX8-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1010; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1011; GFX8-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1012; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1013; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1014; GFX8-NEXT: v_div_scale_f64 v[18:19], vcc, v[0:1], v[4:5], v[0:1] 1015; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1016; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1017; GFX8-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 1018; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 1019; GFX8-NEXT: v_mul_f64 v[16:17], v[18:19], v[12:13] 1020; GFX8-NEXT: v_fma_f64 v[8:9], -v[8:9], v[16:17], v[18:19] 1021; GFX8-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[2:3], v[6:7], v[2:3] 1022; GFX8-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[16:17] 1023; GFX8-NEXT: s_mov_b64 vcc, s[4:5] 1024; GFX8-NEXT: v_mul_f64 v[20:21], v[18:19], v[14:15] 1025; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1026; GFX8-NEXT: v_fma_f64 v[10:11], -v[10:11], v[20:21], v[18:19] 1027; GFX8-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[20:21] 1028; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1029; GFX8-NEXT: s_setpc_b64 s[30:31] 1030; 1031; GFX9-LABEL: v_fdiv_v2f64_ulp25: 1032; GFX9: ; %bb.0: 1033; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1034; GFX9-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 1035; GFX9-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3] 1036; GFX9-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1037; GFX9-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1038; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1039; GFX9-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1040; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1041; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1042; GFX9-NEXT: v_div_scale_f64 v[18:19], vcc, v[0:1], v[4:5], v[0:1] 1043; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1044; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1045; GFX9-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 1046; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 1047; GFX9-NEXT: v_mul_f64 v[16:17], v[18:19], v[12:13] 1048; GFX9-NEXT: v_fma_f64 v[8:9], -v[8:9], v[16:17], v[18:19] 1049; GFX9-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[2:3], v[6:7], v[2:3] 1050; GFX9-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[16:17] 1051; GFX9-NEXT: s_mov_b64 vcc, s[4:5] 1052; GFX9-NEXT: v_mul_f64 v[20:21], v[18:19], v[14:15] 1053; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1054; GFX9-NEXT: v_fma_f64 v[10:11], -v[10:11], v[20:21], v[18:19] 1055; GFX9-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[20:21] 1056; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1057; GFX9-NEXT: s_setpc_b64 s[30:31] 1058; 1059; GFX10-LABEL: v_fdiv_v2f64_ulp25: 1060; GFX10: ; %bb.0: 1061; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1062; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1063; GFX10-NEXT: v_div_scale_f64 v[8:9], s4, v[4:5], v[4:5], v[0:1] 1064; GFX10-NEXT: v_div_scale_f64 v[10:11], s4, v[6:7], v[6:7], v[2:3] 1065; GFX10-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1] 1066; GFX10-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1067; GFX10-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1068; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1069; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1070; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1071; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1072; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1073; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1074; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1075; GFX10-NEXT: v_div_scale_f64 v[16:17], s4, v[2:3], v[6:7], v[2:3] 1076; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1077; GFX10-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13] 1078; GFX10-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15] 1079; GFX10-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21] 1080; GFX10-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17] 1081; GFX10-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19] 1082; GFX10-NEXT: s_mov_b32 vcc_lo, s4 1083; GFX10-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23] 1084; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1085; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1086; GFX10-NEXT: s_setpc_b64 s[30:31] 1087; 1088; GFX11-LABEL: v_fdiv_v2f64_ulp25: 1089; GFX11: ; %bb.0: 1090; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1091; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1092; GFX11-NEXT: v_div_scale_f64 v[8:9], null, v[4:5], v[4:5], v[0:1] 1093; GFX11-NEXT: v_div_scale_f64 v[10:11], null, v[6:7], v[6:7], v[2:3] 1094; GFX11-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1] 1095; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1096; GFX11-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1097; GFX11-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1098; GFX11-NEXT: s_waitcnt_depctr 0xfff 1099; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1100; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1101; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1102; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1103; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1104; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1105; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1106; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1107; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3) 1108; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1109; GFX11-NEXT: v_div_scale_f64 v[16:17], s0, v[2:3], v[6:7], v[2:3] 1110; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1111; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1112; GFX11-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13] 1113; GFX11-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15] 1114; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1115; GFX11-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21] 1116; GFX11-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17] 1117; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1118; GFX11-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19] 1119; GFX11-NEXT: s_mov_b32 vcc_lo, s0 1120; GFX11-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23] 1121; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1122; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1123; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1124; GFX11-NEXT: s_setpc_b64 s[30:31] 1125 %fdiv = fdiv <2 x double> %a, %b, !fpmath !0 1126 ret <2 x double> %fdiv 1127} 1128 1129define <2 x double> @v_rcp_v2f64(<2 x double> %x) { 1130; GFX6-LABEL: v_rcp_v2f64: 1131; GFX6: ; %bb.0: 1132; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1133; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1134; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0 1135; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 1136; GFX6-NEXT: v_mov_b32_e32 v18, 0x3ff00000 1137; GFX6-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1138; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 1139; GFX6-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 1140; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 1141; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0 1142; GFX6-NEXT: v_fma_f64 v[12:13], -v[4:5], v[6:7], 1.0 1143; GFX6-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 1144; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7] 1145; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v18, v9 1146; GFX6-NEXT: v_mul_f64 v[12:13], v[8:9], v[6:7] 1147; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v5 1148; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[12:13], v[8:9] 1149; GFX6-NEXT: v_fma_f64 v[4:5], -v[10:11], v[14:15], 1.0 1150; GFX6-NEXT: v_div_scale_f64 v[16:17], s[6:7], 1.0, v[2:3], 1.0 1151; GFX6-NEXT: v_fma_f64 v[4:5], v[14:15], v[4:5], v[14:15] 1152; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1153; GFX6-NEXT: v_mul_f64 v[14:15], v[16:17], v[4:5] 1154; GFX6-NEXT: v_div_fmas_f64 v[6:7], v[8:9], v[6:7], v[12:13] 1155; GFX6-NEXT: v_fma_f64 v[8:9], -v[10:11], v[14:15], v[16:17] 1156; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v18, v17 1157; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v11 1158; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1159; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[6:7], v[0:1], 1.0 1160; GFX6-NEXT: s_nop 0 1161; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[8:9], v[4:5], v[14:15] 1162; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[4:5], v[2:3], 1.0 1163; GFX6-NEXT: s_setpc_b64 s[30:31] 1164; 1165; GFX8-LABEL: v_rcp_v2f64: 1166; GFX8: ; %bb.0: 1167; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1168; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1169; GFX8-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0 1170; GFX8-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0 1171; GFX8-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1172; GFX8-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1173; GFX8-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1174; GFX8-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1175; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1176; GFX8-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0 1177; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1178; GFX8-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0 1179; GFX8-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0 1180; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9] 1181; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11] 1182; GFX8-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9] 1183; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11] 1184; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13] 1185; GFX8-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17] 1186; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1187; GFX8-NEXT: s_mov_b64 vcc, s[4:5] 1188; GFX8-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1189; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1190; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1191; GFX8-NEXT: s_setpc_b64 s[30:31] 1192; 1193; GFX9-LABEL: v_rcp_v2f64: 1194; GFX9: ; %bb.0: 1195; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1196; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1197; GFX9-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0 1198; GFX9-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0 1199; GFX9-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1200; GFX9-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1201; GFX9-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1202; GFX9-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1203; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1204; GFX9-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0 1205; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1206; GFX9-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0 1207; GFX9-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0 1208; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9] 1209; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11] 1210; GFX9-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9] 1211; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11] 1212; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13] 1213; GFX9-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17] 1214; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1215; GFX9-NEXT: s_mov_b64 vcc, s[4:5] 1216; GFX9-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1217; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1218; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1219; GFX9-NEXT: s_setpc_b64 s[30:31] 1220; 1221; GFX10-LABEL: v_rcp_v2f64: 1222; GFX10: ; %bb.0: 1223; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1224; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1225; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[0:1], v[0:1], 1.0 1226; GFX10-NEXT: v_div_scale_f64 v[6:7], s4, v[2:3], v[2:3], 1.0 1227; GFX10-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0 1228; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1229; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1230; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1231; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1232; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1233; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1234; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1235; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1236; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1237; GFX10-NEXT: v_div_scale_f64 v[12:13], s4, 1.0, v[2:3], 1.0 1238; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1239; GFX10-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9] 1240; GFX10-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11] 1241; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17] 1242; GFX10-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13] 1243; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1244; GFX10-NEXT: s_mov_b32 vcc_lo, s4 1245; GFX10-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1246; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1247; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1248; GFX10-NEXT: s_setpc_b64 s[30:31] 1249; 1250; GFX11-LABEL: v_rcp_v2f64: 1251; GFX11: ; %bb.0: 1252; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1253; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1254; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[0:1], v[0:1], 1.0 1255; GFX11-NEXT: v_div_scale_f64 v[6:7], null, v[2:3], v[2:3], 1.0 1256; GFX11-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0 1257; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1258; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1259; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1260; GFX11-NEXT: s_waitcnt_depctr 0xfff 1261; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1262; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1263; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1264; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1265; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1266; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1267; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1268; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1269; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3) 1270; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1271; GFX11-NEXT: v_div_scale_f64 v[12:13], s0, 1.0, v[2:3], 1.0 1272; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1273; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1274; GFX11-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9] 1275; GFX11-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11] 1276; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1277; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17] 1278; GFX11-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13] 1279; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1280; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1281; GFX11-NEXT: s_mov_b32 vcc_lo, s0 1282; GFX11-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1283; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1284; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1285; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1286; GFX11-NEXT: s_setpc_b64 s[30:31] 1287 %fdiv = fdiv <2 x double> <double 1.0, double 1.0>, %x 1288 ret <2 x double> %fdiv 1289} 1290 1291define <2 x double> @v_rcp_v2f64_arcp(<2 x double> %x) { 1292; GFX6-LABEL: v_rcp_v2f64_arcp: 1293; GFX6: ; %bb.0: 1294; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1295; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1296; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0 1297; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 1298; GFX6-NEXT: v_mov_b32_e32 v18, 0x3ff00000 1299; GFX6-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1300; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 1301; GFX6-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 1302; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 1303; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0 1304; GFX6-NEXT: v_fma_f64 v[12:13], -v[4:5], v[6:7], 1.0 1305; GFX6-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 1306; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7] 1307; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v18, v9 1308; GFX6-NEXT: v_mul_f64 v[12:13], v[8:9], v[6:7] 1309; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v5 1310; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[12:13], v[8:9] 1311; GFX6-NEXT: v_fma_f64 v[4:5], -v[10:11], v[14:15], 1.0 1312; GFX6-NEXT: v_div_scale_f64 v[16:17], s[6:7], 1.0, v[2:3], 1.0 1313; GFX6-NEXT: v_fma_f64 v[4:5], v[14:15], v[4:5], v[14:15] 1314; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1315; GFX6-NEXT: v_mul_f64 v[14:15], v[16:17], v[4:5] 1316; GFX6-NEXT: v_div_fmas_f64 v[6:7], v[8:9], v[6:7], v[12:13] 1317; GFX6-NEXT: v_fma_f64 v[8:9], -v[10:11], v[14:15], v[16:17] 1318; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v18, v17 1319; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v11 1320; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1321; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[6:7], v[0:1], 1.0 1322; GFX6-NEXT: s_nop 0 1323; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[8:9], v[4:5], v[14:15] 1324; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[4:5], v[2:3], 1.0 1325; GFX6-NEXT: s_setpc_b64 s[30:31] 1326; 1327; GFX8-LABEL: v_rcp_v2f64_arcp: 1328; GFX8: ; %bb.0: 1329; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1330; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1331; GFX8-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0 1332; GFX8-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0 1333; GFX8-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1334; GFX8-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1335; GFX8-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1336; GFX8-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1337; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1338; GFX8-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0 1339; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1340; GFX8-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0 1341; GFX8-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0 1342; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9] 1343; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11] 1344; GFX8-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9] 1345; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11] 1346; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13] 1347; GFX8-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17] 1348; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1349; GFX8-NEXT: s_mov_b64 vcc, s[4:5] 1350; GFX8-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1351; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1352; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1353; GFX8-NEXT: s_setpc_b64 s[30:31] 1354; 1355; GFX9-LABEL: v_rcp_v2f64_arcp: 1356; GFX9: ; %bb.0: 1357; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1358; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1359; GFX9-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0 1360; GFX9-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0 1361; GFX9-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1362; GFX9-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1363; GFX9-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1364; GFX9-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1365; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1366; GFX9-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0 1367; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1368; GFX9-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0 1369; GFX9-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0 1370; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9] 1371; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11] 1372; GFX9-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9] 1373; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11] 1374; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13] 1375; GFX9-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17] 1376; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1377; GFX9-NEXT: s_mov_b64 vcc, s[4:5] 1378; GFX9-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1379; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1380; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1381; GFX9-NEXT: s_setpc_b64 s[30:31] 1382; 1383; GFX10-LABEL: v_rcp_v2f64_arcp: 1384; GFX10: ; %bb.0: 1385; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1386; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1387; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[0:1], v[0:1], 1.0 1388; GFX10-NEXT: v_div_scale_f64 v[6:7], s4, v[2:3], v[2:3], 1.0 1389; GFX10-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0 1390; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1391; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1392; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1393; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1394; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1395; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1396; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1397; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1398; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1399; GFX10-NEXT: v_div_scale_f64 v[12:13], s4, 1.0, v[2:3], 1.0 1400; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1401; GFX10-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9] 1402; GFX10-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11] 1403; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17] 1404; GFX10-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13] 1405; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1406; GFX10-NEXT: s_mov_b32 vcc_lo, s4 1407; GFX10-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1408; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1409; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1410; GFX10-NEXT: s_setpc_b64 s[30:31] 1411; 1412; GFX11-LABEL: v_rcp_v2f64_arcp: 1413; GFX11: ; %bb.0: 1414; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1415; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1416; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[0:1], v[0:1], 1.0 1417; GFX11-NEXT: v_div_scale_f64 v[6:7], null, v[2:3], v[2:3], 1.0 1418; GFX11-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0 1419; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1420; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1421; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1422; GFX11-NEXT: s_waitcnt_depctr 0xfff 1423; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1424; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1425; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1426; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1427; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1428; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1429; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1430; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1431; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3) 1432; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1433; GFX11-NEXT: v_div_scale_f64 v[12:13], s0, 1.0, v[2:3], 1.0 1434; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1435; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1436; GFX11-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9] 1437; GFX11-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11] 1438; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1439; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17] 1440; GFX11-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13] 1441; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1442; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1443; GFX11-NEXT: s_mov_b32 vcc_lo, s0 1444; GFX11-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1445; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1446; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1447; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1448; GFX11-NEXT: s_setpc_b64 s[30:31] 1449 %fdiv = fdiv arcp <2 x double> <double 1.0, double 1.0>, %x 1450 ret <2 x double> %fdiv 1451} 1452 1453define <2 x double> @v_rcp_v2f64_arcp_afn(<2 x double> %x) { 1454; GCN-LABEL: v_rcp_v2f64_arcp_afn: 1455; GCN: ; %bb.0: 1456; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1457; GCN-NEXT: v_rcp_f64_e32 v[4:5], v[0:1] 1458; GCN-NEXT: v_rcp_f64_e32 v[6:7], v[2:3] 1459; GCN-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0 1460; GCN-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0 1461; GCN-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5] 1462; GCN-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7] 1463; GCN-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0 1464; GCN-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0 1465; GCN-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5] 1466; GCN-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7] 1467; GCN-NEXT: v_mul_f64 v[8:9], 1.0, v[4:5] 1468; GCN-NEXT: v_mul_f64 v[10:11], 1.0, v[6:7] 1469; GCN-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], 1.0 1470; GCN-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], 1.0 1471; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[8:9] 1472; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[10:11] 1473; GCN-NEXT: s_setpc_b64 s[30:31] 1474; 1475; GFX10-LABEL: v_rcp_v2f64_arcp_afn: 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_rcp_f64_e32 v[4:5], v[0:1] 1480; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[2:3] 1481; GFX10-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0 1482; GFX10-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0 1483; GFX10-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5] 1484; GFX10-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7] 1485; GFX10-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0 1486; GFX10-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0 1487; GFX10-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5] 1488; GFX10-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7] 1489; GFX10-NEXT: v_mul_f64 v[8:9], 1.0, v[4:5] 1490; GFX10-NEXT: v_mul_f64 v[10:11], 1.0, v[6:7] 1491; GFX10-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], 1.0 1492; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], 1.0 1493; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[8:9] 1494; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[10:11] 1495; GFX10-NEXT: s_setpc_b64 s[30:31] 1496; 1497; GFX11-LABEL: v_rcp_v2f64_arcp_afn: 1498; GFX11: ; %bb.0: 1499; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1500; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1501; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[0:1] 1502; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[2:3] 1503; GFX11-NEXT: s_waitcnt_depctr 0xfff 1504; GFX11-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0 1505; GFX11-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0 1506; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1507; GFX11-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5] 1508; GFX11-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7] 1509; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1510; GFX11-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0 1511; GFX11-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0 1512; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1513; GFX11-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5] 1514; GFX11-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7] 1515; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1516; GFX11-NEXT: v_mul_f64 v[8:9], 1.0, v[4:5] 1517; GFX11-NEXT: v_mul_f64 v[10:11], 1.0, v[6:7] 1518; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1519; GFX11-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], 1.0 1520; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], 1.0 1521; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1522; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[8:9] 1523; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[10:11] 1524; GFX11-NEXT: s_setpc_b64 s[30:31] 1525 %fdiv = fdiv arcp afn <2 x double> <double 1.0, double 1.0>, %x 1526 ret <2 x double> %fdiv 1527} 1528 1529define <2 x double> @v_rcp_v2f64_ulp25(<2 x double> %x) { 1530; GFX6-LABEL: v_rcp_v2f64_ulp25: 1531; GFX6: ; %bb.0: 1532; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1533; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1534; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0 1535; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5] 1536; GFX6-NEXT: v_mov_b32_e32 v18, 0x3ff00000 1537; GFX6-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1538; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0 1539; GFX6-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 1540; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7] 1541; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0 1542; GFX6-NEXT: v_fma_f64 v[12:13], -v[4:5], v[6:7], 1.0 1543; GFX6-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 1544; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7] 1545; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v18, v9 1546; GFX6-NEXT: v_mul_f64 v[12:13], v[8:9], v[6:7] 1547; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v5 1548; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[12:13], v[8:9] 1549; GFX6-NEXT: v_fma_f64 v[4:5], -v[10:11], v[14:15], 1.0 1550; GFX6-NEXT: v_div_scale_f64 v[16:17], s[6:7], 1.0, v[2:3], 1.0 1551; GFX6-NEXT: v_fma_f64 v[4:5], v[14:15], v[4:5], v[14:15] 1552; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1553; GFX6-NEXT: v_mul_f64 v[14:15], v[16:17], v[4:5] 1554; GFX6-NEXT: v_div_fmas_f64 v[6:7], v[8:9], v[6:7], v[12:13] 1555; GFX6-NEXT: v_fma_f64 v[8:9], -v[10:11], v[14:15], v[16:17] 1556; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v18, v17 1557; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v11 1558; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1559; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[6:7], v[0:1], 1.0 1560; GFX6-NEXT: s_nop 0 1561; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[8:9], v[4:5], v[14:15] 1562; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[4:5], v[2:3], 1.0 1563; GFX6-NEXT: s_setpc_b64 s[30:31] 1564; 1565; GFX8-LABEL: v_rcp_v2f64_ulp25: 1566; GFX8: ; %bb.0: 1567; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1568; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1569; GFX8-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0 1570; GFX8-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0 1571; GFX8-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1572; GFX8-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1573; GFX8-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1574; GFX8-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1575; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1576; GFX8-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0 1577; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1578; GFX8-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0 1579; GFX8-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0 1580; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9] 1581; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11] 1582; GFX8-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9] 1583; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11] 1584; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13] 1585; GFX8-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17] 1586; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1587; GFX8-NEXT: s_mov_b64 vcc, s[4:5] 1588; GFX8-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1589; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1590; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1591; GFX8-NEXT: s_setpc_b64 s[30:31] 1592; 1593; GFX9-LABEL: v_rcp_v2f64_ulp25: 1594; GFX9: ; %bb.0: 1595; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1596; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0 1597; GFX9-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0 1598; GFX9-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0 1599; GFX9-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1600; GFX9-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1601; GFX9-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1602; GFX9-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1603; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1604; GFX9-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0 1605; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1606; GFX9-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0 1607; GFX9-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0 1608; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9] 1609; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11] 1610; GFX9-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9] 1611; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11] 1612; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13] 1613; GFX9-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17] 1614; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1615; GFX9-NEXT: s_mov_b64 vcc, s[4:5] 1616; GFX9-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1617; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1618; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1619; GFX9-NEXT: s_setpc_b64 s[30:31] 1620; 1621; GFX10-LABEL: v_rcp_v2f64_ulp25: 1622; GFX10: ; %bb.0: 1623; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1624; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1625; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[0:1], v[0:1], 1.0 1626; GFX10-NEXT: v_div_scale_f64 v[6:7], s4, v[2:3], v[2:3], 1.0 1627; GFX10-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0 1628; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1629; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1630; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1631; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1632; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1633; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1634; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1635; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1636; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1637; GFX10-NEXT: v_div_scale_f64 v[12:13], s4, 1.0, v[2:3], 1.0 1638; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1639; GFX10-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9] 1640; GFX10-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11] 1641; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17] 1642; GFX10-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13] 1643; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1644; GFX10-NEXT: s_mov_b32 vcc_lo, s4 1645; GFX10-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1646; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1647; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1648; GFX10-NEXT: s_setpc_b64 s[30:31] 1649; 1650; GFX11-LABEL: v_rcp_v2f64_ulp25: 1651; GFX11: ; %bb.0: 1652; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1653; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1654; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[0:1], v[0:1], 1.0 1655; GFX11-NEXT: v_div_scale_f64 v[6:7], null, v[2:3], v[2:3], 1.0 1656; GFX11-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0 1657; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1658; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1659; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1660; GFX11-NEXT: s_waitcnt_depctr 0xfff 1661; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1662; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1663; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1664; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1665; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1666; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1667; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1668; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1669; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3) 1670; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9] 1671; GFX11-NEXT: v_div_scale_f64 v[12:13], s0, 1.0, v[2:3], 1.0 1672; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11] 1673; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1674; GFX11-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9] 1675; GFX11-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11] 1676; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1677; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17] 1678; GFX11-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13] 1679; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1680; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15] 1681; GFX11-NEXT: s_mov_b32 vcc_lo, s0 1682; GFX11-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19] 1683; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1684; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0 1685; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0 1686; GFX11-NEXT: s_setpc_b64 s[30:31] 1687 %fdiv = fdiv <2 x double> <double 1.0, double 1.0>, %x, !fpmath !0 1688 ret <2 x double> %fdiv 1689} 1690 1691define <2 x double> @v_fdiv_v2f64_afn_ulp25(<2 x double> %a, <2 x double> %b) { 1692; GCN-LABEL: v_fdiv_v2f64_afn_ulp25: 1693; GCN: ; %bb.0: 1694; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1695; GCN-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1696; GCN-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1697; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1698; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1699; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1700; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1701; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1702; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1703; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1704; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1705; GCN-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 1706; GCN-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 1707; GCN-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 1708; GCN-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 1709; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 1710; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 1711; GCN-NEXT: s_setpc_b64 s[30:31] 1712; 1713; GFX10-LABEL: v_fdiv_v2f64_afn_ulp25: 1714; GFX10: ; %bb.0: 1715; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1716; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1717; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1718; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1719; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1720; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1721; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1722; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1723; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1724; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1725; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1726; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1727; GFX10-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 1728; GFX10-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 1729; GFX10-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 1730; GFX10-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 1731; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 1732; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 1733; GFX10-NEXT: s_setpc_b64 s[30:31] 1734; 1735; GFX11-LABEL: v_fdiv_v2f64_afn_ulp25: 1736; GFX11: ; %bb.0: 1737; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1738; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1739; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1740; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1741; GFX11-NEXT: s_waitcnt_depctr 0xfff 1742; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1743; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1744; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1745; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1746; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1747; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1748; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1749; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1750; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1751; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1752; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1753; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1754; GFX11-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 1755; GFX11-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 1756; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1757; GFX11-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 1758; GFX11-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 1759; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1760; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 1761; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 1762; GFX11-NEXT: s_setpc_b64 s[30:31] 1763 %fdiv = fdiv afn <2 x double> %a, %b, !fpmath !0 1764 ret <2 x double> %fdiv 1765} 1766 1767define <2 x double> @v_fdiv_v2f64_arcp_ulp25(<2 x double> %a, <2 x double> %b) { 1768; GFX6-LABEL: v_fdiv_v2f64_arcp_ulp25: 1769; GFX6: ; %bb.0: 1770; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1771; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 1772; GFX6-NEXT: v_div_scale_f64 v[14:15], s[4:5], v[6:7], v[6:7], v[2:3] 1773; GFX6-NEXT: v_rcp_f64_e32 v[10:11], v[8:9] 1774; GFX6-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[0:1], v[4:5], v[0:1] 1775; GFX6-NEXT: v_rcp_f64_e32 v[16:17], v[14:15] 1776; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0 1777; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v19 1778; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11] 1779; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v5, v9 1780; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0 1781; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1782; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11] 1783; GFX6-NEXT: v_fma_f64 v[12:13], -v[14:15], v[16:17], 1.0 1784; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v7, v15 1785; GFX6-NEXT: v_fma_f64 v[12:13], v[16:17], v[12:13], v[16:17] 1786; GFX6-NEXT: v_mul_f64 v[16:17], v[18:19], v[10:11] 1787; GFX6-NEXT: v_fma_f64 v[18:19], -v[8:9], v[16:17], v[18:19] 1788; GFX6-NEXT: v_fma_f64 v[8:9], -v[14:15], v[12:13], 1.0 1789; GFX6-NEXT: v_div_fmas_f64 v[10:11], v[18:19], v[10:11], v[16:17] 1790; GFX6-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13] 1791; GFX6-NEXT: v_div_scale_f64 v[12:13], s[6:7], v[2:3], v[6:7], v[2:3] 1792; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[10:11], v[4:5], v[0:1] 1793; GFX6-NEXT: v_mul_f64 v[16:17], v[12:13], v[8:9] 1794; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v3, v13 1795; GFX6-NEXT: v_fma_f64 v[18:19], -v[14:15], v[16:17], v[12:13] 1796; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5] 1797; GFX6-NEXT: s_nop 1 1798; GFX6-NEXT: v_div_fmas_f64 v[8:9], v[18:19], v[8:9], v[16:17] 1799; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[8:9], v[6:7], v[2:3] 1800; GFX6-NEXT: s_setpc_b64 s[30:31] 1801; 1802; GFX8-LABEL: v_fdiv_v2f64_arcp_ulp25: 1803; GFX8: ; %bb.0: 1804; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1805; GFX8-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 1806; GFX8-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3] 1807; GFX8-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1808; GFX8-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1809; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1810; GFX8-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1811; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1812; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1813; GFX8-NEXT: v_div_scale_f64 v[18:19], vcc, v[0:1], v[4:5], v[0:1] 1814; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1815; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1816; GFX8-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 1817; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 1818; GFX8-NEXT: v_mul_f64 v[16:17], v[18:19], v[12:13] 1819; GFX8-NEXT: v_fma_f64 v[8:9], -v[8:9], v[16:17], v[18:19] 1820; GFX8-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[2:3], v[6:7], v[2:3] 1821; GFX8-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[16:17] 1822; GFX8-NEXT: s_mov_b64 vcc, s[4:5] 1823; GFX8-NEXT: v_mul_f64 v[20:21], v[18:19], v[14:15] 1824; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1825; GFX8-NEXT: v_fma_f64 v[10:11], -v[10:11], v[20:21], v[18:19] 1826; GFX8-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[20:21] 1827; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1828; GFX8-NEXT: s_setpc_b64 s[30:31] 1829; 1830; GFX9-LABEL: v_fdiv_v2f64_arcp_ulp25: 1831; GFX9: ; %bb.0: 1832; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1833; GFX9-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1] 1834; GFX9-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3] 1835; GFX9-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1836; GFX9-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1837; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1838; GFX9-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1839; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1840; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1841; GFX9-NEXT: v_div_scale_f64 v[18:19], vcc, v[0:1], v[4:5], v[0:1] 1842; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1843; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1844; GFX9-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0 1845; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15] 1846; GFX9-NEXT: v_mul_f64 v[16:17], v[18:19], v[12:13] 1847; GFX9-NEXT: v_fma_f64 v[8:9], -v[8:9], v[16:17], v[18:19] 1848; GFX9-NEXT: v_div_scale_f64 v[18:19], s[4:5], v[2:3], v[6:7], v[2:3] 1849; GFX9-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[16:17] 1850; GFX9-NEXT: s_mov_b64 vcc, s[4:5] 1851; GFX9-NEXT: v_mul_f64 v[20:21], v[18:19], v[14:15] 1852; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1853; GFX9-NEXT: v_fma_f64 v[10:11], -v[10:11], v[20:21], v[18:19] 1854; GFX9-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[20:21] 1855; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1856; GFX9-NEXT: s_setpc_b64 s[30:31] 1857; 1858; GFX10-LABEL: v_fdiv_v2f64_arcp_ulp25: 1859; GFX10: ; %bb.0: 1860; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1861; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1862; GFX10-NEXT: v_div_scale_f64 v[8:9], s4, v[4:5], v[4:5], v[0:1] 1863; GFX10-NEXT: v_div_scale_f64 v[10:11], s4, v[6:7], v[6:7], v[2:3] 1864; GFX10-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1] 1865; GFX10-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1866; GFX10-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1867; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1868; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1869; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1870; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1871; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1872; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1873; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1874; GFX10-NEXT: v_div_scale_f64 v[16:17], s4, v[2:3], v[6:7], v[2:3] 1875; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1876; GFX10-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13] 1877; GFX10-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15] 1878; GFX10-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21] 1879; GFX10-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17] 1880; GFX10-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19] 1881; GFX10-NEXT: s_mov_b32 vcc_lo, s4 1882; GFX10-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23] 1883; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1884; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1885; GFX10-NEXT: s_setpc_b64 s[30:31] 1886; 1887; GFX11-LABEL: v_fdiv_v2f64_arcp_ulp25: 1888; GFX11: ; %bb.0: 1889; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1890; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1891; GFX11-NEXT: v_div_scale_f64 v[8:9], null, v[4:5], v[4:5], v[0:1] 1892; GFX11-NEXT: v_div_scale_f64 v[10:11], null, v[6:7], v[6:7], v[2:3] 1893; GFX11-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1] 1894; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1895; GFX11-NEXT: v_rcp_f64_e32 v[12:13], v[8:9] 1896; GFX11-NEXT: v_rcp_f64_e32 v[14:15], v[10:11] 1897; GFX11-NEXT: s_waitcnt_depctr 0xfff 1898; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1899; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1900; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1901; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1902; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1903; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1904; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0 1905; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0 1906; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3) 1907; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13] 1908; GFX11-NEXT: v_div_scale_f64 v[16:17], s0, v[2:3], v[6:7], v[2:3] 1909; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15] 1910; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 1911; GFX11-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13] 1912; GFX11-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15] 1913; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1914; GFX11-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21] 1915; GFX11-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17] 1916; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1917; GFX11-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19] 1918; GFX11-NEXT: s_mov_b32 vcc_lo, s0 1919; GFX11-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23] 1920; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1921; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1] 1922; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3] 1923; GFX11-NEXT: s_setpc_b64 s[30:31] 1924 %fdiv = fdiv arcp <2 x double> %a, %b, !fpmath !0 1925 ret <2 x double> %fdiv 1926} 1927 1928define <2 x double> @v_fdiv_v2f64_arcp_afn_ulp25(<2 x double> %a, <2 x double> %b) { 1929; GCN-LABEL: v_fdiv_v2f64_arcp_afn_ulp25: 1930; GCN: ; %bb.0: 1931; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1932; GCN-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1933; GCN-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1934; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1935; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1936; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1937; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1938; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1939; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1940; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1941; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1942; GCN-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 1943; GCN-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 1944; GCN-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 1945; GCN-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 1946; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 1947; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 1948; GCN-NEXT: s_setpc_b64 s[30:31] 1949; 1950; GFX10-LABEL: v_fdiv_v2f64_arcp_afn_ulp25: 1951; GFX10: ; %bb.0: 1952; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1953; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1954; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1955; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1956; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1957; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1958; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1959; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1960; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1961; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1962; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1963; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1964; GFX10-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 1965; GFX10-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 1966; GFX10-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 1967; GFX10-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 1968; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 1969; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 1970; GFX10-NEXT: s_setpc_b64 s[30:31] 1971; 1972; GFX11-LABEL: v_fdiv_v2f64_arcp_afn_ulp25: 1973; GFX11: ; %bb.0: 1974; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1975; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1976; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5] 1977; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7] 1978; GFX11-NEXT: s_waitcnt_depctr 0xfff 1979; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1980; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1981; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1982; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1983; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1984; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1985; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0 1986; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0 1987; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1988; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9] 1989; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11] 1990; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1991; GFX11-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9] 1992; GFX11-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11] 1993; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1994; GFX11-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1] 1995; GFX11-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3] 1996; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1997; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13] 1998; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15] 1999; GFX11-NEXT: s_setpc_b64 s[30:31] 2000 %fdiv = fdiv afn arcp <2 x double> %a, %b, !fpmath !0 2001 ret <2 x double> %fdiv 2002} 2003 2004!0 = !{float 2.500000e+00} 2005