| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6 | |
| # RUN: llc -mtriple=amdgpu9.00-amd-amdhsa -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 .Vmcnt_0_Expcnt_0_Lgkmcnt_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 .Lgkmcnt_0 | |
| ; 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 | |
| ... |