[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / phi-vgpr-input-moveimm.mir
blobc2c5340639a16b4fc9d9d5fefccd20e9b3d65603
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2 # RUN: llc  -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass=si-fix-sgpr-copies -o - %s | FileCheck -check-prefix=GCN %s
3 ---
5 name:            phi_moveimm_input
6 tracksRegLiveness: true
7 body:             |
8   ; GCN-LABEL: name: phi_moveimm_input
9   ; GCN: bb.0:
10   ; GCN-NEXT:   successors: %bb.1(0x80000000)
11   ; GCN-NEXT:   liveins: $sgpr0, $sgpr1
12   ; GCN-NEXT: {{  $}}
13   ; GCN-NEXT:   [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
14   ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
15   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
16   ; GCN-NEXT: {{  $}}
17   ; GCN-NEXT: bb.1:
18   ; GCN-NEXT:   successors: %bb.2(0x80000000)
19   ; GCN-NEXT: {{  $}}
20   ; GCN-NEXT:   [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def $scc
21   ; GCN-NEXT:   S_BRANCH %bb.2
22   ; GCN-NEXT: {{  $}}
23   ; GCN-NEXT: bb.2:
24   ; GCN-NEXT:   successors: %bb.3(0x80000000)
25   ; GCN-NEXT: {{  $}}
26   ; GCN-NEXT:   [[PHI:%[0-9]+]]:sreg_32 = PHI %5, %bb.3, [[S_ADD_U32_]], %bb.1
27   ; GCN-NEXT:   S_BRANCH %bb.3
28   ; GCN-NEXT: {{  $}}
29   ; GCN-NEXT: bb.3:
30   ; GCN-NEXT:   successors: %bb.2(0x80000000)
31   ; GCN-NEXT: {{  $}}
32   ; GCN-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
33   ; GCN-NEXT:   S_BRANCH %bb.2
34   bb.0:
35     successors: %bb.1
36     liveins: $sgpr0, $sgpr1
38     %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
40     %4:sreg_32 = COPY $sgpr0
41     %5:sreg_32 = COPY $sgpr1
43   bb.1:
44     successors: %bb.2
45     %2:sreg_32 = S_ADD_U32 %4, %5, implicit-def $scc
46     S_BRANCH %bb.2
48   bb.2:
49     successors: %bb.3
50     %3:sreg_32 = PHI %1, %bb.3, %2, %bb.1
51     S_BRANCH %bb.3
53   bb.3:
54     successors: %bb.2
55     %1:sreg_32 = COPY %0
56     S_BRANCH %bb.2
57 ...
59 ---
60 name:            phi_moveimm_subreg_input
61 tracksRegLiveness: true
62 body:             |
63   ; GCN-LABEL: name: phi_moveimm_subreg_input
64   ; GCN: bb.0:
65   ; GCN-NEXT:   successors: %bb.1(0x80000000)
66   ; GCN-NEXT:   liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
67   ; GCN-NEXT: {{  $}}
68   ; GCN-NEXT:   [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64 = V_MOV_B64_e32 0, implicit $exec
69   ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
70   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
71   ; GCN-NEXT: {{  $}}
72   ; GCN-NEXT: bb.1:
73   ; GCN-NEXT:   successors: %bb.2(0x80000000)
74   ; GCN-NEXT: {{  $}}
75   ; GCN-NEXT:   [[S_ADD_U:%[0-9]+]]:sreg_64 = S_ADD_U64_PSEUDO [[COPY]], [[COPY1]], implicit-def $scc
76   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_ADD_U]], implicit $exec
77   ; GCN-NEXT:   S_BRANCH %bb.2
78   ; GCN-NEXT: {{  $}}
79   ; GCN-NEXT: bb.2:
80   ; GCN-NEXT:   successors: %bb.3(0x80000000)
81   ; GCN-NEXT: {{  $}}
82   ; GCN-NEXT:   [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B64_e32_]].sub0, %bb.3, [[COPY2]].sub0, %bb.1
83   ; GCN-NEXT:   S_BRANCH %bb.3
84   ; GCN-NEXT: {{  $}}
85   ; GCN-NEXT: bb.3:
86   ; GCN-NEXT:   successors: %bb.2(0x80000000)
87   ; GCN-NEXT: {{  $}}
88   ; GCN-NEXT:   [[DEF:%[0-9]+]]:sreg_64 = IMPLICIT_DEF
89   ; GCN-NEXT:   S_BRANCH %bb.2
90   bb.0:
91     successors: %bb.1
92     liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
94     %0:vreg_64 = V_MOV_B64_e32 0, implicit $exec
96     %4:sreg_64 = COPY $sgpr0_sgpr1
97     %5:sreg_64 = COPY $sgpr2_sgpr3
99   bb.1:
100     successors: %bb.2
101     %2:sreg_64 = S_ADD_U64_PSEUDO %4, %5, implicit-def $scc
102     S_BRANCH %bb.2
104   bb.2:
105     successors: %bb.3
106     %3:sreg_32 = PHI %1.sub0:sreg_64, %bb.3, %2.sub0:sreg_64, %bb.1
107     S_BRANCH %bb.3
109   bb.3:
110     successors: %bb.2
111     %1:sreg_64 = COPY %0.sub0:vreg_64
112     S_BRANCH %bb.2
116 name:            phi_moveimm_bad_opcode_input
117 tracksRegLiveness: true
118 body:             |
119   ; GCN-LABEL: name: phi_moveimm_bad_opcode_input
120   ; GCN: bb.0:
121   ; GCN-NEXT:   successors: %bb.1(0x80000000)
122   ; GCN-NEXT:   liveins: $sgpr0, $sgpr1, $vgpr0
123   ; GCN-NEXT: {{  $}}
124   ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
125   ; GCN-NEXT:   [[V_MOV_B32_sdwa:%[0-9]+]]:vgpr_32 = V_MOV_B32_sdwa 0, [[COPY]], 0, 5, 2, 4, implicit $exec, implicit [[COPY]](tied-def 0)
126   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
127   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr1
128   ; GCN-NEXT: {{  $}}
129   ; GCN-NEXT: bb.1:
130   ; GCN-NEXT:   successors: %bb.2(0x80000000)
131   ; GCN-NEXT: {{  $}}
132   ; GCN-NEXT:   [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
133   ; GCN-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_U32_]], implicit $exec
134   ; GCN-NEXT:   S_BRANCH %bb.2
135   ; GCN-NEXT: {{  $}}
136   ; GCN-NEXT: bb.2:
137   ; GCN-NEXT:   successors: %bb.3(0x80000000)
138   ; GCN-NEXT: {{  $}}
139   ; GCN-NEXT:   [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_sdwa]], %bb.3, [[COPY3]], %bb.1
140   ; GCN-NEXT:   S_BRANCH %bb.3
141   ; GCN-NEXT: {{  $}}
142   ; GCN-NEXT: bb.3:
143   ; GCN-NEXT:   successors: %bb.2(0x80000000)
144   ; GCN-NEXT: {{  $}}
145   ; GCN-NEXT:   [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
146   ; GCN-NEXT:   S_BRANCH %bb.2
147   bb.0:
148     successors: %bb.1
149     liveins: $sgpr0, $sgpr1, $vgpr0
150     %6:vgpr_32 = COPY $vgpr0
151     %0:vgpr_32 = V_MOV_B32_sdwa 0, %6:vgpr_32, 0, 5, 2, 4,  implicit $exec, implicit %6:vgpr_32(tied-def 0)
153     %4:sreg_32 = COPY $sgpr0
154     %5:sreg_32 = COPY $sgpr1
156   bb.1:
158     successors: %bb.2
159     %2:sreg_32 = S_ADD_U32 %4, %5, implicit-def $scc
160     S_BRANCH %bb.2
161   bb.2:
162     successors: %bb.3
163     %3:sreg_32 = PHI %1, %bb.3, %2, %bb.1
164     S_BRANCH %bb.3
165   bb.3:
166     successors: %bb.2
167     %1:sreg_32 = COPY %0
168     S_BRANCH %bb.2