xref: /llvm-project/llvm/test/CodeGen/AMDGPU/si-fix-sgpr-copies.mir (revision cf54cae26b65fc3201eff7200ffb9b0c9e8f9a13)
1# RUN: llc -mtriple=amdgcn -run-pass si-fix-sgpr-copies %s -o - | FileCheck %s -check-prefixes=GCN
2# RUN: llc -mtriple=amdgcn -passes=si-fix-sgpr-copies %s -o - | FileCheck %s -check-prefixes=GCN
3
4---
5
6name: phi_visit_order
7tracksRegLiveness: true
8registers:
9  - { id: 0, class: sreg_32_xm0 }
10  - { id: 1, class: sreg_64 }
11  - { id: 2, class: sreg_32_xm0 }
12  - { id: 7, class: vgpr_32 }
13  - { id: 8, class: sreg_32_xm0 }
14  - { id: 9, class: vgpr_32 }
15  - { id: 10, class: sreg_64 }
16  - { id: 11, class: sreg_32_xm0 }
17
18body: |
19  ; GCN-LABEL: name: phi_visit_order
20  ; GCN: S_ADD_I32
21  bb.0:
22    liveins: $vgpr0
23    %7 = COPY $vgpr0
24    %8 = S_MOV_B32 0
25
26  bb.1:
27    %0 = PHI %8, %bb.0, %0, %bb.1, %2, %bb.2
28    %9 = V_MOV_B32_e32 9, implicit $exec
29    %10 = V_CMP_EQ_U32_e64 %7, %9, implicit $exec
30    %1 = SI_IF %10, %bb.2, implicit-def $exec, implicit-def $scc, implicit $exec
31    S_BRANCH %bb.1
32
33  bb.2:
34    SI_END_CF %1, implicit-def $exec, implicit-def $scc, implicit $exec
35    %11 = S_MOV_B32 1
36    %2 = S_ADD_I32 %0, %11, implicit-def $scc
37    S_BRANCH %bb.1
38
39...
40
41---
42
43# GCN-LABEL: name: dead_illegal_virtreg_copy
44# GCN: %0:vgpr_32 = COPY $vgpr0
45# GCN: %1:sreg_32_xm0 = IMPLICIT_DEF
46# GCN: S_ENDPGM 0, implicit %0
47
48name: dead_illegal_virtreg_copy
49tracksRegLiveness: true
50
51body: |
52  bb.0:
53    liveins: $vgpr0
54    %0:vgpr_32 = COPY $vgpr0
55    %1:sreg_32_xm0 = COPY %0
56    S_ENDPGM 0, implicit %1
57...
58
59---
60
61# GCN-LABEL: name: dead_illegal_physreg_copy
62# GCN: %2:vgpr_32 = COPY $vgpr0
63# GCN: %1:sreg_32_xm0 = IMPLICIT_DEF
64# GCN: S_ENDPGM 0, implicit %2
65
66name: dead_illegal_physreg_copy
67tracksRegLiveness: true
68
69body: |
70  bb.0:
71    liveins: $vgpr0
72    %0:sreg_32_xm0 = COPY $vgpr0
73    %1:sreg_32_xm0 = COPY %0
74    S_ENDPGM 0, implicit %1
75...
76
77# Make sure there's no assert when looking at the implicit use on S_ENDPGM
78# GCN-LABEL: name: s_to_v_copy_implicit_use
79# GCN: %0:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM undef %1:sreg_64, 0, 0 :: (load (s32), addrspace 4)
80# GCN-NEXT: %2:vgpr_32 = COPY %0
81# GCN-NEXT: S_ENDPGM 0, implicit %2
82---
83name: s_to_v_copy_implicit_use
84tracksRegLiveness: true
85body:               |
86  bb.0:
87    %0:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM undef %2:sreg_64, 0, 0 :: (load (s32), addrspace 4)
88    %1:vgpr_32 = COPY %0
89    S_ENDPGM 0, implicit %1
90
91...
92