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 3 4--- 5name: test_sink_fmac_to_only_use 6alignment: 1 7tracksRegLiveness: true 8machineFunctionInfo: 9 isEntryFunction: true 10body: | 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 73 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 77 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 82 83 bb.3: 84 S_ENDPGM 0, implicit %22, implicit %23 85... 86--- 87name: test_no_sink_into_if_cond_multiple_uses 88alignment: 1 89tracksRegLiveness: true 90machineFunctionInfo: 91 isEntryFunction: true 92body: | 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 156 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 160 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 165 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 169... 170--- 171name: no_sink_fmac_not_constant_mode 172alignment: 1 173tracksRegLiveness: true 174machineFunctionInfo: 175 isEntryFunction: true 176body: | 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 241 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 245 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 250 251 bb.3: 252 S_ENDPGM 0, implicit %22, implicit %23 253... 254--- 255name: test_no_sink_fmac_wwm 256alignment: 1 257tracksRegLiveness: true 258machineFunctionInfo: 259 isEntryFunction: true 260body: | 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 295 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 301 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 308 309 bb.1: 310 311 bb.2: 312 S_NOP 0, implicit %6 313 SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec 314 315 bb.3: 316 S_ENDPGM 0, implicit %9 317... 318--- 319name: test_def_and_use_in_loop_sink_fmac 320tracksRegLiveness: true 321machineFunctionInfo: 322 isEntryFunction: true 323body: | 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) 388 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 393 394 bb.1: 395 successors: %bb.2(0x40000000), %bb.3(0x40000000) 396 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 397 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 410 411 bb.2: 412 successors: %bb.3(0x80000000) 413 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 414 415 S_NOP 0 416 417 bb.3: 418 successors: %bb.4(0x40000000), %bb.6(0x40000000) 419 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 420 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 424 425 bb.4: 426 successors: %bb.5(0x04000000), %bb.4(0x7c000000) 427 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 428 429 S_NOP 0 430 S_CBRANCH_EXECZ %bb.4, implicit $exec 431 432 bb.5: 433 successors: %bb.6(0x80000000) 434 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 435 436 S_NOP 0 437 438 bb.6: 439 successors: %bb.7(0x04000000), %bb.1(0x7c000000) 440 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 441 442 S_CBRANCH_VCCZ %bb.1, implicit $vcc 443 444 bb.7: 445 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 446 S_ENDPGM 0 447... 448--- 449name: test_no_sink_def_into_loop 450tracksRegLiveness: true 451machineFunctionInfo: 452 isEntryFunction: true 453body: | 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) 518 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 529 530 bb.1: 531 successors: %bb.2(0x40000000), %bb.3(0x40000000) 532 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 533 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 541 542 bb.2: 543 successors: %bb.3(0x80000000) 544 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 545 546 S_NOP 0 547 548 bb.3: 549 successors: %bb.4(0x40000000), %bb.6(0x40000000) 550 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 551 552 SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec 553 S_CBRANCH_EXECZ %bb.6, implicit $exec 554 555 bb.4: 556 successors: %bb.5(0x04000000), %bb.4(0x7c000000) 557 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 558 559 S_NOP 0 560 S_CBRANCH_EXECZ %bb.4, implicit $exec 561 562 bb.5: 563 successors: %bb.6(0x80000000) 564 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 565 566 S_NOP 0 567 568 bb.6: 569 successors: %bb.7(0x04000000), %bb.1(0x7c000000) 570 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 571 572 S_CBRANCH_VCCZ %bb.1, implicit $vcc 573 574 bb.7: 575 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 576 S_ENDPGM 0 577... 578--- 579name: test_no_sink_def_into_loop2 580tracksRegLiveness: true 581machineFunctionInfo: 582 isEntryFunction: true 583body: | 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) 662 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 675 676 bb.1: 677 successors: %bb.2(0x80000000) 678 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 679 S_NOP 0 680 S_BRANCH %bb.2 681 682 bb.2: 683 successors: %bb.3(0x40000000), %bb.4(0x40000000) 684 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 685 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 693 694 bb.3: 695 successors: %bb.4(0x80000000) 696 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 697 698 S_NOP 0 699 S_BRANCH %bb.4 700 701 bb.4: 702 successors: %bb.5(0x40000000), %bb.7(0x40000000) 703 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 704 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 708 709 bb.5: 710 successors: %bb.6(0x04000000), %bb.5(0x7c000000) 711 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 712 713 S_NOP 0 714 S_CBRANCH_EXECZ %bb.5, implicit $exec 715 S_BRANCH %bb.6 716 717 bb.6: 718 successors: %bb.7(0x80000000) 719 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 720 721 S_NOP 0 722 S_BRANCH %bb.7 723 724 bb.7: 725 successors: %bb.8(0x04000000), %bb.2(0x7c000000) 726 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 727 728 S_CBRANCH_VCCZ %bb.2, implicit $vcc 729 S_BRANCH %bb.8 730 731 bb.8: 732 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc 733 S_ENDPGM 0 734... 735