Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / divergence-structurizer.mir
blob1d291eeab8e9d70cb645a5eed296c52f8af4cc15
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2 # RUN: llc -global-isel -mtriple=amdgcn-mesa-amdpal -mcpu=gfx1010 -run-pass=amdgpu-global-isel-divergence-lowering -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX10 %s
4 ---
5 name: divergent_i1_phi_if_then
6 legalized: true
7 tracksRegLiveness: true
8 body: |
9   ; GFX10-LABEL: name: divergent_i1_phi_if_then
10   ; GFX10: bb.0:
11   ; GFX10-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
12   ; GFX10-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
13   ; GFX10-NEXT: {{  $}}
14   ; GFX10-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
15   ; GFX10-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
16   ; GFX10-NEXT:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
17   ; GFX10-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
18   ; GFX10-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
19   ; GFX10-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 6
20   ; GFX10-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(uge), [[COPY2]](s32), [[C]]
21   ; GFX10-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
22   ; GFX10-NEXT:   [[ICMP1:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(eq), [[COPY3]](s32), [[C1]]
23   ; GFX10-NEXT:   [[COPY4:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP]](s1)
24   ; GFX10-NEXT:   [[COPY5:%[0-9]+]]:sreg_32(s1) = COPY [[COPY4]](s1)
25   ; GFX10-NEXT:   [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP1]](s1), %bb.2, implicit-def $exec, implicit-def $scc, implicit $exec
26   ; GFX10-NEXT:   G_BR %bb.1
27   ; GFX10-NEXT: {{  $}}
28   ; GFX10-NEXT: bb.1:
29   ; GFX10-NEXT:   successors: %bb.2(0x80000000)
30   ; GFX10-NEXT: {{  $}}
31   ; GFX10-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
32   ; GFX10-NEXT:   [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[COPY2]](s32), [[C2]]
33   ; GFX10-NEXT:   [[COPY6:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP2]](s1)
34   ; GFX10-NEXT:   [[S_ANDN2_B32_:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY5]](s1), $exec_lo, implicit-def $scc
35   ; GFX10-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY6]](s1), implicit-def $scc
36   ; GFX10-NEXT:   [[S_OR_B32_:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
37   ; GFX10-NEXT: {{  $}}
38   ; GFX10-NEXT: bb.2:
39   ; GFX10-NEXT:   [[PHI:%[0-9]+]]:sreg_32(s1) = PHI [[COPY4]](s1), %bb.0, [[S_OR_B32_]](s1), %bb.1
40   ; GFX10-NEXT:   [[COPY7:%[0-9]+]]:sreg_32(s1) = COPY [[PHI]](s1)
41   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF]](s32)
42   ; GFX10-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
43   ; GFX10-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
44   ; GFX10-NEXT:   [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[COPY7]](s1), [[C4]], [[C3]]
45   ; GFX10-NEXT:   G_STORE [[SELECT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
46   ; GFX10-NEXT:   S_ENDPGM 0
47   bb.0:
48     successors: %bb.1(0x40000000), %bb.2(0x40000000)
49     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
51     %0:_(s32) = COPY $vgpr0
52     %1:_(s32) = COPY $vgpr1
53     %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
54     %3:_(s32) = COPY $vgpr2
55     %4:_(s32) = COPY $vgpr3
56     %5:_(s32) = G_CONSTANT i32 6
57     %6:_(s1) = G_ICMP intpred(uge), %3(s32), %5
58     %7:_(s32) = G_CONSTANT i32 0
59     %8:sreg_32_xm0_xexec(s1) = G_ICMP intpred(eq), %4(s32), %7
60     %9:sreg_32_xm0_xexec(s32) = SI_IF %8(s1), %bb.2, implicit-def $exec, implicit-def $scc, implicit $exec
61     G_BR %bb.1
63   bb.1:
64     successors: %bb.2(0x80000000)
66     %10:_(s32) = G_CONSTANT i32 1
67     %11:_(s1) = G_ICMP intpred(ult), %3(s32), %10
69   bb.2:
70     %12:_(s1) = G_PHI %6(s1), %bb.0, %11(s1), %bb.1
71     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %9(s32)
72     %13:_(s32) = G_CONSTANT i32 2
73     %14:_(s32) = G_CONSTANT i32 1
74     %15:_(s32) = G_SELECT %12(s1), %14, %13
75     G_STORE %15(s32), %2(p1) :: (store (s32), addrspace 1)
76     S_ENDPGM 0
77 ...
79 ---
80 name: divergent_i1_phi_if_else
81 legalized: true
82 tracksRegLiveness: true
83 body: |
84   ; GFX10-LABEL: name: divergent_i1_phi_if_else
85   ; GFX10: bb.0:
86   ; GFX10-NEXT:   successors: %bb.3(0x40000000), %bb.1(0x40000000)
87   ; GFX10-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
88   ; GFX10-NEXT: {{  $}}
89   ; GFX10-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
90   ; GFX10-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
91   ; GFX10-NEXT:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
92   ; GFX10-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
93   ; GFX10-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
94   ; GFX10-NEXT:   [[DEF:%[0-9]+]]:_(s1) = G_IMPLICIT_DEF
95   ; GFX10-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
96   ; GFX10-NEXT:   [[ICMP:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[COPY3]](s32), [[C]]
97   ; GFX10-NEXT:   [[COPY4:%[0-9]+]]:sreg_32(s1) = COPY [[DEF]](s1)
98   ; GFX10-NEXT:   [[COPY5:%[0-9]+]]:sreg_32(s1) = COPY [[COPY4]](s1)
99   ; GFX10-NEXT:   [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP]](s1), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
100   ; GFX10-NEXT:   G_BR %bb.3
101   ; GFX10-NEXT: {{  $}}
102   ; GFX10-NEXT: bb.1:
103   ; GFX10-NEXT:   successors: %bb.2(0x40000000), %bb.4(0x40000000)
104   ; GFX10-NEXT: {{  $}}
105   ; GFX10-NEXT:   [[PHI:%[0-9]+]]:sreg_32(s1) = PHI [[COPY4]](s1), %bb.0, %20(s1), %bb.3
106   ; GFX10-NEXT:   [[COPY6:%[0-9]+]]:sreg_32(s1) = COPY [[PHI]](s1)
107   ; GFX10-NEXT:   [[COPY7:%[0-9]+]]:sreg_32(s1) = COPY [[COPY6]](s1)
108   ; GFX10-NEXT:   [[COPY8:%[0-9]+]]:sreg_32(s1) = COPY [[COPY7]](s1)
109   ; GFX10-NEXT:   [[SI_ELSE:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_ELSE [[SI_IF]](s32), %bb.4, implicit-def $exec, implicit-def $scc, implicit $exec
110   ; GFX10-NEXT:   G_BR %bb.2
111   ; GFX10-NEXT: {{  $}}
112   ; GFX10-NEXT: bb.2:
113   ; GFX10-NEXT:   successors: %bb.4(0x80000000)
114   ; GFX10-NEXT: {{  $}}
115   ; GFX10-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
116   ; GFX10-NEXT:   [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(uge), [[COPY2]](s32), [[C1]]
117   ; GFX10-NEXT:   [[COPY9:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP1]](s1)
118   ; GFX10-NEXT:   [[S_ANDN2_B32_:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY8]](s1), $exec_lo, implicit-def $scc
119   ; GFX10-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY9]](s1), implicit-def $scc
120   ; GFX10-NEXT:   [[S_OR_B32_:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
121   ; GFX10-NEXT:   G_BR %bb.4
122   ; GFX10-NEXT: {{  $}}
123   ; GFX10-NEXT: bb.3:
124   ; GFX10-NEXT:   successors: %bb.1(0x80000000)
125   ; GFX10-NEXT: {{  $}}
126   ; GFX10-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
127   ; GFX10-NEXT:   [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[COPY2]](s32), [[C2]]
128   ; GFX10-NEXT:   [[COPY10:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP2]](s1)
129   ; GFX10-NEXT:   [[S_ANDN2_B32_1:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY5]](s1), $exec_lo, implicit-def $scc
130   ; GFX10-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY10]](s1), implicit-def $scc
131   ; GFX10-NEXT:   [[S_OR_B32_1:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_1]](s1), [[S_AND_B32_1]](s1), implicit-def $scc
132   ; GFX10-NEXT:   G_BR %bb.1
133   ; GFX10-NEXT: {{  $}}
134   ; GFX10-NEXT: bb.4:
135   ; GFX10-NEXT:   [[PHI1:%[0-9]+]]:sreg_32(s1) = PHI [[COPY7]](s1), %bb.1, [[S_OR_B32_]](s1), %bb.2
136   ; GFX10-NEXT:   [[COPY11:%[0-9]+]]:sreg_32(s1) = COPY [[PHI1]](s1)
137   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_ELSE]](s32)
138   ; GFX10-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
139   ; GFX10-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
140   ; GFX10-NEXT:   [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[COPY11]](s1), [[C3]], [[C4]]
141   ; GFX10-NEXT:   G_STORE [[SELECT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
142   ; GFX10-NEXT:   S_ENDPGM 0
143   bb.0:
144     successors: %bb.3(0x40000000), %bb.1(0x40000000)
145     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
147     %0:_(s32) = COPY $vgpr0
148     %1:_(s32) = COPY $vgpr1
149     %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
150     %3:_(s32) = COPY $vgpr2
151     %4:_(s32) = COPY $vgpr3
152     %5:_(s1) = G_IMPLICIT_DEF
153     %6:_(s32) = G_CONSTANT i32 0
154     %7:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %4(s32), %6
155     %8:sreg_32_xm0_xexec(s32) = SI_IF %7(s1), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
156     G_BR %bb.3
158   bb.1:
159     successors: %bb.2(0x40000000), %bb.4(0x40000000)
161     %9:_(s1) = G_PHI %10(s1), %bb.3, %5(s1), %bb.0
162     %11:sreg_32_xm0_xexec(s32) = SI_ELSE %8(s32), %bb.4, implicit-def $exec, implicit-def $scc, implicit $exec
163     G_BR %bb.2
165   bb.2:
166     successors: %bb.4(0x80000000)
168     %12:_(s32) = G_CONSTANT i32 1
169     %13:_(s1) = G_ICMP intpred(uge), %3(s32), %12
170     G_BR %bb.4
172   bb.3:
173     successors: %bb.1(0x80000000)
175     %14:_(s32) = G_CONSTANT i32 2
176     %10:_(s1) = G_ICMP intpred(ult), %3(s32), %14
177     G_BR %bb.1
179   bb.4:
180     %15:_(s1) = G_PHI %9(s1), %bb.1, %13(s1), %bb.2
181     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %11(s32)
182     %16:_(s32) = G_CONSTANT i32 1
183     %17:_(s32) = G_CONSTANT i32 2
184     %18:_(s32) = G_SELECT %15(s1), %16, %17
185     G_STORE %18(s32), %2(p1) :: (store (s32), addrspace 1)
186     S_ENDPGM 0
190 name: loop_with_1break
191 legalized: true
192 tracksRegLiveness: true
193 body: |
194   ; GFX10-LABEL: name: loop_with_1break
195   ; GFX10: bb.0:
196   ; GFX10-NEXT:   successors: %bb.1(0x80000000)
197   ; GFX10-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
198   ; GFX10-NEXT: {{  $}}
199   ; GFX10-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
200   ; GFX10-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
201   ; GFX10-NEXT:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
202   ; GFX10-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
203   ; GFX10-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
204   ; GFX10-NEXT:   [[MV1:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
205   ; GFX10-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
206   ; GFX10-NEXT:   [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
207   ; GFX10-NEXT:   [[DEF1:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
208   ; GFX10-NEXT: {{  $}}
209   ; GFX10-NEXT: bb.1:
210   ; GFX10-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)
211   ; GFX10-NEXT: {{  $}}
212   ; GFX10-NEXT:   [[PHI:%[0-9]+]]:sreg_32(s1) = PHI [[DEF1]](s1), %bb.0, %35(s1), %bb.3
213   ; GFX10-NEXT:   [[PHI1:%[0-9]+]]:_(s32) = G_PHI %9(s32), %bb.3, [[C]](s32), %bb.0
214   ; GFX10-NEXT:   [[PHI2:%[0-9]+]]:_(s32) = G_PHI [[C]](s32), %bb.0, %11(s32), %bb.3
215   ; GFX10-NEXT:   [[COPY4:%[0-9]+]]:sreg_32(s1) = COPY [[PHI]](s1)
216   ; GFX10-NEXT:   [[C1:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
217   ; GFX10-NEXT:   [[COPY5:%[0-9]+]]:sreg_32(s1) = COPY [[C1]](s1)
218   ; GFX10-NEXT:   [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[PHI2]](s32)
219   ; GFX10-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
220   ; GFX10-NEXT:   [[SHL:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C2]](s32)
221   ; GFX10-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV1]], [[SHL]](s64)
222   ; GFX10-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p1) :: (load (s32), addrspace 1)
223   ; GFX10-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
224   ; GFX10-NEXT:   [[ICMP:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C3]]
225   ; GFX10-NEXT:   [[S_ANDN2_B32_:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY4]](s1), $exec_lo, implicit-def $scc
226   ; GFX10-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY5]](s1), implicit-def $scc
227   ; GFX10-NEXT:   [[S_OR_B32_:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
228   ; GFX10-NEXT:   [[COPY6:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_]](s1)
229   ; GFX10-NEXT:   [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP]](s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
230   ; GFX10-NEXT:   G_BR %bb.2
231   ; GFX10-NEXT: {{  $}}
232   ; GFX10-NEXT: bb.2:
233   ; GFX10-NEXT:   successors: %bb.3(0x80000000)
234   ; GFX10-NEXT: {{  $}}
235   ; GFX10-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
236   ; GFX10-NEXT:   [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C4]](s32)
237   ; GFX10-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV]], [[SHL1]](s64)
238   ; GFX10-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p1) :: (load (s32), addrspace 1)
239   ; GFX10-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
240   ; GFX10-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD1]], [[C5]]
241   ; GFX10-NEXT:   G_STORE [[ADD]](s32), [[PTR_ADD1]](p1) :: (store (s32), addrspace 1)
242   ; GFX10-NEXT:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[PHI2]], [[C5]]
243   ; GFX10-NEXT:   [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 100
244   ; GFX10-NEXT:   [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[PHI2]](s32), [[C6]]
245   ; GFX10-NEXT:   [[COPY7:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP1]](s1)
246   ; GFX10-NEXT:   [[S_ANDN2_B32_1:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY6]](s1), $exec_lo, implicit-def $scc
247   ; GFX10-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY7]](s1), implicit-def $scc
248   ; GFX10-NEXT:   [[S_OR_B32_1:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_1]](s1), [[S_AND_B32_1]](s1), implicit-def $scc
249   ; GFX10-NEXT: {{  $}}
250   ; GFX10-NEXT: bb.3:
251   ; GFX10-NEXT:   successors: %bb.4(0x04000000), %bb.1(0x7c000000)
252   ; GFX10-NEXT: {{  $}}
253   ; GFX10-NEXT:   [[PHI3:%[0-9]+]]:sreg_32(s1) = PHI [[S_OR_B32_]](s1), %bb.1, [[S_OR_B32_1]](s1), %bb.2
254   ; GFX10-NEXT:   [[PHI4:%[0-9]+]]:_(s32) = G_PHI [[ADD1]](s32), %bb.2, [[DEF]](s32), %bb.1
255   ; GFX10-NEXT:   [[COPY8:%[0-9]+]]:sreg_32(s1) = COPY [[PHI3]](s1)
256   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF]](s32)
257   ; GFX10-NEXT:   [[INT:%[0-9]+]]:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[COPY8]](s1), [[PHI1]](s32)
258   ; GFX10-NEXT:   SI_LOOP [[INT]](s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
259   ; GFX10-NEXT:   G_BR %bb.4
260   ; GFX10-NEXT: {{  $}}
261   ; GFX10-NEXT: bb.4:
262   ; GFX10-NEXT:   [[PHI5:%[0-9]+]]:_(s32) = G_PHI [[INT]](s32), %bb.3
263   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI5]](s32)
264   ; GFX10-NEXT:   S_ENDPGM 0
265   bb.0:
266     successors: %bb.1(0x80000000)
267     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
269     %0:_(s32) = COPY $vgpr0
270     %1:_(s32) = COPY $vgpr1
271     %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
272     %3:_(s32) = COPY $vgpr2
273     %4:_(s32) = COPY $vgpr3
274     %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
275     %6:_(s32) = G_CONSTANT i32 0
276     %7:_(s32) = G_IMPLICIT_DEF
278   bb.1:
279     successors: %bb.2(0x40000000), %bb.3(0x40000000)
281     %8:_(s32) = G_PHI %9(s32), %bb.3, %6(s32), %bb.0
282     %10:_(s32) = G_PHI %6(s32), %bb.0, %11(s32), %bb.3
283     %12:_(s1) = G_CONSTANT i1 true
284     %13:_(s64) = G_SEXT %10(s32)
285     %14:_(s32) = G_CONSTANT i32 2
286     %15:_(s64) = G_SHL %13, %14(s32)
287     %16:_(p1) = G_PTR_ADD %5, %15(s64)
288     %17:_(s32) = G_LOAD %16(p1) :: (load (s32), addrspace 1)
289     %18:_(s32) = G_CONSTANT i32 0
290     %19:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %17(s32), %18
291     %20:sreg_32_xm0_xexec(s32) = SI_IF %19(s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
292     G_BR %bb.2
294   bb.2:
295     successors: %bb.3(0x80000000)
297     %21:_(s32) = G_CONSTANT i32 2
298     %22:_(s64) = G_SHL %13, %21(s32)
299     %23:_(p1) = G_PTR_ADD %2, %22(s64)
300     %24:_(s32) = G_LOAD %23(p1) :: (load (s32), addrspace 1)
301     %25:_(s32) = G_CONSTANT i32 1
302     %26:_(s32) = G_ADD %24, %25
303     G_STORE %26(s32), %23(p1) :: (store (s32), addrspace 1)
304     %27:_(s32) = G_ADD %10, %25
305     %28:_(s32) = G_CONSTANT i32 100
306     %29:_(s1) = G_ICMP intpred(ult), %10(s32), %28
308   bb.3:
309     successors: %bb.4(0x04000000), %bb.1(0x7c000000)
311     %11:_(s32) = G_PHI %27(s32), %bb.2, %7(s32), %bb.1
312     %30:_(s1) = G_PHI %29(s1), %bb.2, %12(s1), %bb.1
313     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %20(s32)
314     %9:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %30(s1), %8(s32)
315     SI_LOOP %9(s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
316     G_BR %bb.4
318   bb.4:
319     %31:_(s32) = G_PHI %9(s32), %bb.3
320     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %31(s32)
321     S_ENDPGM 0
325 name: loop_with_2breaks
326 legalized: true
327 tracksRegLiveness: true
328 body: |
329   ; GFX10-LABEL: name: loop_with_2breaks
330   ; GFX10: bb.0:
331   ; GFX10-NEXT:   successors: %bb.1(0x80000000)
332   ; GFX10-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
333   ; GFX10-NEXT: {{  $}}
334   ; GFX10-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
335   ; GFX10-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
336   ; GFX10-NEXT:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
337   ; GFX10-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
338   ; GFX10-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
339   ; GFX10-NEXT:   [[MV1:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
340   ; GFX10-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
341   ; GFX10-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
342   ; GFX10-NEXT:   [[MV2:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
343   ; GFX10-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
344   ; GFX10-NEXT:   [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
345   ; GFX10-NEXT:   [[DEF1:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
346   ; GFX10-NEXT: {{  $}}
347   ; GFX10-NEXT: bb.1:
348   ; GFX10-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)
349   ; GFX10-NEXT: {{  $}}
350   ; GFX10-NEXT:   [[PHI:%[0-9]+]]:sreg_32(s1) = PHI [[DEF1]](s1), %bb.0, %48(s1), %bb.3
351   ; GFX10-NEXT:   [[PHI1:%[0-9]+]]:_(s32) = G_PHI %12(s32), %bb.3, [[C]](s32), %bb.0
352   ; GFX10-NEXT:   [[PHI2:%[0-9]+]]:_(s32) = G_PHI [[C]](s32), %bb.0, %14(s32), %bb.3
353   ; GFX10-NEXT:   [[COPY6:%[0-9]+]]:sreg_32(s1) = COPY [[PHI]](s1)
354   ; GFX10-NEXT:   [[C1:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
355   ; GFX10-NEXT:   [[COPY7:%[0-9]+]]:sreg_32(s1) = COPY [[C1]](s1)
356   ; GFX10-NEXT:   [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[PHI2]](s32)
357   ; GFX10-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
358   ; GFX10-NEXT:   [[SHL:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C2]](s32)
359   ; GFX10-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV1]], [[SHL]](s64)
360   ; GFX10-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p1) :: (load (s32), addrspace 1)
361   ; GFX10-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
362   ; GFX10-NEXT:   [[ICMP:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C3]]
363   ; GFX10-NEXT:   [[S_ANDN2_B32_:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY6]](s1), $exec_lo, implicit-def $scc
364   ; GFX10-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY7]](s1), implicit-def $scc
365   ; GFX10-NEXT:   [[S_OR_B32_:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
366   ; GFX10-NEXT:   [[COPY8:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_]](s1)
367   ; GFX10-NEXT:   [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP]](s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
368   ; GFX10-NEXT:   G_BR %bb.2
369   ; GFX10-NEXT: {{  $}}
370   ; GFX10-NEXT: bb.2:
371   ; GFX10-NEXT:   successors: %bb.4(0x40000000), %bb.5(0x40000000)
372   ; GFX10-NEXT: {{  $}}
373   ; GFX10-NEXT:   [[C4:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
374   ; GFX10-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
375   ; GFX10-NEXT:   [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C5]](s32)
376   ; GFX10-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV2]], [[SHL1]](s64)
377   ; GFX10-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p1) :: (load (s32), addrspace 1)
378   ; GFX10-NEXT:   [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
379   ; GFX10-NEXT:   [[ICMP1:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[LOAD1]](s32), [[C6]]
380   ; GFX10-NEXT:   [[COPY9:%[0-9]+]]:sreg_32(s1) = COPY [[C4]](s1)
381   ; GFX10-NEXT:   [[COPY10:%[0-9]+]]:sreg_32(s1) = COPY [[COPY9]](s1)
382   ; GFX10-NEXT:   [[SI_IF1:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP1]](s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
383   ; GFX10-NEXT:   G_BR %bb.4
384   ; GFX10-NEXT: {{  $}}
385   ; GFX10-NEXT: bb.3:
386   ; GFX10-NEXT:   successors: %bb.6(0x04000000), %bb.1(0x7c000000)
387   ; GFX10-NEXT: {{  $}}
388   ; GFX10-NEXT:   [[PHI3:%[0-9]+]]:sreg_32(s1) = PHI [[S_OR_B32_]](s1), %bb.1, %47(s1), %bb.5
389   ; GFX10-NEXT:   [[PHI4:%[0-9]+]]:_(s32) = G_PHI %32(s32), %bb.5, [[DEF]](s32), %bb.1
390   ; GFX10-NEXT:   [[COPY11:%[0-9]+]]:sreg_32(s1) = COPY [[PHI3]](s1)
391   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF]](s32)
392   ; GFX10-NEXT:   [[INT:%[0-9]+]]:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[COPY11]](s1), [[PHI1]](s32)
393   ; GFX10-NEXT:   SI_LOOP [[INT]](s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
394   ; GFX10-NEXT:   G_BR %bb.6
395   ; GFX10-NEXT: {{  $}}
396   ; GFX10-NEXT: bb.4:
397   ; GFX10-NEXT:   successors: %bb.5(0x80000000)
398   ; GFX10-NEXT: {{  $}}
399   ; GFX10-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
400   ; GFX10-NEXT:   [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C7]](s32)
401   ; GFX10-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV]], [[SHL2]](s64)
402   ; GFX10-NEXT:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p1) :: (load (s32), addrspace 1)
403   ; GFX10-NEXT:   [[C8:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
404   ; GFX10-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD2]], [[C8]]
405   ; GFX10-NEXT:   G_STORE [[ADD]](s32), [[PTR_ADD2]](p1) :: (store (s32), addrspace 1)
406   ; GFX10-NEXT:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[PHI2]], [[C8]]
407   ; GFX10-NEXT:   [[C9:%[0-9]+]]:_(s32) = G_CONSTANT i32 100
408   ; GFX10-NEXT:   [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[PHI2]](s32), [[C9]]
409   ; GFX10-NEXT:   [[COPY12:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP2]](s1)
410   ; GFX10-NEXT:   [[S_ANDN2_B32_1:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY10]](s1), $exec_lo, implicit-def $scc
411   ; GFX10-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY12]](s1), implicit-def $scc
412   ; GFX10-NEXT:   [[S_OR_B32_1:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_1]](s1), [[S_AND_B32_1]](s1), implicit-def $scc
413   ; GFX10-NEXT: {{  $}}
414   ; GFX10-NEXT: bb.5:
415   ; GFX10-NEXT:   successors: %bb.3(0x80000000)
416   ; GFX10-NEXT: {{  $}}
417   ; GFX10-NEXT:   [[PHI5:%[0-9]+]]:sreg_32(s1) = PHI [[COPY9]](s1), %bb.2, [[S_OR_B32_1]](s1), %bb.4
418   ; GFX10-NEXT:   [[PHI6:%[0-9]+]]:_(s32) = G_PHI [[ADD1]](s32), %bb.4, [[DEF]](s32), %bb.2
419   ; GFX10-NEXT:   [[COPY13:%[0-9]+]]:sreg_32(s1) = COPY [[PHI5]](s1)
420   ; GFX10-NEXT:   [[COPY14:%[0-9]+]]:sreg_32(s1) = COPY [[COPY13]](s1)
421   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF1]](s32)
422   ; GFX10-NEXT:   [[S_ANDN2_B32_2:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY8]](s1), $exec_lo, implicit-def $scc
423   ; GFX10-NEXT:   [[S_AND_B32_2:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY14]](s1), implicit-def $scc
424   ; GFX10-NEXT:   [[S_OR_B32_2:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_2]](s1), [[S_AND_B32_2]](s1), implicit-def $scc
425   ; GFX10-NEXT:   G_BR %bb.3
426   ; GFX10-NEXT: {{  $}}
427   ; GFX10-NEXT: bb.6:
428   ; GFX10-NEXT:   [[PHI7:%[0-9]+]]:_(s32) = G_PHI [[INT]](s32), %bb.3
429   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI7]](s32)
430   ; GFX10-NEXT:   S_ENDPGM 0
431   bb.0:
432     successors: %bb.1(0x80000000)
433     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
435     %0:_(s32) = COPY $vgpr0
436     %1:_(s32) = COPY $vgpr1
437     %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
438     %3:_(s32) = COPY $vgpr2
439     %4:_(s32) = COPY $vgpr3
440     %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
441     %6:_(s32) = COPY $vgpr4
442     %7:_(s32) = COPY $vgpr5
443     %8:_(p1) = G_MERGE_VALUES %6(s32), %7(s32)
444     %9:_(s32) = G_CONSTANT i32 0
445     %10:_(s32) = G_IMPLICIT_DEF
447   bb.1:
448     successors: %bb.2(0x40000000), %bb.3(0x40000000)
450     %11:_(s32) = G_PHI %12(s32), %bb.3, %9(s32), %bb.0
451     %13:_(s32) = G_PHI %9(s32), %bb.0, %14(s32), %bb.3
452     %15:_(s1) = G_CONSTANT i1 true
453     %16:_(s64) = G_SEXT %13(s32)
454     %17:_(s32) = G_CONSTANT i32 2
455     %18:_(s64) = G_SHL %16, %17(s32)
456     %19:_(p1) = G_PTR_ADD %5, %18(s64)
457     %20:_(s32) = G_LOAD %19(p1) :: (load (s32), addrspace 1)
458     %21:_(s32) = G_CONSTANT i32 0
459     %22:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %20(s32), %21
460     %23:sreg_32_xm0_xexec(s32) = SI_IF %22(s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
461     G_BR %bb.2
463   bb.2:
464     successors: %bb.4(0x40000000), %bb.5(0x40000000)
466     %24:_(s1) = G_CONSTANT i1 true
467     %25:_(s32) = G_CONSTANT i32 2
468     %26:_(s64) = G_SHL %16, %25(s32)
469     %27:_(p1) = G_PTR_ADD %8, %26(s64)
470     %28:_(s32) = G_LOAD %27(p1) :: (load (s32), addrspace 1)
471     %29:_(s32) = G_CONSTANT i32 0
472     %30:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %28(s32), %29
473     %31:sreg_32_xm0_xexec(s32) = SI_IF %30(s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
474     G_BR %bb.4
476   bb.3:
477     successors: %bb.6(0x04000000), %bb.1(0x7c000000)
479     %14:_(s32) = G_PHI %32(s32), %bb.5, %10(s32), %bb.1
480     %33:_(s1) = G_PHI %34(s1), %bb.5, %15(s1), %bb.1
481     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %23(s32)
482     %12:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %33(s1), %11(s32)
483     SI_LOOP %12(s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
484     G_BR %bb.6
486   bb.4:
487     successors: %bb.5(0x80000000)
489     %35:_(s32) = G_CONSTANT i32 2
490     %36:_(s64) = G_SHL %16, %35(s32)
491     %37:_(p1) = G_PTR_ADD %2, %36(s64)
492     %38:_(s32) = G_LOAD %37(p1) :: (load (s32), addrspace 1)
493     %39:_(s32) = G_CONSTANT i32 1
494     %40:_(s32) = G_ADD %38, %39
495     G_STORE %40(s32), %37(p1) :: (store (s32), addrspace 1)
496     %41:_(s32) = G_ADD %13, %39
497     %42:_(s32) = G_CONSTANT i32 100
498     %43:_(s1) = G_ICMP intpred(ult), %13(s32), %42
500   bb.5:
501     successors: %bb.3(0x80000000)
503     %32:_(s32) = G_PHI %41(s32), %bb.4, %10(s32), %bb.2
504     %34:_(s1) = G_PHI %43(s1), %bb.4, %24(s1), %bb.2
505     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %31(s32)
506     G_BR %bb.3
508   bb.6:
509     %44:_(s32) = G_PHI %12(s32), %bb.3
510     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %44(s32)
511     S_ENDPGM 0
515 name: loop_with_3breaks
516 legalized: true
517 tracksRegLiveness: true
518 body: |
519   ; GFX10-LABEL: name: loop_with_3breaks
520   ; GFX10: bb.0:
521   ; GFX10-NEXT:   successors: %bb.1(0x80000000)
522   ; GFX10-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
523   ; GFX10-NEXT: {{  $}}
524   ; GFX10-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
525   ; GFX10-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
526   ; GFX10-NEXT:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
527   ; GFX10-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
528   ; GFX10-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
529   ; GFX10-NEXT:   [[MV1:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
530   ; GFX10-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
531   ; GFX10-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
532   ; GFX10-NEXT:   [[MV2:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
533   ; GFX10-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
534   ; GFX10-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
535   ; GFX10-NEXT:   [[MV3:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
536   ; GFX10-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
537   ; GFX10-NEXT:   [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
538   ; GFX10-NEXT:   [[DEF1:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
539   ; GFX10-NEXT: {{  $}}
540   ; GFX10-NEXT: bb.1:
541   ; GFX10-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)
542   ; GFX10-NEXT: {{  $}}
543   ; GFX10-NEXT:   [[PHI:%[0-9]+]]:sreg_32(s1) = PHI [[DEF1]](s1), %bb.0, %61(s1), %bb.3
544   ; GFX10-NEXT:   [[PHI1:%[0-9]+]]:_(s32) = G_PHI %15(s32), %bb.3, [[C]](s32), %bb.0
545   ; GFX10-NEXT:   [[PHI2:%[0-9]+]]:_(s32) = G_PHI [[C]](s32), %bb.0, %17(s32), %bb.3
546   ; GFX10-NEXT:   [[COPY8:%[0-9]+]]:sreg_32(s1) = COPY [[PHI]](s1)
547   ; GFX10-NEXT:   [[C1:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
548   ; GFX10-NEXT:   [[COPY9:%[0-9]+]]:sreg_32(s1) = COPY [[C1]](s1)
549   ; GFX10-NEXT:   [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[PHI2]](s32)
550   ; GFX10-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
551   ; GFX10-NEXT:   [[SHL:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C2]](s32)
552   ; GFX10-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV1]], [[SHL]](s64)
553   ; GFX10-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p1) :: (load (s32), addrspace 1)
554   ; GFX10-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
555   ; GFX10-NEXT:   [[ICMP:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C3]]
556   ; GFX10-NEXT:   [[S_ANDN2_B32_:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY8]](s1), $exec_lo, implicit-def $scc
557   ; GFX10-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY9]](s1), implicit-def $scc
558   ; GFX10-NEXT:   [[S_OR_B32_:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
559   ; GFX10-NEXT:   [[COPY10:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_]](s1)
560   ; GFX10-NEXT:   [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP]](s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
561   ; GFX10-NEXT:   G_BR %bb.2
562   ; GFX10-NEXT: {{  $}}
563   ; GFX10-NEXT: bb.2:
564   ; GFX10-NEXT:   successors: %bb.4(0x40000000), %bb.5(0x40000000)
565   ; GFX10-NEXT: {{  $}}
566   ; GFX10-NEXT:   [[C4:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
567   ; GFX10-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
568   ; GFX10-NEXT:   [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C5]](s32)
569   ; GFX10-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV2]], [[SHL1]](s64)
570   ; GFX10-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p1) :: (load (s32), addrspace 1)
571   ; GFX10-NEXT:   [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
572   ; GFX10-NEXT:   [[ICMP1:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[LOAD1]](s32), [[C6]]
573   ; GFX10-NEXT:   [[COPY11:%[0-9]+]]:sreg_32(s1) = COPY [[C4]](s1)
574   ; GFX10-NEXT:   [[COPY12:%[0-9]+]]:sreg_32(s1) = COPY [[COPY11]](s1)
575   ; GFX10-NEXT:   [[SI_IF1:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP1]](s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
576   ; GFX10-NEXT:   G_BR %bb.4
577   ; GFX10-NEXT: {{  $}}
578   ; GFX10-NEXT: bb.3:
579   ; GFX10-NEXT:   successors: %bb.8(0x04000000), %bb.1(0x7c000000)
580   ; GFX10-NEXT: {{  $}}
581   ; GFX10-NEXT:   [[PHI3:%[0-9]+]]:sreg_32(s1) = PHI [[S_OR_B32_]](s1), %bb.1, %60(s1), %bb.5
582   ; GFX10-NEXT:   [[PHI4:%[0-9]+]]:_(s32) = G_PHI %35(s32), %bb.5, [[DEF]](s32), %bb.1
583   ; GFX10-NEXT:   [[COPY13:%[0-9]+]]:sreg_32(s1) = COPY [[PHI3]](s1)
584   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF]](s32)
585   ; GFX10-NEXT:   [[INT:%[0-9]+]]:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[COPY13]](s1), [[PHI1]](s32)
586   ; GFX10-NEXT:   SI_LOOP [[INT]](s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
587   ; GFX10-NEXT:   G_BR %bb.8
588   ; GFX10-NEXT: {{  $}}
589   ; GFX10-NEXT: bb.4:
590   ; GFX10-NEXT:   successors: %bb.6(0x40000000), %bb.7(0x40000000)
591   ; GFX10-NEXT: {{  $}}
592   ; GFX10-NEXT:   [[C7:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
593   ; GFX10-NEXT:   [[C8:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
594   ; GFX10-NEXT:   [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C8]](s32)
595   ; GFX10-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV3]], [[SHL2]](s64)
596   ; GFX10-NEXT:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p1) :: (load (s32), addrspace 1)
597   ; GFX10-NEXT:   [[C9:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
598   ; GFX10-NEXT:   [[ICMP2:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[LOAD2]](s32), [[C9]]
599   ; GFX10-NEXT:   [[COPY14:%[0-9]+]]:sreg_32(s1) = COPY [[C7]](s1)
600   ; GFX10-NEXT:   [[COPY15:%[0-9]+]]:sreg_32(s1) = COPY [[COPY14]](s1)
601   ; GFX10-NEXT:   [[SI_IF2:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP2]](s1), %bb.7, implicit-def $exec, implicit-def $scc, implicit $exec
602   ; GFX10-NEXT:   G_BR %bb.6
603   ; GFX10-NEXT: {{  $}}
604   ; GFX10-NEXT: bb.5:
605   ; GFX10-NEXT:   successors: %bb.3(0x80000000)
606   ; GFX10-NEXT: {{  $}}
607   ; GFX10-NEXT:   [[PHI5:%[0-9]+]]:sreg_32(s1) = PHI [[COPY11]](s1), %bb.2, %72(s1), %bb.7
608   ; GFX10-NEXT:   [[PHI6:%[0-9]+]]:_(s32) = G_PHI %46(s32), %bb.7, [[DEF]](s32), %bb.2
609   ; GFX10-NEXT:   [[COPY16:%[0-9]+]]:sreg_32(s1) = COPY [[PHI5]](s1)
610   ; GFX10-NEXT:   [[COPY17:%[0-9]+]]:sreg_32(s1) = COPY [[COPY16]](s1)
611   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF1]](s32)
612   ; GFX10-NEXT:   [[S_ANDN2_B32_1:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY10]](s1), $exec_lo, implicit-def $scc
613   ; GFX10-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY17]](s1), implicit-def $scc
614   ; GFX10-NEXT:   [[S_OR_B32_1:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_1]](s1), [[S_AND_B32_1]](s1), implicit-def $scc
615   ; GFX10-NEXT:   G_BR %bb.3
616   ; GFX10-NEXT: {{  $}}
617   ; GFX10-NEXT: bb.6:
618   ; GFX10-NEXT:   successors: %bb.7(0x80000000)
619   ; GFX10-NEXT: {{  $}}
620   ; GFX10-NEXT:   [[C10:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
621   ; GFX10-NEXT:   [[SHL3:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C10]](s32)
622   ; GFX10-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV]], [[SHL3]](s64)
623   ; GFX10-NEXT:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD3]](p1) :: (load (s32), addrspace 1)
624   ; GFX10-NEXT:   [[C11:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
625   ; GFX10-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD3]], [[C11]]
626   ; GFX10-NEXT:   G_STORE [[ADD]](s32), [[PTR_ADD3]](p1) :: (store (s32), addrspace 1)
627   ; GFX10-NEXT:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[PHI2]], [[C11]]
628   ; GFX10-NEXT:   [[C12:%[0-9]+]]:_(s32) = G_CONSTANT i32 100
629   ; GFX10-NEXT:   [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[PHI2]](s32), [[C12]]
630   ; GFX10-NEXT:   [[COPY18:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP3]](s1)
631   ; GFX10-NEXT:   [[S_ANDN2_B32_2:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY15]](s1), $exec_lo, implicit-def $scc
632   ; GFX10-NEXT:   [[S_AND_B32_2:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY18]](s1), implicit-def $scc
633   ; GFX10-NEXT:   [[S_OR_B32_2:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_2]](s1), [[S_AND_B32_2]](s1), implicit-def $scc
634   ; GFX10-NEXT: {{  $}}
635   ; GFX10-NEXT: bb.7:
636   ; GFX10-NEXT:   successors: %bb.5(0x80000000)
637   ; GFX10-NEXT: {{  $}}
638   ; GFX10-NEXT:   [[PHI7:%[0-9]+]]:sreg_32(s1) = PHI [[COPY14]](s1), %bb.4, [[S_OR_B32_2]](s1), %bb.6
639   ; GFX10-NEXT:   [[PHI8:%[0-9]+]]:_(s32) = G_PHI [[ADD1]](s32), %bb.6, [[DEF]](s32), %bb.4
640   ; GFX10-NEXT:   [[COPY19:%[0-9]+]]:sreg_32(s1) = COPY [[PHI7]](s1)
641   ; GFX10-NEXT:   [[COPY20:%[0-9]+]]:sreg_32(s1) = COPY [[COPY19]](s1)
642   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF2]](s32)
643   ; GFX10-NEXT:   [[S_ANDN2_B32_3:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY12]](s1), $exec_lo, implicit-def $scc
644   ; GFX10-NEXT:   [[S_AND_B32_3:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY20]](s1), implicit-def $scc
645   ; GFX10-NEXT:   [[S_OR_B32_3:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_3]](s1), [[S_AND_B32_3]](s1), implicit-def $scc
646   ; GFX10-NEXT:   G_BR %bb.5
647   ; GFX10-NEXT: {{  $}}
648   ; GFX10-NEXT: bb.8:
649   ; GFX10-NEXT:   [[PHI9:%[0-9]+]]:_(s32) = G_PHI [[INT]](s32), %bb.3
650   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI9]](s32)
651   ; GFX10-NEXT:   S_ENDPGM 0
652   bb.0:
653     successors: %bb.1(0x80000000)
654     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
656     %0:_(s32) = COPY $vgpr0
657     %1:_(s32) = COPY $vgpr1
658     %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
659     %3:_(s32) = COPY $vgpr2
660     %4:_(s32) = COPY $vgpr3
661     %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
662     %6:_(s32) = COPY $vgpr4
663     %7:_(s32) = COPY $vgpr5
664     %8:_(p1) = G_MERGE_VALUES %6(s32), %7(s32)
665     %9:_(s32) = COPY $vgpr6
666     %10:_(s32) = COPY $vgpr7
667     %11:_(p1) = G_MERGE_VALUES %9(s32), %10(s32)
668     %12:_(s32) = G_CONSTANT i32 0
669     %13:_(s32) = G_IMPLICIT_DEF
671   bb.1:
672     successors: %bb.2(0x40000000), %bb.3(0x40000000)
674     %14:_(s32) = G_PHI %15(s32), %bb.3, %12(s32), %bb.0
675     %16:_(s32) = G_PHI %12(s32), %bb.0, %17(s32), %bb.3
676     %18:_(s1) = G_CONSTANT i1 true
677     %19:_(s64) = G_SEXT %16(s32)
678     %20:_(s32) = G_CONSTANT i32 2
679     %21:_(s64) = G_SHL %19, %20(s32)
680     %22:_(p1) = G_PTR_ADD %5, %21(s64)
681     %23:_(s32) = G_LOAD %22(p1) :: (load (s32), addrspace 1)
682     %24:_(s32) = G_CONSTANT i32 0
683     %25:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %23(s32), %24
684     %26:sreg_32_xm0_xexec(s32) = SI_IF %25(s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
685     G_BR %bb.2
687   bb.2:
688     successors: %bb.4(0x40000000), %bb.5(0x40000000)
690     %27:_(s1) = G_CONSTANT i1 true
691     %28:_(s32) = G_CONSTANT i32 2
692     %29:_(s64) = G_SHL %19, %28(s32)
693     %30:_(p1) = G_PTR_ADD %8, %29(s64)
694     %31:_(s32) = G_LOAD %30(p1) :: (load (s32), addrspace 1)
695     %32:_(s32) = G_CONSTANT i32 0
696     %33:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %31(s32), %32
697     %34:sreg_32_xm0_xexec(s32) = SI_IF %33(s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
698     G_BR %bb.4
700   bb.3:
701     successors: %bb.8(0x04000000), %bb.1(0x7c000000)
703     %17:_(s32) = G_PHI %35(s32), %bb.5, %13(s32), %bb.1
704     %36:_(s1) = G_PHI %37(s1), %bb.5, %18(s1), %bb.1
705     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %26(s32)
706     %15:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %36(s1), %14(s32)
707     SI_LOOP %15(s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
708     G_BR %bb.8
710   bb.4:
711     successors: %bb.6(0x40000000), %bb.7(0x40000000)
713     %38:_(s1) = G_CONSTANT i1 true
714     %39:_(s32) = G_CONSTANT i32 2
715     %40:_(s64) = G_SHL %19, %39(s32)
716     %41:_(p1) = G_PTR_ADD %11, %40(s64)
717     %42:_(s32) = G_LOAD %41(p1) :: (load (s32), addrspace 1)
718     %43:_(s32) = G_CONSTANT i32 0
719     %44:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %42(s32), %43
720     %45:sreg_32_xm0_xexec(s32) = SI_IF %44(s1), %bb.7, implicit-def $exec, implicit-def $scc, implicit $exec
721     G_BR %bb.6
723   bb.5:
724     successors: %bb.3(0x80000000)
726     %35:_(s32) = G_PHI %46(s32), %bb.7, %13(s32), %bb.2
727     %37:_(s1) = G_PHI %47(s1), %bb.7, %27(s1), %bb.2
728     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %34(s32)
729     G_BR %bb.3
731   bb.6:
732     successors: %bb.7(0x80000000)
734     %48:_(s32) = G_CONSTANT i32 2
735     %49:_(s64) = G_SHL %19, %48(s32)
736     %50:_(p1) = G_PTR_ADD %2, %49(s64)
737     %51:_(s32) = G_LOAD %50(p1) :: (load (s32), addrspace 1)
738     %52:_(s32) = G_CONSTANT i32 1
739     %53:_(s32) = G_ADD %51, %52
740     G_STORE %53(s32), %50(p1) :: (store (s32), addrspace 1)
741     %54:_(s32) = G_ADD %16, %52
742     %55:_(s32) = G_CONSTANT i32 100
743     %56:_(s1) = G_ICMP intpred(ult), %16(s32), %55
745   bb.7:
746     successors: %bb.5(0x80000000)
748     %46:_(s32) = G_PHI %54(s32), %bb.6, %13(s32), %bb.4
749     %47:_(s1) = G_PHI %56(s1), %bb.6, %38(s1), %bb.4
750     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %45(s32)
751     G_BR %bb.5
753   bb.8:
754     %57:_(s32) = G_PHI %15(s32), %bb.3
755     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %57(s32)
756     S_ENDPGM 0
760 name: loop_with_div_break_with_body
761 legalized: true
762 tracksRegLiveness: true
763 body: |
764   ; GFX10-LABEL: name: loop_with_div_break_with_body
765   ; GFX10: bb.0:
766   ; GFX10-NEXT:   successors: %bb.1(0x80000000)
767   ; GFX10-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
768   ; GFX10-NEXT: {{  $}}
769   ; GFX10-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
770   ; GFX10-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
771   ; GFX10-NEXT:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
772   ; GFX10-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
773   ; GFX10-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
774   ; GFX10-NEXT:   [[MV1:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
775   ; GFX10-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
776   ; GFX10-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
777   ; GFX10-NEXT:   [[MV2:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
778   ; GFX10-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
779   ; GFX10-NEXT:   [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
780   ; GFX10-NEXT:   [[DEF1:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
781   ; GFX10-NEXT:   [[DEF2:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
782   ; GFX10-NEXT:   [[DEF3:%[0-9]+]]:sreg_32_xm0_xexec(s1) = IMPLICIT_DEF
783   ; GFX10-NEXT: {{  $}}
784   ; GFX10-NEXT: bb.1:
785   ; GFX10-NEXT:   successors: %bb.3(0x40000000), %bb.5(0x40000000)
786   ; GFX10-NEXT: {{  $}}
787   ; GFX10-NEXT:   [[PHI:%[0-9]+]]:sreg_32_xm0_xexec(s1) = PHI [[DEF3]](s1), %bb.0, %67(s1), %bb.5
788   ; GFX10-NEXT:   [[PHI1:%[0-9]+]]:sreg_32(s1) = PHI [[DEF2]](s1), %bb.0, %56(s1), %bb.5
789   ; GFX10-NEXT:   [[PHI2:%[0-9]+]]:sreg_32(s1) = PHI [[DEF1]](s1), %bb.0, %43(s1), %bb.5
790   ; GFX10-NEXT:   [[PHI3:%[0-9]+]]:_(s32) = G_PHI %12(s32), %bb.5, [[C]](s32), %bb.0
791   ; GFX10-NEXT:   [[PHI4:%[0-9]+]]:_(s32) = G_PHI [[C]](s32), %bb.0, %14(s32), %bb.5
792   ; GFX10-NEXT:   [[COPY6:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[PHI]](s1)
793   ; GFX10-NEXT:   [[COPY7:%[0-9]+]]:sreg_32(s1) = COPY [[PHI1]](s1)
794   ; GFX10-NEXT:   [[COPY8:%[0-9]+]]:sreg_32(s1) = COPY [[PHI2]](s1)
795   ; GFX10-NEXT:   [[C1:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
796   ; GFX10-NEXT:   [[COPY9:%[0-9]+]]:sreg_32(s1) = COPY [[C1]](s1)
797   ; GFX10-NEXT:   [[COPY10:%[0-9]+]]:sreg_32(s1) = COPY [[C1]](s1)
798   ; GFX10-NEXT:   [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[PHI4]](s32)
799   ; GFX10-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
800   ; GFX10-NEXT:   [[SHL:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C2]](s32)
801   ; GFX10-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV1]], [[SHL]](s64)
802   ; GFX10-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p1) :: (load (s32), addrspace 1)
803   ; GFX10-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
804   ; GFX10-NEXT:   [[ICMP:%[0-9]+]]:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C3]]
805   ; GFX10-NEXT:   [[S_ANDN2_B32_:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY8]](s1), $exec_lo, implicit-def $scc
806   ; GFX10-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY10]](s1), implicit-def $scc
807   ; GFX10-NEXT:   [[S_OR_B32_:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
808   ; GFX10-NEXT:   [[COPY11:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_]](s1)
809   ; GFX10-NEXT:   [[S_ANDN2_B32_1:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY7]](s1), $exec_lo, implicit-def $scc
810   ; GFX10-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY9]](s1), implicit-def $scc
811   ; GFX10-NEXT:   [[S_OR_B32_1:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_1]](s1), [[S_AND_B32_1]](s1), implicit-def $scc
812   ; GFX10-NEXT:   [[COPY12:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_1]](s1)
813   ; GFX10-NEXT:   [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[ICMP]](s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
814   ; GFX10-NEXT:   G_BR %bb.3
815   ; GFX10-NEXT: {{  $}}
816   ; GFX10-NEXT: bb.2:
817   ; GFX10-NEXT:   successors: %bb.4(0x80000000)
818   ; GFX10-NEXT: {{  $}}
819   ; GFX10-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
820   ; GFX10-NEXT:   G_STORE [[C4]](s32), [[MV2]](p1) :: (store (s32), addrspace 1)
821   ; GFX10-NEXT:   G_BR %bb.4
822   ; GFX10-NEXT: {{  $}}
823   ; GFX10-NEXT: bb.3:
824   ; GFX10-NEXT:   successors: %bb.5(0x80000000)
825   ; GFX10-NEXT: {{  $}}
826   ; GFX10-NEXT:   [[C5:%[0-9]+]]:_(s1) = G_CONSTANT i1 false
827   ; GFX10-NEXT:   [[COPY13:%[0-9]+]]:sreg_32(s1) = COPY [[C5]](s1)
828   ; GFX10-NEXT:   [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
829   ; GFX10-NEXT:   [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[SEXT]], [[C6]](s32)
830   ; GFX10-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[MV]], [[SHL1]](s64)
831   ; GFX10-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p1) :: (load (s32), addrspace 1)
832   ; GFX10-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
833   ; GFX10-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD1]], [[C7]]
834   ; GFX10-NEXT:   G_STORE [[ADD]](s32), [[PTR_ADD1]](p1) :: (store (s32), addrspace 1)
835   ; GFX10-NEXT:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[PHI4]], [[C7]]
836   ; GFX10-NEXT:   [[C8:%[0-9]+]]:_(s32) = G_CONSTANT i32 100
837   ; GFX10-NEXT:   [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[PHI4]](s32), [[C8]]
838   ; GFX10-NEXT:   [[COPY14:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP1]](s1)
839   ; GFX10-NEXT:   [[S_ANDN2_B32_2:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY11]](s1), $exec_lo, implicit-def $scc
840   ; GFX10-NEXT:   [[S_AND_B32_2:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY13]](s1), implicit-def $scc
841   ; GFX10-NEXT:   [[S_OR_B32_2:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_2]](s1), [[S_AND_B32_2]](s1), implicit-def $scc
842   ; GFX10-NEXT:   [[S_ANDN2_B32_3:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY12]](s1), $exec_lo, implicit-def $scc
843   ; GFX10-NEXT:   [[S_AND_B32_3:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY14]](s1), implicit-def $scc
844   ; GFX10-NEXT:   [[S_OR_B32_3:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_3]](s1), [[S_AND_B32_3]](s1), implicit-def $scc
845   ; GFX10-NEXT:   G_BR %bb.5
846   ; GFX10-NEXT: {{  $}}
847   ; GFX10-NEXT: bb.4:
848   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %35(s32)
849   ; GFX10-NEXT:   S_ENDPGM 0
850   ; GFX10-NEXT: {{  $}}
851   ; GFX10-NEXT: bb.5:
852   ; GFX10-NEXT:   successors: %bb.6(0x04000000), %bb.1(0x7c000000)
853   ; GFX10-NEXT: {{  $}}
854   ; GFX10-NEXT:   [[PHI5:%[0-9]+]]:sreg_32(s1) = PHI [[S_OR_B32_1]](s1), %bb.1, [[S_OR_B32_3]](s1), %bb.3
855   ; GFX10-NEXT:   [[PHI6:%[0-9]+]]:sreg_32(s1) = PHI [[S_OR_B32_]](s1), %bb.1, [[S_OR_B32_2]](s1), %bb.3
856   ; GFX10-NEXT:   [[PHI7:%[0-9]+]]:_(s32) = G_PHI [[ADD1]](s32), %bb.3, [[DEF]](s32), %bb.1
857   ; GFX10-NEXT:   [[COPY15:%[0-9]+]]:sreg_32(s1) = COPY [[PHI5]](s1)
858   ; GFX10-NEXT:   [[COPY16:%[0-9]+]]:sreg_32(s1) = COPY [[PHI6]](s1)
859   ; GFX10-NEXT:   [[COPY17:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[COPY16]](s1)
860   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[SI_IF]](s32)
861   ; GFX10-NEXT:   [[INT:%[0-9]+]]:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[COPY15]](s1), [[PHI3]](s32)
862   ; GFX10-NEXT:   [[S_ANDN2_B32_4:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_ANDN2_B32 [[COPY6]](s1), $exec_lo, implicit-def $scc
863   ; GFX10-NEXT:   [[S_AND_B32_4:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_AND_B32 $exec_lo, [[COPY17]](s1), implicit-def $scc
864   ; GFX10-NEXT:   [[S_OR_B32_4:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_OR_B32 [[S_ANDN2_B32_4]](s1), [[S_AND_B32_4]](s1), implicit-def $scc
865   ; GFX10-NEXT:   SI_LOOP [[INT]](s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
866   ; GFX10-NEXT:   G_BR %bb.6
867   ; GFX10-NEXT: {{  $}}
868   ; GFX10-NEXT: bb.6:
869   ; GFX10-NEXT:   successors: %bb.2(0x40000000), %bb.4(0x40000000)
870   ; GFX10-NEXT: {{  $}}
871   ; GFX10-NEXT:   [[PHI8:%[0-9]+]]:_(s32) = G_PHI [[INT]](s32), %bb.5
872   ; GFX10-NEXT:   [[COPY18:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[S_OR_B32_4]](s1)
873   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI8]](s32)
874   ; GFX10-NEXT:   [[SI_IF1:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[COPY18]](s1), %bb.4, implicit-def $exec, implicit-def $scc, implicit $exec
875   ; GFX10-NEXT:   G_BR %bb.2
876   bb.0:
877     successors: %bb.1(0x80000000)
878     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
880     %0:_(s32) = COPY $vgpr0
881     %1:_(s32) = COPY $vgpr1
882     %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
883     %3:_(s32) = COPY $vgpr2
884     %4:_(s32) = COPY $vgpr3
885     %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
886     %6:_(s32) = COPY $vgpr4
887     %7:_(s32) = COPY $vgpr5
888     %8:_(p1) = G_MERGE_VALUES %6(s32), %7(s32)
889     %9:_(s32) = G_CONSTANT i32 0
890     %10:_(s32) = G_IMPLICIT_DEF
892   bb.1:
893     successors: %bb.3(0x40000000), %bb.5(0x40000000)
895     %11:_(s32) = G_PHI %12(s32), %bb.5, %9(s32), %bb.0
896     %13:_(s32) = G_PHI %9(s32), %bb.0, %14(s32), %bb.5
897     %15:_(s1) = G_CONSTANT i1 true
898     %16:_(s64) = G_SEXT %13(s32)
899     %17:_(s32) = G_CONSTANT i32 2
900     %18:_(s64) = G_SHL %16, %17(s32)
901     %19:_(p1) = G_PTR_ADD %5, %18(s64)
902     %20:_(s32) = G_LOAD %19(p1) :: (load (s32), addrspace 1)
903     %21:_(s32) = G_CONSTANT i32 0
904     %22:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %20(s32), %21
905     %23:sreg_32_xm0_xexec(s32) = SI_IF %22(s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
906     G_BR %bb.3
908   bb.2:
909     successors: %bb.4(0x80000000)
911     %24:_(s32) = G_CONSTANT i32 10
912     G_STORE %24(s32), %8(p1) :: (store (s32), addrspace 1)
913     G_BR %bb.4
915   bb.3:
916     successors: %bb.5(0x80000000)
918     %25:_(s1) = G_CONSTANT i1 false
919     %26:_(s32) = G_CONSTANT i32 2
920     %27:_(s64) = G_SHL %16, %26(s32)
921     %28:_(p1) = G_PTR_ADD %2, %27(s64)
922     %29:_(s32) = G_LOAD %28(p1) :: (load (s32), addrspace 1)
923     %30:_(s32) = G_CONSTANT i32 1
924     %31:_(s32) = G_ADD %29, %30
925     G_STORE %31(s32), %28(p1) :: (store (s32), addrspace 1)
926     %32:_(s32) = G_ADD %13, %30
927     %33:_(s32) = G_CONSTANT i32 100
928     %34:_(s1) = G_ICMP intpred(ult), %13(s32), %33
929     G_BR %bb.5
931   bb.4:
932     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %35(s32)
933     S_ENDPGM 0
935   bb.5:
936     successors: %bb.6(0x04000000), %bb.1(0x7c000000)
938     %14:_(s32) = G_PHI %32(s32), %bb.3, %10(s32), %bb.1
939     %36:_(s1) = G_PHI %25(s1), %bb.3, %15(s1), %bb.1
940     %37:_(s1) = G_PHI %34(s1), %bb.3, %15(s1), %bb.1
941     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %23(s32)
942     %12:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %37(s1), %11(s32)
943     SI_LOOP %12(s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
944     G_BR %bb.6
946   bb.6:
947     successors: %bb.2(0x40000000), %bb.4(0x40000000)
949     %38:sreg_32_xm0_xexec(s1) = G_PHI %36(s1), %bb.5
950     %39:_(s32) = G_PHI %12(s32), %bb.5
951     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %39(s32)
952     %35:sreg_32_xm0_xexec(s32) = SI_IF %38(s1), %bb.4, implicit-def $exec, implicit-def $scc, implicit $exec
953     G_BR %bb.2
957 name: irreducible_cfg
958 legalized: true
959 tracksRegLiveness: true
960 body: |
961   ; GFX10-LABEL: name: irreducible_cfg
962   ; GFX10: bb.0:
963   ; GFX10-NEXT:   successors: %bb.7(0x80000000)
964   ; GFX10-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
965   ; GFX10-NEXT: {{  $}}
966   ; GFX10-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
967   ; GFX10-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
968   ; GFX10-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
969   ; GFX10-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
970   ; GFX10-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
971   ; GFX10-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
972   ; GFX10-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
973   ; GFX10-NEXT:   [[DEF:%[0-9]+]]:_(s1) = G_IMPLICIT_DEF
974   ; GFX10-NEXT:   [[COPY6:%[0-9]+]]:sreg_32(s1) = COPY [[DEF]](s1)
975   ; GFX10-NEXT:   [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[COPY4]](s32), [[COPY1]]
976   ; GFX10-NEXT:   [[DEF1:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
977   ; GFX10-NEXT:   [[DEF2:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
978   ; GFX10-NEXT:   [[DEF3:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
979   ; GFX10-NEXT:   [[COPY7:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP]](s1)
980   ; GFX10-NEXT:   G_BR %bb.7
981   ; GFX10-NEXT: {{  $}}
982   ; GFX10-NEXT: bb.1:
983   ; GFX10-NEXT:   successors: %bb.3(0x80000000)
984   ; GFX10-NEXT: {{  $}}
985   ; GFX10-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
986   ; GFX10-NEXT:   [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(sle), [[COPY4]](s32), [[COPY]]
987   ; GFX10-NEXT:   G_BR %bb.3
988   ; GFX10-NEXT: {{  $}}
989   ; GFX10-NEXT: bb.2:
990   ; GFX10-NEXT:   successors: %bb.4(0x40000000), %bb.7(0x40000000)
991   ; GFX10-NEXT: {{  $}}
992   ; GFX10-NEXT:   [[PHI:%[0-9]+]]:sreg_32_xm0_xexec(s1) = PHI %67(s1), %bb.6, %71(s1), %bb.7
993   ; GFX10-NEXT:   [[PHI1:%[0-9]+]]:sreg_32(s1) = PHI %49(s1), %bb.6, %48(s1), %bb.7
994   ; GFX10-NEXT:   [[PHI2:%[0-9]+]]:sreg_32(s1) = PHI %35(s1), %bb.6, %34(s1), %bb.7
995   ; GFX10-NEXT:   [[COPY8:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[PHI]](s1)
996   ; GFX10-NEXT:   [[COPY9:%[0-9]+]]:sreg_32(s1) = COPY [[PHI1]](s1)
997   ; GFX10-NEXT:   [[COPY10:%[0-9]+]]:sreg_32(s1) = COPY [[PHI2]](s1)
998   ; GFX10-NEXT:   [[COPY11:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[COPY10]](s1)
999   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %15(s32)
1000   ; GFX10-NEXT:   [[INT:%[0-9]+]]:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[COPY9]](s1), %17(s32)
1001   ; GFX10-NEXT:   [[S_ANDN2_B32_:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_ANDN2_B32 [[COPY8]](s1), $exec_lo, implicit-def $scc
1002   ; GFX10-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_AND_B32 $exec_lo, [[COPY11]](s1), implicit-def $scc
1003   ; GFX10-NEXT:   [[S_OR_B32_:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
1004   ; GFX10-NEXT:   [[COPY12:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[S_OR_B32_]](s1)
1005   ; GFX10-NEXT:   SI_LOOP [[INT]](s32), %bb.7, implicit-def $exec, implicit-def $scc, implicit $exec
1006   ; GFX10-NEXT:   G_BR %bb.4
1007   ; GFX10-NEXT: {{  $}}
1008   ; GFX10-NEXT: bb.3:
1009   ; GFX10-NEXT:   successors: %bb.6(0x04000000), %bb.3(0x7c000000)
1010   ; GFX10-NEXT: {{  $}}
1011   ; GFX10-NEXT:   [[PHI3:%[0-9]+]]:_(s32) = G_PHI [[C1]](s32), %bb.1, %19(s32), %bb.3
1012   ; GFX10-NEXT:   [[INT1:%[0-9]+]]:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[ICMP1]](s1), [[PHI3]](s32)
1013   ; GFX10-NEXT:   SI_LOOP [[INT1]](s32), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
1014   ; GFX10-NEXT:   G_BR %bb.6
1015   ; GFX10-NEXT: {{  $}}
1016   ; GFX10-NEXT: bb.4:
1017   ; GFX10-NEXT:   successors: %bb.5(0x04000000), %bb.7(0x7c000000)
1018   ; GFX10-NEXT: {{  $}}
1019   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[INT]](s32)
1020   ; GFX10-NEXT:   [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(sgt), [[COPY5]](s32), [[COPY]]
1021   ; GFX10-NEXT:   [[COPY13:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP2]](s1)
1022   ; GFX10-NEXT:   [[C2:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
1023   ; GFX10-NEXT:   [[COPY14:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[C2]](s1)
1024   ; GFX10-NEXT:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[ICMP]], [[C2]]
1025   ; GFX10-NEXT:   [[OR:%[0-9]+]]:_(s1) = G_OR [[ICMP2]], [[XOR]]
1026   ; GFX10-NEXT:   [[INT2:%[0-9]+]]:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[OR]](s1), %25(s32)
1027   ; GFX10-NEXT:   [[DEF4:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
1028   ; GFX10-NEXT:   [[DEF5:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
1029   ; GFX10-NEXT:   [[S_ANDN2_B32_1:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 %63(s1), $exec_lo, implicit-def $scc
1030   ; GFX10-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY13]](s1), implicit-def $scc
1031   ; GFX10-NEXT:   [[S_OR_B32_1:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_1]](s1), [[S_AND_B32_1]](s1), implicit-def $scc
1032   ; GFX10-NEXT:   [[S_ANDN2_B32_2:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_ANDN2_B32 [[COPY12]](s1), $exec_lo, implicit-def $scc
1033   ; GFX10-NEXT:   [[S_AND_B32_2:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_AND_B32 $exec_lo, [[COPY14]](s1), implicit-def $scc
1034   ; GFX10-NEXT:   [[S_OR_B32_2:%[0-9]+]]:sreg_32_xm0_xexec(s1) = S_OR_B32 [[S_ANDN2_B32_2]](s1), [[S_AND_B32_2]](s1), implicit-def $scc
1035   ; GFX10-NEXT:   SI_LOOP [[INT2]](s32), %bb.7, implicit-def $exec, implicit-def $scc, implicit $exec
1036   ; GFX10-NEXT:   G_BR %bb.5
1037   ; GFX10-NEXT: {{  $}}
1038   ; GFX10-NEXT: bb.5:
1039   ; GFX10-NEXT:   [[PHI4:%[0-9]+]]:_(s32) = G_PHI [[INT2]](s32), %bb.4
1040   ; GFX10-NEXT:   [[COPY15:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_1]](s1)
1041   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI4]](s32)
1042   ; GFX10-NEXT:   [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[COPY15]](s1), [[COPY3]], [[COPY2]]
1043   ; GFX10-NEXT:   [[INTRINSIC_CONVERGENT:%[0-9]+]]:_(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.readfirstlane), [[SELECT]](s32)
1044   ; GFX10-NEXT:   $sgpr0 = COPY [[INTRINSIC_CONVERGENT]](s32)
1045   ; GFX10-NEXT:   SI_RETURN_TO_EPILOG implicit $sgpr0
1046   ; GFX10-NEXT: {{  $}}
1047   ; GFX10-NEXT: bb.6:
1048   ; GFX10-NEXT:   successors: %bb.2(0x80000000)
1049   ; GFX10-NEXT: {{  $}}
1050   ; GFX10-NEXT:   [[PHI5:%[0-9]+]]:_(s32) = G_PHI [[INT1]](s32), %bb.3
1051   ; GFX10-NEXT:   [[C3:%[0-9]+]]:_(s1) = G_CONSTANT i1 false
1052   ; GFX10-NEXT:   [[COPY16:%[0-9]+]]:sreg_32(s1) = COPY [[C3]](s1)
1053   ; GFX10-NEXT:   [[COPY17:%[0-9]+]]:sreg_32(s1) = COPY [[C3]](s1)
1054   ; GFX10-NEXT:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI5]](s32)
1055   ; GFX10-NEXT:   [[S_ANDN2_B32_3:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 %42(s1), $exec_lo, implicit-def $scc
1056   ; GFX10-NEXT:   [[S_AND_B32_3:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY17]](s1), implicit-def $scc
1057   ; GFX10-NEXT:   [[S_OR_B32_3:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_3]](s1), [[S_AND_B32_3]](s1), implicit-def $scc
1058   ; GFX10-NEXT:   [[S_ANDN2_B32_4:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 %56(s1), $exec_lo, implicit-def $scc
1059   ; GFX10-NEXT:   [[S_AND_B32_4:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY16]](s1), implicit-def $scc
1060   ; GFX10-NEXT:   [[S_OR_B32_4:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_4]](s1), [[S_AND_B32_4]](s1), implicit-def $scc
1061   ; GFX10-NEXT:   [[DEF6:%[0-9]+]]:sreg_32_xm0_xexec(s1) = IMPLICIT_DEF
1062   ; GFX10-NEXT:   G_BR %bb.2
1063   ; GFX10-NEXT: {{  $}}
1064   ; GFX10-NEXT: bb.7:
1065   ; GFX10-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
1066   ; GFX10-NEXT: {{  $}}
1067   ; GFX10-NEXT:   [[PHI6:%[0-9]+]]:sreg_32_xm0_xexec(s1) = PHI [[COPY7]](s1), %bb.0, [[S_OR_B32_]](s1), %bb.2, [[S_OR_B32_2]](s1), %bb.4
1068   ; GFX10-NEXT:   [[PHI7:%[0-9]+]]:sreg_32(s1) = PHI [[DEF3]](s1), %bb.0, [[PHI7]](s1), %bb.2, [[S_OR_B32_1]](s1), %bb.4
1069   ; GFX10-NEXT:   [[PHI8:%[0-9]+]]:sreg_32(s1) = PHI [[DEF2]](s1), %bb.0, [[PHI1]](s1), %bb.2, [[DEF5]](s1), %bb.4
1070   ; GFX10-NEXT:   [[PHI9:%[0-9]+]]:sreg_32(s1) = PHI [[DEF1]](s1), %bb.0, [[PHI2]](s1), %bb.2, [[DEF4]](s1), %bb.4
1071   ; GFX10-NEXT:   [[PHI10:%[0-9]+]]:_(s32) = G_PHI [[INT2]](s32), %bb.4, [[PHI10]](s32), %bb.2, [[C]](s32), %bb.0
1072   ; GFX10-NEXT:   [[PHI11:%[0-9]+]]:_(s32) = G_PHI [[C]](s32), %bb.4, [[INT]](s32), %bb.2, [[C]](s32), %bb.0
1073   ; GFX10-NEXT:   [[COPY18:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[PHI6]](s1)
1074   ; GFX10-NEXT:   [[COPY19:%[0-9]+]]:sreg_32(s1) = COPY [[PHI7]](s1)
1075   ; GFX10-NEXT:   [[COPY20:%[0-9]+]]:sreg_32(s1) = COPY [[PHI8]](s1)
1076   ; GFX10-NEXT:   [[COPY21:%[0-9]+]]:sreg_32(s1) = COPY [[PHI9]](s1)
1077   ; GFX10-NEXT:   [[C4:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
1078   ; GFX10-NEXT:   [[COPY22:%[0-9]+]]:sreg_32(s1) = COPY [[C4]](s1)
1079   ; GFX10-NEXT:   [[S_ANDN2_B32_5:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY21]](s1), $exec_lo, implicit-def $scc
1080   ; GFX10-NEXT:   [[S_AND_B32_5:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY6]](s1), implicit-def $scc
1081   ; GFX10-NEXT:   [[S_OR_B32_5:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_5]](s1), [[S_AND_B32_5]](s1), implicit-def $scc
1082   ; GFX10-NEXT:   [[COPY23:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_5]](s1)
1083   ; GFX10-NEXT:   [[S_ANDN2_B32_6:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY20]](s1), $exec_lo, implicit-def $scc
1084   ; GFX10-NEXT:   [[S_AND_B32_6:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY22]](s1), implicit-def $scc
1085   ; GFX10-NEXT:   [[S_OR_B32_6:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_6]](s1), [[S_AND_B32_6]](s1), implicit-def $scc
1086   ; GFX10-NEXT:   [[COPY24:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_6]](s1)
1087   ; GFX10-NEXT:   [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[COPY18]](s1), %bb.2, implicit-def $exec, implicit-def $scc, implicit $exec
1088   ; GFX10-NEXT:   G_BR %bb.1
1089   bb.0:
1090     successors: %bb.7(0x80000000)
1091     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
1093     %0:_(s32) = COPY $vgpr0
1094     %1:_(s32) = COPY $vgpr1
1095     %2:_(s32) = COPY $vgpr2
1096     %3:_(s32) = COPY $vgpr3
1097     %4:_(s32) = COPY $vgpr4
1098     %5:_(s32) = COPY $vgpr5
1099     %6:_(s32) = G_CONSTANT i32 0
1100     %7:_(s1) = G_IMPLICIT_DEF
1101     %8:_(s1) = G_ICMP intpred(sgt), %4(s32), %1
1102     G_BR %bb.7
1104   bb.1:
1105     successors: %bb.3(0x80000000)
1107     %9:_(s32) = G_CONSTANT i32 0
1108     %10:_(s1) = G_ICMP intpred(sle), %4(s32), %0
1109     G_BR %bb.3
1111   bb.2:
1112     successors: %bb.4(0x40000000), %bb.7(0x40000000)
1114     %11:_(s1) = G_PHI %12(s1), %bb.6, %7(s1), %bb.7
1115     %13:_(s1) = G_PHI %12(s1), %bb.6, %14(s1), %bb.7
1116     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %15(s32)
1117     %16:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %13(s1), %17(s32)
1118     SI_LOOP %16(s32), %bb.7, implicit-def $exec, implicit-def $scc, implicit $exec
1119     G_BR %bb.4
1121   bb.3:
1122     successors: %bb.6(0x04000000), %bb.3(0x7c000000)
1124     %18:_(s32) = G_PHI %9(s32), %bb.1, %19(s32), %bb.3
1125     %19:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %10(s1), %18(s32)
1126     SI_LOOP %19(s32), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
1127     G_BR %bb.6
1129   bb.4:
1130     successors: %bb.5(0x04000000), %bb.7(0x7c000000)
1132     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %16(s32)
1133     %20:_(s1) = G_ICMP intpred(sgt), %5(s32), %0
1134     %21:_(s1) = G_CONSTANT i1 true
1135     %22:_(s1) = G_XOR %8, %21
1136     %23:_(s1) = G_OR %20, %22
1137     %24:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %23(s1), %25(s32)
1138     SI_LOOP %24(s32), %bb.7, implicit-def $exec, implicit-def $scc, implicit $exec
1139     G_BR %bb.5
1141   bb.5:
1142     %26:_(s1) = G_PHI %20(s1), %bb.4
1143     %27:_(s32) = G_PHI %24(s32), %bb.4
1144     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %27(s32)
1145     %28:_(s32) = G_SELECT %26(s1), %3, %2
1146     %29:_(s32) = G_INTRINSIC_CONVERGENT intrinsic(@llvm.amdgcn.readfirstlane), %28(s32)
1147     $sgpr0 = COPY %29(s32)
1148     SI_RETURN_TO_EPILOG implicit $sgpr0
1150   bb.6:
1151     successors: %bb.2(0x80000000)
1153     %30:_(s32) = G_PHI %19(s32), %bb.3
1154     %12:_(s1) = G_CONSTANT i1 false
1155     G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %30(s32)
1156     G_BR %bb.2
1158   bb.7:
1159     successors: %bb.1(0x40000000), %bb.2(0x40000000)
1161     %25:_(s32) = G_PHI %24(s32), %bb.4, %25(s32), %bb.2, %6(s32), %bb.0
1162     %17:_(s32) = G_PHI %6(s32), %bb.4, %16(s32), %bb.2, %6(s32), %bb.0
1163     %31:sreg_32_xm0_xexec(s1) = G_PHI %8(s1), %bb.0, %11(s1), %bb.2, %21(s1), %bb.4
1164     %14:_(s1) = G_CONSTANT i1 true
1165     %15:sreg_32_xm0_xexec(s32) = SI_IF %31(s1), %bb.2, implicit-def $exec, implicit-def $scc, implicit $exec
1166     G_BR %bb.1