Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / skip-branch-taildup-ret.mir
blob558c9d633127c95ffb48036d18e04e1b56a9dd25
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass=si-pre-emit-peephole -amdgpu-skip-threshold=1000000 -o -  %s | FileCheck %s
4 ---
5 name: skip_branch_taildup_endpgm
6 machineFunctionInfo:
7   isEntryFunction: true
8 body:             |
9   ; CHECK-LABEL: name: skip_branch_taildup_endpgm
10   ; CHECK: bb.0:
11   ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.1(0x40000000)
12   ; CHECK-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5, $sgpr7
13   ; CHECK-NEXT: {{  $}}
14   ; CHECK-NEXT:   renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM renamable $sgpr4_sgpr5, 4, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)
15   ; CHECK-NEXT:   renamable $vgpr0 = V_LSHLREV_B32_e32 2, killed $vgpr0, implicit $exec
16   ; CHECK-NEXT:   S_WAITCNT 127
17   ; CHECK-NEXT:   $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $exec
18   ; CHECK-NEXT:   renamable $vgpr0 = V_ADD_CO_U32_e32 $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec
19   ; CHECK-NEXT:   renamable $vgpr1 = V_ADDC_U32_e32 0, killed $vgpr1, implicit-def $vcc, implicit killed $vcc, implicit $exec
20   ; CHECK-NEXT:   renamable $vgpr0 = FLAT_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 1)
21   ; CHECK-NEXT:   renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)
22   ; CHECK-NEXT:   S_WAITCNT 112
23   ; CHECK-NEXT:   V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec
24   ; CHECK-NEXT:   $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
25   ; CHECK-NEXT:   renamable $sgpr2_sgpr3 = S_XOR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def dead $scc
26   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
27   ; CHECK-NEXT:   S_BRANCH %bb.3
28   ; CHECK-NEXT: {{  $}}
29   ; CHECK-NEXT: bb.1:
30   ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
31   ; CHECK-NEXT:   liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
32   ; CHECK-NEXT: {{  $}}
33   ; CHECK-NEXT:   renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec
34   ; CHECK-NEXT:   $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc
35   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
36   ; CHECK-NEXT:   S_BRANCH %bb.4
37   ; CHECK-NEXT: {{  $}}
38   ; CHECK-NEXT: bb.2:
39   ; CHECK-NEXT:   liveins: $sgpr2_sgpr3
40   ; CHECK-NEXT: {{  $}}
41   ; CHECK-NEXT:   $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc
42   ; CHECK-NEXT:   renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
43   ; CHECK-NEXT:   S_ENDPGM 0
44   ; CHECK-NEXT: {{  $}}
45   ; CHECK-NEXT: bb.3:
46   ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
47   ; CHECK-NEXT:   liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
48   ; CHECK-NEXT: {{  $}}
49   ; CHECK-NEXT:   renamable $vgpr2 = V_MOV_B32_e32 15, implicit $exec
50   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
51   ; CHECK-NEXT:   $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
52   ; CHECK-NEXT:   renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec
53   ; CHECK-NEXT:   $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc
54   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
55   ; CHECK-NEXT:   S_BRANCH %bb.4
56   ; CHECK-NEXT: {{  $}}
57   ; CHECK-NEXT: bb.4:
58   ; CHECK-NEXT:   liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
59   ; CHECK-NEXT: {{  $}}
60   ; CHECK-NEXT:   renamable $vgpr2 = V_MOV_B32_e32 8, implicit $exec
61   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
62   ; CHECK-NEXT:   $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit killed $sgpr0_sgpr1, implicit $exec
63   ; CHECK-NEXT:   $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc
64   ; CHECK-NEXT:   renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
65   ; CHECK-NEXT:   S_ENDPGM 0
66   bb.0:
67     successors: %bb.1, %bb.2
68     liveins: $vgpr0, $sgpr4_sgpr5, $sgpr7
70     renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM renamable $sgpr4_sgpr5, 4, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)
71     renamable $vgpr0 = V_LSHLREV_B32_e32 2, killed $vgpr0, implicit $exec
72     S_WAITCNT 127
73     $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $exec
74     renamable $vgpr0 = V_ADD_CO_U32_e32 $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec
75     renamable $vgpr1 = V_ADDC_U32_e32 0, killed $vgpr1, implicit-def $vcc, implicit killed $vcc, implicit $exec
76     renamable $vgpr0 = FLAT_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 1)
77     renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4)
78     S_WAITCNT 112
79     V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec
80     $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
81     renamable $sgpr2_sgpr3 = S_XOR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def dead $scc
82     S_CBRANCH_EXECZ %bb.2, implicit $exec
83     S_BRANCH %bb.1
85   bb.2:
86     successors: %bb.3, %bb.4
87     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
89     renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec
90     $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc
91     S_CBRANCH_EXECZ %bb.4, implicit $exec
92     S_BRANCH %bb.3
94   bb.4:
95     liveins: $sgpr2_sgpr3
97     $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc
98     renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
99     S_ENDPGM 0
101   bb.1:
102     successors: %bb.3, %bb.4
103     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
105     renamable $vgpr2 = V_MOV_B32_e32 15, implicit $exec
106     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
107     $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
108     renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec
109     $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc
110     S_CBRANCH_EXECZ %bb.4, implicit $exec
111     S_BRANCH %bb.3
113   bb.3:
114     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
116     renamable $vgpr2 = V_MOV_B32_e32 8, implicit $exec
117     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
118     $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit killed $sgpr0_sgpr1, implicit $exec
119     $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc
120     renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
121     S_ENDPGM 0
126 name: skip_branch_taildup_ret
127 body:             |
128   ; CHECK-LABEL: name: skip_branch_taildup_ret
129   ; CHECK: bb.0:
130   ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.1(0x40000000)
131   ; CHECK-NEXT:   liveins: $vgpr0, $sgpr30_sgpr31, $vgpr1_vgpr2
132   ; CHECK-NEXT: {{  $}}
133   ; CHECK-NEXT:   S_WAITCNT 0
134   ; CHECK-NEXT:   V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec
135   ; CHECK-NEXT:   $sgpr6_sgpr7 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
136   ; CHECK-NEXT:   renamable $sgpr6_sgpr7 = S_XOR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def dead $scc
137   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
138   ; CHECK-NEXT:   S_BRANCH %bb.3
139   ; CHECK-NEXT: {{  $}}
140   ; CHECK-NEXT: bb.1:
141   ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
142   ; CHECK-NEXT:   liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2
143   ; CHECK-NEXT: {{  $}}
144   ; CHECK-NEXT:   renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec
145   ; CHECK-NEXT:   $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc
146   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
147   ; CHECK-NEXT:   S_BRANCH %bb.4
148   ; CHECK-NEXT: {{  $}}
149   ; CHECK-NEXT: bb.2:
150   ; CHECK-NEXT:   liveins: $sgpr6_sgpr7, $sgpr30_sgpr31
151   ; CHECK-NEXT: {{  $}}
152   ; CHECK-NEXT:   $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc
153   ; CHECK-NEXT:   renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
154   ; CHECK-NEXT:   S_SETPC_B64_return $sgpr30_sgpr31
155   ; CHECK-NEXT: {{  $}}
156   ; CHECK-NEXT: bb.3:
157   ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
158   ; CHECK-NEXT:   liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2
159   ; CHECK-NEXT: {{  $}}
160   ; CHECK-NEXT:   renamable $vgpr0 = V_MOV_B32_e32 15, implicit $exec
161   ; CHECK-NEXT:   renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec
162   ; CHECK-NEXT:   $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc
163   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
164   ; CHECK-NEXT:   S_BRANCH %bb.4
165   ; CHECK-NEXT: {{  $}}
166   ; CHECK-NEXT: bb.4:
167   ; CHECK-NEXT:   liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2
168   ; CHECK-NEXT: {{  $}}
169   ; CHECK-NEXT:   renamable $vgpr0 = V_MOV_B32_e32 8, implicit $exec
170   ; CHECK-NEXT:   $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc
171   ; CHECK-NEXT:   renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
172   ; CHECK-NEXT:   S_SETPC_B64_return $sgpr30_sgpr31
173   bb.0:
174     successors: %bb.1, %bb.2
175     liveins: $vgpr0, $sgpr30_sgpr31, $vgpr1_vgpr2
177     S_WAITCNT 0
178     V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec
179     $sgpr6_sgpr7 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
180     renamable $sgpr6_sgpr7 = S_XOR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def dead $scc
181     S_CBRANCH_EXECZ %bb.2, implicit $exec
182     S_BRANCH %bb.1
184   bb.2:
185     successors: %bb.3, %bb.4
186     liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2
188     renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec
189     $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc
190     S_CBRANCH_EXECZ %bb.4, implicit $exec
191     S_BRANCH %bb.3
193   bb.4:
194     liveins: $sgpr6_sgpr7, $sgpr30_sgpr31
196     $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc
197     renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
198     S_SETPC_B64_return $sgpr30_sgpr31
200   bb.1:
201     successors: %bb.3, %bb.4
202     liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2
204     renamable $vgpr0 = V_MOV_B32_e32 15, implicit $exec
205     renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec
206     $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc
207     S_CBRANCH_EXECZ %bb.4, implicit $exec
208     S_BRANCH %bb.3
210   bb.3:
211     liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2
213     renamable $vgpr0 = V_MOV_B32_e32 8, implicit $exec
214     $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc
215     renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec
216     S_SETPC_B64_return $sgpr30_sgpr31