Artificial registers were added in
eb0c510ecde667cd911682cc1e855f73f341d134
as a means of giving super-registers heavier weights than that
of their subregisters, even when they only contain a single
physical subregister.
Artifical registers thus do exist in code and participate in
register unit weight calculations, but are not supposed to be
available for register allocation.
This patch completes the support for artificial registers to:
- Ignore artificial registers when joining register unit uber
sets. Artificial registers may be members of classes that
together include registers and their sub-registers, making it
impossible to compute normalised weights for uber sets they
belong to.
We have a use case downstream relying on this being supported,
which allows to avoid introducing a large number of additional
register classes.
- Not generate purely artificial register class intersections.
It is critical not to have such classes, as the common LLVM
codegen infrastructure will try to use them to constrain
classes of virtual registers instead of producing COPYs
whenever both the source and target register classes contain
the same artificial registers.
- Not generate sub-classes where classes with the same
non-artificial members already exist. This is mostly for
convenience. For example, the HI16-capable subset of AMDGPU's
AV_32 is VGPR_32, except VGPR_32 also contains the artificial
staging registers. If the staging registers are not ignored,
we'll end up having an additional generated register class,
AV_32_with_hi16_in_VGPR_16, -- harmless, but also useless.
Eliminates a few inferred AMDGPU register classes:
- VS_32_with_hi16
- VS_32_Lo256_with_hi16
- VS_32_Lo128_with_hi16
- VRegOrLds_32_and_VS_32_Lo256
- VRegOrLds_32_and_VS_32_Lo128
- SRegOrLds_32_and_VRegOrLds_32
Causes no register class changes for other targets.
1018 lines
67 KiB
YAML
1018 lines
67 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
|
|
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 -run-pass=localstackalloc -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX803 %s
|
|
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=localstackalloc -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX900 %s
|
|
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 -run-pass=localstackalloc -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX942 %s
|
|
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 -mattr=+wavefrontsize64 -run-pass=localstackalloc -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
|
|
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+wavefrontsize64 -run-pass=localstackalloc -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX12 %s
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e32__literal_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets
|
|
; GFX803: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 256
|
|
; GFX803-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX803-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_CO_U32_e64_]]
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, [[V_ADD_CO_U32_e64_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets
|
|
; GFX900: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 256
|
|
; GFX900-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX900-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX900-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_U32_e64_]]
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, [[V_ADD_U32_e64_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets
|
|
; GFX942: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 256
|
|
; GFX942-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0
|
|
; GFX942-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32_xexec_hi = S_ADD_I32 killed [[S_MOV_B32_]], [[S_MOV_B32_1]], implicit-def dead $scc
|
|
; GFX942-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, [[COPY1]], implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets
|
|
; GFX10: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 256
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_U32_e64_]]
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, [[V_ADD_U32_e64_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets
|
|
; GFX12: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 256
|
|
; GFX12-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32_xexec_hi = S_ADD_I32 killed [[S_MOV_B32_]], [[S_MOV_B32_1]], implicit-def dead $scc
|
|
; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX12-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, [[COPY1]], implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:vgpr_32 = V_ADD_CO_U32_e32 256, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32 = V_ADD_CO_U32_e32 512, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e32__literal_offsets_live_vcc
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets_live_vcc
|
|
; GFX803: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 512, %stack.0, implicit-def $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]], implicit $vcc
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets_live_vcc
|
|
; GFX900: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 512, %stack.0, implicit-def $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]], implicit $vcc
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets_live_vcc
|
|
; GFX942: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 512, %stack.0, implicit-def $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]], implicit $vcc
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets_live_vcc
|
|
; GFX10: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 512, %stack.0, implicit-def $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]], implicit $vcc
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e32__literal_offsets_live_vcc
|
|
; GFX12: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 256, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 512, %stack.0, implicit-def $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]], implicit $vcc
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:vgpr_32 = V_ADD_CO_U32_e32 256, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32 = V_ADD_CO_U32_e32 512, %stack.0, implicit-def $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1, implicit $vcc
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e32__inline_imm_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 64, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e32__inline_imm_offsets
|
|
; GFX803: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX803-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX803-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_CO_U32_e64_]]
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 8, [[V_ADD_CO_U32_e64_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e32__inline_imm_offsets
|
|
; GFX900: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX900-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX900-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX900-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_U32_e64_]]
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 8, [[V_ADD_U32_e64_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e32__inline_imm_offsets
|
|
; GFX942: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX942-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0
|
|
; GFX942-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32_xexec_hi = S_ADD_I32 killed [[S_MOV_B32_]], [[S_MOV_B32_1]], implicit-def dead $scc
|
|
; GFX942-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 8, [[COPY1]], implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e32__inline_imm_offsets
|
|
; GFX10: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_U32_e64_]]
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 8, [[V_ADD_U32_e64_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e32__inline_imm_offsets
|
|
; GFX12: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX12-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32_xexec_hi = S_ADD_I32 killed [[S_MOV_B32_]], [[S_MOV_B32_1]], implicit-def dead $scc
|
|
; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX12-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 8, [[COPY1]], implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:vgpr_32 = V_ADD_CO_U32_e32 8, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32 = V_ADD_CO_U32_e32 16, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 64, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets
|
|
; GFX803: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX803-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX803-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_CO_U32_e64_]]
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 8, [[V_ADD_CO_U32_e64_]], 0, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets
|
|
; GFX900: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX900-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX900-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX900-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_U32_e64_]]
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 8, [[V_ADD_U32_e64_]], 0, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets
|
|
; GFX942: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX942-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0
|
|
; GFX942-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32_xexec_hi = S_ADD_I32 killed [[S_MOV_B32_]], [[S_MOV_B32_1]], implicit-def dead $scc
|
|
; GFX942-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 8, [[S_ADD_I32_]], 0, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets
|
|
; GFX10: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[S_MOV_B32_]], [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_ADD_U32_e64_]]
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 8, [[V_ADD_U32_e64_]], 0, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets
|
|
; GFX12: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 8
|
|
; GFX12-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32_xexec_hi = S_ADD_I32 killed [[S_MOV_B32_]], [[S_MOV_B32_1]], implicit-def dead $scc
|
|
; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[COPY]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 8, [[S_ADD_I32_]], 0, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:vgpr_32, dead %2:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, 8, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32, dead %3:sreg_64_xexec = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets_live_vcc
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 64, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets_live_vcc
|
|
; GFX803: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, 8, 0, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX803-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_1]]
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets_live_vcc
|
|
; GFX900: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, 8, 0, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX900-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_1]]
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets_live_vcc
|
|
; GFX942: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, 8, 0, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX942-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_1]]
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets_live_vcc
|
|
; GFX10: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, 8, 0, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX10-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_1]]
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e64__inline_imm_offsets_live_vcc
|
|
; GFX12: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, 8, 0, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX12-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_1]]
|
|
%0:vgpr_32, %2:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, 8, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN implicit %2
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__s_add_i32__literal_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets
|
|
; GFX803: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX803-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets
|
|
; GFX900: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX900-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets
|
|
; GFX942: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX942-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets
|
|
; GFX10: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX10-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets
|
|
; GFX12: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX12-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %0
|
|
%1:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__s_add_i32__inline_imm_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 64, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__s_add_i32__inline_imm_offsets
|
|
; GFX803: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 8, %stack.0, implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX803-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 16, %stack.0, implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__s_add_i32__inline_imm_offsets
|
|
; GFX900: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 8, %stack.0, implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX900-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 16, %stack.0, implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__s_add_i32__inline_imm_offsets
|
|
; GFX942: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 8, %stack.0, implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX942-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 16, %stack.0, implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__s_add_i32__inline_imm_offsets
|
|
; GFX10: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 8, %stack.0, implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX10-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 16, %stack.0, implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__s_add_i32__inline_imm_offsets
|
|
; GFX12: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 8, %stack.0, implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX12-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 16, %stack.0, implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:sreg_32 = S_ADD_I32 8, %stack.0, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %0
|
|
%1:sreg_32 = S_ADD_I32 16, %stack.0, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__s_add_i32__reg_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 64, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr4, $sgpr5
|
|
; GFX803-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
|
|
; GFX803: liveins: $sgpr4, $sgpr5
|
|
; GFX803-NEXT: {{ $}}
|
|
; GFX803-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX803-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX803-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX803-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
|
|
; GFX900: liveins: $sgpr4, $sgpr5
|
|
; GFX900-NEXT: {{ $}}
|
|
; GFX900-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX900-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX900-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX900-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
|
|
; GFX942: liveins: $sgpr4, $sgpr5
|
|
; GFX942-NEXT: {{ $}}
|
|
; GFX942-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX942-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX942-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX942-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
|
|
; GFX10: liveins: $sgpr4, $sgpr5
|
|
; GFX10-NEXT: {{ $}}
|
|
; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX10-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX10-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
|
|
; GFX12: liveins: $sgpr4, $sgpr5
|
|
; GFX12-NEXT: {{ $}}
|
|
; GFX12-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX12-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX12-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX12-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:sreg_32 = COPY $sgpr4
|
|
%1:sreg_32 = COPY $sgpr5
|
|
|
|
%2:sreg_32 = S_ADD_I32 %0, %stack.0, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %2
|
|
%3:sreg_32 = S_ADD_I32 %1, %stack.0, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %3
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__s_add_i32__reg_offsets_commute
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 64, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr4, $sgpr5
|
|
; GFX803-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
|
|
; GFX803: liveins: $sgpr4, $sgpr5
|
|
; GFX803-NEXT: {{ $}}
|
|
; GFX803-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX803-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX803-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX803-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
|
|
; GFX900: liveins: $sgpr4, $sgpr5
|
|
; GFX900-NEXT: {{ $}}
|
|
; GFX900-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX900-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX900-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX900-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
|
|
; GFX942: liveins: $sgpr4, $sgpr5
|
|
; GFX942-NEXT: {{ $}}
|
|
; GFX942-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX942-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX942-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX942-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
|
|
; GFX10: liveins: $sgpr4, $sgpr5
|
|
; GFX10-NEXT: {{ $}}
|
|
; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX10-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX10-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
|
|
; GFX12: liveins: $sgpr4, $sgpr5
|
|
; GFX12-NEXT: {{ $}}
|
|
; GFX12-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
|
|
; GFX12-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
|
|
; GFX12-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX12-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%0:sreg_32 = COPY $sgpr4
|
|
%1:sreg_32 = COPY $sgpr5
|
|
|
|
%2:sreg_32 = S_ADD_I32 %stack.0, %0, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %2
|
|
%3:sreg_32 = S_ADD_I32 %stack.0, %1, implicit-def dead $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %3
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__s_add_i32__literal_offsets_live_scc
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
; GFX803-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets_live_scc
|
|
; GFX803: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX803-NEXT: S_NOP 0, implicit $scc
|
|
; GFX803-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def $scc
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX803-NEXT: SI_RETURN implicit $scc
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets_live_scc
|
|
; GFX900: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX900-NEXT: S_NOP 0, implicit $scc
|
|
; GFX900-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def $scc
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX900-NEXT: SI_RETURN implicit $scc
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets_live_scc
|
|
; GFX942: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX942-NEXT: S_NOP 0, implicit $scc
|
|
; GFX942-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def $scc
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX942-NEXT: SI_RETURN implicit $scc
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets_live_scc
|
|
; GFX10: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX10-NEXT: S_NOP 0, implicit $scc
|
|
; GFX10-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def $scc
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX10-NEXT: SI_RETURN implicit $scc
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__s_add_i32__literal_offsets_live_scc
|
|
; GFX12: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_]]
|
|
; GFX12-NEXT: S_NOP 0, implicit $scc
|
|
; GFX12-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def $scc
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, [[S_ADD_I32_1]]
|
|
; GFX12-NEXT: SI_RETURN implicit $scc
|
|
%0:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %0
|
|
S_NOP 0, implicit $scc
|
|
%1:sreg_32 = S_ADD_I32 512, %stack.0, implicit-def $scc
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1572873 /* reguse:SReg_32 */, %1
|
|
SI_RETURN implicit $scc
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets
|
|
; GFX803: liveins: $vgpr0
|
|
; GFX803-NEXT: {{ $}}
|
|
; GFX803-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX803-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets
|
|
; GFX900: liveins: $vgpr0
|
|
; GFX900-NEXT: {{ $}}
|
|
; GFX900-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX900-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets
|
|
; GFX942: liveins: $vgpr0
|
|
; GFX942-NEXT: {{ $}}
|
|
; GFX942-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX942-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets
|
|
; GFX10: liveins: $vgpr0
|
|
; GFX10-NEXT: {{ $}}
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets
|
|
; GFX12: liveins: $vgpr0
|
|
; GFX12-NEXT: {{ $}}
|
|
; GFX12-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
%0:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32 = V_ADD_CO_U32_e32 %vgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets_commute
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets_commute
|
|
; GFX803: liveins: $vgpr0
|
|
; GFX803-NEXT: {{ $}}
|
|
; GFX803-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX803-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[V_MOV_B32_e32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[V_MOV_B32_e32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets_commute
|
|
; GFX900: liveins: $vgpr0
|
|
; GFX900-NEXT: {{ $}}
|
|
; GFX900-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX900-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[V_MOV_B32_e32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[V_MOV_B32_e32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets_commute
|
|
; GFX942: liveins: $vgpr0
|
|
; GFX942-NEXT: {{ $}}
|
|
; GFX942-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX942-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets_commute
|
|
; GFX10: liveins: $vgpr0
|
|
; GFX10-NEXT: {{ $}}
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[V_MOV_B32_e32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[V_MOV_B32_e32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e32__vgpr_offsets_commute
|
|
; GFX12: liveins: $vgpr0
|
|
; GFX12-NEXT: {{ $}}
|
|
; GFX12-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: %vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%vgpr_offset:vgpr_32 = COPY $vgpr0
|
|
%0:vgpr_32 = V_ADD_CO_U32_e32 %stack.0, %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32 = V_ADD_CO_U32_e32 %stack.0, %vgpr_offset, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e32__sgpr_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr8
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e32__sgpr_offsets
|
|
; GFX803: liveins: $sgpr8
|
|
; GFX803-NEXT: {{ $}}
|
|
; GFX803-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e32__sgpr_offsets
|
|
; GFX900: liveins: $sgpr8
|
|
; GFX900-NEXT: {{ $}}
|
|
; GFX900-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e32__sgpr_offsets
|
|
; GFX942: liveins: $sgpr8
|
|
; GFX942-NEXT: {{ $}}
|
|
; GFX942-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e32__sgpr_offsets
|
|
; GFX10: liveins: $sgpr8
|
|
; GFX10-NEXT: {{ $}}
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, [[V_MOV_B32_e32_]], implicit-def dead $vcc, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e32__sgpr_offsets
|
|
; GFX12: liveins: $sgpr8
|
|
; GFX12-NEXT: {{ $}}
|
|
; GFX12-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, [[COPY]], implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_]]
|
|
; GFX12-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, [[COPY1]], implicit-def dead $vcc, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e32_1]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%sgpr_offset:sreg_32 = COPY $sgpr8
|
|
%0:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32 = V_ADD_CO_U32_e32 %sgpr_offset, %stack.0, implicit-def dead $vcc, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr8
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets
|
|
; GFX803: liveins: $sgpr8
|
|
; GFX803-NEXT: {{ $}}
|
|
; GFX803-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX803-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets
|
|
; GFX900: liveins: $sgpr8
|
|
; GFX900-NEXT: {{ $}}
|
|
; GFX900-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX900-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets
|
|
; GFX942: liveins: $sgpr8
|
|
; GFX942-NEXT: {{ $}}
|
|
; GFX942-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX942-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX942-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[COPY]], 0, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[COPY1]], 0, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets
|
|
; GFX10: liveins: $sgpr8
|
|
; GFX10-NEXT: {{ $}}
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[V_MOV_B32_e32_]], 0, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets
|
|
; GFX12: liveins: $sgpr8
|
|
; GFX12-NEXT: {{ $}}
|
|
; GFX12-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[S_MOV_B32_]], 0, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, [[S_MOV_B32_]], 0, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%sgpr_offset:sreg_32 = COPY $sgpr8
|
|
%0:vgpr_32, dead %2:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, %stack.0, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32, dead %3:sreg_64_xexec = V_ADD_CO_U32_e64 %sgpr_offset, %stack.0, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|
|
|
|
---
|
|
name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets_commute
|
|
tracksRegLiveness: true
|
|
stack:
|
|
- { id: 0, size: 4096, alignment: 4 }
|
|
machineFunctionInfo:
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr8
|
|
; GFX803-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets_commute
|
|
; GFX803: liveins: $sgpr8
|
|
; GFX803-NEXT: {{ $}}
|
|
; GFX803-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX803-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX803-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX803-NEXT: SI_RETURN
|
|
;
|
|
; GFX900-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets_commute
|
|
; GFX900: liveins: $sgpr8
|
|
; GFX900-NEXT: {{ $}}
|
|
; GFX900-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX900-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX900-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX900-NEXT: SI_RETURN
|
|
;
|
|
; GFX942-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets_commute
|
|
; GFX942: liveins: $sgpr8
|
|
; GFX942-NEXT: {{ $}}
|
|
; GFX942-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX942-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX942-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY %sgpr_offset
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[S_MOV_B32_]], [[COPY]], 0, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX942-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY %sgpr_offset
|
|
; GFX942-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[S_MOV_B32_]], [[COPY1]], 0, implicit $exec
|
|
; GFX942-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX942-NEXT: SI_RETURN
|
|
;
|
|
; GFX10-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets_commute
|
|
; GFX10: liveins: $sgpr8
|
|
; GFX10-NEXT: {{ $}}
|
|
; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
|
|
; GFX10-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX10-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX10-NEXT: SI_RETURN
|
|
;
|
|
; GFX12-LABEL: name: local_stack_alloc__v_add_co_u32_e64__sgpr_offsets_commute
|
|
; GFX12: liveins: $sgpr8
|
|
; GFX12-NEXT: {{ $}}
|
|
; GFX12-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 %stack.0
|
|
; GFX12-NEXT: %sgpr_offset:sreg_32 = COPY $sgpr8
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[S_MOV_B32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_]]
|
|
; GFX12-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[S_MOV_B32_]], %sgpr_offset, 0, implicit $exec
|
|
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, [[V_ADD_CO_U32_e64_2]]
|
|
; GFX12-NEXT: SI_RETURN
|
|
%sgpr_offset:sreg_32 = COPY $sgpr8
|
|
%0:vgpr_32, dead %2:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, %sgpr_offset, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %0
|
|
%1:vgpr_32, dead %3:sreg_64_xexec = V_ADD_CO_U32_e64 %stack.0, %sgpr_offset, 0, implicit $exec
|
|
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 1179657 /* reguse:VGPR_32 */, %1
|
|
SI_RETURN
|
|
|
|
...
|