At the moment the MIR tests are somewhat redundant. The waitcnt one is needed to ensure we actually have a load, given we are currently just emitting an error on ExternalSymbol. The asm printer one is more redundant for the moment, since it's stressed by the IR test. However I am planning to change the error path for the IR test, so it will soon not be redundant.
65 lines
3.5 KiB
YAML
65 lines
3.5 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
|
|
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=si-insert-waitcnts -o - %s | FileCheck %s
|
|
|
|
# Make sure the waitcnt pass doesn't crash on statepoint
|
|
# pseudoinstructions, and handles the wait for the callee operand
|
|
# correctly.
|
|
|
|
---
|
|
name: test_wait_statepoint_callee
|
|
tracksRegLiveness: true
|
|
frameInfo:
|
|
stackSize: 16
|
|
maxAlignment: 4
|
|
adjustsStack: true
|
|
hasCalls: true
|
|
maxCallFrameSize: 0
|
|
isCalleeSavedInfoValid: true
|
|
stack:
|
|
- { id: 0, offset: 4, size: 4, alignment: 4 }
|
|
- { id: 1, type: spill-slot, size: 4, alignment: 4 }
|
|
- { id: 2, type: spill-slot, size: 4, alignment: 4, stack-id: sgpr-spill }
|
|
machineFunctionInfo:
|
|
hasSpilledSGPRs: true
|
|
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
|
|
frameOffsetReg: '$sgpr33'
|
|
stackPtrOffsetReg: '$sgpr32'
|
|
spillPhysVGPRs:
|
|
- '$vgpr40'
|
|
wwmReservedRegs:
|
|
- '$vgpr40'
|
|
scavengeFI: '%stack.0'
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr12, $sgpr13, $sgpr14, $sgpr15, $sgpr30, $sgpr31, $vgpr31, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr12_sgpr13
|
|
|
|
; CHECK-LABEL: name: test_wait_statepoint_callee
|
|
; CHECK: liveins: $sgpr12, $sgpr13, $sgpr14, $sgpr15, $sgpr30, $sgpr31, $vgpr31, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr12_sgpr13
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: S_WAITCNT 0
|
|
; CHECK-NEXT: $sgpr16 = S_MOV_B32 $sgpr33
|
|
; CHECK-NEXT: $sgpr33 = S_MOV_B32 $sgpr32
|
|
; CHECK-NEXT: $sgpr18_sgpr19 = S_OR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec
|
|
; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr33, 0, 0, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
|
|
; CHECK-NEXT: $exec = S_MOV_B64 killed $sgpr18_sgpr19
|
|
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 killed $sgpr16, 2, undef $vgpr40
|
|
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 $sgpr30, 0, $vgpr40
|
|
; CHECK-NEXT: $sgpr32 = frame-setup S_ADDK_I32 $sgpr32, 1024, implicit-def dead $scc
|
|
; CHECK-NEXT: $vgpr40 = V_WRITELANE_B32 $sgpr31, 1, $vgpr40
|
|
; CHECK-NEXT: $sgpr14_sgpr15 = S_LOAD_DWORDX2_IMM $sgpr12_sgpr13, 0, 0
|
|
; CHECK-NEXT: S_WAITCNT 49279
|
|
; CHECK-NEXT: STATEPOINT 2882400015, 0, 11, renamable $sgpr14_sgpr15, 0, killed $sgpr4_sgpr5, killed $sgpr6_sgpr7, killed $sgpr8_sgpr9, killed $sgpr10_sgpr11, killed $sgpr12, killed $sgpr13, killed $sgpr14, killed $sgpr15, killed $vgpr31, $sgpr0_sgpr1_sgpr2_sgpr3, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2, 0, csr_amdgpu
|
|
$sgpr16 = S_MOV_B32 $sgpr33
|
|
$sgpr33 = S_MOV_B32 $sgpr32
|
|
$sgpr18_sgpr19 = S_OR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec
|
|
BUFFER_STORE_DWORD_OFFSET $vgpr40, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr33, 0, 0, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
|
|
$exec = S_MOV_B64 killed $sgpr18_sgpr19
|
|
$vgpr40 = V_WRITELANE_B32 killed $sgpr16, 2, undef $vgpr40
|
|
$vgpr40 = V_WRITELANE_B32 $sgpr30, 0, $vgpr40
|
|
$sgpr32 = frame-setup S_ADDK_I32 $sgpr32, 1024, implicit-def dead $scc
|
|
$vgpr40 = V_WRITELANE_B32 $sgpr31, 1, $vgpr40
|
|
$sgpr14_sgpr15 = S_LOAD_DWORDX2_IMM $sgpr12_sgpr13, 0, 0
|
|
STATEPOINT 2882400015, 0, 11, renamable $sgpr14_sgpr15, 0, killed $sgpr4_sgpr5, killed $sgpr6_sgpr7, killed $sgpr8_sgpr9, killed $sgpr10_sgpr11, killed $sgpr12, killed $sgpr13, killed $sgpr14, killed $sgpr15, killed $vgpr31, $sgpr0_sgpr1_sgpr2_sgpr3, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 0, 2, 0, csr_amdgpu
|
|
|
|
...
|