diff --git a/llvm/test/CodeGen/AMDGPU/vopd-combine-gfx1250.mir b/llvm/test/CodeGen/AMDGPU/vopd-combine-gfx1250.mir index fa6c34cf07730..b05edd046b874 100644 --- a/llvm/test/CodeGen/AMDGPU/vopd-combine-gfx1250.mir +++ b/llvm/test/CodeGen/AMDGPU/vopd-combine-gfx1250.mir @@ -1,6 +1,7 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 # RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -run-pass=postmisched %s -o - | FileCheck -check-prefix=SCHED %s # RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -run-pass=postmisched,gcn-create-vopd %s -o - | FileCheck -check-prefix=PAIR %s +# RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -run-pass=postmisched,gcn-create-vopd,amdgpu-lower-vgpr-encoding %s -o - | FileCheck -check-prefix=LOWER %s --- name: vopd_combine_low_vgprs @@ -20,6 +21,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr1, $vgpr1, $vgpr0, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_low_vgprs + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr1, $vgpr1, $vgpr0, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec @@ -45,6 +52,15 @@ body: | ; PAIR-NEXT: $vgpr301 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr303, $vgpr306 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr301, $vgpr301, $vgpr300, $vgpr300, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr300, $vgpr301, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_hi_vgprs + ; LOWER: $vgpr300 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr301 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 69, implicit-def $mode + ; LOWER-NEXT: $vgpr303, $vgpr306 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr301, $vgpr301, $vgpr300, $vgpr300, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 17669, implicit-def $mode + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr300, $vgpr301, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 1280, implicit-def $mode $vgpr300 = IMPLICIT_DEF $vgpr301 = IMPLICIT_DEF $vgpr303 = V_SUB_F32_e32 $vgpr301, $vgpr301, implicit $mode, implicit $exec @@ -70,6 +86,15 @@ body: | ; PAIR-NEXT: $vgpr813 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr559, $vgpr562 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr813, $vgpr813, $vgpr812, $vgpr812, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr812, $vgpr813, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_hi_vgprs_above_512 + ; LOWER: $vgpr812 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr813 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 143, implicit-def $mode + ; LOWER-NEXT: $vgpr559, $vgpr562 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr813, $vgpr813, $vgpr812, $vgpr812, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 36623, implicit-def $mode + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr812, $vgpr813, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 3840, implicit-def $mode $vgpr812 = IMPLICIT_DEF $vgpr813 = IMPLICIT_DEF $vgpr559 = V_SUB_F32_e32 $vgpr813, $vgpr813, implicit $mode, implicit $exec @@ -96,6 +121,15 @@ body: | ; PAIR-NEXT: $vgpr303 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: mixed_vgprs_low_and_hi_dst + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 64, implicit-def $mode + ; LOWER-NEXT: $vgpr303 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 16384, implicit-def $mode + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr303 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec @@ -124,6 +158,16 @@ body: | ; PAIR-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr6 = V_MUL_F32_e32 $vgpr300, killed $vgpr0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: mixed_vgprs_low_and_hi_scr0 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr300 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 1, implicit-def $mode + ; LOWER-NEXT: $vgpr6 = V_MUL_F32_e32 $vgpr300, killed $vgpr0, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 256, implicit-def $mode $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr300 = IMPLICIT_DEF @@ -153,6 +197,18 @@ body: | ; PAIR-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr1, $vgpr301, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr6 = V_MUL_F32_e32 $vgpr300, killed $vgpr0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: mixed_vgprs_low_and_hi_scr1 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr300 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 4, implicit-def $mode + ; LOWER-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr1, $vgpr301, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 1024, implicit-def $mode + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 1, implicit-def $mode + ; LOWER-NEXT: $vgpr6 = V_MUL_F32_e32 $vgpr300, killed $vgpr0, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 256, implicit-def $mode $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr300 = IMPLICIT_DEF @@ -178,6 +234,15 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr559 = V_SUB_F32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr303 = V_MUL_F32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: mixed_vgprs_hi_and_hi_dst_different_msb + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 128, implicit-def $mode + ; LOWER-NEXT: $vgpr559 = V_SUB_F32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 32832, implicit-def $mode + ; LOWER-NEXT: $vgpr303 = V_MUL_F32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 16384, implicit-def $mode $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr559 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec @@ -205,6 +270,17 @@ body: | ; PAIR-NEXT: $vgpr812 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr513, killed $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr6 = V_MUL_F32_e32 $vgpr812, killed $vgpr0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: mixed_vgprs_low_and_hi_scr0_different_msb + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr513 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr812 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 2, implicit-def $mode + ; LOWER-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr513, killed $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 515, implicit-def $mode + ; LOWER-NEXT: $vgpr6 = V_MUL_F32_e32 $vgpr812, killed $vgpr0, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 768, implicit-def $mode $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr513 = IMPLICIT_DEF @@ -235,6 +311,16 @@ body: | ; PAIR-NEXT: $sgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 killed $sgpr0, $vgpr1, $vgpr300, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_sgpr_src0 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr300 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 1, implicit-def $mode + ; LOWER-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 killed $sgpr0, $vgpr1, $vgpr300, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 256, implicit-def $mode + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr300 = IMPLICIT_DEF @@ -264,6 +350,15 @@ body: | ; PAIR-NEXT: $vgpr300 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 0, $vgpr1, $vgpr300, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_imm_src0 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr300 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 1, implicit-def $mode + ; LOWER-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 0, $vgpr1, $vgpr300, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 256, implicit-def $mode + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr300 = IMPLICIT_DEF @@ -290,6 +385,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_MAX_I32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_mov_max_i32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_MAX_I32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -315,6 +416,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_MIN_I32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_mov_min_i32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_MIN_I32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -339,6 +446,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2 = V_MAX_I32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr3 = V_MAX_I32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_max_i32_max_i32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = V_MAX_I32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr3 = V_MAX_I32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_MAX_I32_e32 $vgpr0, $vgpr0, implicit $mode, implicit $exec @@ -362,6 +475,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2 = V_MIN_I32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr3 = V_MIN_I32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_min_i32_min_i32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = V_MIN_I32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr3 = V_MIN_I32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_MIN_I32_e32 $vgpr0, $vgpr0, implicit $mode, implicit $exec @@ -386,6 +505,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_SUB_U32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_mov_sub_nc_i32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_SUB_U32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -411,6 +536,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_LSHRREV_B32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_mov_lshrrev_b32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_LSHRREV_B32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -436,6 +567,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_ASHRREV_I32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_mov_ashrrev_i32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2, $vgpr3 = V_DUAL_MOV_B32_e32_X_ASHRREV_I32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr1, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -464,6 +601,14 @@ body: | ; PAIR-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr0, killed $vgpr5, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_same_vgprs_banks + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = V_SUB_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr0, killed $vgpr5, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr5 = IMPLICIT_DEF @@ -490,6 +635,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr0, $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_same_vgprs + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 $vgpr0, $vgpr1, $vgpr0, $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_SUB_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec @@ -515,6 +666,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr5 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_e96_gfx1250 0, $vgpr1, 0, $vgpr1, 0, $vgpr0, 0, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_same_dst_parity + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr5 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_e96_gfx1250 0, $vgpr1, 0, $vgpr1, 0, $vgpr0, 0, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_SUB_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec @@ -540,6 +697,12 @@ body: | ; PAIR-NEXT: $sgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr1, $vgpr2 = V_DUAL_FMAAK_F32_X_MOV_B32_e32_gfx1250 killed $sgpr0, $vgpr0, 981467136, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_x_fmaak + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1, $vgpr2 = V_DUAL_FMAAK_F32_X_MOV_B32_e32_gfx1250 killed $sgpr0, $vgpr0, 981467136, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, $vgpr0, implicit $exec $vgpr0 = IMPLICIT_DEF $sgpr0 = IMPLICIT_DEF $vgpr1 = V_FMAAK_F32 $sgpr0, $vgpr0, 981467136, implicit $mode, implicit $exec @@ -565,6 +728,12 @@ body: | ; PAIR-NEXT: $sgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr1, $vgpr2 = V_DUAL_MOV_B32_e32_X_FMAAK_F32_gfx1250 $vgpr0, killed $sgpr0, $vgpr0, 981467136, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_y_fmaak + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1, $vgpr2 = V_DUAL_MOV_B32_e32_X_FMAAK_F32_gfx1250 $vgpr0, killed $sgpr0, $vgpr0, 981467136, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, $vgpr0, implicit $exec $vgpr0 = IMPLICIT_DEF $sgpr0 = IMPLICIT_DEF $vgpr1 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -591,6 +760,13 @@ body: | ; PAIR-NEXT: $vgpr1 = V_FMAAK_F32 killed $sgpr0, $vgpr0, 981467136, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, $vgpr0, implicit $exec ; PAIR-NEXT: $vgpr3 = V_MOV_B32_e32 killed $vgpr0, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_x_fmaak_same_dst_parity + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = V_FMAAK_F32 killed $sgpr0, $vgpr0, 981467136, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, $vgpr0, implicit $exec + ; LOWER-NEXT: $vgpr3 = V_MOV_B32_e32 killed $vgpr0, implicit $exec $vgpr0 = IMPLICIT_DEF $sgpr0 = IMPLICIT_DEF $vgpr1 = V_FMAAK_F32 $sgpr0, $vgpr0, 981467136, implicit $mode, implicit $exec @@ -617,6 +793,13 @@ body: | ; PAIR-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr0, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, $vgpr0, implicit $exec ; PAIR-NEXT: $vgpr3 = V_FMAAK_F32 killed $sgpr0, killed $vgpr0, 981467136, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_y_fmaak_same_dst_parity + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = V_MOV_B32_e32 $vgpr0, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, $vgpr0, implicit $exec + ; LOWER-NEXT: $vgpr3 = V_FMAAK_F32 killed $sgpr0, killed $vgpr0, 981467136, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $sgpr0 = IMPLICIT_DEF $vgpr1 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -642,6 +825,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 12345, $vgpr1, $vgpr0, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_literal_x + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr6 = V_DUAL_SUB_F32_e32_X_MUL_F32_e32_gfx1250 12345, $vgpr1, $vgpr0, $vgpr0, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_SUB_F32_e32 12345, $vgpr1, implicit $mode, implicit $exec @@ -667,6 +856,12 @@ body: | ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr6 = V_DUAL_MUL_F32_e32_X_SUB_F32_e32_gfx1250 $vgpr0, $vgpr0, 12345, $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_literal_y + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr6 = V_DUAL_MUL_F32_e32_X_SUB_F32_e32_gfx1250 $vgpr0, $vgpr0, 12345, $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_MUL_F32_e32 $vgpr0, $vgpr0, implicit $mode, implicit $exec @@ -695,6 +890,13 @@ body: | ; PAIR-NEXT: $vgpr3 = V_SUB_F32_e32 12345, $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr5 = V_MUL_F32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_literal_x + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = V_SUB_F32_e32 12345, $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_MUL_F32_e32 killed $vgpr0, $vgpr0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_SUB_F32_e32 12345, $vgpr1, implicit $mode, implicit $exec @@ -721,6 +923,13 @@ body: | ; PAIR-NEXT: $vgpr3 = V_MUL_F32_e32 $vgpr0, $vgpr0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr5 = V_SUB_F32_e32 12345, killed $vgpr1, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_literal_y + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = V_MUL_F32_e32 $vgpr0, $vgpr0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e32 killed $vgpr0, $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_SUB_F32_e32 12345, killed $vgpr1, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_MUL_F32_e32 $vgpr0, $vgpr0, implicit $mode, implicit $exec @@ -750,6 +959,14 @@ body: | ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr4, $vgpr6 = V_DUAL_ADD_U32_e32_X_ADD_F32_e32_e96_gfx1250 $vgpr0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_u32_add_f32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4, $vgpr6 = V_DUAL_ADD_U32_e32_X_ADD_F32_e32_e96_gfx1250 $vgpr0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -781,6 +998,14 @@ body: | ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr4 = V_DUAL_ADD_F32_e32_X_ADD_U32_e32_e96_gfx1250 0, killed $vgpr2, 0, killed $vgpr3, $vgpr0, $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_f32_add_u32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr4 = V_DUAL_ADD_F32_e32_X_ADD_U32_e32_e96_gfx1250 0, killed $vgpr2, 0, killed $vgpr3, $vgpr0, $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -810,6 +1035,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr5, $vgpr4 = V_DUAL_ADD_F32_e32_X_ADD_U32_e32_gfx1250 killed $vgpr2, killed $vgpr3, killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_u32_add_f32_same_dst_parity + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5, $vgpr4 = V_DUAL_ADD_F32_e32_X_ADD_U32_e32_gfx1250 killed $vgpr2, killed $vgpr3, killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -838,6 +1070,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr5, $vgpr4 = V_DUAL_ADD_F32_e32_X_ADD_U32_e32_gfx1250 killed $vgpr2, killed $vgpr3, killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_f32_add_u32_same_dst_parity + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5, $vgpr4 = V_DUAL_ADD_F32_e32_X_ADD_U32_e32_gfx1250 killed $vgpr2, killed $vgpr3, killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -866,6 +1105,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr4, $vgpr6 = V_DUAL_LSHLREV_B32_e32_X_LSHLREV_B32_e32_e96_gfx1250 killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_lshl_lshl + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4, $vgpr6 = V_DUAL_LSHLREV_B32_e32_X_LSHLREV_B32_e32_e96_gfx1250 killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, implicit $exec, implicit $exec, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -894,6 +1140,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr4, $vgpr5 = V_DUAL_ASHRREV_I32_e32_X_ASHRREV_I32_e32_e96_gfx1250 killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_ashr_ashr + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4, $vgpr5 = V_DUAL_ASHRREV_I32_e32_X_ASHRREV_I32_e32_e96_gfx1250 killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, implicit $exec, implicit $exec, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -922,6 +1175,15 @@ body: | ; PAIR-NEXT: $vgpr302 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr303 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr304, $vgpr305 = V_DUAL_LSHRREV_B32_e32_X_LSHRREV_B32_e32_e96_gfx1250 $vgpr300, $vgpr301, $vgpr302, $vgpr303, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_lshr_lshr + ; LOWER: $vgpr300 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr301 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr302 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr303 = IMPLICIT_DEF + ; LOWER-NEXT: S_SET_VGPR_MSB 69, implicit-def $mode + ; LOWER-NEXT: $vgpr304, $vgpr305 = V_DUAL_LSHRREV_B32_e32_X_LSHRREV_B32_e32_e96_gfx1250 $vgpr300, $vgpr301, $vgpr302, $vgpr303, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: S_SET_VGPR_MSB 17664, implicit-def $mode $vgpr300 = IMPLICIT_DEF $vgpr301 = IMPLICIT_DEF $vgpr302 = IMPLICIT_DEF @@ -950,6 +1212,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr4, $vgpr5 = V_DUAL_SUB_U32_e32_X_SUB_U32_e32_e96_gfx1250 killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, implicit $exec, implicit $exec, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_sub_u32_sub_u32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4, $vgpr5 = V_DUAL_SUB_U32_e32_X_SUB_U32_e32_e96_gfx1250 killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, implicit $exec, implicit $exec, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -977,6 +1246,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr4 = V_SUB_U32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr5 = V_SUB_U32_e32 300, killed $vgpr2, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_sub_u32_sub_u32_lit + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = V_SUB_U32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_SUB_U32_e32 300, killed $vgpr2, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1004,6 +1280,13 @@ body: | ; PAIR-NEXT: $vgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2, $vgpr3 = V_DUAL_FMAC_F32_e32_X_FMAC_F32_e32_gfx1250 $vgpr1, $vgpr1, killed $vgpr2, killed $vgpr1, $vgpr1, killed $vgpr3, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fmac_fmac + ; LOWER: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2, $vgpr3 = V_DUAL_FMAC_F32_e32_X_FMAC_F32_e32_gfx1250 $vgpr1, $vgpr1, killed $vgpr2, killed $vgpr1, $vgpr1, killed $vgpr3, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1032,6 +1315,13 @@ body: | ; PAIR-NEXT: $vgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2, $vgpr4 = V_DUAL_FMAC_F32_e32_X_FMAC_F32_e32_e96_gfx1250 0, $vgpr1, 0, $vgpr1, killed $vgpr2, 0, killed $vgpr1, 0, $vgpr1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fmac_fmac_same_dst_parity + ; LOWER: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2, $vgpr4 = V_DUAL_FMAC_F32_e32_X_FMAC_F32_e32_e96_gfx1250 0, $vgpr1, 0, $vgpr1, killed $vgpr2, 0, killed $vgpr1, 0, $vgpr1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1059,6 +1349,13 @@ body: | ; PAIR-NEXT: $vgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2 = V_FMAC_F32_e32 $vgpr1, $vgpr1, killed $vgpr2, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr2 = V_FMAC_F32_e32 killed $vgpr1, $vgpr1, killed $vgpr2, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fmac_fmac_same_dst + ; LOWER: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = V_FMAC_F32_e32 $vgpr1, $vgpr1, killed $vgpr2, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr2 = V_FMAC_F32_e32 killed $vgpr1, $vgpr1, killed $vgpr2, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1083,6 +1380,12 @@ body: | ; PAIR-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr2 = V_ADD_F32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_add_f32_fadd_f32_same_dst + ; LOWER: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = V_ADD_F32_e32 killed $vgpr1, $vgpr1, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, implicit $exec @@ -1113,6 +1416,15 @@ body: | ; PAIR-NEXT: $vgpr8_vgpr9 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr4_vgpr5, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr8_vgpr9, 0, killed $vgpr2, 0, killed $vgpr3, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_f64_add_f32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr8_vgpr9, 0, killed $vgpr2, 0, killed $vgpr3, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1147,6 +1459,15 @@ body: | ; PAIR-NEXT: $vgpr8_vgpr9 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr4_vgpr5, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr8_vgpr9, 0, killed $vgpr2, 0, killed $vgpr3, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_f32_add_f64 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr8_vgpr9, 0, killed $vgpr2, 0, killed $vgpr3, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1184,6 +1505,17 @@ body: | ; PAIR-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 $vgpr0_vgpr1, killed $vgpr8_vgpr9, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e32 $vgpr0, $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr6_vgpr7 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr10_vgpr11, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_add_f64_add_f64 + ; LOWER: $vgpr8_vgpr9 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 $vgpr0_vgpr1, killed $vgpr8_vgpr9, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e32 $vgpr0, $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr6_vgpr7 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr10_vgpr11, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1220,6 +1552,16 @@ body: | ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr5 = V_ADD_F32_e32 killed $vgpr2, killed $vgpr3, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_add_f64_add_f32_overlapping_dst + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 $vgpr0_vgpr1, killed $vgpr8_vgpr9, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr7 = V_BFM_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_ADD_F32_e32 killed $vgpr2, killed $vgpr3, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1251,6 +1593,14 @@ body: | ; PAIR-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr10_vgpr11, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr2, killed $vgpr5, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_add_f64_add_f32_overlapping_src_sub1 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr10_vgpr11, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr2, killed $vgpr5, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1280,6 +1630,14 @@ body: | ; PAIR-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr10_vgpr11, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr2, killed $vgpr4, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_add_f64_add_f32_overlapping_src_sub0 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr10_vgpr11, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr2, killed $vgpr4, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1314,6 +1672,16 @@ body: | ; PAIR-NEXT: $vgpr5 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_fma + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1352,6 +1720,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr10, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fma_fma_bank_conflict_src2 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr10, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1387,6 +1766,15 @@ body: | ; PAIR-NEXT: $vgpr4 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_add_f32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1421,6 +1809,15 @@ body: | ; PAIR-NEXT: $vgpr4 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr7, $vgpr6 = V_DUAL_ADD_F32_e32_X_FMA_F32_e64_e96_gfx1250 0, killed $vgpr3, 0, killed $vgpr4, 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_f32_fma + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr7, $vgpr6 = V_DUAL_ADD_F32_e32_X_FMA_F32_e64_e96_gfx1250 0, killed $vgpr3, 0, killed $vgpr4, 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1455,6 +1852,15 @@ body: | ; PAIR-NEXT: $vgpr10_vgpr11 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 0, killed $vgpr2_vgpr3, 0, killed $vgpr10_vgpr11, 0, $vgpr0, 0, $vgpr1, 0, $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_add_f64 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 0, killed $vgpr2_vgpr3, 0, killed $vgpr10_vgpr11, 0, $vgpr0, 0, $vgpr1, 0, $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1492,6 +1898,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 3, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fma_src0_mod_fma + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 3, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1530,6 +1947,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 2, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fma_fma_src1_mod + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 2, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1568,6 +1996,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 3, killed $vgpr5, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fma_fma_src2_mod + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 3, killed $vgpr5, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1606,6 +2045,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 1, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fma_clamp_fma + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 1, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1644,6 +2094,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 1, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fma_fma_omod + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 1, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1681,6 +2142,16 @@ body: | ; PAIR-NEXT: $vgpr5 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 1, $vgpr0, 1, $vgpr1, 1, killed $vgpr2, 1, killed $vgpr3, 1, killed $vgpr4, 1, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_fma_neg + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 1, $vgpr0, 1, $vgpr1, 1, killed $vgpr2, 1, killed $vgpr3, 1, killed $vgpr4, 1, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1718,6 +2189,16 @@ body: | ; PAIR-NEXT: $vgpr5 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 1, $sgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $sgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_fma_src0_neg + ; LOWER: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 1, $sgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $sgpr0, killed $vgpr1, implicit $exec $sgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1755,6 +2236,16 @@ body: | ; PAIR-NEXT: $vgpr5 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 1, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_fma_src1_neg + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, 1, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1792,6 +2283,16 @@ body: | ; PAIR-NEXT: $vgpr5 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 1, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_fma_src2_neg + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_FMA_F32_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 1, killed $vgpr2, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1829,6 +2330,16 @@ body: | ; PAIR-NEXT: $vgpr8 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr10_vgpr11, $vgpr9 = V_DUAL_FMA_F64_e64_X_FMA_F32_e64_e96_gfx1250 1, $vgpr0_vgpr1, 1, killed $vgpr2_vgpr3, 1, killed $vgpr4_vgpr5, 0, killed $vgpr6, 0, killed $vgpr8, 0, killed $vgpr7, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr12 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_f64_fma_f32_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr7 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11, $vgpr9 = V_DUAL_FMA_F64_e64_X_FMA_F32_e64_e96_gfx1250 1, $vgpr0_vgpr1, 1, killed $vgpr2_vgpr3, 1, killed $vgpr4_vgpr5, 0, killed $vgpr6, 0, killed $vgpr8, 0, killed $vgpr7, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr12 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4_vgpr5 = IMPLICIT_DEF @@ -1867,6 +2378,17 @@ body: | ; PAIR-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, $vgpr1, $vgpr2_vgpr3, implicit $exec ; PAIR-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr2, 0, killed $vgpr4, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_lshl_add_u64_fma + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, $vgpr1, $vgpr2_vgpr3, implicit $exec + ; LOWER-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr2, 0, killed $vgpr4, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1905,6 +2427,17 @@ body: | ; PAIR-NEXT: $vgpr8 = V_FMA_F32_e64 0, $vgpr3, 0, $vgpr2, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr9 = V_BFM_B32_e64 $vgpr0, $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 killed $vgpr0_vgpr1, $vgpr1, killed $vgpr2_vgpr3, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_lshl_add_u64 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8 = V_FMA_F32_e64 0, $vgpr3, 0, $vgpr2, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr9 = V_BFM_B32_e64 $vgpr0, $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 killed $vgpr0_vgpr1, $vgpr1, killed $vgpr2_vgpr3, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1941,6 +2474,16 @@ body: | ; PAIR-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, $vgpr1, $vgpr2_vgpr3, implicit $exec ; PAIR-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, $vgpr3, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_lshl_add_u64_fma_overlapping_src2 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, $vgpr1, $vgpr2_vgpr3, implicit $exec + ; LOWER-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, $vgpr3, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -1978,6 +2521,17 @@ body: | ; PAIR-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, killed $vgpr5, $vgpr2_vgpr3, implicit $exec ; PAIR-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr1, 0, killed $vgpr3, 0, killed $vgpr4, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_lshl_add_u64_fma_src0_conflict + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, killed $vgpr5, $vgpr2_vgpr3, implicit $exec + ; LOWER-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr1, 0, killed $vgpr3, 0, killed $vgpr4, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2016,6 +2570,17 @@ body: | ; PAIR-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, $vgpr5, $vgpr2_vgpr3, implicit $exec ; PAIR-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr5, 0, killed $vgpr4, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_lshl_add_u64_fma_src1_conflict + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6_vgpr7 = V_LSHL_ADD_U64_e64 $vgpr0_vgpr1, $vgpr5, $vgpr2_vgpr3, implicit $exec + ; LOWER-NEXT: $vgpr9 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr5, 0, killed $vgpr4, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2053,6 +2618,16 @@ body: | ; PAIR-NEXT: $vgpr8 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr10_vgpr11, $vgpr9 = V_DUAL_FMA_F64_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, killed $vgpr6, 0, killed $vgpr8, 0, killed $vgpr7, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr12 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_f64_fma_f32 + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr7 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11, $vgpr9 = V_DUAL_FMA_F64_e64_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, killed $vgpr6, 0, killed $vgpr8, 0, killed $vgpr7, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr12 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4_vgpr5 = IMPLICIT_DEF @@ -2089,6 +2664,16 @@ body: | ; PAIR-NEXT: $vgpr10_vgpr11 = V_FMA_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr12 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr9 = V_FMA_F32_e64 0, killed $vgpr6, 0, killed $vgpr3, 0, killed $vgpr7, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fma_f64_fma_f32_overlapping_src1 + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4_vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr7 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11 = V_FMA_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr12 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr9 = V_FMA_F32_e64 0, killed $vgpr6, 0, killed $vgpr3, 0, killed $vgpr7, 0, 0, implicit $mode, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4_vgpr5 = IMPLICIT_DEF @@ -2123,6 +2708,15 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_f32_add_f64_e32 + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -2157,6 +2751,15 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_f32_add_f64_e64 + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -2191,6 +2794,15 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 1, $vgpr0_vgpr1, 1, killed $vgpr2_vgpr3, 0, killed $vgpr6, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_f32_add_f64_e64_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_ADD_F64_pseudo_e32_X_FMA_F32_e64_e96_gfx1250 1, $vgpr0_vgpr1, 1, killed $vgpr2_vgpr3, 0, killed $vgpr6, 0, killed $vgpr4, 0, killed $vgpr5, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -2225,6 +2837,15 @@ body: | ; PAIR-NEXT: $vgpr4 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr5, $vgpr6 = V_DUAL_FMA_F32_e64_X_BITOP2_B32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, killed $vgpr3, killed $vgpr4, 123, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr7 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_bitop + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5, $vgpr6 = V_DUAL_FMA_F32_e64_X_BITOP2_B32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, killed $vgpr3, killed $vgpr4, 123, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2260,6 +2881,15 @@ body: | ; PAIR-NEXT: $vgpr4 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr5, $vgpr6 = V_DUAL_FMA_F32_e64_X_BITOP2_B32_e64_e96_gfx1250 0, $sgpr0, 0, $vgpr1, 0, killed $vgpr2, killed $sgpr3, killed $vgpr4, 123, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr7 = V_BFM_B32_e64 killed $sgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fma_bitop_2_scalar_src + ; LOWER: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5, $vgpr6 = V_DUAL_FMA_F32_e64_X_BITOP2_B32_e64_e96_gfx1250 0, $sgpr0, 0, $vgpr1, 0, killed $vgpr2, killed $sgpr3, killed $vgpr4, 123, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_BFM_B32_e64 killed $sgpr0, killed $vgpr1, implicit $exec $sgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2290,6 +2920,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr5, $vgpr3 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 killed $vgpr2, $vgpr0, $vgpr1, 20, implicit $exec, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_bitop_mov_b32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5, $vgpr3 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 killed $vgpr2, $vgpr0, $vgpr1, 20, implicit $exec, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2319,6 +2956,14 @@ body: | ; PAIR-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr2, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 $vgpr0, $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr3 = V_BITOP3_B32_e64 killed $vgpr0, killed $vgpr1, killed $vgpr2, 20, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_mov_b32_bitop_non_imm_src2 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr2, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 $vgpr0, $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr3 = V_BITOP3_B32_e64 killed $vgpr0, killed $vgpr1, killed $vgpr2, 20, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2348,6 +2993,14 @@ body: | ; PAIR-NEXT: $vgpr5 = V_MOV_B32_e32 killed $vgpr2, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 $vgpr0, $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr3 = V_BITOP3_B32_e64 killed $vgpr0, killed $vgpr1, 1, 20, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_mov_b32_bitop_non_zero_src2 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = V_MOV_B32_e32 killed $vgpr2, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 $vgpr0, $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr3 = V_BITOP3_B32_e64 killed $vgpr0, killed $vgpr1, 1, 20, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2376,6 +3029,14 @@ body: | ; PAIR-NEXT: renamable $vgpr1 = V_MOV_B32_dpp killed $vgpr1, $vgpr3, 258, 15, 15, 0, implicit $exec ; PAIR-NEXT: renamable $vgpr1 = V_BITOP3_B32_e64 killed $vgpr3, killed $vgpr4, killed $vgpr1, 128, implicit $exec ; PAIR-NEXT: renamable $vgpr3 = V_MOV_B32_e32 -1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_bitop3_mov_dpp_vgpr_src2 + ; LOWER: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: renamable $vgpr1 = V_MOV_B32_dpp killed $vgpr1, $vgpr3, 258, 15, 15, 0, implicit $exec + ; LOWER-NEXT: renamable $vgpr1 = V_BITOP3_B32_e64 killed $vgpr3, killed $vgpr4, killed $vgpr1, 128, implicit $exec + ; LOWER-NEXT: renamable $vgpr3 = V_MOV_B32_e32 -1, implicit $exec $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -2405,6 +3066,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 84, implicit $exec, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_mov_or + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 84, implicit $exec, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2433,6 +3101,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 64, implicit $exec, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_mov_and + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 64, implicit $exec, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2461,6 +3136,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 20, implicit $exec, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_mov_xor + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 20, implicit $exec, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2489,6 +3171,13 @@ body: | ; PAIR-NEXT: $vgpr2 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 65, implicit $exec, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_mov_xnor + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3, $vgpr5 = V_DUAL_MOV_B32_e32_X_BITOP2_B32_e64_e96_gfx1250 $vgpr0, $vgpr1, killed $vgpr2, 65, implicit $exec, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2519,6 +3208,13 @@ body: | ; PAIR-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr5 = V_NOT_B32_e32 killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_mov_not + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_NOT_B32_e32 killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec @@ -2547,6 +3243,14 @@ body: | ; PAIR-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr5 = V_NOT_B32_e32 killed $vgpr2, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fadd_not + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr4 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_NOT_B32_e32 killed $vgpr2, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2576,6 +3280,14 @@ body: | ; PAIR-NEXT: $vgpr8_vgpr9 = V_ADD_F64_pseudo_e32 $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr11 = V_NOT_B32_e32 killed $vgpr6, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fadd_f64_not + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9 = V_ADD_F64_pseudo_e32 $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr10 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr11 = V_NOT_B32_e32 killed $vgpr6, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr6 = IMPLICIT_DEF @@ -2611,6 +3323,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, 1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_src1_imm + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, 1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2649,6 +3372,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, 1, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_src2_imm + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, 1, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -2689,6 +3423,18 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, killed $sgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_src1_sgpr + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, killed $sgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $sgpr1 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF @@ -2730,6 +3476,18 @@ body: | ; PAIR-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $sgpr1, 0, 0, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_src2_sgpr + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_FMA_F32_e64 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr2, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_FMA_F32_e64 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $sgpr1, 0, 0, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $sgpr1 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF @@ -2769,6 +3527,16 @@ body: | ; PAIR-NEXT: $vgpr4 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_gfx1250 $vgpr0, $vgpr1, killed $vgpr3, killed $vgpr4, implicit $vcc_lo, implicit $exec, implicit $mode, implicit $exec, implicit killed $vcc_lo, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_fadd + ; LOWER: liveins: $vcc_lo + ; LOWER-NEXT: {{ $}} + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_gfx1250 $vgpr0, $vgpr1, killed $vgpr3, killed $vgpr4, implicit $vcc_lo, implicit $exec, implicit $mode, implicit $exec, implicit killed $vcc_lo, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -2807,6 +3575,17 @@ body: | ; PAIR-NEXT: $vgpr5 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $exec, implicit $mode, implicit $exec, implicit killed $vcc_lo, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_fma + ; LOWER: liveins: $vcc_lo + ; LOWER-NEXT: {{ $}} + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr5 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_FMA_F32_e64_e96_gfx1250 0, $vgpr0, 0, $vgpr1, $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, 0, killed $vgpr5, implicit $exec, implicit $mode, implicit $exec, implicit killed $vcc_lo, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -2841,6 +3620,15 @@ body: | ; PAIR-NEXT: $vcc = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e64_vcc_fadd + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vcc = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -2875,6 +3663,15 @@ body: | ; PAIR-NEXT: $sgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $sgpr0, 0, killed $vgpr3, 0, killed $vgpr4, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e64_sgpr_fadd + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $sgpr0, 0, killed $vgpr3, 0, killed $vgpr4, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -2909,6 +3706,15 @@ body: | ; PAIR-NEXT: $vcc = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 1, $vgpr1, killed $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e64_neg_vcc_fadd + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vcc = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 1, $vgpr1, killed $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -2946,6 +3752,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_CNDMASK_B32_e64 0, killed $sgpr0, 0, $vgpr1, killed $vcc_lo, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_ADD_F32_e32 killed $sgpr3, killed $vgpr4, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_cndmask_e64_vcc_fadd_constant_bus_limit + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vcc = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_CNDMASK_B32_e64 0, killed $sgpr0, 0, $vgpr1, killed $vcc_lo, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_ADD_F32_e32 killed $sgpr3, killed $vgpr4, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $sgpr3 = IMPLICIT_DEF @@ -2984,6 +3801,17 @@ body: | ; PAIR-NEXT: $vgpr6 = V_CNDMASK_B32_e64 0, $vgpr0, 0, killed $sgpr0, killed $vcc_lo, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_ADD_F32_e32 killed $sgpr3, killed $vgpr4, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_cndmask_e64_vcc_fadd_sgpr_src1 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vcc = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_CNDMASK_B32_e64 0, $vgpr0, 0, killed $sgpr0, killed $vcc_lo, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_ADD_F32_e32 killed $sgpr3, killed $vgpr4, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $sgpr3 = IMPLICIT_DEF @@ -3024,6 +3852,17 @@ body: | ; PAIR-NEXT: $sgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $sgpr0, 0, killed $vgpr3, 0, killed $vgpr4, $vcc_lo, implicit $exec, implicit $exec, implicit killed $vcc_lo, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e64_cndmask_e32 + ; LOWER: liveins: $vcc_lo + ; LOWER-NEXT: {{ $}} + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $sgpr0, 0, killed $vgpr3, 0, killed $vgpr4, $vcc_lo, implicit $exec, implicit $exec, implicit killed $vcc_lo, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -3063,6 +3902,17 @@ body: | ; PAIR-NEXT: $sgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, killed $sgpr0, implicit $exec, implicit killed $vcc_lo, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e32_cndmask_e64 + ; LOWER: liveins: $vcc_lo + ; LOWER-NEXT: {{ $}} + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, $vcc_lo, 0, killed $vgpr3, 0, killed $vgpr4, killed $sgpr0, implicit $exec, implicit killed $vcc_lo, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -3102,6 +3952,17 @@ body: | ; PAIR-NEXT: $sgpr0 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_gfx1250 $vgpr0, $vgpr1, killed $vgpr3, killed $vgpr4, implicit $vcc_lo, implicit $exec, implicit $vcc_lo, implicit $exec, implicit killed $vcc_lo, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e32_cndmask_e32 + ; LOWER: liveins: $vcc_lo + ; LOWER-NEXT: {{ $}} + ; LOWER-NEXT: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_gfx1250 $vgpr0, $vgpr1, killed $vgpr3, killed $vgpr4, implicit $vcc_lo, implicit $exec, implicit $vcc_lo, implicit $exec, implicit killed $vcc_lo, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -3138,6 +3999,16 @@ body: | ; PAIR-NEXT: $sgpr1 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $sgpr0, 0, killed $vgpr3, 0, killed $vgpr4, killed $sgpr1, implicit $exec, implicit $exec, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e64_cndmask_e64 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $sgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, killed $sgpr0, 0, killed $vgpr3, 0, killed $vgpr4, killed $sgpr1, implicit $exec, implicit $exec, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -3171,6 +4042,14 @@ body: | ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_ADD_F32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr3, 0, killed $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fadd_e64_fadd_e64 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_ADD_F32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 0, $vgpr1, 0, killed $vgpr3, 0, killed $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -3202,6 +4081,14 @@ body: | ; PAIR-NEXT: $vgpr3 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_ADD_F32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 1, $vgpr1, 0, killed $vgpr3, 0, killed $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_fadd_e64_neg_fadd_e32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_ADD_F32_e32_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0, 1, $vgpr1, 0, killed $vgpr3, 0, killed $vgpr2, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -3234,6 +4121,15 @@ body: | ; PAIR-NEXT: $vgpr6 = V_ADD_F32_e64 0, $vgpr0, 3, $vgpr1, 0, 0, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec ; PAIR-NEXT: $vgpr7 = V_ADD_F32_e32 killed $vgpr3, killed $vgpr2, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_fadd_e64_abs_neg_fadd_e32 + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = V_ADD_F32_e64 0, $vgpr0, 3, $vgpr1, 0, 0, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr8 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; LOWER-NEXT: $vgpr7 = V_ADD_F32_e32 killed $vgpr3, killed $vgpr2, implicit $mode, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr2 = IMPLICIT_DEF @@ -3265,6 +4161,14 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MUL_F64_pseudo_e32_X_SUB_F32_e32_e96_gfx1250 1, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_mul_f64_e64_sub_f32_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MUL_F64_pseudo_e32_X_SUB_F32_e32_e96_gfx1250 1, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -3296,6 +4200,14 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MUL_F64_pseudo_e32_X_SUBREV_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 1, killed $vgpr6, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_mul_f64_e32_subrev_f32_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MUL_F64_pseudo_e32_X_SUBREV_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 1, killed $vgpr6, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -3327,6 +4239,14 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MIN_NUM_F64_e32_X_MUL_F32_e32_e96_gfx1250 1, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_min_num_f64_e64_mul_f32_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MIN_NUM_F64_e32_X_MUL_F32_e32_e96_gfx1250 1, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -3358,6 +4278,14 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MIN_NUM_F64_e32_X_MUL_LEGACY_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 1, killed $vgpr6, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_min_num_f64_e32_mul_legacy_f32_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MIN_NUM_F64_e32_X_MUL_LEGACY_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 1, killed $vgpr6, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -3389,6 +4317,14 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MAX_NUM_F64_e32_X_MIN_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 1, killed $vgpr2_vgpr3, 1, killed $vgpr6, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_max_num_f64_e64_min_f32_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MAX_NUM_F64_e32_X_MIN_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 1, killed $vgpr2_vgpr3, 1, killed $vgpr6, 0, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -3420,6 +4356,14 @@ body: | ; PAIR-NEXT: $vgpr6 = IMPLICIT_DEF ; PAIR-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MAX_NUM_F64_e32_X_MAX_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_max_num_f64_e32_max_f32_neg + ; LOWER: $vgpr0_vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr8_vgpr9, $vgpr7 = V_DUAL_MAX_NUM_F64_e32_X_MAX_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 1, killed $vgpr4, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0_vgpr1 = IMPLICIT_DEF $vgpr2_vgpr3 = IMPLICIT_DEF $vgpr4 = IMPLICIT_DEF @@ -3453,6 +4397,15 @@ body: | ; PAIR-NEXT: $vgpr2_vgpr3, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_FMAC_F32_e32_e96_gfx1250 0, 10, 0, killed $vgpr10_vgpr11, 0, $vgpr0, 1, $vgpr1, killed $vgpr6, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec ; PAIR-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 10, implicit $exec ; PAIR-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_add_f64_fmac_f32_e64_neg + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr10_vgpr11 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr2_vgpr3, $vgpr6 = V_DUAL_ADD_F64_pseudo_e32_X_FMAC_F32_e32_e96_gfx1250 0, 10, 0, killed $vgpr10_vgpr11, 0, $vgpr0, 1, $vgpr1, killed $vgpr6, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec + ; LOWER-NEXT: $vgpr2_vgpr3 = V_MOV_B64_e32 10, implicit $exec + ; LOWER-NEXT: $vgpr5 = V_BFM_B32_e64 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr6 = IMPLICIT_DEF @@ -3485,6 +4438,14 @@ body: | ; PAIR-NEXT: $vgpr4 = IMPLICIT_DEF ; PAIR-NEXT: $vcc = IMPLICIT_DEF ; PAIR-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 1, killed $vgpr0, 0, killed $vgpr1, $vcc_lo, 1, killed $vgpr3, 0, killed $vgpr4, killed $vcc_lo, implicit $exec, implicit $exec, implicit $exec + ; + ; LOWER-LABEL: name: vopd_combine_cndmask_e64_neg_cndmask_e64_neg + ; LOWER: $vgpr0 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr1 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr3 = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr4 = IMPLICIT_DEF + ; LOWER-NEXT: $vcc = IMPLICIT_DEF + ; LOWER-NEXT: $vgpr6, $vgpr7 = V_DUAL_CNDMASK_B32_e32_X_CNDMASK_B32_e32_e96_gfx1250 1, killed $vgpr0, 0, killed $vgpr1, $vcc_lo, 1, killed $vgpr3, 0, killed $vgpr4, killed $vcc_lo, implicit $exec, implicit $exec, implicit $exec $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF $vgpr3 = IMPLICIT_DEF @@ -3511,6 +4472,12 @@ body: | ; PAIR-NEXT: {{ $}} ; PAIR-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec ; PAIR-NEXT: $vgpr0 = V_ADD_F32_e64_dpp killed $vgpr0, 0, killed $vgpr2, 0, killed $vgpr1, 0, 1, 1, 15, 15, 1, implicit $mode, implicit $exec + ; + ; LOWER-LABEL: name: vopd_no_combine_dpp + ; LOWER: liveins: $vgpr0, $vgpr1, $vgpr2 + ; LOWER-NEXT: {{ $}} + ; LOWER-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec + ; LOWER-NEXT: $vgpr0 = V_ADD_F32_e64_dpp killed $vgpr0, 0, killed $vgpr2, 0, killed $vgpr1, 0, 1, 1, 15, 15, 1, implicit $mode, implicit $exec $vgpr3 = V_MOV_B32_e32 0, implicit $exec $vgpr0 = V_ADD_F32_e64_dpp $vgpr0, 0, $vgpr2, 0, $vgpr1, 0, 1, 1, 15, 15, 1, implicit $mode, implicit $exec ...