| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | |
| # RUN: llc -mtriple=amdgpu8.03-amd-amdhsa -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX8 %s | |
| # RUN: llc -mtriple=amdgpu9.06-amd-amdhsa -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s | |
| # RUN: llc -mtriple=amdgpu10.30-amd-amdhsa -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s | |
| # Tests for tryFoldRedundantAnd optimization. | |
| # This optimization eliminates a child AND instruction when its mask is a superset | |
| # of the parent instruction's mask. The parent can be either an explicit AND | |
| # instruction or an instruction that implicitly zeros high bits. | |
| # Test we recognize all forms of and with mask as clearing the high bits. | |
| # Tests in this section have a parent instruction that implicitly zeros high bits. | |
| --- | |
| name: v_cvt_f16_f32_altmask | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_cvt_f16_f32_altmask | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %smask:sreg_32 = S_MOV_B32 65535 | |
| ; GFX8-NEXT: %vmask:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; GFX8-NEXT: $vgpr1 = COPY %op | |
| ; GFX8-NEXT: $vgpr2 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_cvt_f16_f32_altmask | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %smask:sreg_32 = S_MOV_B32 65535 | |
| ; GFX9-NEXT: %vmask:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op | |
| ; GFX9-NEXT: $vgpr1 = COPY %op | |
| ; GFX9-NEXT: $vgpr2 = COPY %op | |
| ; | |
| ; GFX10-LABEL: name: v_cvt_f16_f32_altmask | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and0:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: %and1:vgpr_32 = V_AND_B32_e64 65535, %op, implicit $exec | |
| ; GFX10-NEXT: %and2:vgpr_32 = V_AND_B32_e64 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and0 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and1 | |
| ; GFX10-NEXT: $vgpr2 = COPY %and2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed %0, 0, 0, implicit $mode, implicit $exec | |
| %and0:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| %smask:sreg_32 = S_MOV_B32 65535 | |
| %and1:vgpr_32 = V_AND_B32_e64 %smask, %op, implicit $exec | |
| %vmask:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec | |
| %and2:vgpr_32 = V_AND_B32_e64 %vmask, %op, implicit $exec | |
| $vgpr0 = COPY %and0 | |
| $vgpr1 = COPY %and1 | |
| $vgpr2 = COPY %and2 | |
| ... | |
| # Test we do not assume the high bits are zero | |
| --- | |
| name: wrong_mask_value | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: wrong_mask_value | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %mask:sreg_32 = S_MOV_B32 65534 | |
| ; GFX8-NEXT: %and:vgpr_32 = V_AND_B32_e64 %mask, %op, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX9-LABEL: name: wrong_mask_value | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %mask:sreg_32 = S_MOV_B32 65534 | |
| ; GFX9-NEXT: %and:vgpr_32 = V_AND_B32_e64 %mask, %op, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX10-LABEL: name: wrong_mask_value | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e64 65534, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, killed %0, 0, 0, implicit $mode, implicit $exec | |
| %mask:sreg_32 = S_MOV_B32 65534 | |
| %and:vgpr_32 = V_AND_B32_e64 %mask, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_cvt_f16_f32 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_cvt_f16_f32 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_cvt_f16_f32 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_cvt_f16_f32 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_F32_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_F32_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_cvt_f16_u16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_cvt_f16_u16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_cvt_f16_u16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_cvt_f16_u16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_U16_e64 %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_U16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_cvt_f16_i16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_cvt_f16_i16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_cvt_f16_i16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_cvt_f16_i16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_CVT_F16_I16_e64 %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_CVT_F16_I16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_rcp_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_rcp_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_rcp_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_rcp_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_RCP_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_RCP_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_rsq_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_rsq_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_rsq_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_rsq_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_RSQ_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_RSQ_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_sqrt_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_sqrt_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_sqrt_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_sqrt_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_SQRT_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_SQRT_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_log_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_log_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_log_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_log_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_LOG_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_LOG_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_exp_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_exp_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_exp_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_exp_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_EXP_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_EXP_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_sin_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_sin_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_sin_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_sin_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_SIN_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_SIN_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_cos_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_cos_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_cos_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_cos_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_COS_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_COS_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_floor_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_floor_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_floor_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_floor_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_FLOOR_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_FLOOR_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_ceil_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_ceil_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_ceil_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_ceil_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_CEIL_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_CEIL_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_trunc_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_trunc_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_trunc_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_trunc_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_TRUNC_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_TRUNC_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_rndne_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_rndne_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_rndne_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_rndne_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_RNDNE_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_RNDNE_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_fract_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_fract_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_fract_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_fract_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_FRACT_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_FRACT_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_frexp_mant_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_frexp_mant_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_frexp_mant_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_frexp_mant_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_FREXP_MANT_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_frexp_exp_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: v_frexp_exp_f16 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_frexp_exp_f16 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_frexp_exp_f16 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, [[COPY]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 [[COPY]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop1 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %op_vop3:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e64 0, %0, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_FREXP_EXP_I16_F16_e32 %0, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop1:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop1 | |
| ... | |
| --- | |
| name: v_ldexp_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_ldexp_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_ldexp_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_ldexp_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_LDEXP_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_LDEXP_F16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_lshlrev_b16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_lshlrev_b16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_lshlrev_b16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_lshlrev_b16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_LSHLREV_B16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_LSHLREV_B16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_lshrrev_b16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_lshrrev_b16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_lshrrev_b16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_lshrrev_b16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_LSHRREV_B16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_LSHRREV_B16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_ashrrev_i16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_ashrrev_i16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_ashrrev_i16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_ashrrev_i16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ASHRREV_I16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_ASHRREV_I16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_add_u16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_add_u16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_add_u16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_add_u16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ADD_U16_e64 %0, %1, 0, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_ADD_U16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_sub_u16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_sub_u16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_sub_u16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_sub_u16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_SUB_U16_e64 %0, %1, 0, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_SUB_U16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_subrev_u16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_subrev_u16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_subrev_u16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_subrev_u16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 [[COPY]], [[COPY1]], 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_SUBREV_U16_e64 %0, %1, 0, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_SUBREV_U16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_mul_lo_u16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_mul_lo_u16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_mul_lo_u16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_mul_lo_u16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_MUL_LO_U16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_MUL_LO_U16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_add_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_add_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_add_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_add_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_sub_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_sub_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_sub_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_sub_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_subrev_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_subrev_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_subrev_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_subrev_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_mul_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_mul_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_mul_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_mul_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_max_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_max_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_max_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_max_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_min_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_min_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX9-LABEL: name: v_min_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop1 | |
| ; | |
| ; GFX10-LABEL: name: v_min_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_ADD_F16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec | |
| %op_vop1:vgpr_32 = nofpexcept V_ADD_F16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop1, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_max_u16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_max_u16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_max_u16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_max_u16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_MAX_U16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_MAX_U16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_min_u16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_min_u16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_min_u16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_min_u16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_MIN_U16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_MIN_U16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_max_i16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_max_i16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_max_i16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_max_i16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_MAX_I16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_MAX_I16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_min_i16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_min_i16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX8-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX9-LABEL: name: v_min_i16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; GFX9-NEXT: $vgpr1 = COPY %op_vop2 | |
| ; | |
| ; GFX10-LABEL: name: v_min_i16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 [[COPY]], [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; GFX10-NEXT: $vgpr1 = COPY %and_vop2 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op_vop3:vgpr_32 = nofpexcept V_MIN_I16_e64 %0, %1, implicit $mode, implicit $exec | |
| %op_vop2:vgpr_32 = nofpexcept V_MIN_I16_e32 %0, %1, implicit $mode, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| $vgpr0 = COPY %and_vop3 | |
| $vgpr1 = COPY %and_vop2 | |
| ... | |
| --- | |
| name: v_mad_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-LABEL: name: v_mad_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_mad_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX10-LABEL: name: v_mad_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %2:vgpr_32 = COPY $vgpr2 | |
| %op:vgpr_32 = nofpexcept V_MAD_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_fma_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-LABEL: name: v_fma_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_fma_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX10-LABEL: name: v_fma_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %2:vgpr_32 = COPY $vgpr2 | |
| %op:vgpr_32 = nofpexcept V_FMA_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_div_fixup_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-LABEL: name: v_div_fixup_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_div_fixup_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX10-LABEL: name: v_div_fixup_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %2:vgpr_32 = COPY $vgpr2 | |
| %op:vgpr_32 = nofpexcept V_DIV_FIXUP_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_madak_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_madak_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_MADAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_madak_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_MADAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX10-LABEL: name: v_madak_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_MADAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op:vgpr_32 = nofpexcept V_MADAK_F16 %0, %1, 1234, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_madmk_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_madmk_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_MADMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_madmk_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_MADMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX10-LABEL: name: v_madmk_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_MADMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op:vgpr_32 = nofpexcept V_MADMK_F16 %0, 1234, %1, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_fmaak_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_fmaak_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_FMAAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_fmaak_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_FMAAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX10-LABEL: name: v_fmaak_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_FMAAK_F16 [[COPY]], [[COPY1]], 1234, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op:vgpr_32 = nofpexcept V_FMAAK_F16 %0, %1, 1234, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_fmamk_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1 | |
| ; GFX8-LABEL: name: v_fmamk_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_FMAMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op | |
| ; | |
| ; GFX9-LABEL: name: v_fmamk_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_FMAMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX10-LABEL: name: v_fmamk_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_FMAMK_F16 [[COPY]], 1234, [[COPY1]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %op:vgpr_32 = nofpexcept V_FMAMK_F16 %0, 1234, %1, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: v_mac_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-LABEL: name: v_mac_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop2 | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; | |
| ; GFX9-LABEL: name: v_mac_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX9-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and_vop2 | |
| ; GFX9-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; | |
| ; GFX10-LABEL: name: v_mac_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop2 | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %2:vgpr_32 = COPY $vgpr2 | |
| %op_vop2:vgpr_32 = nofpexcept V_MAC_F16_e32 %0, %1, %2, implicit $mode, implicit $exec | |
| %op_vop3:vgpr_32 = nofpexcept V_MAC_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| $vgpr0 = COPY %and_vop2 | |
| $vgpr0 = COPY %and_vop3 | |
| ... | |
| --- | |
| name: v_fmac_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-LABEL: name: v_fmac_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX8-NEXT: %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop2 | |
| ; GFX8-NEXT: $vgpr0 = COPY %op_vop3 | |
| ; | |
| ; GFX9-LABEL: name: v_fmac_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX9-NEXT: %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX9-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and_vop2 | |
| ; GFX9-NEXT: $vgpr0 = COPY %and_vop3 | |
| ; | |
| ; GFX10-LABEL: name: v_fmac_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX10-NEXT: %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 [[COPY]], [[COPY1]], [[COPY2]], implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| ; GFX10-NEXT: %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop2 | |
| ; GFX10-NEXT: $vgpr0 = COPY %and_vop3 | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %2:vgpr_32 = COPY $vgpr2 | |
| %op_vop2:vgpr_32 = nofpexcept V_FMAC_F16_e32 %0, %1, %2, implicit $mode, implicit $exec | |
| %op_vop3:vgpr_32 = nofpexcept V_FMAC_F16_e64 0, %0, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec | |
| %and_vop2:vgpr_32 = V_AND_B32_e32 65535, %op_vop2, implicit $exec | |
| %and_vop3:vgpr_32 = V_AND_B32_e32 65535, %op_vop3, implicit $exec | |
| $vgpr0 = COPY %and_vop2 | |
| $vgpr0 = COPY %and_vop3 | |
| ... | |
| --- | |
| name: no_fold_v_mad_mixlo_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX8-LABEL: name: no_fold_v_mad_mixlo_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX9-LABEL: name: no_fold_v_mad_mixlo_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX10-LABEL: name: no_fold_v_mad_mixlo_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %2:vgpr_32 = COPY $vgpr2 | |
| %3:vgpr_32 = COPY $vgpr3 | |
| %op:vgpr_32 = nofpexcept V_MAD_MIXLO_F16 0, %0, 0, %1, 0, %2, 0, %3, 0, 0, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| --- | |
| name: no_fold_v_mad_mixhi_f16 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX8-LABEL: name: no_fold_v_mad_mixhi_f16 | |
| ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 | |
| ; GFX8-NEXT: %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX8-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX8-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX9-LABEL: name: no_fold_v_mad_mixhi_f16 | |
| ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 | |
| ; GFX9-NEXT: %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX9-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX9-NEXT: $vgpr0 = COPY %and | |
| ; | |
| ; GFX10-LABEL: name: no_fold_v_mad_mixhi_f16 | |
| ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 | |
| ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 | |
| ; GFX10-NEXT: %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, [[COPY3]], 0, 0, implicit $mode, implicit $exec | |
| ; GFX10-NEXT: %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| ; GFX10-NEXT: $vgpr0 = COPY %and | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = COPY $vgpr1 | |
| %2:vgpr_32 = COPY $vgpr2 | |
| %3:vgpr_32 = COPY $vgpr3 | |
| %op:vgpr_32 = nofpexcept V_MAD_MIXHI_F16 0, %0, 0, %1, 0, %2, 0, %3, 0, 0, implicit $mode, implicit $exec | |
| %and:vgpr_32 = V_AND_B32_e32 65535, %op, implicit $exec | |
| $vgpr0 = COPY %and | |
| ... | |
| # Tests in this section have a parent AND instruction. | |
| # | |
| # Variations tested: | |
| # - S_AND_B32 with live vs. dead SCC (implicit def liveness) | |
| # - S_AND_B32 with different operand positions (imm in src0 vs src1) | |
| # - V_AND_B32_e32, V_AND_B32_e64 in various parent/child combinations | |
| # - Mixed scalar/vector: S_AND parent with V_AND child using materialized VGPR immediate | |
| # - Non-contiguous masks (e.g., 0xf0f, 0x5ff) to verify bitwise subset checking | |
| # | |
| # Negative tests verify optimization does NOT occur when: | |
| # - SCC implicit def is live | |
| # - Child mask doesn't fully contain parent mask | |
| --- | |
| name: fold_redundant_and_scc_dead | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_scc_dead | |
| ; GFX8: liveins: $sgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 16383, implicit-def dead $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_scc_dead | |
| ; GFX9: liveins: $sgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 16383, implicit-def dead $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_scc_dead | |
| ; GFX10: liveins: $sgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 16383, implicit-def dead $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sreg_32 = S_AND_B32 %0:sreg_32, 16383, implicit-def dead $scc | |
| %2:sreg_32 = S_AND_B32 %1:sreg_32, 32767, implicit-def dead $scc | |
| S_ENDPGM 0, implicit %2:sreg_32 | |
| ... | |
| --- | |
| --- | |
| name: fold_redundant_and_imm_in_src0 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_imm_in_src0 | |
| ; GFX8: liveins: $sgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 127, [[COPY]], implicit-def dead $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_imm_in_src0 | |
| ; GFX9: liveins: $sgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 127, [[COPY]], implicit-def dead $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_imm_in_src0 | |
| ; GFX10: liveins: $sgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 127, [[COPY]], implicit-def dead $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sreg_32 = S_AND_B32 127, %0:sreg_32, implicit-def dead $scc | |
| %2:sreg_32 = S_AND_B32 1535, %1:sreg_32, implicit-def dead $scc | |
| S_ENDPGM 0, implicit %2:sreg_32 | |
| ... | |
| --- | |
| name: fold_redundant_and_mixed_imm_positions | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_mixed_imm_positions | |
| ; GFX8: liveins: $sgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 1023, implicit-def dead $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_mixed_imm_positions | |
| ; GFX9: liveins: $sgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 1023, implicit-def dead $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_mixed_imm_positions | |
| ; GFX10: liveins: $sgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 1023, implicit-def dead $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sreg_32 = S_AND_B32 %0:sreg_32, 1023, implicit-def dead $scc | |
| %2:sreg_32 = S_AND_B32 2047, %1:sreg_32, implicit-def dead $scc | |
| S_ENDPGM 0, implicit %2:sreg_32 | |
| ... | |
| --- | |
| name: fold_redundant_and_mixed_imm_positions_2 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_mixed_imm_positions_2 | |
| ; GFX8: liveins: $sgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 8191, [[COPY]], implicit-def dead $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_mixed_imm_positions_2 | |
| ; GFX9: liveins: $sgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 8191, [[COPY]], implicit-def dead $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_mixed_imm_positions_2 | |
| ; GFX10: liveins: $sgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 8191, [[COPY]], implicit-def dead $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sreg_32 = S_AND_B32 8191, %0:sreg_32, implicit-def dead $scc | |
| %2:sreg_32 = S_AND_B32 %1:sreg_32, 65535, implicit-def dead $scc | |
| S_ENDPGM 0, implicit %2:sreg_32 | |
| ... | |
| --- | |
| name: fold_redundant_and_vector_e32_e64 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_vector_e32_e64 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 63, [[COPY]], implicit $exec | |
| ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 127 | |
| ; GFX8-NEXT: S_NOP 0, implicit [[V_AND_B32_e32_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_vector_e32_e64 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 63, [[COPY]], implicit $exec | |
| ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 127 | |
| ; GFX9-NEXT: S_NOP 0, implicit [[V_AND_B32_e32_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_vector_e32_e64 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 63, [[COPY]], implicit $exec | |
| ; GFX10-NEXT: S_NOP 0, implicit [[V_AND_B32_e32_]] | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:vgpr_32 = V_AND_B32_e32 63, %0:vgpr_32, implicit $exec | |
| %2:sreg_32 = S_MOV_B32 127 | |
| %3:vgpr_32 = V_AND_B32_e64 %2:sreg_32, %1:vgpr_32, implicit $exec | |
| S_NOP 0, implicit %3:vgpr_32 | |
| ... | |
| --- | |
| name: fold_redundant_and_vector_e64_e32 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_vector_e64_e32 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], 31, implicit $exec | |
| ; GFX8-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_vector_e64_e32 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], 31, implicit $exec | |
| ; GFX9-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_vector_e64_e32 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], 31, implicit $exec | |
| ; GFX10-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:sreg_32 = S_MOV_B32 31 | |
| %2:vgpr_32 = V_AND_B32_e64 %0:vgpr_32, %1:sreg_32, implicit $exec | |
| %3:vgpr_32 = V_AND_B32_e32 255, %2:vgpr_32, implicit $exec | |
| S_NOP 0, implicit %3:vgpr_32 | |
| ... | |
| --- | |
| name: fold_redundant_and_vector_e64_e64 | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $vgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_vector_e64_e64 | |
| ; GFX8: liveins: $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 15, [[COPY]], implicit $exec | |
| ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 511 | |
| ; GFX8-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_vector_e64_e64 | |
| ; GFX9: liveins: $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 15, [[COPY]], implicit $exec | |
| ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 511 | |
| ; GFX9-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_vector_e64_e64 | |
| ; GFX10: liveins: $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 15, [[COPY]], implicit $exec | |
| ; GFX10-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| %0:vgpr_32 = COPY $vgpr0 | |
| %1:sreg_32 = S_MOV_B32 15 | |
| %2:vgpr_32 = V_AND_B32_e64 %1:sreg_32, %0:vgpr_32, implicit $exec | |
| %3:sreg_32 = S_MOV_B32 511 | |
| %4:vgpr_32 = V_AND_B32_e64 %2:vgpr_32, %3:sreg_32, implicit $exec | |
| S_NOP 0, implicit %4:vgpr_32 | |
| ... | |
| --- | |
| name: fold_redundant_and_src_subclass | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0 | |
| ; GFX8-LABEL: name: fold_redundant_and_src_subclass | |
| ; GFX8: liveins: $sgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sgpr_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX8-NEXT: S_NOP 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: fold_redundant_and_src_subclass | |
| ; GFX9: liveins: $sgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sgpr_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX9-NEXT: S_NOP 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: fold_redundant_and_src_subclass | |
| ; GFX10: liveins: $sgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sgpr_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX10-NEXT: S_NOP 0, implicit [[S_AND_B32_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sgpr_32 = S_AND_B32 %0:sreg_32, 255, implicit-def dead $scc | |
| %2:sreg_32 = S_AND_B32 %1:sgpr_32, 65535, implicit-def dead $scc | |
| S_NOP 0, implicit %2:sreg_32 | |
| ... | |
| --- | |
| name: no_fold_redundant_and_scalar_parent_vgpr_imm_child | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0 | |
| ; GFX8-LABEL: name: no_fold_redundant_and_scalar_parent_vgpr_imm_child | |
| ; GFX8: liveins: $sgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX8-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 511, implicit $exec | |
| ; GFX8-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[V_MOV_B32_e32_]], [[S_AND_B32_]], implicit $exec | |
| ; GFX8-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| ; | |
| ; GFX9-LABEL: name: no_fold_redundant_and_scalar_parent_vgpr_imm_child | |
| ; GFX9: liveins: $sgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 511, implicit $exec | |
| ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[V_MOV_B32_e32_]], [[S_AND_B32_]], implicit $exec | |
| ; GFX9-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| ; | |
| ; GFX10-LABEL: name: no_fold_redundant_and_scalar_parent_vgpr_imm_child | |
| ; GFX10: liveins: $sgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 511, [[S_AND_B32_]], implicit $exec | |
| ; GFX10-NEXT: S_NOP 0, implicit [[V_AND_B32_e64_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sreg_32 = S_AND_B32 %0:sreg_32, 255, implicit-def dead $scc | |
| %2:vgpr_32 = V_MOV_B32_e32 511, implicit $exec | |
| %3:vgpr_32 = V_AND_B32_e64 %2:vgpr_32, %1:sreg_32, implicit $exec | |
| S_NOP 0, implicit %3:vgpr_32 | |
| ... | |
| --- | |
| name: no_fold_redundant_and_sgpr_into_vgpr_use | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0, $vgpr0 | |
| ; GFX8-LABEL: name: no_fold_redundant_and_sgpr_into_vgpr_use | |
| ; GFX8: liveins: $sgpr0, $vgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX8-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 511, implicit $exec | |
| ; GFX8-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[V_MOV_B32_e32_]], [[S_AND_B32_]], implicit $exec | |
| ; GFX8-NEXT: [[DS_BPERMUTE_B32_:%[0-9]+]]:vgpr_32 = DS_BPERMUTE_B32 [[COPY1]], [[V_AND_B32_e64_]], 0, implicit $exec | |
| ; GFX8-NEXT: S_NOP 0, implicit [[DS_BPERMUTE_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: no_fold_redundant_and_sgpr_into_vgpr_use | |
| ; GFX9: liveins: $sgpr0, $vgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 511, implicit $exec | |
| ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[V_MOV_B32_e32_]], [[S_AND_B32_]], implicit $exec | |
| ; GFX9-NEXT: [[DS_BPERMUTE_B32_:%[0-9]+]]:vgpr_32 = DS_BPERMUTE_B32 [[COPY1]], [[V_AND_B32_e64_]], 0, implicit $exec | |
| ; GFX9-NEXT: S_NOP 0, implicit [[DS_BPERMUTE_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: no_fold_redundant_and_sgpr_into_vgpr_use | |
| ; GFX10: liveins: $sgpr0, $vgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 511, [[S_AND_B32_]], implicit $exec | |
| ; GFX10-NEXT: [[DS_BPERMUTE_B32_:%[0-9]+]]:vgpr_32 = DS_BPERMUTE_B32 [[COPY1]], [[V_AND_B32_e64_]], 0, implicit $exec | |
| ; GFX10-NEXT: S_NOP 0, implicit [[DS_BPERMUTE_B32_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:vgpr_32 = COPY $vgpr0 | |
| %2:sreg_32 = S_AND_B32 %0:sreg_32, 255, implicit-def dead $scc | |
| %3:vgpr_32 = V_MOV_B32_e32 511, implicit $exec | |
| %4:vgpr_32 = V_AND_B32_e64 %3:vgpr_32, %2:sreg_32, implicit $exec | |
| %5:vgpr_32 = DS_BPERMUTE_B32 %1:vgpr_32, %4:vgpr_32, 0, implicit $exec | |
| S_NOP 0, implicit %5:vgpr_32 | |
| ... | |
| --- | |
| name: no_fold_redundant_and_scc_live | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0, $sgpr1, $sgpr2 | |
| ; GFX8-LABEL: name: no_fold_redundant_and_scc_live | |
| ; GFX8: liveins: $sgpr0, $sgpr1, $sgpr2 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def $scc | |
| ; GFX8-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_AND_B32_]], 3855, implicit-def $scc | |
| ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 | |
| ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 | |
| ; GFX8-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY1]], [[COPY2]], implicit $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_1]], implicit [[S_CSELECT_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: no_fold_redundant_and_scc_live | |
| ; GFX9: liveins: $sgpr0, $sgpr1, $sgpr2 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def $scc | |
| ; GFX9-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_AND_B32_]], 3855, implicit-def $scc | |
| ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 | |
| ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 | |
| ; GFX9-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY1]], [[COPY2]], implicit $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_1]], implicit [[S_CSELECT_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: no_fold_redundant_and_scc_live | |
| ; GFX10: liveins: $sgpr0, $sgpr1, $sgpr2 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def $scc | |
| ; GFX10-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_AND_B32_]], 3855, implicit-def $scc | |
| ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 | |
| ; GFX10-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 | |
| ; GFX10-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY1]], [[COPY2]], implicit $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_1]], implicit [[S_CSELECT_B32_]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sreg_32 = S_AND_B32 %0:sreg_32, 255, implicit-def $scc | |
| %2:sreg_32 = S_AND_B32 %1:sreg_32, 3855, implicit-def $scc | |
| %3:sreg_32 = COPY $sgpr1 | |
| %4:sreg_32 = COPY $sgpr2 | |
| %5:sreg_32 = S_CSELECT_B32 %3:sreg_32, %4:sreg_32, implicit $scc | |
| S_ENDPGM 0, implicit %2:sreg_32, implicit %5:sreg_32 | |
| ... | |
| --- | |
| name: no_fold_redundant_and_child_mask_insufficient | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| liveins: $sgpr0 | |
| ; GFX8-LABEL: name: no_fold_redundant_and_child_mask_insufficient | |
| ; GFX8: liveins: $sgpr0 | |
| ; GFX8-NEXT: {{ $}} | |
| ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX8-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX8-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_AND_B32_]], 127, implicit-def dead $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_1]] | |
| ; | |
| ; GFX9-LABEL: name: no_fold_redundant_and_child_mask_insufficient | |
| ; GFX9: liveins: $sgpr0 | |
| ; GFX9-NEXT: {{ $}} | |
| ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX9-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX9-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_AND_B32_]], 127, implicit-def dead $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_1]] | |
| ; | |
| ; GFX10-LABEL: name: no_fold_redundant_and_child_mask_insufficient | |
| ; GFX10: liveins: $sgpr0 | |
| ; GFX10-NEXT: {{ $}} | |
| ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 | |
| ; GFX10-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[COPY]], 255, implicit-def dead $scc | |
| ; GFX10-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_AND_B32_]], 127, implicit-def dead $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_1]] | |
| %0:sreg_32 = COPY $sgpr0 | |
| %1:sreg_32 = S_AND_B32 %0:sreg_32, 255, implicit-def dead $scc | |
| %2:sreg_32 = S_AND_B32 %1:sreg_32, 127, implicit-def dead $scc | |
| S_ENDPGM 0, implicit %2:sreg_32 | |
| ... | |
| --- | |
| name: no_fold_redundant_and_undef_src | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| ; GFX8-LABEL: name: no_fold_redundant_and_undef_src | |
| ; GFX8: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 undef %1:sreg_32, 127, implicit-def dead $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: no_fold_redundant_and_undef_src | |
| ; GFX9: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 undef %1:sreg_32, 127, implicit-def dead $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: no_fold_redundant_and_undef_src | |
| ; GFX10: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 undef %1:sreg_32, 127, implicit-def dead $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| %0:sreg_32 = S_AND_B32 undef %1:sreg_32, 127, implicit-def dead $scc | |
| S_ENDPGM 0, implicit %0:sreg_32 | |
| ... | |
| --- | |
| name: no_fold_redundant_and_undef_src_commuted | |
| tracksRegLiveness: true | |
| body: | | |
| bb.0: | |
| ; GFX8-LABEL: name: no_fold_redundant_and_undef_src_commuted | |
| ; GFX8: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 127, undef %1:sreg_32, implicit-def dead $scc | |
| ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX9-LABEL: name: no_fold_redundant_and_undef_src_commuted | |
| ; GFX9: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 127, undef %1:sreg_32, implicit-def dead $scc | |
| ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| ; | |
| ; GFX10-LABEL: name: no_fold_redundant_and_undef_src_commuted | |
| ; GFX10: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 127, undef %1:sreg_32, implicit-def dead $scc | |
| ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]] | |
| %0:sreg_32 = S_AND_B32 127, undef %1:sreg_32, implicit-def dead $scc | |
| S_ENDPGM 0, implicit %0:sreg_32 | |
| ... |