1002 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-TRUE16 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-FAKE16 %s6 7define <2 x float> @v_repeat_divisor_f32_x2(float %x, float %y, float %D) #0 {8; GFX6-LABEL: v_repeat_divisor_f32_x2:9; GFX6: ; %bb.0:10; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX6-NEXT: v_div_scale_f32 v3, s[4:5], v2, v2, v012; GFX6-NEXT: v_rcp_f32_e32 v4, v313; GFX6-NEXT: v_fma_f32 v5, -v3, v4, 1.014; GFX6-NEXT: v_fma_f32 v4, v5, v4, v415; GFX6-NEXT: v_div_scale_f32 v5, vcc, v0, v2, v016; GFX6-NEXT: v_mul_f32_e32 v6, v5, v417; GFX6-NEXT: v_fma_f32 v7, -v3, v6, v518; GFX6-NEXT: v_fma_f32 v6, v7, v4, v619; GFX6-NEXT: v_fma_f32 v3, -v3, v6, v520; GFX6-NEXT: v_div_scale_f32 v5, s[4:5], v2, v2, v121; GFX6-NEXT: v_rcp_f32_e32 v7, v522; GFX6-NEXT: v_div_fmas_f32 v3, v3, v4, v623; GFX6-NEXT: v_div_fixup_f32 v0, v3, v2, v024; GFX6-NEXT: v_div_scale_f32 v4, vcc, v1, v2, v125; GFX6-NEXT: v_fma_f32 v3, -v5, v7, 1.026; GFX6-NEXT: v_fma_f32 v3, v3, v7, v727; GFX6-NEXT: v_mul_f32_e32 v6, v4, v328; GFX6-NEXT: v_fma_f32 v7, -v5, v6, v429; GFX6-NEXT: v_fma_f32 v6, v7, v3, v630; GFX6-NEXT: v_fma_f32 v4, -v5, v6, v431; GFX6-NEXT: v_div_fmas_f32 v3, v4, v3, v632; GFX6-NEXT: v_div_fixup_f32 v1, v3, v2, v133; GFX6-NEXT: s_setpc_b64 s[30:31]34;35; GFX9-LABEL: v_repeat_divisor_f32_x2:36; GFX9: ; %bb.0:37; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)38; GFX9-NEXT: v_div_scale_f32 v3, s[4:5], v2, v2, v039; GFX9-NEXT: v_div_scale_f32 v4, s[4:5], v2, v2, v140; GFX9-NEXT: v_div_scale_f32 v5, vcc, v0, v2, v041; GFX9-NEXT: v_div_scale_f32 v6, s[4:5], v1, v2, v142; GFX9-NEXT: v_rcp_f32_e32 v7, v343; GFX9-NEXT: v_rcp_f32_e32 v8, v444; GFX9-NEXT: v_fma_f32 v9, -v3, v7, 1.045; GFX9-NEXT: v_fma_f32 v7, v9, v7, v746; GFX9-NEXT: v_fma_f32 v10, -v4, v8, 1.047; GFX9-NEXT: v_fma_f32 v8, v10, v8, v848; GFX9-NEXT: v_mul_f32_e32 v9, v5, v749; GFX9-NEXT: v_mul_f32_e32 v10, v6, v850; GFX9-NEXT: v_fma_f32 v11, -v3, v9, v551; GFX9-NEXT: v_fma_f32 v12, -v4, v10, v652; GFX9-NEXT: v_fma_f32 v9, v11, v7, v953; GFX9-NEXT: v_fma_f32 v10, v12, v8, v1054; GFX9-NEXT: v_fma_f32 v3, -v3, v9, v555; GFX9-NEXT: v_fma_f32 v4, -v4, v10, v656; GFX9-NEXT: v_div_fmas_f32 v3, v3, v7, v957; GFX9-NEXT: s_mov_b64 vcc, s[4:5]58; GFX9-NEXT: v_div_fmas_f32 v4, v4, v8, v1059; GFX9-NEXT: v_div_fixup_f32 v0, v3, v2, v060; GFX9-NEXT: v_div_fixup_f32 v1, v4, v2, v161; GFX9-NEXT: s_setpc_b64 s[30:31]62;63; GFX11-LABEL: v_repeat_divisor_f32_x2:64; GFX11: ; %bb.0:65; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX11-NEXT: v_div_scale_f32 v3, null, v2, v2, v067; GFX11-NEXT: v_div_scale_f32 v4, null, v2, v2, v168; GFX11-NEXT: v_div_scale_f32 v9, vcc_lo, v0, v2, v069; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)70; GFX11-NEXT: v_rcp_f32_e32 v5, v371; GFX11-NEXT: v_rcp_f32_e32 v6, v472; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)73; GFX11-NEXT: v_fma_f32 v7, -v3, v5, 1.074; GFX11-NEXT: v_fma_f32 v8, -v4, v6, 1.075; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)76; GFX11-NEXT: v_dual_fmac_f32 v5, v7, v5 :: v_dual_fmac_f32 v6, v8, v677; GFX11-NEXT: v_div_scale_f32 v7, s0, v1, v2, v178; GFX11-NEXT: v_mul_f32_e32 v8, v9, v579; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)80; GFX11-NEXT: v_mul_f32_e32 v10, v7, v681; GFX11-NEXT: v_fma_f32 v11, -v3, v8, v982; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)83; GFX11-NEXT: v_fma_f32 v12, -v4, v10, v784; GFX11-NEXT: v_fmac_f32_e32 v8, v11, v585; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)86; GFX11-NEXT: v_fmac_f32_e32 v10, v12, v687; GFX11-NEXT: v_fma_f32 v3, -v3, v8, v988; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)89; GFX11-NEXT: v_fma_f32 v4, -v4, v10, v790; GFX11-NEXT: v_div_fmas_f32 v3, v3, v5, v891; GFX11-NEXT: s_mov_b32 vcc_lo, s092; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)93; GFX11-NEXT: v_div_fmas_f32 v4, v4, v6, v1094; GFX11-NEXT: v_div_fixup_f32 v0, v3, v2, v095; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)96; GFX11-NEXT: v_div_fixup_f32 v1, v4, v2, v197; GFX11-NEXT: s_setpc_b64 s[30:31]98 %div0 = fdiv float %x, %D99 %div1 = fdiv float %y, %D100 %insert.0 = insertelement <2 x float> poison, float %div0, i32 0101 %insert.1 = insertelement <2 x float> %insert.0, float %div1, i32 1102 ret <2 x float> %insert.1103}104 105define <2 x float> @v_repeat_divisor_f32_x2_arcp(float %x, float %y, float %D) #0 {106; GFX6-LABEL: v_repeat_divisor_f32_x2_arcp:107; GFX6: ; %bb.0:108; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)109; GFX6-NEXT: v_div_scale_f32 v3, s[4:5], v2, v2, 1.0110; GFX6-NEXT: v_rcp_f32_e32 v4, v3111; GFX6-NEXT: v_fma_f32 v5, -v3, v4, 1.0112; GFX6-NEXT: v_fma_f32 v4, v5, v4, v4113; GFX6-NEXT: v_div_scale_f32 v5, vcc, 1.0, v2, 1.0114; GFX6-NEXT: v_mul_f32_e32 v6, v5, v4115; GFX6-NEXT: v_fma_f32 v7, -v3, v6, v5116; GFX6-NEXT: v_fma_f32 v6, v7, v4, v6117; GFX6-NEXT: v_fma_f32 v3, -v3, v6, v5118; GFX6-NEXT: v_div_fmas_f32 v3, v3, v4, v6119; GFX6-NEXT: v_div_fixup_f32 v2, v3, v2, 1.0120; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2121; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2122; GFX6-NEXT: s_setpc_b64 s[30:31]123;124; GFX9-LABEL: v_repeat_divisor_f32_x2_arcp:125; GFX9: ; %bb.0:126; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)127; GFX9-NEXT: v_div_scale_f32 v3, s[4:5], v2, v2, 1.0128; GFX9-NEXT: v_div_scale_f32 v4, vcc, 1.0, v2, 1.0129; GFX9-NEXT: v_rcp_f32_e32 v5, v3130; GFX9-NEXT: v_fma_f32 v6, -v3, v5, 1.0131; GFX9-NEXT: v_fma_f32 v5, v6, v5, v5132; GFX9-NEXT: v_mul_f32_e32 v6, v4, v5133; GFX9-NEXT: v_fma_f32 v7, -v3, v6, v4134; GFX9-NEXT: v_fma_f32 v6, v7, v5, v6135; GFX9-NEXT: v_fma_f32 v3, -v3, v6, v4136; GFX9-NEXT: v_div_fmas_f32 v3, v3, v5, v6137; GFX9-NEXT: v_div_fixup_f32 v2, v3, v2, 1.0138; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2139; GFX9-NEXT: v_mul_f32_e32 v1, v1, v2140; GFX9-NEXT: s_setpc_b64 s[30:31]141;142; GFX11-LABEL: v_repeat_divisor_f32_x2_arcp:143; GFX11: ; %bb.0:144; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)145; GFX11-NEXT: v_div_scale_f32 v3, null, v2, v2, 1.0146; GFX11-NEXT: v_div_scale_f32 v6, vcc_lo, 1.0, v2, 1.0147; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)148; GFX11-NEXT: v_rcp_f32_e32 v4, v3149; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)150; GFX11-NEXT: v_fma_f32 v5, -v3, v4, 1.0151; GFX11-NEXT: v_fmac_f32_e32 v4, v5, v4152; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)153; GFX11-NEXT: v_mul_f32_e32 v5, v6, v4154; GFX11-NEXT: v_fma_f32 v7, -v3, v5, v6155; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)156; GFX11-NEXT: v_fmac_f32_e32 v5, v7, v4157; GFX11-NEXT: v_fma_f32 v3, -v3, v5, v6158; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)159; GFX11-NEXT: v_div_fmas_f32 v3, v3, v4, v5160; GFX11-NEXT: v_div_fixup_f32 v2, v3, v2, 1.0161; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)162; GFX11-NEXT: v_mul_f32_e32 v0, v0, v2163; GFX11-NEXT: v_mul_f32_e32 v1, v1, v2164; GFX11-NEXT: s_setpc_b64 s[30:31]165 %div0 = fdiv arcp float %x, %D166 %div1 = fdiv arcp float %y, %D167 %insert.0 = insertelement <2 x float> poison, float %div0, i32 0168 %insert.1 = insertelement <2 x float> %insert.0, float %div1, i32 1169 ret <2 x float> %insert.1170}171 172define <2 x float> @v_repeat_divisor_f32_x2_arcp_daz(float %x, float %y, float %D) #1 {173; GFX6-LABEL: v_repeat_divisor_f32_x2_arcp_daz:174; GFX6: ; %bb.0:175; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)176; GFX6-NEXT: v_div_scale_f32 v3, s[4:5], v2, v2, 1.0177; GFX6-NEXT: v_rcp_f32_e32 v4, v3178; GFX6-NEXT: v_div_scale_f32 v5, vcc, 1.0, v2, 1.0179; GFX6-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3180; GFX6-NEXT: v_fma_f32 v6, -v3, v4, 1.0181; GFX6-NEXT: v_fma_f32 v4, v6, v4, v4182; GFX6-NEXT: v_mul_f32_e32 v6, v5, v4183; GFX6-NEXT: v_fma_f32 v7, -v3, v6, v5184; GFX6-NEXT: v_fma_f32 v6, v7, v4, v6185; GFX6-NEXT: v_fma_f32 v3, -v3, v6, v5186; GFX6-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0187; GFX6-NEXT: v_div_fmas_f32 v3, v3, v4, v6188; GFX6-NEXT: v_div_fixup_f32 v2, v3, v2, 1.0189; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2190; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2191; GFX6-NEXT: s_setpc_b64 s[30:31]192;193; GFX9-LABEL: v_repeat_divisor_f32_x2_arcp_daz:194; GFX9: ; %bb.0:195; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)196; GFX9-NEXT: v_div_scale_f32 v3, s[4:5], v2, v2, 1.0197; GFX9-NEXT: v_div_scale_f32 v4, vcc, 1.0, v2, 1.0198; GFX9-NEXT: v_rcp_f32_e32 v5, v3199; GFX9-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3200; GFX9-NEXT: v_fma_f32 v6, -v3, v5, 1.0201; GFX9-NEXT: v_fma_f32 v5, v6, v5, v5202; GFX9-NEXT: v_mul_f32_e32 v6, v4, v5203; GFX9-NEXT: v_fma_f32 v7, -v3, v6, v4204; GFX9-NEXT: v_fma_f32 v6, v7, v5, v6205; GFX9-NEXT: v_fma_f32 v3, -v3, v6, v4206; GFX9-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0207; GFX9-NEXT: v_div_fmas_f32 v3, v3, v5, v6208; GFX9-NEXT: v_div_fixup_f32 v2, v3, v2, 1.0209; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2210; GFX9-NEXT: v_mul_f32_e32 v1, v1, v2211; GFX9-NEXT: s_setpc_b64 s[30:31]212;213; GFX11-LABEL: v_repeat_divisor_f32_x2_arcp_daz:214; GFX11: ; %bb.0:215; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)216; GFX11-NEXT: v_div_scale_f32 v3, null, v2, v2, 1.0217; GFX11-NEXT: v_div_scale_f32 v5, vcc_lo, 1.0, v2, 1.0218; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)219; GFX11-NEXT: v_rcp_f32_e32 v4, v3220; GFX11-NEXT: s_denorm_mode 15221; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)222; GFX11-NEXT: v_fma_f32 v6, -v3, v4, 1.0223; GFX11-NEXT: v_fmac_f32_e32 v4, v6, v4224; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)225; GFX11-NEXT: v_mul_f32_e32 v6, v5, v4226; GFX11-NEXT: v_fma_f32 v7, -v3, v6, v5227; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)228; GFX11-NEXT: v_fmac_f32_e32 v6, v7, v4229; GFX11-NEXT: v_fma_f32 v3, -v3, v6, v5230; GFX11-NEXT: s_denorm_mode 12231; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)232; GFX11-NEXT: v_div_fmas_f32 v3, v3, v4, v6233; GFX11-NEXT: v_div_fixup_f32 v2, v3, v2, 1.0234; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)235; GFX11-NEXT: v_mul_f32_e32 v0, v0, v2236; GFX11-NEXT: v_mul_f32_e32 v1, v1, v2237; GFX11-NEXT: s_setpc_b64 s[30:31]238 %div0 = fdiv arcp float %x, %D239 %div1 = fdiv arcp float %y, %D240 %insert.0 = insertelement <2 x float> poison, float %div0, i32 0241 %insert.1 = insertelement <2 x float> %insert.0, float %div1, i32 1242 ret <2 x float> %insert.1243}244 245define <2 x half> @v_repeat_divisor_f16_x2_arcp(half %x, half %y, half %D) #0 {246; GFX6-LABEL: v_repeat_divisor_f16_x2_arcp:247; GFX6: ; %bb.0:248; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2250; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1251; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0252; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2253; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1254; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0255; GFX6-NEXT: v_div_scale_f32 v3, s[4:5], v2, v2, 1.0256; GFX6-NEXT: v_rcp_f32_e32 v4, v3257; GFX6-NEXT: v_div_scale_f32 v5, vcc, 1.0, v2, 1.0258; GFX6-NEXT: v_fma_f32 v6, -v3, v4, 1.0259; GFX6-NEXT: v_fma_f32 v4, v6, v4, v4260; GFX6-NEXT: v_mul_f32_e32 v6, v5, v4261; GFX6-NEXT: v_fma_f32 v7, -v3, v6, v5262; GFX6-NEXT: v_fma_f32 v6, v7, v4, v6263; GFX6-NEXT: v_fma_f32 v3, -v3, v6, v5264; GFX6-NEXT: v_div_fmas_f32 v3, v3, v4, v6265; GFX6-NEXT: v_div_fixup_f32 v2, v3, v2, 1.0266; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2267; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2268; GFX6-NEXT: s_setpc_b64 s[30:31]269;270; GFX9-LABEL: v_repeat_divisor_f16_x2_arcp:271; GFX9: ; %bb.0:272; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)273; GFX9-NEXT: v_rcp_f16_e32 v2, v2274; GFX9-NEXT: v_mul_f16_e32 v0, v0, v2275; GFX9-NEXT: v_mul_f16_e32 v1, v1, v2276; GFX9-NEXT: v_pack_b32_f16 v0, v0, v1277; GFX9-NEXT: s_setpc_b64 s[30:31]278;279; GFX11-TRUE16-LABEL: v_repeat_divisor_f16_x2_arcp:280; GFX11-TRUE16: ; %bb.0:281; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)282; GFX11-TRUE16-NEXT: v_rcp_f16_e32 v2.l, v2.l283; GFX11-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)284; GFX11-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l285; GFX11-TRUE16-NEXT: v_mul_f16_e32 v0.h, v1.l, v2.l286; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)287; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h288; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]289;290; GFX11-FAKE16-LABEL: v_repeat_divisor_f16_x2_arcp:291; GFX11-FAKE16: ; %bb.0:292; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)293; GFX11-FAKE16-NEXT: v_rcp_f16_e32 v2, v2294; GFX11-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)295; GFX11-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v2296; GFX11-FAKE16-NEXT: v_mul_f16_e32 v1, v1, v2297; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)298; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v1299; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]300 %div0 = fdiv arcp half %x, %D301 %div1 = fdiv arcp half %y, %D302 %insert.0 = insertelement <2 x half> poison, half %div0, i32 0303 %insert.1 = insertelement <2 x half> %insert.0, half %div1, i32 1304 ret <2 x half> %insert.1305}306 307define <2 x double> @v_repeat_divisor_f64_x2_arcp(double %x, double %y, double %D) #0 {308; GFX6-LABEL: v_repeat_divisor_f64_x2_arcp:309; GFX6: ; %bb.0:310; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)311; GFX6-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[4:5], v[4:5], 1.0312; GFX6-NEXT: v_rcp_f64_e32 v[8:9], v[6:7]313; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v5, v7314; GFX6-NEXT: v_fma_f64 v[10:11], -v[6:7], v[8:9], 1.0315; GFX6-NEXT: v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]316; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], 1.0, v[4:5], 1.0317; GFX6-NEXT: v_fma_f64 v[12:13], -v[6:7], v[8:9], 1.0318; GFX6-NEXT: s_mov_b32 s4, 0x3ff00000319; GFX6-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]320; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, v11321; GFX6-NEXT: v_mul_f64 v[12:13], v[10:11], v[8:9]322; GFX6-NEXT: s_xor_b64 vcc, s[4:5], vcc323; GFX6-NEXT: v_fma_f64 v[6:7], -v[6:7], v[12:13], v[10:11]324; GFX6-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[8:9], v[12:13]325; GFX6-NEXT: v_div_fixup_f64 v[4:5], v[6:7], v[4:5], 1.0326; GFX6-NEXT: v_mul_f64 v[0:1], v[0:1], v[4:5]327; GFX6-NEXT: v_mul_f64 v[2:3], v[2:3], v[4:5]328; GFX6-NEXT: s_setpc_b64 s[30:31]329;330; GFX9-LABEL: v_repeat_divisor_f64_x2_arcp:331; GFX9: ; %bb.0:332; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)333; GFX9-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[4:5], v[4:5], 1.0334; GFX9-NEXT: v_rcp_f64_e32 v[8:9], v[6:7]335; GFX9-NEXT: v_fma_f64 v[10:11], -v[6:7], v[8:9], 1.0336; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]337; GFX9-NEXT: v_div_scale_f64 v[10:11], vcc, 1.0, v[4:5], 1.0338; GFX9-NEXT: v_fma_f64 v[12:13], -v[6:7], v[8:9], 1.0339; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]340; GFX9-NEXT: v_mul_f64 v[12:13], v[10:11], v[8:9]341; GFX9-NEXT: v_fma_f64 v[6:7], -v[6:7], v[12:13], v[10:11]342; GFX9-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[8:9], v[12:13]343; GFX9-NEXT: v_div_fixup_f64 v[4:5], v[6:7], v[4:5], 1.0344; GFX9-NEXT: v_mul_f64 v[0:1], v[0:1], v[4:5]345; GFX9-NEXT: v_mul_f64 v[2:3], v[2:3], v[4:5]346; GFX9-NEXT: s_setpc_b64 s[30:31]347;348; GFX11-LABEL: v_repeat_divisor_f64_x2_arcp:349; GFX11: ; %bb.0:350; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)351; GFX11-NEXT: v_div_scale_f64 v[6:7], null, v[4:5], v[4:5], 1.0352; GFX11-NEXT: v_div_scale_f64 v[12:13], vcc_lo, 1.0, v[4:5], 1.0353; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)354; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[6:7]355; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)356; GFX11-NEXT: v_fma_f64 v[10:11], -v[6:7], v[8:9], 1.0357; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]358; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)359; GFX11-NEXT: v_fma_f64 v[10:11], -v[6:7], v[8:9], 1.0360; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]361; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)362; GFX11-NEXT: v_mul_f64 v[10:11], v[12:13], v[8:9]363; GFX11-NEXT: v_fma_f64 v[6:7], -v[6:7], v[10:11], v[12:13]364; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)365; GFX11-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[8:9], v[10:11]366; GFX11-NEXT: v_div_fixup_f64 v[4:5], v[6:7], v[4:5], 1.0367; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)368; GFX11-NEXT: v_mul_f64 v[0:1], v[0:1], v[4:5]369; GFX11-NEXT: v_mul_f64 v[2:3], v[2:3], v[4:5]370; GFX11-NEXT: s_setpc_b64 s[30:31]371 %div0 = fdiv arcp double %x, %D372 %div1 = fdiv arcp double %y, %D373 %insert.0 = insertelement <2 x double> poison, double %div0, i32 0374 %insert.1 = insertelement <2 x double> %insert.0, double %div1, i32 1375 ret <2 x double> %insert.1376}377 378define <3 x float> @v_repeat_divisor_f32_x3_arcp(float %x, float %y, float %z, float %D) #0 {379; GFX6-LABEL: v_repeat_divisor_f32_x3_arcp:380; GFX6: ; %bb.0:381; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)382; GFX6-NEXT: v_div_scale_f32 v4, s[4:5], v3, v3, 1.0383; GFX6-NEXT: v_rcp_f32_e32 v5, v4384; GFX6-NEXT: v_fma_f32 v6, -v4, v5, 1.0385; GFX6-NEXT: v_fma_f32 v5, v6, v5, v5386; GFX6-NEXT: v_div_scale_f32 v6, vcc, 1.0, v3, 1.0387; GFX6-NEXT: v_mul_f32_e32 v7, v6, v5388; GFX6-NEXT: v_fma_f32 v8, -v4, v7, v6389; GFX6-NEXT: v_fma_f32 v7, v8, v5, v7390; GFX6-NEXT: v_fma_f32 v4, -v4, v7, v6391; GFX6-NEXT: v_div_fmas_f32 v4, v4, v5, v7392; GFX6-NEXT: v_div_fixup_f32 v3, v4, v3, 1.0393; GFX6-NEXT: v_mul_f32_e32 v0, v0, v3394; GFX6-NEXT: v_mul_f32_e32 v1, v1, v3395; GFX6-NEXT: v_mul_f32_e32 v2, v2, v3396; GFX6-NEXT: s_setpc_b64 s[30:31]397;398; GFX9-LABEL: v_repeat_divisor_f32_x3_arcp:399; GFX9: ; %bb.0:400; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)401; GFX9-NEXT: v_div_scale_f32 v4, s[4:5], v3, v3, 1.0402; GFX9-NEXT: v_div_scale_f32 v5, vcc, 1.0, v3, 1.0403; GFX9-NEXT: v_rcp_f32_e32 v6, v4404; GFX9-NEXT: v_fma_f32 v7, -v4, v6, 1.0405; GFX9-NEXT: v_fma_f32 v6, v7, v6, v6406; GFX9-NEXT: v_mul_f32_e32 v7, v5, v6407; GFX9-NEXT: v_fma_f32 v8, -v4, v7, v5408; GFX9-NEXT: v_fma_f32 v7, v8, v6, v7409; GFX9-NEXT: v_fma_f32 v4, -v4, v7, v5410; GFX9-NEXT: v_div_fmas_f32 v4, v4, v6, v7411; GFX9-NEXT: v_div_fixup_f32 v3, v4, v3, 1.0412; GFX9-NEXT: v_mul_f32_e32 v0, v0, v3413; GFX9-NEXT: v_mul_f32_e32 v1, v1, v3414; GFX9-NEXT: v_mul_f32_e32 v2, v2, v3415; GFX9-NEXT: s_setpc_b64 s[30:31]416;417; GFX11-LABEL: v_repeat_divisor_f32_x3_arcp:418; GFX11: ; %bb.0:419; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)420; GFX11-NEXT: v_div_scale_f32 v4, null, v3, v3, 1.0421; GFX11-NEXT: v_div_scale_f32 v7, vcc_lo, 1.0, v3, 1.0422; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)423; GFX11-NEXT: v_rcp_f32_e32 v5, v4424; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)425; GFX11-NEXT: v_fma_f32 v6, -v4, v5, 1.0426; GFX11-NEXT: v_fmac_f32_e32 v5, v6, v5427; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)428; GFX11-NEXT: v_mul_f32_e32 v6, v7, v5429; GFX11-NEXT: v_fma_f32 v8, -v4, v6, v7430; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)431; GFX11-NEXT: v_fmac_f32_e32 v6, v8, v5432; GFX11-NEXT: v_fma_f32 v4, -v4, v6, v7433; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)434; GFX11-NEXT: v_div_fmas_f32 v4, v4, v5, v6435; GFX11-NEXT: v_div_fixup_f32 v3, v4, v3, 1.0436; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)437; GFX11-NEXT: v_mul_f32_e32 v0, v0, v3438; GFX11-NEXT: v_mul_f32_e32 v1, v1, v3439; GFX11-NEXT: v_mul_f32_e32 v2, v2, v3440; GFX11-NEXT: s_setpc_b64 s[30:31]441 %div0 = fdiv arcp float %x, %D442 %div1 = fdiv arcp float %y, %D443 %div2 = fdiv arcp float %z, %D444 %insert.0 = insertelement <3 x float> poison, float %div0, i32 0445 %insert.1 = insertelement <3 x float> %insert.0, float %div1, i32 1446 %insert.2 = insertelement <3 x float> %insert.1, float %div2, i32 2447 ret <3 x float> %insert.2448}449 450define <4 x float> @v_repeat_divisor_f32_x4_arcp(float %x, float %y, float %z, float %w, float %D) #0 {451; GFX6-LABEL: v_repeat_divisor_f32_x4_arcp:452; GFX6: ; %bb.0:453; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX6-NEXT: v_div_scale_f32 v5, s[4:5], v4, v4, 1.0455; GFX6-NEXT: v_rcp_f32_e32 v6, v5456; GFX6-NEXT: v_fma_f32 v7, -v5, v6, 1.0457; GFX6-NEXT: v_fma_f32 v6, v7, v6, v6458; GFX6-NEXT: v_div_scale_f32 v7, vcc, 1.0, v4, 1.0459; GFX6-NEXT: v_mul_f32_e32 v8, v7, v6460; GFX6-NEXT: v_fma_f32 v9, -v5, v8, v7461; GFX6-NEXT: v_fma_f32 v8, v9, v6, v8462; GFX6-NEXT: v_fma_f32 v5, -v5, v8, v7463; GFX6-NEXT: v_div_fmas_f32 v5, v5, v6, v8464; GFX6-NEXT: v_div_fixup_f32 v4, v5, v4, 1.0465; GFX6-NEXT: v_mul_f32_e32 v0, v0, v4466; GFX6-NEXT: v_mul_f32_e32 v1, v1, v4467; GFX6-NEXT: v_mul_f32_e32 v2, v2, v4468; GFX6-NEXT: v_mul_f32_e32 v3, v3, v4469; GFX6-NEXT: s_setpc_b64 s[30:31]470;471; GFX9-LABEL: v_repeat_divisor_f32_x4_arcp:472; GFX9: ; %bb.0:473; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)474; GFX9-NEXT: v_div_scale_f32 v5, s[4:5], v4, v4, 1.0475; GFX9-NEXT: v_div_scale_f32 v6, vcc, 1.0, v4, 1.0476; GFX9-NEXT: v_rcp_f32_e32 v7, v5477; GFX9-NEXT: v_fma_f32 v8, -v5, v7, 1.0478; GFX9-NEXT: v_fma_f32 v7, v8, v7, v7479; GFX9-NEXT: v_mul_f32_e32 v8, v6, v7480; GFX9-NEXT: v_fma_f32 v9, -v5, v8, v6481; GFX9-NEXT: v_fma_f32 v8, v9, v7, v8482; GFX9-NEXT: v_fma_f32 v5, -v5, v8, v6483; GFX9-NEXT: v_div_fmas_f32 v5, v5, v7, v8484; GFX9-NEXT: v_div_fixup_f32 v4, v5, v4, 1.0485; GFX9-NEXT: v_mul_f32_e32 v0, v0, v4486; GFX9-NEXT: v_mul_f32_e32 v1, v1, v4487; GFX9-NEXT: v_mul_f32_e32 v2, v2, v4488; GFX9-NEXT: v_mul_f32_e32 v3, v3, v4489; GFX9-NEXT: s_setpc_b64 s[30:31]490;491; GFX11-LABEL: v_repeat_divisor_f32_x4_arcp:492; GFX11: ; %bb.0:493; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)494; GFX11-NEXT: v_div_scale_f32 v5, null, v4, v4, 1.0495; GFX11-NEXT: v_div_scale_f32 v8, vcc_lo, 1.0, v4, 1.0496; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)497; GFX11-NEXT: v_rcp_f32_e32 v6, v5498; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)499; GFX11-NEXT: v_fma_f32 v7, -v5, v6, 1.0500; GFX11-NEXT: v_fmac_f32_e32 v6, v7, v6501; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)502; GFX11-NEXT: v_mul_f32_e32 v7, v8, v6503; GFX11-NEXT: v_fma_f32 v9, -v5, v7, v8504; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)505; GFX11-NEXT: v_fmac_f32_e32 v7, v9, v6506; GFX11-NEXT: v_fma_f32 v5, -v5, v7, v8507; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)508; GFX11-NEXT: v_div_fmas_f32 v5, v5, v6, v7509; GFX11-NEXT: v_div_fixup_f32 v4, v5, v4, 1.0510; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)511; GFX11-NEXT: v_mul_f32_e32 v0, v0, v4512; GFX11-NEXT: v_mul_f32_e32 v1, v1, v4513; GFX11-NEXT: v_mul_f32_e32 v2, v2, v4514; GFX11-NEXT: v_mul_f32_e32 v3, v3, v4515; GFX11-NEXT: s_setpc_b64 s[30:31]516 %div0 = fdiv arcp float %x, %D517 %div1 = fdiv arcp float %y, %D518 %div2 = fdiv arcp float %z, %D519 %div3 = fdiv arcp float %w, %D520 %insert.0 = insertelement <4 x float> poison, float %div0, i32 0521 %insert.1 = insertelement <4 x float> %insert.0, float %div1, i32 1522 %insert.2 = insertelement <4 x float> %insert.1, float %div2, i32 2523 %insert.3 = insertelement <4 x float> %insert.2, float %div3, i32 3524 ret <4 x float> %insert.3525}526 527define <3 x half> @v_repeat_divisor_f16_x3_arcp(half %x, half %y, half %z, half %D) #0 {528; GFX6-LABEL: v_repeat_divisor_f16_x3_arcp:529; GFX6: ; %bb.0:530; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)531; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3532; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2533; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1534; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0535; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3536; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2537; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1538; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0539; GFX6-NEXT: v_div_scale_f32 v4, s[4:5], v3, v3, 1.0540; GFX6-NEXT: v_rcp_f32_e32 v5, v4541; GFX6-NEXT: v_fma_f32 v6, -v4, v5, 1.0542; GFX6-NEXT: v_fma_f32 v5, v6, v5, v5543; GFX6-NEXT: v_div_scale_f32 v6, vcc, 1.0, v3, 1.0544; GFX6-NEXT: v_mul_f32_e32 v7, v6, v5545; GFX6-NEXT: v_fma_f32 v8, -v4, v7, v6546; GFX6-NEXT: v_fma_f32 v7, v8, v5, v7547; GFX6-NEXT: v_fma_f32 v4, -v4, v7, v6548; GFX6-NEXT: v_div_fmas_f32 v4, v4, v5, v7549; GFX6-NEXT: v_div_fixup_f32 v3, v4, v3, 1.0550; GFX6-NEXT: v_mul_f32_e32 v0, v0, v3551; GFX6-NEXT: v_mul_f32_e32 v1, v1, v3552; GFX6-NEXT: v_mul_f32_e32 v2, v2, v3553; GFX6-NEXT: s_setpc_b64 s[30:31]554;555; GFX9-LABEL: v_repeat_divisor_f16_x3_arcp:556; GFX9: ; %bb.0:557; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)558; GFX9-NEXT: v_rcp_f16_e32 v3, v3559; GFX9-NEXT: v_mul_f16_e32 v0, v0, v3560; GFX9-NEXT: v_mul_f16_e32 v4, v1, v3561; GFX9-NEXT: v_mul_f16_e32 v1, v2, v3562; GFX9-NEXT: v_pack_b32_f16 v0, v0, v4563; GFX9-NEXT: s_setpc_b64 s[30:31]564;565; GFX11-TRUE16-LABEL: v_repeat_divisor_f16_x3_arcp:566; GFX11-TRUE16: ; %bb.0:567; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)568; GFX11-TRUE16-NEXT: v_rcp_f16_e32 v3.l, v3.l569; GFX11-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)570; GFX11-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v3.l571; GFX11-TRUE16-NEXT: v_mul_f16_e32 v0.h, v1.l, v3.l572; GFX11-TRUE16-NEXT: v_mul_f16_e32 v1.l, v2.l, v3.l573; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)574; GFX11-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h575; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]576;577; GFX11-FAKE16-LABEL: v_repeat_divisor_f16_x3_arcp:578; GFX11-FAKE16: ; %bb.0:579; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)580; GFX11-FAKE16-NEXT: v_rcp_f16_e32 v3, v3581; GFX11-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)582; GFX11-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v3583; GFX11-FAKE16-NEXT: v_mul_f16_e32 v1, v1, v3584; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)585; GFX11-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v1586; GFX11-FAKE16-NEXT: v_mul_f16_e32 v1, v2, v3587; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]588 %div0 = fdiv arcp half %x, %D589 %div1 = fdiv arcp half %y, %D590 %div2 = fdiv arcp half %z, %D591 %insert.0 = insertelement <3 x half> poison, half %div0, i32 0592 %insert.1 = insertelement <3 x half> %insert.0, half %div1, i32 1593 %insert.2 = insertelement <3 x half> %insert.1, half %div2, i32 2594 ret <3 x half> %insert.2595}596 597define <4 x float> @v_repeat_divisor_v2f32_x2(<2 x float> %x, <2 x float> %y, <2 x float> %D) #0 {598; GFX6-LABEL: v_repeat_divisor_v2f32_x2:599; GFX6: ; %bb.0:600; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)601; GFX6-NEXT: v_div_scale_f32 v6, s[4:5], v4, v4, 1.0602; GFX6-NEXT: v_rcp_f32_e32 v7, v6603; GFX6-NEXT: v_fma_f32 v8, -v6, v7, 1.0604; GFX6-NEXT: v_fma_f32 v7, v8, v7, v7605; GFX6-NEXT: v_div_scale_f32 v8, vcc, 1.0, v4, 1.0606; GFX6-NEXT: v_mul_f32_e32 v9, v8, v7607; GFX6-NEXT: v_fma_f32 v10, -v6, v9, v8608; GFX6-NEXT: v_fma_f32 v9, v10, v7, v9609; GFX6-NEXT: v_fma_f32 v6, -v6, v9, v8610; GFX6-NEXT: v_div_scale_f32 v8, s[4:5], v5, v5, 1.0611; GFX6-NEXT: v_rcp_f32_e32 v10, v8612; GFX6-NEXT: v_div_fmas_f32 v6, v6, v7, v9613; GFX6-NEXT: v_div_fixup_f32 v4, v6, v4, 1.0614; GFX6-NEXT: v_div_scale_f32 v7, vcc, 1.0, v5, 1.0615; GFX6-NEXT: v_fma_f32 v6, -v8, v10, 1.0616; GFX6-NEXT: v_fma_f32 v6, v6, v10, v10617; GFX6-NEXT: v_mul_f32_e32 v9, v7, v6618; GFX6-NEXT: v_fma_f32 v10, -v8, v9, v7619; GFX6-NEXT: v_fma_f32 v9, v10, v6, v9620; GFX6-NEXT: v_fma_f32 v7, -v8, v9, v7621; GFX6-NEXT: v_div_fmas_f32 v6, v7, v6, v9622; GFX6-NEXT: v_div_fixup_f32 v5, v6, v5, 1.0623; GFX6-NEXT: v_mul_f32_e32 v0, v0, v4624; GFX6-NEXT: v_mul_f32_e32 v1, v1, v5625; GFX6-NEXT: v_mul_f32_e32 v2, v2, v4626; GFX6-NEXT: v_mul_f32_e32 v3, v3, v5627; GFX6-NEXT: s_setpc_b64 s[30:31]628;629; GFX9-LABEL: v_repeat_divisor_v2f32_x2:630; GFX9: ; %bb.0:631; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)632; GFX9-NEXT: v_div_scale_f32 v6, s[4:5], v4, v4, 1.0633; GFX9-NEXT: v_div_scale_f32 v7, s[4:5], v5, v5, 1.0634; GFX9-NEXT: v_div_scale_f32 v8, vcc, 1.0, v4, 1.0635; GFX9-NEXT: v_div_scale_f32 v9, s[4:5], 1.0, v5, 1.0636; GFX9-NEXT: v_rcp_f32_e32 v10, v6637; GFX9-NEXT: v_rcp_f32_e32 v11, v7638; GFX9-NEXT: v_fma_f32 v12, -v6, v10, 1.0639; GFX9-NEXT: v_fma_f32 v10, v12, v10, v10640; GFX9-NEXT: v_fma_f32 v13, -v7, v11, 1.0641; GFX9-NEXT: v_fma_f32 v11, v13, v11, v11642; GFX9-NEXT: v_mul_f32_e32 v12, v8, v10643; GFX9-NEXT: v_mul_f32_e32 v13, v9, v11644; GFX9-NEXT: v_fma_f32 v14, -v6, v12, v8645; GFX9-NEXT: v_fma_f32 v15, -v7, v13, v9646; GFX9-NEXT: v_fma_f32 v12, v14, v10, v12647; GFX9-NEXT: v_fma_f32 v6, -v6, v12, v8648; GFX9-NEXT: v_fma_f32 v8, v15, v11, v13649; GFX9-NEXT: v_div_fmas_f32 v6, v6, v10, v12650; GFX9-NEXT: v_fma_f32 v7, -v7, v8, v9651; GFX9-NEXT: s_mov_b64 vcc, s[4:5]652; GFX9-NEXT: v_div_fmas_f32 v7, v7, v11, v8653; GFX9-NEXT: v_div_fixup_f32 v4, v6, v4, 1.0654; GFX9-NEXT: v_mul_f32_e32 v0, v0, v4655; GFX9-NEXT: v_mul_f32_e32 v2, v2, v4656; GFX9-NEXT: v_div_fixup_f32 v5, v7, v5, 1.0657; GFX9-NEXT: v_mul_f32_e32 v1, v1, v5658; GFX9-NEXT: v_mul_f32_e32 v3, v3, v5659; GFX9-NEXT: s_setpc_b64 s[30:31]660;661; GFX11-LABEL: v_repeat_divisor_v2f32_x2:662; GFX11: ; %bb.0:663; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)664; GFX11-NEXT: v_div_scale_f32 v6, null, v4, v4, 1.0665; GFX11-NEXT: v_div_scale_f32 v7, null, v5, v5, 1.0666; GFX11-NEXT: v_div_scale_f32 v12, vcc_lo, 1.0, v4, 1.0667; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)668; GFX11-NEXT: v_rcp_f32_e32 v8, v6669; GFX11-NEXT: v_rcp_f32_e32 v9, v7670; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)671; GFX11-NEXT: v_fma_f32 v10, -v6, v8, 1.0672; GFX11-NEXT: v_fma_f32 v11, -v7, v9, 1.0673; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)674; GFX11-NEXT: v_dual_fmac_f32 v8, v10, v8 :: v_dual_fmac_f32 v9, v11, v9675; GFX11-NEXT: v_div_scale_f32 v10, s0, 1.0, v5, 1.0676; GFX11-NEXT: v_mul_f32_e32 v11, v12, v8677; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)678; GFX11-NEXT: v_fma_f32 v14, -v6, v11, v12679; GFX11-NEXT: v_fmac_f32_e32 v11, v14, v8680; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)681; GFX11-NEXT: v_fma_f32 v6, -v6, v11, v12682; GFX11-NEXT: v_div_fmas_f32 v6, v6, v8, v11683; GFX11-NEXT: s_mov_b32 vcc_lo, s0684; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)685; GFX11-NEXT: v_div_fixup_f32 v4, v6, v4, 1.0686; GFX11-NEXT: v_dual_mul_f32 v13, v10, v9 :: v_dual_mul_f32 v0, v0, v4687; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)688; GFX11-NEXT: v_fma_f32 v15, -v7, v13, v10689; GFX11-NEXT: v_dual_mul_f32 v2, v2, v4 :: v_dual_fmac_f32 v13, v15, v9690; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)691; GFX11-NEXT: v_fma_f32 v7, -v7, v13, v10692; GFX11-NEXT: v_div_fmas_f32 v7, v7, v9, v13693; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)694; GFX11-NEXT: v_div_fixup_f32 v5, v7, v5, 1.0695; GFX11-NEXT: v_mul_f32_e32 v1, v1, v5696; GFX11-NEXT: v_mul_f32_e32 v3, v3, v5697; GFX11-NEXT: s_setpc_b64 s[30:31]698 %div0 = fdiv arcp <2 x float> %x, %D699 %div1 = fdiv arcp <2 x float> %y, %D700 %shuffle = shufflevector <2 x float> %div0, <2 x float> %div1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>701 ret <4 x float> %shuffle702}703 704define <2 x float> @v_repeat_divisor_f32_x2_ulp25(float %x, float %y, float %D) #0 {705; GFX6-LABEL: v_repeat_divisor_f32_x2_ulp25:706; GFX6: ; %bb.0:707; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)708; GFX6-NEXT: s_mov_b32 s4, 0x7f800000709; GFX6-NEXT: v_frexp_mant_f32_e32 v3, v2710; GFX6-NEXT: v_cmp_lt_f32_e64 vcc, |v2|, s4711; GFX6-NEXT: v_cndmask_b32_e32 v3, v2, v3, vcc712; GFX6-NEXT: v_rcp_f32_e32 v3, v3713; GFX6-NEXT: v_frexp_exp_i32_f32_e32 v2, v2714; GFX6-NEXT: v_sub_i32_e32 v2, vcc, 0, v2715; GFX6-NEXT: v_ldexp_f32_e32 v2, v3, v2716; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2717; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2718; GFX6-NEXT: s_setpc_b64 s[30:31]719;720; GFX9-LABEL: v_repeat_divisor_f32_x2_ulp25:721; GFX9: ; %bb.0:722; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)723; GFX9-NEXT: v_frexp_mant_f32_e32 v3, v2724; GFX9-NEXT: v_rcp_f32_e32 v3, v3725; GFX9-NEXT: v_frexp_exp_i32_f32_e32 v2, v2726; GFX9-NEXT: v_sub_u32_e32 v2, 0, v2727; GFX9-NEXT: v_ldexp_f32 v2, v3, v2728; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2729; GFX9-NEXT: v_mul_f32_e32 v1, v1, v2730; GFX9-NEXT: s_setpc_b64 s[30:31]731;732; GFX11-LABEL: v_repeat_divisor_f32_x2_ulp25:733; GFX11: ; %bb.0:734; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)735; GFX11-NEXT: v_frexp_mant_f32_e32 v3, v2736; GFX11-NEXT: v_frexp_exp_i32_f32_e32 v2, v2737; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)738; GFX11-NEXT: v_rcp_f32_e32 v3, v3739; GFX11-NEXT: v_sub_nc_u32_e32 v2, 0, v2740; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)741; GFX11-NEXT: v_ldexp_f32 v2, v3, v2742; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)743; GFX11-NEXT: v_mul_f32_e32 v0, v0, v2744; GFX11-NEXT: v_mul_f32_e32 v1, v1, v2745; GFX11-NEXT: s_setpc_b64 s[30:31]746 %div0 = fdiv arcp float %x, %D, !fpmath !0747 %div1 = fdiv arcp float %y, %D, !fpmath !0748 %insert.0 = insertelement <2 x float> poison, float %div0, i32 0749 %insert.1 = insertelement <2 x float> %insert.0, float %div1, i32 1750 ret <2 x float> %insert.1751}752 753define <2 x float> @v_repeat_divisor_f32_x2_daz_ulp25(float %x, float %y, float %D) #1 {754; GFX6-LABEL: v_repeat_divisor_f32_x2_daz_ulp25:755; GFX6: ; %bb.0:756; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)757; GFX6-NEXT: v_rcp_f32_e32 v2, v2758; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2759; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2760; GFX6-NEXT: s_setpc_b64 s[30:31]761;762; GFX9-LABEL: v_repeat_divisor_f32_x2_daz_ulp25:763; GFX9: ; %bb.0:764; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)765; GFX9-NEXT: v_rcp_f32_e32 v2, v2766; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2767; GFX9-NEXT: v_mul_f32_e32 v1, v1, v2768; GFX9-NEXT: s_setpc_b64 s[30:31]769;770; GFX11-LABEL: v_repeat_divisor_f32_x2_daz_ulp25:771; GFX11: ; %bb.0:772; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)773; GFX11-NEXT: v_rcp_f32_e32 v2, v2774; GFX11-NEXT: s_waitcnt_depctr depctr_va_vdst(0)775; GFX11-NEXT: v_mul_f32_e32 v0, v0, v2776; GFX11-NEXT: v_mul_f32_e32 v1, v1, v2777; GFX11-NEXT: s_setpc_b64 s[30:31]778 %div0 = fdiv arcp float %x, %D, !fpmath !0779 %div1 = fdiv arcp float %y, %D, !fpmath !0780 %insert.0 = insertelement <2 x float> poison, float %div0, i32 0781 %insert.1 = insertelement <2 x float> %insert.0, float %div1, i32 1782 ret <2 x float> %insert.1783}784 785define <4 x half> @v_repeat_divisor_v2f16_x2(<2 x half> %x, <2 x half> %y, <2 x half> %D) #0 {786; GFX6-LABEL: v_repeat_divisor_v2f16_x2:787; GFX6: ; %bb.0:788; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)789; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4790; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5791; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3792; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2793; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4794; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5795; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1796; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0797; GFX6-NEXT: v_div_scale_f32 v6, s[4:5], v4, v4, 1.0798; GFX6-NEXT: v_rcp_f32_e32 v7, v6799; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3800; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2801; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1802; GFX6-NEXT: v_fma_f32 v8, -v6, v7, 1.0803; GFX6-NEXT: v_fma_f32 v7, v8, v7, v7804; GFX6-NEXT: v_div_scale_f32 v8, vcc, 1.0, v4, 1.0805; GFX6-NEXT: v_mul_f32_e32 v9, v8, v7806; GFX6-NEXT: v_fma_f32 v10, -v6, v9, v8807; GFX6-NEXT: v_fma_f32 v9, v10, v7, v9808; GFX6-NEXT: v_fma_f32 v6, -v6, v9, v8809; GFX6-NEXT: v_div_scale_f32 v8, s[4:5], v5, v5, 1.0810; GFX6-NEXT: v_rcp_f32_e32 v10, v8811; GFX6-NEXT: v_div_fmas_f32 v6, v6, v7, v9812; GFX6-NEXT: v_div_fixup_f32 v4, v6, v4, 1.0813; GFX6-NEXT: v_div_scale_f32 v7, vcc, 1.0, v5, 1.0814; GFX6-NEXT: v_fma_f32 v6, -v8, v10, 1.0815; GFX6-NEXT: v_fma_f32 v6, v6, v10, v10816; GFX6-NEXT: v_mul_f32_e32 v9, v7, v6817; GFX6-NEXT: v_fma_f32 v10, -v8, v9, v7818; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0819; GFX6-NEXT: v_fma_f32 v9, v10, v6, v9820; GFX6-NEXT: v_fma_f32 v7, -v8, v9, v7821; GFX6-NEXT: v_div_fmas_f32 v6, v7, v6, v9822; GFX6-NEXT: v_div_fixup_f32 v5, v6, v5, 1.0823; GFX6-NEXT: v_mul_f32_e32 v0, v0, v4824; GFX6-NEXT: v_mul_f32_e32 v1, v1, v5825; GFX6-NEXT: v_mul_f32_e32 v2, v2, v4826; GFX6-NEXT: v_mul_f32_e32 v3, v3, v5827; GFX6-NEXT: s_setpc_b64 s[30:31]828;829; GFX9-LABEL: v_repeat_divisor_v2f16_x2:830; GFX9: ; %bb.0:831; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)832; GFX9-NEXT: v_rcp_f16_sdwa v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1833; GFX9-NEXT: v_rcp_f16_e32 v2, v2834; GFX9-NEXT: v_pack_b32_f16 v2, v2, v3835; GFX9-NEXT: v_pk_mul_f16 v0, v0, v2836; GFX9-NEXT: v_pk_mul_f16 v1, v1, v2837; GFX9-NEXT: s_setpc_b64 s[30:31]838;839; GFX11-TRUE16-LABEL: v_repeat_divisor_v2f16_x2:840; GFX11-TRUE16: ; %bb.0:841; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)842; GFX11-TRUE16-NEXT: v_rcp_f16_e32 v2.h, v2.h843; GFX11-TRUE16-NEXT: v_rcp_f16_e32 v2.l, v2.l844; GFX11-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)845; GFX11-TRUE16-NEXT: v_pack_b32_f16 v2, v2.l, v2.h846; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)847; GFX11-TRUE16-NEXT: v_pk_mul_f16 v0, v0, v2848; GFX11-TRUE16-NEXT: v_pk_mul_f16 v1, v1, v2849; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]850;851; GFX11-FAKE16-LABEL: v_repeat_divisor_v2f16_x2:852; GFX11-FAKE16: ; %bb.0:853; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)854; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v2855; GFX11-FAKE16-NEXT: v_rcp_f16_e32 v2, v2856; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)857; GFX11-FAKE16-NEXT: v_rcp_f16_e32 v3, v3858; GFX11-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)859; GFX11-FAKE16-NEXT: v_pack_b32_f16 v2, v2, v3860; GFX11-FAKE16-NEXT: v_pk_mul_f16 v0, v0, v2861; GFX11-FAKE16-NEXT: v_pk_mul_f16 v1, v1, v2862; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]863 %div0 = fdiv arcp <2 x half> %x, %D864 %div1 = fdiv arcp <2 x half> %y, %D865 %shuffle = shufflevector <2 x half> %div0, <2 x half> %div1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>866 ret <4 x half> %shuffle867}868 869define <6 x half> @v_repeat_divisor_v3f16_x2(<3 x half> %x, <3 x half> %y, <3 x half> %D) #0 {870; GFX6-LABEL: v_repeat_divisor_v3f16_x2:871; GFX6: ; %bb.0:872; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GFX6-NEXT: v_cvt_f16_f32_e32 v6, v6874; GFX6-NEXT: v_cvt_f16_f32_e32 v7, v7875; GFX6-NEXT: v_cvt_f16_f32_e32 v8, v8876; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5877; GFX6-NEXT: v_cvt_f32_f16_e32 v6, v6878; GFX6-NEXT: v_cvt_f32_f16_e32 v7, v7879; GFX6-NEXT: v_cvt_f32_f16_e32 v8, v8880; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4881; GFX6-NEXT: v_div_scale_f32 v9, s[4:5], v6, v6, 1.0882; GFX6-NEXT: v_rcp_f32_e32 v10, v9883; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3884; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2885; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1886; GFX6-NEXT: v_fma_f32 v11, -v9, v10, 1.0887; GFX6-NEXT: v_fma_f32 v10, v11, v10, v10888; GFX6-NEXT: v_div_scale_f32 v11, vcc, 1.0, v6, 1.0889; GFX6-NEXT: v_mul_f32_e32 v12, v11, v10890; GFX6-NEXT: v_fma_f32 v13, -v9, v12, v11891; GFX6-NEXT: v_fma_f32 v12, v13, v10, v12892; GFX6-NEXT: v_fma_f32 v9, -v9, v12, v11893; GFX6-NEXT: v_div_scale_f32 v11, s[4:5], v7, v7, 1.0894; GFX6-NEXT: v_rcp_f32_e32 v13, v11895; GFX6-NEXT: v_div_fmas_f32 v9, v9, v10, v12896; GFX6-NEXT: v_div_fixup_f32 v6, v9, v6, 1.0897; GFX6-NEXT: v_div_scale_f32 v10, vcc, 1.0, v7, 1.0898; GFX6-NEXT: v_fma_f32 v9, -v11, v13, 1.0899; GFX6-NEXT: v_fma_f32 v9, v9, v13, v13900; GFX6-NEXT: v_mul_f32_e32 v12, v10, v9901; GFX6-NEXT: v_fma_f32 v13, -v11, v12, v10902; GFX6-NEXT: v_fma_f32 v12, v13, v9, v12903; GFX6-NEXT: v_fma_f32 v10, -v11, v12, v10904; GFX6-NEXT: v_div_scale_f32 v11, s[4:5], v8, v8, 1.0905; GFX6-NEXT: v_rcp_f32_e32 v13, v11906; GFX6-NEXT: v_div_fmas_f32 v9, v10, v9, v12907; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0908; GFX6-NEXT: v_div_fixup_f32 v7, v9, v7, 1.0909; GFX6-NEXT: v_fma_f32 v9, -v11, v13, 1.0910; GFX6-NEXT: v_fma_f32 v9, v9, v13, v13911; GFX6-NEXT: v_div_scale_f32 v10, vcc, 1.0, v8, 1.0912; GFX6-NEXT: v_mul_f32_e32 v12, v10, v9913; GFX6-NEXT: v_fma_f32 v13, -v11, v12, v10914; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5915; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4916; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3917; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2918; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1919; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0920; GFX6-NEXT: v_fma_f32 v12, v13, v9, v12921; GFX6-NEXT: v_fma_f32 v10, -v11, v12, v10922; GFX6-NEXT: v_div_fmas_f32 v9, v10, v9, v12923; GFX6-NEXT: v_div_fixup_f32 v8, v9, v8, 1.0924; GFX6-NEXT: v_mul_f32_e32 v0, v0, v6925; GFX6-NEXT: v_mul_f32_e32 v1, v1, v7926; GFX6-NEXT: v_mul_f32_e32 v2, v2, v8927; GFX6-NEXT: v_mul_f32_e32 v3, v3, v6928; GFX6-NEXT: v_mul_f32_e32 v4, v4, v7929; GFX6-NEXT: v_mul_f32_e32 v5, v5, v8930; GFX6-NEXT: s_setpc_b64 s[30:31]931;932; GFX9-LABEL: v_repeat_divisor_v3f16_x2:933; GFX9: ; %bb.0:934; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)935; GFX9-NEXT: v_rcp_f16_sdwa v6, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1936; GFX9-NEXT: v_rcp_f16_e32 v4, v4937; GFX9-NEXT: v_rcp_f16_e32 v5, v5938; GFX9-NEXT: s_movk_i32 s4, 0x7e00939; GFX9-NEXT: v_pack_b32_f16 v4, v4, v6940; GFX9-NEXT: v_pack_b32_f16 v5, v5, s4941; GFX9-NEXT: v_pk_mul_f16 v0, v0, v4942; GFX9-NEXT: v_pk_mul_f16 v1, v1, v5943; GFX9-NEXT: v_pk_mul_f16 v3, v3, v5944; GFX9-NEXT: v_pk_mul_f16 v4, v2, v4945; GFX9-NEXT: v_alignbit_b32 v2, v3, v4, 16946; GFX9-NEXT: v_pack_b32_f16 v1, v1, v4947; GFX9-NEXT: s_setpc_b64 s[30:31]948;949; GFX11-TRUE16-LABEL: v_repeat_divisor_v3f16_x2:950; GFX11-TRUE16: ; %bb.0:951; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)952; GFX11-TRUE16-NEXT: v_rcp_f16_e32 v4.h, v4.h953; GFX11-TRUE16-NEXT: v_rcp_f16_e32 v5.l, v5.l954; GFX11-TRUE16-NEXT: v_rcp_f16_e32 v4.l, v4.l955; GFX11-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)956; GFX11-TRUE16-NEXT: v_pack_b32_f16 v5, v5.l, 0x7e00957; GFX11-TRUE16-NEXT: v_pack_b32_f16 v4, v4.l, v4.h958; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)959; GFX11-TRUE16-NEXT: v_pk_mul_f16 v1, v1, v5960; GFX11-TRUE16-NEXT: v_pk_mul_f16 v2, v2, v4961; GFX11-TRUE16-NEXT: v_pk_mul_f16 v3, v3, v5962; GFX11-TRUE16-NEXT: v_pk_mul_f16 v0, v0, v4963; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)964; GFX11-TRUE16-NEXT: v_pack_b32_f16 v1, v1.l, v2.l965; GFX11-TRUE16-NEXT: v_mov_b16_e32 v2.l, v2.h966; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)967; GFX11-TRUE16-NEXT: v_mov_b16_e32 v2.h, v3.l968; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]969;970; GFX11-FAKE16-LABEL: v_repeat_divisor_v3f16_x2:971; GFX11-FAKE16: ; %bb.0:972; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)973; GFX11-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v4974; GFX11-FAKE16-NEXT: v_rcp_f16_e32 v4, v4975; GFX11-FAKE16-NEXT: v_rcp_f16_e32 v5, v5976; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)977; GFX11-FAKE16-NEXT: v_rcp_f16_e32 v6, v6978; GFX11-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)979; GFX11-FAKE16-NEXT: v_pack_b32_f16 v5, v5, 0x7e00980; GFX11-FAKE16-NEXT: v_pack_b32_f16 v4, v4, v6981; GFX11-FAKE16-NEXT: v_pk_mul_f16 v1, v1, v5982; GFX11-FAKE16-NEXT: v_pk_mul_f16 v3, v3, v5983; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)984; GFX11-FAKE16-NEXT: v_pk_mul_f16 v2, v2, v4985; GFX11-FAKE16-NEXT: v_pk_mul_f16 v0, v0, v4986; GFX11-FAKE16-NEXT: v_pack_b32_f16 v1, v1, v2987; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4)988; GFX11-FAKE16-NEXT: v_alignbit_b32 v2, v3, v2, 16989; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]990 %div0 = fdiv arcp <3 x half> %x, %D991 %div1 = fdiv arcp <3 x half> %y, %D992 %shuffle = shufflevector <3 x half> %div0, <3 x half> %div1, <6 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>993 ret <6 x half> %shuffle994}995 996attributes #0 = { "denormal-fp-math-f32"="ieee,ieee" }997attributes #1 = { "denormal-fp-math-f32"="preserve-sign,preserve-sign" }998 999!0 = !{float 2.5}1000;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1001; GCN: {{.*}}1002