Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fastregalloc-self-loop-heuristic.mir
blob918242e9f99676adc08b66c5e962385708bf73e0
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=regallocfast -o - %s | FileCheck -check-prefix=GCN %s
3 # RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -passes=regallocfast -o - %s | FileCheck -check-prefix=GCN %s
5 ---
6 name: self_loop_single_def_use
7 tracksRegLiveness: true
8 machineFunctionInfo:
9   isEntryFunction: true
10   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
11   stackPtrOffsetReg: '$sgpr32'
12 body:             |
13   ; GCN-LABEL: name: self_loop_single_def_use
14   ; GCN: bb.0:
15   ; GCN-NEXT:   successors: %bb.1(0x80000000)
16   ; GCN-NEXT:   liveins: $vgpr0_vgpr1
17   ; GCN-NEXT: {{  $}}
18   ; GCN-NEXT:   SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)
19   ; GCN-NEXT: {{  $}}
20   ; GCN-NEXT: bb.1:
21   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
22   ; GCN-NEXT: {{  $}}
23   ; GCN-NEXT:   $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)
24   ; GCN-NEXT:   renamable $vgpr2 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec
25   ; GCN-NEXT:   GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec
26   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
27   ; GCN-NEXT: {{  $}}
28   ; GCN-NEXT: bb.2:
29   ; GCN-NEXT:   S_ENDPGM 0
30   bb.0:
31     liveins: $vgpr0_vgpr1
32     %0:vreg_64 = COPY $vgpr0_vgpr1
34   bb.1:
35     %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec
36     GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
37     S_CBRANCH_EXECZ %bb.1, implicit $exec
39   bb.2:
40     S_ENDPGM 0
42 ...
44 ---
45 name: self_loop_multi_def
46 tracksRegLiveness: true
47 machineFunctionInfo:
48   isEntryFunction: true
49   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
50   stackPtrOffsetReg: '$sgpr32'
51 body:             |
52   ; GCN-LABEL: name: self_loop_multi_def
53   ; GCN: bb.0:
54   ; GCN-NEXT:   successors: %bb.1(0x80000000)
55   ; GCN-NEXT:   liveins: $vgpr0_vgpr1
56   ; GCN-NEXT: {{  $}}
57   ; GCN-NEXT:   SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)
58   ; GCN-NEXT: {{  $}}
59   ; GCN-NEXT: bb.1:
60   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
61   ; GCN-NEXT: {{  $}}
62   ; GCN-NEXT:   $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)
63   ; GCN-NEXT:   renamable $vgpr2 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec
64   ; GCN-NEXT:   GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, renamable $vgpr2, 0, 0, implicit $exec
65   ; GCN-NEXT:   renamable $vgpr2 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec
66   ; GCN-NEXT:   GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec
67   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
68   ; GCN-NEXT: {{  $}}
69   ; GCN-NEXT: bb.2:
70   ; GCN-NEXT:   S_ENDPGM 0
72   bb.0:
73     liveins: $vgpr0_vgpr1
74     %0:vreg_64 = COPY $vgpr0_vgpr1
76   bb.1:
77     %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec
78     GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
79     %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec
80     GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
81     S_CBRANCH_EXECZ %bb.1, implicit $exec
83   bb.2:
84     S_ENDPGM 0
86 ...
88 # There's a single def inside the self loop, but it's also a use.
90 ---
91 name: self_loop_def_use_same_inst
92 tracksRegLiveness: true
93 machineFunctionInfo:
94   isEntryFunction: true
95   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
96   stackPtrOffsetReg: '$sgpr32'
97 body:             |
98   ; GCN-LABEL: name: self_loop_def_use_same_inst
99   ; GCN: bb.0:
100   ; GCN-NEXT:   successors: %bb.1(0x80000000)
101   ; GCN-NEXT:   liveins: $vgpr0_vgpr1
102   ; GCN-NEXT: {{  $}}
103   ; GCN-NEXT:   SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)
104   ; GCN-NEXT: {{  $}}
105   ; GCN-NEXT: bb.1:
106   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
107   ; GCN-NEXT: {{  $}}
108   ; GCN-NEXT:   $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)
109   ; GCN-NEXT:   renamable $vgpr2 = V_ADD_U32_e32 1, undef $vgpr0, implicit $exec
110   ; GCN-NEXT:   SI_SPILL_V32_SAVE $vgpr2, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
111   ; GCN-NEXT:   GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, renamable $vgpr2, 0, 0, implicit $exec
112   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
113   ; GCN-NEXT: {{  $}}
114   ; GCN-NEXT: bb.2:
115   ; GCN-NEXT:   S_ENDPGM 0
116   bb.0:
117     liveins: $vgpr0_vgpr1
118     %0:vreg_64 = COPY $vgpr0_vgpr1
120   bb.1:
121     %1:vgpr_32 = V_ADD_U32_e32 1, undef %1, implicit $exec
122     GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec
123     S_CBRANCH_EXECZ %bb.1, implicit $exec
125   bb.2:
126     S_ENDPGM 0
131 name: self_loop_def_after_use
132 tracksRegLiveness: true
133 machineFunctionInfo:
134   isEntryFunction: true
135   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
136   stackPtrOffsetReg: '$sgpr32'
137 body:             |
138   ; GCN-LABEL: name: self_loop_def_after_use
139   ; GCN: bb.0:
140   ; GCN-NEXT:   successors: %bb.1(0x80000000)
141   ; GCN-NEXT:   liveins: $vgpr0_vgpr1
142   ; GCN-NEXT: {{  $}}
143   ; GCN-NEXT:   SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)
144   ; GCN-NEXT: {{  $}}
145   ; GCN-NEXT: bb.1:
146   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
147   ; GCN-NEXT: {{  $}}
148   ; GCN-NEXT:   $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)
149   ; GCN-NEXT:   GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, undef renamable $vgpr0, 0, 0, implicit $exec
150   ; GCN-NEXT:   renamable $vgpr0 = V_ADD_U32_e64 1, 1, 0, implicit $exec
151   ; GCN-NEXT:   SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)
152   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
153   ; GCN-NEXT: {{  $}}
154   ; GCN-NEXT: bb.2:
155   ; GCN-NEXT:   S_ENDPGM 0
156   bb.0:
157     liveins: $vgpr0_vgpr1
158     %0:vreg_64 = COPY $vgpr0_vgpr1
160   bb.1:
161     GLOBAL_STORE_DWORD %0, undef %1, 0, 0, implicit $exec
162     %1:vgpr_32 = V_ADD_U32_e64 1, 1, 0, implicit $exec
163     S_CBRANCH_EXECZ %bb.1, implicit $exec
165   bb.2:
166     S_ENDPGM 0
171 name: self_loop_single_subreg_def_use
172 tracksRegLiveness: true
173 machineFunctionInfo:
174   isEntryFunction: true
175   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
176   stackPtrOffsetReg: '$sgpr32'
177 body:             |
178   ; GCN-LABEL: name: self_loop_single_subreg_def_use
179   ; GCN: bb.0:
180   ; GCN-NEXT:   successors: %bb.1(0x80000000)
181   ; GCN-NEXT:   liveins: $vgpr0_vgpr1
182   ; GCN-NEXT: {{  $}}
183   ; GCN-NEXT:   SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)
184   ; GCN-NEXT: {{  $}}
185   ; GCN-NEXT: bb.1:
186   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
187   ; GCN-NEXT: {{  $}}
188   ; GCN-NEXT:   $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)
189   ; GCN-NEXT:   undef renamable $vgpr3 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit-def dead $vgpr2_vgpr3
190   ; GCN-NEXT:   GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, undef renamable $vgpr1, 0, 0, implicit $exec
191   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
192   ; GCN-NEXT: {{  $}}
193   ; GCN-NEXT: bb.2:
194   ; GCN-NEXT:   S_ENDPGM 0
195   bb.0:
196     liveins: $vgpr0_vgpr1
197     %0:vreg_64 = COPY $vgpr0_vgpr1
199   bb.1:
200     undef %1.sub1:vreg_64 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec
201     GLOBAL_STORE_DWORD %0, undef %1.sub1, 0, 0, implicit $exec
202     S_CBRANCH_EXECZ %bb.1, implicit $exec
204   bb.2:
205     S_ENDPGM 0