xref: /llvm-project/llvm/test/CodeGen/AMDGPU/agpr-copy-reuse-writes.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=gfx908 -run-pass=prologepilog,postrapseudos -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX908 %s
3
4---
5name: standard
6tracksRegLiveness: true
7body:             |
8  bb.0:
9    liveins: $vgpr0, $vgpr1
10    ; GFX908-LABEL: name: standard
11    ; GFX908: liveins: $vgpr0, $vgpr1
12    ; GFX908-NEXT: {{  $}}
13    ; GFX908-NEXT: $agpr0 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec, implicit-def $agpr0_agpr1_agpr2_agpr3
14    ; GFX908-NEXT: $agpr1 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec
15    ; GFX908-NEXT: $agpr2 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec
16    ; GFX908-NEXT: $agpr3 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec
17    ; GFX908-NEXT: $agpr7 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec, implicit-def $agpr4_agpr5_agpr6_agpr7, implicit $agpr0_agpr1_agpr2_agpr3
18    ; GFX908-NEXT: $agpr6 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec, implicit $agpr0_agpr1_agpr2_agpr3
19    ; GFX908-NEXT: $agpr5 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec, implicit $agpr0_agpr1_agpr2_agpr3
20    ; GFX908-NEXT: $agpr4 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec, implicit $agpr0_agpr1_agpr2_agpr3, implicit $exec
21    ; GFX908-NEXT: S_ENDPGM 0, implicit $agpr4_agpr5_agpr6_agpr7
22    $agpr0 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec, implicit-def $agpr0_agpr1_agpr2_agpr3
23    $agpr1 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec
24    $agpr2 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec
25    $agpr3 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec
26    $agpr4_agpr5_agpr6_agpr7 = COPY $agpr0_agpr1_agpr2_agpr3, implicit $exec
27    S_ENDPGM 0, implicit $agpr4_agpr5_agpr6_agpr7
28...
29
30---
31name: src_is_spill
32tracksRegLiveness: true
33stack:
34  - { id: 0, name: '', type: spill-slot, offset: 0, size: 8, alignment: 4 }
35machineFunctionInfo:
36  scratchRSrcReg:  $sgpr0_sgpr1_sgpr2_sgpr3
37  stackPtrOffsetReg: '$sgpr32'
38  hasSpilledVGPRs: true
39body:             |
40  bb.0.entry:
41    ; GFX908-LABEL: name: src_is_spill
42    ; GFX908: liveins: $vgpr0, $vgpr1
43    ; GFX908-NEXT: {{  $}}
44    ; GFX908-NEXT: $agpr0_agpr1 = IMPLICIT_DEF
45    ; GFX908-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 killed $agpr0, implicit $exec, implicit-def $agpr0_agpr1, implicit $agpr0_agpr1
46    ; GFX908-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 killed $agpr1, implicit $exec, implicit killed $agpr0_agpr1
47    ; GFX908-NEXT: $agpr0 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec, implicit-def $agpr0_agpr1
48    ; GFX908-NEXT: $agpr1 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec, implicit $agpr0_agpr1
49    ; GFX908-NEXT: $agpr3 = V_ACCVGPR_WRITE_B32_e64 $vgpr0, implicit $exec, implicit-def $agpr2_agpr3, implicit $agpr0_agpr1
50    ; GFX908-NEXT: $agpr2 = V_ACCVGPR_WRITE_B32_e64 $vgpr1, implicit $exec, implicit $agpr0_agpr1, implicit $exec
51    ; GFX908-NEXT: S_ENDPGM 0
52    $agpr0_agpr1 = IMPLICIT_DEF
53    SI_SPILL_AV64_SAVE killed $agpr0_agpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)
54    $agpr0_agpr1 = SI_SPILL_AV64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)
55    $agpr2_agpr3 = COPY $agpr0_agpr1, implicit $exec
56    S_ENDPGM 0
57...
58
59---
60name: overlapping_agpr
61tracksRegLiveness: true
62body:             |
63  bb.0:
64    liveins: $agpr0_agpr1_agpr2_agpr3
65    ; GFX908-LABEL: name: overlapping_agpr
66    ; GFX908: liveins: $agpr0_agpr1_agpr2_agpr3
67    ; GFX908-NEXT: {{  $}}
68    ; GFX908-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr3, implicit $exec, implicit $agpr0_agpr1_agpr2_agpr3
69    ; GFX908-NEXT: $agpr4 = V_ACCVGPR_WRITE_B32_e64 killed $vgpr1, implicit $exec, implicit-def $agpr1_agpr2_agpr3_agpr4
70    ; GFX908-NEXT: $vgpr0 = V_ACCVGPR_READ_B32_e64 $agpr2, implicit $exec, implicit $agpr0_agpr1_agpr2_agpr3
71    ; GFX908-NEXT: $agpr3 = V_ACCVGPR_WRITE_B32_e64 killed $vgpr0, implicit $exec
72    ; GFX908-NEXT: $vgpr2 = V_ACCVGPR_READ_B32_e64 $agpr1, implicit $exec, implicit $agpr0_agpr1_agpr2_agpr3
73    ; GFX908-NEXT: $agpr2 = V_ACCVGPR_WRITE_B32_e64 killed $vgpr2, implicit $exec
74    ; GFX908-NEXT: $vgpr1 = V_ACCVGPR_READ_B32_e64 $agpr0, implicit $exec, implicit $agpr0_agpr1_agpr2_agpr3
75    ; GFX908-NEXT: $agpr1 = V_ACCVGPR_WRITE_B32_e64 killed $vgpr1, implicit $exec, implicit $exec
76    ; GFX908-NEXT: S_ENDPGM 0, implicit $agpr1_agpr2_agpr3_agpr4
77    $agpr1_agpr2_agpr3_agpr4 = COPY $agpr0_agpr1_agpr2_agpr3, implicit $exec
78    S_ENDPGM 0, implicit $agpr1_agpr2_agpr3_agpr4
79...
80