Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / machine-sink-ignorable-exec-use.mir
blob5adb6d42cdd63f923df5e22fcba55245608f6126
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs -run-pass=machine-sink -o - %s | FileCheck -check-prefixes=GFX9 %s
4 ---
5 name:            test_sink_fmac_to_only_use
6 alignment:       1
7 tracksRegLiveness: true
8 machineFunctionInfo:
9   isEntryFunction: true
10 body:             |
11   ; GFX9-LABEL: name: test_sink_fmac_to_only_use
12   ; GFX9: bb.0:
13   ; GFX9-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
14   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2
15   ; GFX9-NEXT: {{  $}}
16   ; GFX9-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
17   ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
18   ; GFX9-NEXT:   [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
19   ; GFX9-NEXT:   [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
20   ; GFX9-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
21   ; GFX9-NEXT:   [[S_MOV_B64_1:%[0-9]+]]:sreg_64 = S_MOV_B64 0
22   ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
23   ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_1]]
24   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
25   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
26   ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
27   ; GFX9-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
28   ; GFX9-NEXT:   [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec
29   ; GFX9-NEXT:   [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
30   ; GFX9-NEXT:   S_BRANCH %bb.1
31   ; GFX9-NEXT: {{  $}}
32   ; GFX9-NEXT: bb.1:
33   ; GFX9-NEXT:   successors: %bb.2(0x80000000)
34   ; GFX9-NEXT: {{  $}}
35   ; GFX9-NEXT:   %9:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
36   ; GFX9-NEXT:   %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
37   ; GFX9-NEXT:   %12:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
38   ; GFX9-NEXT:   %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
39   ; GFX9-NEXT:   [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 %9, %10, implicit $mode, implicit $exec
40   ; GFX9-NEXT:   [[V_ADD_F32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 %12, %13, implicit $mode, implicit $exec
41   ; GFX9-NEXT: {{  $}}
42   ; GFX9-NEXT: bb.2:
43   ; GFX9-NEXT:   successors: %bb.3(0x80000000)
44   ; GFX9-NEXT: {{  $}}
45   ; GFX9-NEXT:   [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_ADD_F32_e32_]], %bb.1
46   ; GFX9-NEXT:   [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_1]], %bb.0, [[V_ADD_F32_e32_1]], %bb.1
47   ; GFX9-NEXT:   SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
48   ; GFX9-NEXT: {{  $}}
49   ; GFX9-NEXT: bb.3:
50   ; GFX9-NEXT:   S_ENDPGM 0, implicit [[PHI]], implicit [[PHI1]]
51   bb.0:
52     liveins: $vgpr0, $vgpr1, $vgpr2
53     %1:vgpr_32 = COPY $vgpr0
54     %2:vgpr_32 = COPY $vgpr1
55     %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
56     %4:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
57     %5:sreg_64 = S_MOV_B64 0
58     %6:sreg_64 = S_MOV_B64 0
59     %7:vreg_64 = COPY %5
60     %8:vreg_64 = COPY %6
61     %9:vgpr_32 = GLOBAL_LOAD_DWORD killed %7, 0, 0, implicit $exec :: (load (s32), addrspace 1)
62     %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
63     %11:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %10, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
64     %12:vgpr_32 = GLOBAL_LOAD_DWORD killed %8, 0, 0, implicit $exec :: (load (s32), addrspace 1)
65     %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec
66     %14:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %13, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec
67     %15:vgpr_32(s32) = COPY $vgpr0
68     %16:sreg_32 = S_MOV_B32 1
69     %17:sreg_64 = V_CMP_LT_I32_e64 %15(s32), %16, implicit $exec
70     %18:sreg_64 = COPY %17
71     %19:sreg_64 = SI_IF %18, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
72     S_BRANCH %bb.1
74   bb.1:
75     %20:vgpr_32 = V_ADD_F32_e32 %10, %11, implicit $mode, implicit $exec
76     %21:vgpr_32 = V_ADD_F32_e32 %13, %14, implicit $mode, implicit $exec
78   bb.2:
79     %22:vgpr_32 = PHI %3, %bb.0, %20, %bb.1
80     %23:vgpr_32 = PHI %4, %bb.0, %21, %bb.1
81     SI_END_CF %19, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
83   bb.3:
84     S_ENDPGM 0, implicit %22, implicit %23
85 ...
86 ---
87 name:            test_no_sink_into_if_cond_multiple_uses
88 alignment:       1
89 tracksRegLiveness: true
90 machineFunctionInfo:
91   isEntryFunction: true
92 body:             |
93   ; GFX9-LABEL: name: test_no_sink_into_if_cond_multiple_uses
94   ; GFX9: bb.0:
95   ; GFX9-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
96   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2
97   ; GFX9-NEXT: {{  $}}
98   ; GFX9-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
99   ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
100   ; GFX9-NEXT:   [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
101   ; GFX9-NEXT:   [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
102   ; GFX9-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
103   ; GFX9-NEXT:   [[S_MOV_B64_1:%[0-9]+]]:sreg_64 = S_MOV_B64 0
104   ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
105   ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_1]]
106   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
107   ; GFX9-NEXT:   %9:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
108   ; GFX9-NEXT:   %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
109   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
110   ; GFX9-NEXT:   %12:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
111   ; GFX9-NEXT:   %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
112   ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
113   ; GFX9-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
114   ; GFX9-NEXT:   [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec
115   ; GFX9-NEXT:   [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
116   ; GFX9-NEXT:   S_BRANCH %bb.1
117   ; GFX9-NEXT: {{  $}}
118   ; GFX9-NEXT: bb.1:
119   ; GFX9-NEXT:   successors: %bb.2(0x80000000)
120   ; GFX9-NEXT: {{  $}}
121   ; GFX9-NEXT:   [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 %9, %10, implicit $mode, implicit $exec
122   ; GFX9-NEXT:   [[V_ADD_F32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 %12, %13, implicit $mode, implicit $exec
123   ; GFX9-NEXT: {{  $}}
124   ; GFX9-NEXT: bb.2:
125   ; GFX9-NEXT:   successors: %bb.3(0x80000000)
126   ; GFX9-NEXT: {{  $}}
127   ; GFX9-NEXT:   [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_ADD_F32_e32_]], %bb.1
128   ; GFX9-NEXT:   [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_1]], %bb.0, [[V_ADD_F32_e32_1]], %bb.1
129   ; GFX9-NEXT:   SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
130   ; GFX9-NEXT: {{  $}}
131   ; GFX9-NEXT: bb.3:
132   ; GFX9-NEXT:   [[V_ADD_F32_e32_2:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 %13, %10, implicit $mode, implicit $exec
133   ; GFX9-NEXT:   S_ENDPGM 0, implicit [[PHI]], implicit [[PHI1]]
134   bb.0:
135     liveins: $vgpr0, $vgpr1, $vgpr2
136     %1:vgpr_32 = COPY $vgpr0
137     %2:vgpr_32 = COPY $vgpr1
138     %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
139     %4:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
140     %5:sreg_64 = S_MOV_B64 0
141     %6:sreg_64 = S_MOV_B64 0
142     %7:vreg_64 = COPY %5
143     %8:vreg_64 = COPY %6
144     %9:vgpr_32 = GLOBAL_LOAD_DWORD killed %7, 0, 0, implicit $exec :: (load (s32), addrspace 1)
145     %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
146     %11:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %10, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
147     %12:vgpr_32 = GLOBAL_LOAD_DWORD killed %8, 0, 0, implicit $exec :: (load (s32), addrspace 1)
148     %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec
149     %14:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %13, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec
150     %15:vgpr_32(s32) = COPY $vgpr0
151     %16:sreg_32 = S_MOV_B32 1
152     %17:sreg_64 = V_CMP_LT_I32_e64 %15(s32), %16, implicit $exec
153     %18:sreg_64 = COPY %17
154     %19:sreg_64 = SI_IF %18, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
155     S_BRANCH %bb.1
157   bb.1:
158     %20:vgpr_32 = V_ADD_F32_e32 %10, %11, implicit $mode, implicit $exec
159     %21:vgpr_32 = V_ADD_F32_e32 %13, %14, implicit $mode, implicit $exec
161   bb.2:
162     %22:vgpr_32 = PHI %3, %bb.0, %20, %bb.1
163     %23:vgpr_32 = PHI %4, %bb.0, %21, %bb.1
164     SI_END_CF %19, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
166   bb.3:
167     %24:vgpr_32 = V_ADD_F32_e32 %14, %11, implicit $mode, implicit $exec
168     S_ENDPGM 0, implicit %22, implicit %23
171 name:            no_sink_fmac_not_constant_mode
172 alignment:       1
173 tracksRegLiveness: true
174 machineFunctionInfo:
175   isEntryFunction: true
176 body:             |
177   ; GFX9-LABEL: name: no_sink_fmac_not_constant_mode
178   ; GFX9: bb.0:
179   ; GFX9-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
180   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2
181   ; GFX9-NEXT: {{  $}}
182   ; GFX9-NEXT:   $mode = IMPLICIT_DEF
183   ; GFX9-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
184   ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
185   ; GFX9-NEXT:   [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
186   ; GFX9-NEXT:   [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
187   ; GFX9-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
188   ; GFX9-NEXT:   [[S_MOV_B64_1:%[0-9]+]]:sreg_64 = S_MOV_B64 0
189   ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
190   ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_1]]
191   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
192   ; GFX9-NEXT:   %9:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
193   ; GFX9-NEXT:   %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
194   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
195   ; GFX9-NEXT:   %12:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
196   ; GFX9-NEXT:   %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
197   ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
198   ; GFX9-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
199   ; GFX9-NEXT:   [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec
200   ; GFX9-NEXT:   [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
201   ; GFX9-NEXT:   S_BRANCH %bb.1
202   ; GFX9-NEXT: {{  $}}
203   ; GFX9-NEXT: bb.1:
204   ; GFX9-NEXT:   successors: %bb.2(0x80000000)
205   ; GFX9-NEXT: {{  $}}
206   ; GFX9-NEXT:   [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 %9, %10, implicit $mode, implicit $exec
207   ; GFX9-NEXT:   [[V_ADD_F32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 %12, %13, implicit $mode, implicit $exec
208   ; GFX9-NEXT: {{  $}}
209   ; GFX9-NEXT: bb.2:
210   ; GFX9-NEXT:   successors: %bb.3(0x80000000)
211   ; GFX9-NEXT: {{  $}}
212   ; GFX9-NEXT:   [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_ADD_F32_e32_]], %bb.1
213   ; GFX9-NEXT:   [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_1]], %bb.0, [[V_ADD_F32_e32_1]], %bb.1
214   ; GFX9-NEXT:   SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
215   ; GFX9-NEXT: {{  $}}
216   ; GFX9-NEXT: bb.3:
217   ; GFX9-NEXT:   S_ENDPGM 0, implicit [[PHI]], implicit [[PHI1]]
218   bb.0:
219     liveins: $vgpr0, $vgpr1, $vgpr2
220     $mode = IMPLICIT_DEF
221     %1:vgpr_32 = COPY $vgpr0
222     %2:vgpr_32 = COPY $vgpr1
223     %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
224     %4:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
225     %5:sreg_64 = S_MOV_B64 0
226     %6:sreg_64 = S_MOV_B64 0
227     %7:vreg_64 = COPY %5
228     %8:vreg_64 = COPY %6
229     %9:vgpr_32 = GLOBAL_LOAD_DWORD killed %7, 0, 0, implicit $exec :: (load (s32), addrspace 1)
230     %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
231     %11:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %10, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
232     %12:vgpr_32 = GLOBAL_LOAD_DWORD killed %8, 0, 0, implicit $exec :: (load (s32), addrspace 1)
233     %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec
234     %14:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %13, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec
235     %15:vgpr_32(s32) = COPY $vgpr0
236     %16:sreg_32 = S_MOV_B32 1
237     %17:sreg_64 = V_CMP_LT_I32_e64 %15(s32), %16, implicit $exec
238     %18:sreg_64 = COPY %17
239     %19:sreg_64 = SI_IF %18, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
240     S_BRANCH %bb.1
242   bb.1:
243     %20:vgpr_32 = V_ADD_F32_e32 %10, %11, implicit $mode, implicit $exec
244     %21:vgpr_32 = V_ADD_F32_e32 %13, %14, implicit $mode, implicit $exec
246   bb.2:
247     %22:vgpr_32 = PHI %3, %bb.0, %20, %bb.1
248     %23:vgpr_32 = PHI %4, %bb.0, %21, %bb.1
249     SI_END_CF %19, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
251   bb.3:
252     S_ENDPGM 0, implicit %22, implicit %23
255 name:            test_no_sink_fmac_wwm
256 alignment:       1
257 tracksRegLiveness: true
258 machineFunctionInfo:
259   isEntryFunction: true
260 body:             |
261   ; GFX9-LABEL: name: test_no_sink_fmac_wwm
262   ; GFX9: bb.0:
263   ; GFX9-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
264   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2
265   ; GFX9-NEXT: {{  $}}
266   ; GFX9-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
267   ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
268   ; GFX9-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
269   ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
270   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
271   ; GFX9-NEXT:   %5:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
272   ; GFX9-NEXT:   early-clobber %6:vgpr_32 = STRICT_WWM %5, implicit $exec
273   ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
274   ; GFX9-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
275   ; GFX9-NEXT:   [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY3]](s32), [[S_MOV_B32_]], implicit $exec
276   ; GFX9-NEXT:   [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
277   ; GFX9-NEXT:   S_BRANCH %bb.1
278   ; GFX9-NEXT: {{  $}}
279   ; GFX9-NEXT: bb.1:
280   ; GFX9-NEXT:   successors: %bb.2(0x80000000)
281   ; GFX9-NEXT: {{  $}}
282   ; GFX9-NEXT: {{  $}}
283   ; GFX9-NEXT: bb.2:
284   ; GFX9-NEXT:   successors: %bb.3(0x80000000)
285   ; GFX9-NEXT: {{  $}}
286   ; GFX9-NEXT:   S_NOP 0, implicit %5
287   ; GFX9-NEXT:   SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
288   ; GFX9-NEXT: {{  $}}
289   ; GFX9-NEXT: bb.3:
290   ; GFX9-NEXT:   S_ENDPGM 0, implicit %6
291   bb.0:
292     liveins: $vgpr0, $vgpr1, $vgpr2
293     %1:vgpr_32 = COPY $vgpr0
294     %2:vgpr_32 = COPY $vgpr1
296     %20:sreg_64 = S_MOV_B64 0
297     %30:vreg_64 = COPY %20
298     %29:vgpr_32 = GLOBAL_LOAD_DWORD killed %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)
299     %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec
300     %9:vgpr_32 = STRICT_WWM %6, implicit $exec
302     %16:vgpr_32(s32) = COPY $vgpr0
303     %23:sreg_32 = S_MOV_B32 1
304     %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec
305     %0:sreg_64 = COPY %24
306     %5:sreg_64 = SI_IF %0, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
307     S_BRANCH %bb.1
309   bb.1:
311   bb.2:
312     S_NOP 0, implicit %6
313     SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
315   bb.3:
316     S_ENDPGM 0, implicit %9
319 name:            test_def_and_use_in_loop_sink_fmac
320 tracksRegLiveness: true
321 machineFunctionInfo:
322   isEntryFunction: true
323 body:             |
324   ; GFX9-LABEL: name: test_def_and_use_in_loop_sink_fmac
325   ; GFX9: bb.0.entry:
326   ; GFX9-NEXT:   successors: %bb.1(0x80000000)
327   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
328   ; GFX9-NEXT: {{  $}}
329   ; GFX9-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
330   ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
331   ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
332   ; GFX9-NEXT: {{  $}}
333   ; GFX9-NEXT: bb.1:
334   ; GFX9-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)
335   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
336   ; GFX9-NEXT: {{  $}}
337   ; GFX9-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
338   ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
339   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
340   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
341   ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
342   ; GFX9-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
343   ; GFX9-NEXT:   [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec
344   ; GFX9-NEXT:   [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
345   ; GFX9-NEXT:   S_BRANCH %bb.2
346   ; GFX9-NEXT: {{  $}}
347   ; GFX9-NEXT: bb.2:
348   ; GFX9-NEXT:   successors: %bb.3(0x80000000)
349   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
350   ; GFX9-NEXT: {{  $}}
351   ; GFX9-NEXT:   S_NOP 0
352   ; GFX9-NEXT: {{  $}}
353   ; GFX9-NEXT: bb.3:
354   ; GFX9-NEXT:   successors: %bb.4(0x40000000), %bb.6(0x40000000)
355   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
356   ; GFX9-NEXT: {{  $}}
357   ; GFX9-NEXT:   %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
358   ; GFX9-NEXT:   %8:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
359   ; GFX9-NEXT:   S_NOP 0, implicit %6, implicit %8
360   ; GFX9-NEXT:   SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
361   ; GFX9-NEXT:   S_CBRANCH_EXECZ %bb.6, implicit $exec
362   ; GFX9-NEXT: {{  $}}
363   ; GFX9-NEXT: bb.4:
364   ; GFX9-NEXT:   successors: %bb.5(0x04000000), %bb.4(0x7c000000)
365   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
366   ; GFX9-NEXT: {{  $}}
367   ; GFX9-NEXT:   S_NOP 0
368   ; GFX9-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec
369   ; GFX9-NEXT: {{  $}}
370   ; GFX9-NEXT: bb.5:
371   ; GFX9-NEXT:   successors: %bb.6(0x80000000)
372   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
373   ; GFX9-NEXT: {{  $}}
374   ; GFX9-NEXT:   S_NOP 0
375   ; GFX9-NEXT: {{  $}}
376   ; GFX9-NEXT: bb.6:
377   ; GFX9-NEXT:   successors: %bb.7(0x04000000), %bb.1(0x7c000000)
378   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
379   ; GFX9-NEXT: {{  $}}
380   ; GFX9-NEXT:   S_CBRANCH_VCCZ %bb.1, implicit $vcc
381   ; GFX9-NEXT: {{  $}}
382   ; GFX9-NEXT: bb.7:
383   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
384   ; GFX9-NEXT: {{  $}}
385   ; GFX9-NEXT:   S_ENDPGM 0
386   bb.0.entry:
387     successors: %bb.1(0x80000000)
389     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
390     %101:vgpr_32 = COPY $vgpr0
391     %102:vgpr_32 = COPY $vgpr1
392     %15:vreg_64 = COPY $vgpr2_vgpr3
394   bb.1:
395     successors: %bb.2(0x40000000), %bb.3(0x40000000)
396     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
398     %20:sreg_64 = S_MOV_B64 0
399     %30:vreg_64 = COPY %20
400     %29:vgpr_32 = GLOBAL_LOAD_DWORD %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)
401     %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec
402     %31:vgpr_32 = GLOBAL_LOAD_DWORD  %15, 0, 0, implicit $exec :: (load (s32), addrspace 1)
403     %7:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %31, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec
404     %16:vgpr_32(s32) = COPY $vgpr0
405     %23:sreg_32 = S_MOV_B32 1
406     %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec
407     %0:sreg_64 = COPY %24
408     %5:sreg_64 = SI_IF %0, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
409     S_BRANCH %bb.2
411   bb.2:
412     successors: %bb.3(0x80000000)
413     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
415     S_NOP 0
417   bb.3:
418     successors: %bb.4(0x40000000), %bb.6(0x40000000)
419     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
421     S_NOP 0, implicit %6, implicit %7
422     SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
423     S_CBRANCH_EXECZ %bb.6, implicit $exec
425   bb.4:
426     successors: %bb.5(0x04000000), %bb.4(0x7c000000)
427     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
429     S_NOP 0
430     S_CBRANCH_EXECZ %bb.4, implicit $exec
432   bb.5:
433     successors: %bb.6(0x80000000)
434     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
436     S_NOP 0
438   bb.6:
439     successors: %bb.7(0x04000000), %bb.1(0x7c000000)
440     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
442     S_CBRANCH_VCCZ %bb.1, implicit $vcc
444   bb.7:
445     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
446     S_ENDPGM 0
449 name:            test_no_sink_def_into_loop
450 tracksRegLiveness: true
451 machineFunctionInfo:
452   isEntryFunction: true
453 body:             |
454   ; GFX9-LABEL: name: test_no_sink_def_into_loop
455   ; GFX9: bb.0.entry:
456   ; GFX9-NEXT:   successors: %bb.1(0x80000000)
457   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
458   ; GFX9-NEXT: {{  $}}
459   ; GFX9-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
460   ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
461   ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
462   ; GFX9-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
463   ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
464   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
465   ; GFX9-NEXT:   %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
466   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
467   ; GFX9-NEXT:   %8:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
468   ; GFX9-NEXT: {{  $}}
469   ; GFX9-NEXT: bb.1:
470   ; GFX9-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)
471   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
472   ; GFX9-NEXT: {{  $}}
473   ; GFX9-NEXT:   S_NOP 0, implicit %6, implicit %8
474   ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
475   ; GFX9-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
476   ; GFX9-NEXT:   [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec
477   ; GFX9-NEXT:   [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
478   ; GFX9-NEXT:   S_BRANCH %bb.2
479   ; GFX9-NEXT: {{  $}}
480   ; GFX9-NEXT: bb.2:
481   ; GFX9-NEXT:   successors: %bb.3(0x80000000)
482   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
483   ; GFX9-NEXT: {{  $}}
484   ; GFX9-NEXT:   S_NOP 0
485   ; GFX9-NEXT: {{  $}}
486   ; GFX9-NEXT: bb.3:
487   ; GFX9-NEXT:   successors: %bb.4(0x40000000), %bb.6(0x40000000)
488   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
489   ; GFX9-NEXT: {{  $}}
490   ; GFX9-NEXT:   SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
491   ; GFX9-NEXT:   S_CBRANCH_EXECZ %bb.6, implicit $exec
492   ; GFX9-NEXT: {{  $}}
493   ; GFX9-NEXT: bb.4:
494   ; GFX9-NEXT:   successors: %bb.5(0x04000000), %bb.4(0x7c000000)
495   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
496   ; GFX9-NEXT: {{  $}}
497   ; GFX9-NEXT:   S_NOP 0
498   ; GFX9-NEXT:   S_CBRANCH_EXECZ %bb.4, implicit $exec
499   ; GFX9-NEXT: {{  $}}
500   ; GFX9-NEXT: bb.5:
501   ; GFX9-NEXT:   successors: %bb.6(0x80000000)
502   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
503   ; GFX9-NEXT: {{  $}}
504   ; GFX9-NEXT:   S_NOP 0
505   ; GFX9-NEXT: {{  $}}
506   ; GFX9-NEXT: bb.6:
507   ; GFX9-NEXT:   successors: %bb.7(0x04000000), %bb.1(0x7c000000)
508   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
509   ; GFX9-NEXT: {{  $}}
510   ; GFX9-NEXT:   S_CBRANCH_VCCZ %bb.1, implicit $vcc
511   ; GFX9-NEXT: {{  $}}
512   ; GFX9-NEXT: bb.7:
513   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
514   ; GFX9-NEXT: {{  $}}
515   ; GFX9-NEXT:   S_ENDPGM 0
516   bb.0.entry:
517     successors: %bb.1(0x80000000)
519     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
520     %101:vgpr_32 = COPY $vgpr0
521     %102:vgpr_32 = COPY $vgpr1
522     %15:vreg_64 = COPY $vgpr2_vgpr3
523     %20:sreg_64 = S_MOV_B64 0
524     %30:vreg_64 = COPY %20
525     %29:vgpr_32 = GLOBAL_LOAD_DWORD killed %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)
526     %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec
527     %31:vgpr_32 = GLOBAL_LOAD_DWORD killed %15, 0, 0, implicit $exec :: (load (s32), addrspace 1)
528     %7:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %31, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec
530   bb.1:
531     successors: %bb.2(0x40000000), %bb.3(0x40000000)
532     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
534     S_NOP 0, implicit %6, implicit %7
535     %16:vgpr_32(s32) = COPY $vgpr0
536     %23:sreg_32 = S_MOV_B32 1
537     %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec
538     %0:sreg_64 = COPY %24
539     %5:sreg_64 = SI_IF %0, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
540     S_BRANCH %bb.2
542   bb.2:
543     successors: %bb.3(0x80000000)
544     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
546     S_NOP 0
548   bb.3:
549     successors: %bb.4(0x40000000), %bb.6(0x40000000)
550     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
552     SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
553     S_CBRANCH_EXECZ %bb.6, implicit $exec
555   bb.4:
556     successors: %bb.5(0x04000000), %bb.4(0x7c000000)
557     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
559     S_NOP 0
560     S_CBRANCH_EXECZ %bb.4, implicit $exec
562   bb.5:
563     successors: %bb.6(0x80000000)
564     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
566     S_NOP 0
568   bb.6:
569     successors: %bb.7(0x04000000), %bb.1(0x7c000000)
570     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
572     S_CBRANCH_VCCZ %bb.1, implicit $vcc
574   bb.7:
575     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
576     S_ENDPGM 0
579 name:            test_no_sink_def_into_loop2
580 tracksRegLiveness: true
581 machineFunctionInfo:
582   isEntryFunction: true
583 body:             |
584   ; GFX9-LABEL: name: test_no_sink_def_into_loop2
585   ; GFX9: bb.0.entry:
586   ; GFX9-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
587   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
588   ; GFX9-NEXT: {{  $}}
589   ; GFX9-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
590   ; GFX9-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
591   ; GFX9-NEXT:   [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
592   ; GFX9-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
593   ; GFX9-NEXT:   [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]
594   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
595   ; GFX9-NEXT:   %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
596   ; GFX9-NEXT:   [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)
597   ; GFX9-NEXT:   %8:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec
598   ; GFX9-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
599   ; GFX9-NEXT:   S_BRANCH %bb.1
600   ; GFX9-NEXT: {{  $}}
601   ; GFX9-NEXT: bb.1:
602   ; GFX9-NEXT:   successors: %bb.2(0x80000000)
603   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
604   ; GFX9-NEXT: {{  $}}
605   ; GFX9-NEXT:   S_NOP 0
606   ; GFX9-NEXT:   S_BRANCH %bb.2
607   ; GFX9-NEXT: {{  $}}
608   ; GFX9-NEXT: bb.2:
609   ; GFX9-NEXT:   successors: %bb.3(0x40000000), %bb.4(0x40000000)
610   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
611   ; GFX9-NEXT: {{  $}}
612   ; GFX9-NEXT:   S_NOP 0, implicit %6, implicit %8
613   ; GFX9-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
614   ; GFX9-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1
615   ; GFX9-NEXT:   [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec
616   ; GFX9-NEXT:   [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF [[V_CMP_LT_I32_e64_]], %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
617   ; GFX9-NEXT:   S_BRANCH %bb.3
618   ; GFX9-NEXT: {{  $}}
619   ; GFX9-NEXT: bb.3:
620   ; GFX9-NEXT:   successors: %bb.4(0x80000000)
621   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
622   ; GFX9-NEXT: {{  $}}
623   ; GFX9-NEXT:   S_NOP 0
624   ; GFX9-NEXT:   S_BRANCH %bb.4
625   ; GFX9-NEXT: {{  $}}
626   ; GFX9-NEXT: bb.4:
627   ; GFX9-NEXT:   successors: %bb.5(0x40000000), %bb.7(0x40000000)
628   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
629   ; GFX9-NEXT: {{  $}}
630   ; GFX9-NEXT:   SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
631   ; GFX9-NEXT:   S_CBRANCH_EXECZ %bb.7, implicit $exec
632   ; GFX9-NEXT:   S_BRANCH %bb.5
633   ; GFX9-NEXT: {{  $}}
634   ; GFX9-NEXT: bb.5:
635   ; GFX9-NEXT:   successors: %bb.6(0x04000000), %bb.5(0x7c000000)
636   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
637   ; GFX9-NEXT: {{  $}}
638   ; GFX9-NEXT:   S_NOP 0
639   ; GFX9-NEXT:   S_CBRANCH_EXECZ %bb.5, implicit $exec
640   ; GFX9-NEXT:   S_BRANCH %bb.6
641   ; GFX9-NEXT: {{  $}}
642   ; GFX9-NEXT: bb.6:
643   ; GFX9-NEXT:   successors: %bb.7(0x80000000)
644   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
645   ; GFX9-NEXT: {{  $}}
646   ; GFX9-NEXT:   S_NOP 0
647   ; GFX9-NEXT:   S_BRANCH %bb.7
648   ; GFX9-NEXT: {{  $}}
649   ; GFX9-NEXT: bb.7:
650   ; GFX9-NEXT:   successors: %bb.8(0x04000000), %bb.2(0x7c000000)
651   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
652   ; GFX9-NEXT: {{  $}}
653   ; GFX9-NEXT:   S_CBRANCH_VCCZ %bb.2, implicit $vcc
654   ; GFX9-NEXT:   S_BRANCH %bb.8
655   ; GFX9-NEXT: {{  $}}
656   ; GFX9-NEXT: bb.8:
657   ; GFX9-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
658   ; GFX9-NEXT: {{  $}}
659   ; GFX9-NEXT:   S_ENDPGM 0
660   bb.0.entry:
661     successors: %bb.1(0x40000000), %bb.2 (0x40000000)
663     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
664     %101:vgpr_32 = COPY $vgpr0
665     %102:vgpr_32 = COPY $vgpr1
666     %15:vreg_64 = COPY $vgpr2_vgpr3
667     %20:sreg_64 = S_MOV_B64 0
668     %30:vreg_64 = COPY %20
669     %29:vgpr_32 = GLOBAL_LOAD_DWORD killed %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)
670     %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec
671     %31:vgpr_32 = GLOBAL_LOAD_DWORD killed %15, 0, 0, implicit $exec :: (load (s32), addrspace 1)
672     %7:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %31, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec
673     S_CBRANCH_EXECZ %bb.2, implicit $exec
674     S_BRANCH %bb.1
676   bb.1:
677     successors: %bb.2(0x80000000)
678     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
679     S_NOP 0
680     S_BRANCH %bb.2
682   bb.2:
683     successors: %bb.3(0x40000000), %bb.4(0x40000000)
684     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
686     S_NOP 0, implicit %6, implicit %7
687     %16:vgpr_32(s32) = COPY $vgpr0
688     %23:sreg_32 = S_MOV_B32 1
689     %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec
690     %0:sreg_64 = COPY %24
691     %5:sreg_64 = SI_IF %0, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
692     S_BRANCH %bb.3
694   bb.3:
695     successors: %bb.4(0x80000000)
696     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
698     S_NOP 0
699     S_BRANCH %bb.4
701   bb.4:
702     successors: %bb.5(0x40000000), %bb.7(0x40000000)
703     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
705     SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
706     S_CBRANCH_EXECZ %bb.7, implicit $exec
707     S_BRANCH %bb.5
709   bb.5:
710     successors: %bb.6(0x04000000), %bb.5(0x7c000000)
711     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
713     S_NOP 0
714     S_CBRANCH_EXECZ %bb.5, implicit $exec
715     S_BRANCH %bb.6
717   bb.6:
718     successors: %bb.7(0x80000000)
719     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
721     S_NOP 0
722     S_BRANCH %bb.7
724   bb.7:
725     successors: %bb.8(0x04000000), %bb.2(0x7c000000)
726     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
728     S_CBRANCH_VCCZ %bb.2, implicit $vcc
729     S_BRANCH %bb.8
731   bb.8:
732     liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc
733     S_ENDPGM 0