803 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=gfx908 -verify-machineinstrs -run-pass=machine-sink -o - %s | FileCheck -check-prefixes=GFX9 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx908 -verify-machineinstrs -run-pass=machine-sink --sink-insts-to-avoid-spills=1 -o - %s | FileCheck -check-prefixes=GFX9 %s4 5 6---7name: test_sink_fmac_to_only_use8alignment: 19tracksRegLiveness: true10machineFunctionInfo:11 isEntryFunction: true12body: |13 ; GFX9-LABEL: name: test_sink_fmac_to_only_use14 ; GFX9: bb.0:15 ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)16 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr217 ; GFX9-NEXT: {{ $}}18 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr019 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr120 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec21 ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec22 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 023 ; GFX9-NEXT: [[S_MOV_B64_1:%[0-9]+]]:sreg_64 = S_MOV_B64 024 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]25 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_1]]26 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)27 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)28 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr029 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 130 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec31 ; 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 $exec32 ; GFX9-NEXT: S_BRANCH %bb.133 ; GFX9-NEXT: {{ $}}34 ; GFX9-NEXT: bb.1:35 ; GFX9-NEXT: successors: %bb.2(0x80000000)36 ; GFX9-NEXT: {{ $}}37 ; GFX9-NEXT: [[V_FMAC_F32_e64_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec38 ; GFX9-NEXT: [[V_FMAC_F32_e64_1:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[V_FMAC_F32_e64_]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec39 ; GFX9-NEXT: [[V_FMAC_F32_e64_2:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec40 ; GFX9-NEXT: [[V_FMAC_F32_e64_3:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[V_FMAC_F32_e64_2]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec41 ; GFX9-NEXT: [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[V_FMAC_F32_e64_]], [[V_FMAC_F32_e64_1]], implicit $mode, implicit $exec42 ; GFX9-NEXT: [[V_ADD_F32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[V_FMAC_F32_e64_2]], [[V_FMAC_F32_e64_3]], implicit $mode, implicit $exec43 ; GFX9-NEXT: {{ $}}44 ; GFX9-NEXT: bb.2:45 ; GFX9-NEXT: successors: %bb.3(0x80000000)46 ; GFX9-NEXT: {{ $}}47 ; GFX9-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_ADD_F32_e32_]], %bb.148 ; GFX9-NEXT: [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_1]], %bb.0, [[V_ADD_F32_e32_1]], %bb.149 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec50 ; GFX9-NEXT: {{ $}}51 ; GFX9-NEXT: bb.3:52 ; GFX9-NEXT: S_ENDPGM 0, implicit [[PHI]], implicit [[PHI1]]53 bb.0:54 liveins: $vgpr0, $vgpr1, $vgpr255 %1:vgpr_32 = COPY $vgpr056 %2:vgpr_32 = COPY $vgpr157 %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec58 %4:vgpr_32 = V_MOV_B32_e32 0, implicit $exec59 %5:sreg_64 = S_MOV_B64 060 %6:sreg_64 = S_MOV_B64 061 %7:vreg_64 = COPY %562 %8:vreg_64 = COPY %663 %9:vgpr_32 = GLOBAL_LOAD_DWORD killed %7, 0, 0, implicit $exec :: (load (s32), addrspace 1)64 %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec65 %11:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %10, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec66 %12:vgpr_32 = GLOBAL_LOAD_DWORD killed %8, 0, 0, implicit $exec :: (load (s32), addrspace 1)67 %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec68 %14:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %13, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec69 %15:vgpr_32(s32) = COPY $vgpr070 %16:sreg_32 = S_MOV_B32 171 %17:sreg_64 = V_CMP_LT_I32_e64 %15(s32), %16, implicit $exec72 %18:sreg_64 = COPY %1773 %19:sreg_64 = SI_IF %18, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec74 S_BRANCH %bb.175 76 bb.1:77 %20:vgpr_32 = V_ADD_F32_e32 %10, %11, implicit $mode, implicit $exec78 %21:vgpr_32 = V_ADD_F32_e32 %13, %14, implicit $mode, implicit $exec79 80 bb.2:81 %22:vgpr_32 = PHI %3, %bb.0, %20, %bb.182 %23:vgpr_32 = PHI %4, %bb.0, %21, %bb.183 SI_END_CF %19, implicit-def dead $exec, implicit-def dead $scc, implicit $exec84 85 bb.3:86 S_ENDPGM 0, implicit %22, implicit %2387...88---89name: test_no_sink_into_if_cond_multiple_uses90alignment: 191tracksRegLiveness: true92machineFunctionInfo:93 isEntryFunction: true94body: |95 ; GFX9-LABEL: name: test_no_sink_into_if_cond_multiple_uses96 ; GFX9: bb.0:97 ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)98 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr299 ; GFX9-NEXT: {{ $}}100 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0101 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1102 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec103 ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec104 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0105 ; GFX9-NEXT: [[S_MOV_B64_1:%[0-9]+]]:sreg_64 = S_MOV_B64 0106 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]107 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_1]]108 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)109 ; GFX9-NEXT: [[V_FMAC_F32_e64_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec110 ; GFX9-NEXT: [[V_FMAC_F32_e64_1:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[V_FMAC_F32_e64_]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec111 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)112 ; GFX9-NEXT: [[V_FMAC_F32_e64_2:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec113 ; GFX9-NEXT: [[V_FMAC_F32_e64_3:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[V_FMAC_F32_e64_2]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec114 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0115 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1116 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec117 ; 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 $exec118 ; GFX9-NEXT: S_BRANCH %bb.1119 ; GFX9-NEXT: {{ $}}120 ; GFX9-NEXT: bb.1:121 ; GFX9-NEXT: successors: %bb.2(0x80000000)122 ; GFX9-NEXT: {{ $}}123 ; GFX9-NEXT: [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[V_FMAC_F32_e64_]], [[V_FMAC_F32_e64_1]], implicit $mode, implicit $exec124 ; GFX9-NEXT: [[V_ADD_F32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[V_FMAC_F32_e64_2]], [[V_FMAC_F32_e64_3]], implicit $mode, implicit $exec125 ; GFX9-NEXT: {{ $}}126 ; GFX9-NEXT: bb.2:127 ; GFX9-NEXT: successors: %bb.3(0x80000000)128 ; GFX9-NEXT: {{ $}}129 ; GFX9-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_ADD_F32_e32_]], %bb.1130 ; GFX9-NEXT: [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_1]], %bb.0, [[V_ADD_F32_e32_1]], %bb.1131 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec132 ; GFX9-NEXT: {{ $}}133 ; GFX9-NEXT: bb.3:134 ; GFX9-NEXT: [[V_ADD_F32_e32_2:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[V_FMAC_F32_e64_3]], [[V_FMAC_F32_e64_1]], implicit $mode, implicit $exec135 ; GFX9-NEXT: S_ENDPGM 0, implicit [[PHI]], implicit [[PHI1]]136 bb.0:137 liveins: $vgpr0, $vgpr1, $vgpr2138 %1:vgpr_32 = COPY $vgpr0139 %2:vgpr_32 = COPY $vgpr1140 %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec141 %4:vgpr_32 = V_MOV_B32_e32 0, implicit $exec142 %5:sreg_64 = S_MOV_B64 0143 %6:sreg_64 = S_MOV_B64 0144 %7:vreg_64 = COPY %5145 %8:vreg_64 = COPY %6146 %9:vgpr_32 = GLOBAL_LOAD_DWORD killed %7, 0, 0, implicit $exec :: (load (s32), addrspace 1)147 %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec148 %11:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %10, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec149 %12:vgpr_32 = GLOBAL_LOAD_DWORD killed %8, 0, 0, implicit $exec :: (load (s32), addrspace 1)150 %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec151 %14:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %13, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec152 %15:vgpr_32(s32) = COPY $vgpr0153 %16:sreg_32 = S_MOV_B32 1154 %17:sreg_64 = V_CMP_LT_I32_e64 %15(s32), %16, implicit $exec155 %18:sreg_64 = COPY %17156 %19:sreg_64 = SI_IF %18, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec157 S_BRANCH %bb.1158 159 bb.1:160 %20:vgpr_32 = V_ADD_F32_e32 %10, %11, implicit $mode, implicit $exec161 %21:vgpr_32 = V_ADD_F32_e32 %13, %14, implicit $mode, implicit $exec162 163 bb.2:164 %22:vgpr_32 = PHI %3, %bb.0, %20, %bb.1165 %23:vgpr_32 = PHI %4, %bb.0, %21, %bb.1166 SI_END_CF %19, implicit-def dead $exec, implicit-def dead $scc, implicit $exec167 168 bb.3:169 %24:vgpr_32 = V_ADD_F32_e32 %14, %11, implicit $mode, implicit $exec170 S_ENDPGM 0, implicit %22, implicit %23171...172---173name: no_sink_fmac_not_constant_mode174alignment: 1175tracksRegLiveness: true176machineFunctionInfo:177 isEntryFunction: true178body: |179 ; GFX9-LABEL: name: no_sink_fmac_not_constant_mode180 ; GFX9: bb.0:181 ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)182 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2183 ; GFX9-NEXT: {{ $}}184 ; GFX9-NEXT: $mode = IMPLICIT_DEF185 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0186 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1187 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec188 ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec189 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0190 ; GFX9-NEXT: [[S_MOV_B64_1:%[0-9]+]]:sreg_64 = S_MOV_B64 0191 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]192 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_1]]193 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)194 ; GFX9-NEXT: [[V_FMAC_F32_e64_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec195 ; GFX9-NEXT: [[V_FMAC_F32_e64_1:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[V_FMAC_F32_e64_]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec196 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)197 ; GFX9-NEXT: [[V_FMAC_F32_e64_2:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec198 ; GFX9-NEXT: [[V_FMAC_F32_e64_3:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[V_FMAC_F32_e64_2]], 0, [[COPY1]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec199 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0200 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1201 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec202 ; 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 $exec203 ; GFX9-NEXT: S_BRANCH %bb.1204 ; GFX9-NEXT: {{ $}}205 ; GFX9-NEXT: bb.1:206 ; GFX9-NEXT: successors: %bb.2(0x80000000)207 ; GFX9-NEXT: {{ $}}208 ; GFX9-NEXT: [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[V_FMAC_F32_e64_]], [[V_FMAC_F32_e64_1]], implicit $mode, implicit $exec209 ; GFX9-NEXT: [[V_ADD_F32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[V_FMAC_F32_e64_2]], [[V_FMAC_F32_e64_3]], implicit $mode, implicit $exec210 ; GFX9-NEXT: {{ $}}211 ; GFX9-NEXT: bb.2:212 ; GFX9-NEXT: successors: %bb.3(0x80000000)213 ; GFX9-NEXT: {{ $}}214 ; GFX9-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_ADD_F32_e32_]], %bb.1215 ; GFX9-NEXT: [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_1]], %bb.0, [[V_ADD_F32_e32_1]], %bb.1216 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec217 ; GFX9-NEXT: {{ $}}218 ; GFX9-NEXT: bb.3:219 ; GFX9-NEXT: S_ENDPGM 0, implicit [[PHI]], implicit [[PHI1]]220 bb.0:221 liveins: $vgpr0, $vgpr1, $vgpr2222 $mode = IMPLICIT_DEF223 %1:vgpr_32 = COPY $vgpr0224 %2:vgpr_32 = COPY $vgpr1225 %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec226 %4:vgpr_32 = V_MOV_B32_e32 0, implicit $exec227 %5:sreg_64 = S_MOV_B64 0228 %6:sreg_64 = S_MOV_B64 0229 %7:vreg_64 = COPY %5230 %8:vreg_64 = COPY %6231 %9:vgpr_32 = GLOBAL_LOAD_DWORD killed %7, 0, 0, implicit $exec :: (load (s32), addrspace 1)232 %10:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %9, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec233 %11:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %10, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec234 %12:vgpr_32 = GLOBAL_LOAD_DWORD killed %8, 0, 0, implicit $exec :: (load (s32), addrspace 1)235 %13:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %12, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec236 %14:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %13, 0, %2, 0, %1, 0, 0, implicit $mode, implicit $exec237 %15:vgpr_32(s32) = COPY $vgpr0238 %16:sreg_32 = S_MOV_B32 1239 %17:sreg_64 = V_CMP_LT_I32_e64 %15(s32), %16, implicit $exec240 %18:sreg_64 = COPY %17241 %19:sreg_64 = SI_IF %18, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec242 S_BRANCH %bb.1243 244 bb.1:245 %20:vgpr_32 = V_ADD_F32_e32 %10, %11, implicit $mode, implicit $exec246 %21:vgpr_32 = V_ADD_F32_e32 %13, %14, implicit $mode, implicit $exec247 248 bb.2:249 %22:vgpr_32 = PHI %3, %bb.0, %20, %bb.1250 %23:vgpr_32 = PHI %4, %bb.0, %21, %bb.1251 SI_END_CF %19, implicit-def dead $exec, implicit-def dead $scc, implicit $exec252 253 bb.3:254 S_ENDPGM 0, implicit %22, implicit %23255...256---257name: test_no_sink_fmac_wwm258alignment: 1259tracksRegLiveness: true260machineFunctionInfo:261 isEntryFunction: true262body: |263 ; GFX9-LABEL: name: test_no_sink_fmac_wwm264 ; GFX9: bb.0:265 ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)266 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2267 ; GFX9-NEXT: {{ $}}268 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0269 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1270 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0271 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]272 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)273 ; GFX9-NEXT: [[V_FMAC_F32_e64_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec274 ; GFX9-NEXT: early-clobber %6:vgpr_32 = STRICT_WWM [[V_FMAC_F32_e64_]], implicit $exec275 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0276 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1277 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY3]](s32), [[S_MOV_B32_]], implicit $exec278 ; 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 $exec279 ; GFX9-NEXT: S_BRANCH %bb.1280 ; GFX9-NEXT: {{ $}}281 ; GFX9-NEXT: bb.1:282 ; GFX9-NEXT: successors: %bb.2(0x80000000)283 ; GFX9-NEXT: {{ $}}284 ; GFX9-NEXT: bb.2:285 ; GFX9-NEXT: successors: %bb.3(0x80000000)286 ; GFX9-NEXT: {{ $}}287 ; GFX9-NEXT: S_NOP 0, implicit [[V_FMAC_F32_e64_]]288 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec289 ; GFX9-NEXT: {{ $}}290 ; GFX9-NEXT: bb.3:291 ; GFX9-NEXT: S_ENDPGM 0, implicit %6292 bb.0:293 liveins: $vgpr0, $vgpr1, $vgpr2294 %1:vgpr_32 = COPY $vgpr0295 %2:vgpr_32 = COPY $vgpr1296 297 %20:sreg_64 = S_MOV_B64 0298 %30:vreg_64 = COPY %20299 %29:vgpr_32 = GLOBAL_LOAD_DWORD killed %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)300 %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %1, 0, %2, 0, 0, implicit $mode, implicit $exec301 %9:vgpr_32 = STRICT_WWM %6, implicit $exec302 303 %16:vgpr_32(s32) = COPY $vgpr0304 %23:sreg_32 = S_MOV_B32 1305 %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec306 %0:sreg_64 = COPY %24307 %5:sreg_64 = SI_IF %0, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec308 S_BRANCH %bb.1309 310 bb.1:311 312 bb.2:313 S_NOP 0, implicit %6314 SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec315 316 bb.3:317 S_ENDPGM 0, implicit %9318...319---320name: test_def_and_use_in_loop_sink_fmac321tracksRegLiveness: true322machineFunctionInfo:323 isEntryFunction: true324body: |325 ; GFX9-LABEL: name: test_def_and_use_in_loop_sink_fmac326 ; GFX9: bb.0.entry:327 ; GFX9-NEXT: successors: %bb.1(0x80000000)328 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc329 ; GFX9-NEXT: {{ $}}330 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0331 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1332 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3333 ; GFX9-NEXT: {{ $}}334 ; GFX9-NEXT: bb.1:335 ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000)336 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc337 ; GFX9-NEXT: {{ $}}338 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0339 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]340 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)341 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)342 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0343 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1344 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec345 ; 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 $exec346 ; GFX9-NEXT: S_BRANCH %bb.2347 ; GFX9-NEXT: {{ $}}348 ; GFX9-NEXT: bb.2:349 ; GFX9-NEXT: successors: %bb.3(0x80000000)350 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc351 ; GFX9-NEXT: {{ $}}352 ; GFX9-NEXT: S_NOP 0353 ; GFX9-NEXT: {{ $}}354 ; GFX9-NEXT: bb.3:355 ; GFX9-NEXT: successors: %bb.4(0x40000000), %bb.6(0x40000000)356 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc357 ; GFX9-NEXT: {{ $}}358 ; GFX9-NEXT: [[V_FMAC_F32_e64_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec359 ; GFX9-NEXT: [[V_FMAC_F32_e64_1:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec360 ; GFX9-NEXT: S_NOP 0, implicit [[V_FMAC_F32_e64_]], implicit [[V_FMAC_F32_e64_1]]361 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec362 ; GFX9-NEXT: S_CBRANCH_EXECZ %bb.6, implicit $exec363 ; GFX9-NEXT: {{ $}}364 ; GFX9-NEXT: bb.4:365 ; GFX9-NEXT: successors: %bb.5(0x04000000), %bb.4(0x7c000000)366 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc367 ; GFX9-NEXT: {{ $}}368 ; GFX9-NEXT: S_NOP 0369 ; GFX9-NEXT: S_CBRANCH_EXECZ %bb.4, implicit $exec370 ; GFX9-NEXT: {{ $}}371 ; GFX9-NEXT: bb.5:372 ; GFX9-NEXT: successors: %bb.6(0x80000000)373 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc374 ; GFX9-NEXT: {{ $}}375 ; GFX9-NEXT: S_NOP 0376 ; GFX9-NEXT: {{ $}}377 ; GFX9-NEXT: bb.6:378 ; GFX9-NEXT: successors: %bb.7(0x04000000), %bb.1(0x7c000000)379 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc380 ; GFX9-NEXT: {{ $}}381 ; GFX9-NEXT: S_CBRANCH_VCCZ %bb.1, implicit $vcc382 ; GFX9-NEXT: {{ $}}383 ; GFX9-NEXT: bb.7:384 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc385 ; GFX9-NEXT: {{ $}}386 ; GFX9-NEXT: S_ENDPGM 0387 bb.0.entry:388 successors: %bb.1(0x80000000)389 390 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc391 %101:vgpr_32 = COPY $vgpr0392 %102:vgpr_32 = COPY $vgpr1393 %15:vreg_64 = COPY $vgpr2_vgpr3394 395 bb.1:396 successors: %bb.2(0x40000000), %bb.3(0x40000000)397 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc398 399 %20:sreg_64 = S_MOV_B64 0400 %30:vreg_64 = COPY %20401 %29:vgpr_32 = GLOBAL_LOAD_DWORD %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)402 %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec403 %31:vgpr_32 = GLOBAL_LOAD_DWORD %15, 0, 0, implicit $exec :: (load (s32), addrspace 1)404 %7:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %31, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec405 %16:vgpr_32(s32) = COPY $vgpr0406 %23:sreg_32 = S_MOV_B32 1407 %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec408 %0:sreg_64 = COPY %24409 %5:sreg_64 = SI_IF %0, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec410 S_BRANCH %bb.2411 412 bb.2:413 successors: %bb.3(0x80000000)414 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc415 416 S_NOP 0417 418 bb.3:419 successors: %bb.4(0x40000000), %bb.6(0x40000000)420 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc421 422 S_NOP 0, implicit %6, implicit %7423 SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec424 S_CBRANCH_EXECZ %bb.6, implicit $exec425 426 bb.4:427 successors: %bb.5(0x04000000), %bb.4(0x7c000000)428 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc429 430 S_NOP 0431 S_CBRANCH_EXECZ %bb.4, implicit $exec432 433 bb.5:434 successors: %bb.6(0x80000000)435 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc436 437 S_NOP 0438 439 bb.6:440 successors: %bb.7(0x04000000), %bb.1(0x7c000000)441 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc442 443 S_CBRANCH_VCCZ %bb.1, implicit $vcc444 445 bb.7:446 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc447 S_ENDPGM 0448...449---450name: test_no_sink_def_into_loop451tracksRegLiveness: true452machineFunctionInfo:453 isEntryFunction: true454body: |455 ; GFX9-LABEL: name: test_no_sink_def_into_loop456 ; GFX9: bb.0.entry:457 ; GFX9-NEXT: successors: %bb.1(0x80000000)458 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc459 ; GFX9-NEXT: {{ $}}460 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0461 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1462 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3463 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0464 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]465 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)466 ; GFX9-NEXT: [[V_FMAC_F32_e64_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec467 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)468 ; GFX9-NEXT: [[V_FMAC_F32_e64_1:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec469 ; GFX9-NEXT: {{ $}}470 ; GFX9-NEXT: bb.1:471 ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000)472 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc473 ; GFX9-NEXT: {{ $}}474 ; GFX9-NEXT: S_NOP 0, implicit [[V_FMAC_F32_e64_]], implicit [[V_FMAC_F32_e64_1]]475 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0476 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1477 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec478 ; 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 $exec479 ; GFX9-NEXT: S_BRANCH %bb.2480 ; GFX9-NEXT: {{ $}}481 ; GFX9-NEXT: bb.2:482 ; GFX9-NEXT: successors: %bb.3(0x80000000)483 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc484 ; GFX9-NEXT: {{ $}}485 ; GFX9-NEXT: S_NOP 0486 ; GFX9-NEXT: {{ $}}487 ; GFX9-NEXT: bb.3:488 ; GFX9-NEXT: successors: %bb.4(0x40000000), %bb.6(0x40000000)489 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc490 ; GFX9-NEXT: {{ $}}491 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec492 ; GFX9-NEXT: S_CBRANCH_EXECZ %bb.6, implicit $exec493 ; GFX9-NEXT: {{ $}}494 ; GFX9-NEXT: bb.4:495 ; GFX9-NEXT: successors: %bb.5(0x04000000), %bb.4(0x7c000000)496 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc497 ; GFX9-NEXT: {{ $}}498 ; GFX9-NEXT: S_NOP 0499 ; GFX9-NEXT: S_CBRANCH_EXECZ %bb.4, implicit $exec500 ; GFX9-NEXT: {{ $}}501 ; GFX9-NEXT: bb.5:502 ; GFX9-NEXT: successors: %bb.6(0x80000000)503 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc504 ; GFX9-NEXT: {{ $}}505 ; GFX9-NEXT: S_NOP 0506 ; GFX9-NEXT: {{ $}}507 ; GFX9-NEXT: bb.6:508 ; GFX9-NEXT: successors: %bb.7(0x04000000), %bb.1(0x7c000000)509 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc510 ; GFX9-NEXT: {{ $}}511 ; GFX9-NEXT: S_CBRANCH_VCCZ %bb.1, implicit $vcc512 ; GFX9-NEXT: {{ $}}513 ; GFX9-NEXT: bb.7:514 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc515 ; GFX9-NEXT: {{ $}}516 ; GFX9-NEXT: S_ENDPGM 0517 bb.0.entry:518 successors: %bb.1(0x80000000)519 520 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc521 %101:vgpr_32 = COPY $vgpr0522 %102:vgpr_32 = COPY $vgpr1523 %15:vreg_64 = COPY $vgpr2_vgpr3524 %20:sreg_64 = S_MOV_B64 0525 %30:vreg_64 = COPY %20526 %29:vgpr_32 = GLOBAL_LOAD_DWORD killed %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)527 %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec528 %31:vgpr_32 = GLOBAL_LOAD_DWORD killed %15, 0, 0, implicit $exec :: (load (s32), addrspace 1)529 %7:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %31, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec530 531 bb.1:532 successors: %bb.2(0x40000000), %bb.3(0x40000000)533 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc534 535 S_NOP 0, implicit %6, implicit %7536 %16:vgpr_32(s32) = COPY $vgpr0537 %23:sreg_32 = S_MOV_B32 1538 %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec539 %0:sreg_64 = COPY %24540 %5:sreg_64 = SI_IF %0, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec541 S_BRANCH %bb.2542 543 bb.2:544 successors: %bb.3(0x80000000)545 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc546 547 S_NOP 0548 549 bb.3:550 successors: %bb.4(0x40000000), %bb.6(0x40000000)551 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc552 553 SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec554 S_CBRANCH_EXECZ %bb.6, implicit $exec555 556 bb.4:557 successors: %bb.5(0x04000000), %bb.4(0x7c000000)558 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc559 560 S_NOP 0561 S_CBRANCH_EXECZ %bb.4, implicit $exec562 563 bb.5:564 successors: %bb.6(0x80000000)565 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc566 567 S_NOP 0568 569 bb.6:570 successors: %bb.7(0x04000000), %bb.1(0x7c000000)571 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc572 573 S_CBRANCH_VCCZ %bb.1, implicit $vcc574 575 bb.7:576 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc577 S_ENDPGM 0578...579---580name: test_no_sink_def_into_loop2581tracksRegLiveness: true582machineFunctionInfo:583 isEntryFunction: true584body: |585 ; GFX9-LABEL: name: test_no_sink_def_into_loop2586 ; GFX9: bb.0.entry:587 ; GFX9-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)588 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc589 ; GFX9-NEXT: {{ $}}590 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0591 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1592 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3593 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0594 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]595 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY3]], 0, 0, implicit $exec :: (load (s32), addrspace 1)596 ; GFX9-NEXT: [[V_FMAC_F32_e64_:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec597 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD1:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY2]], 0, 0, implicit $exec :: (load (s32), addrspace 1)598 ; GFX9-NEXT: [[V_FMAC_F32_e64_1:%[0-9]+]]:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, [[GLOBAL_LOAD_DWORD1]], 0, [[COPY]], 0, [[COPY1]], 0, 0, implicit $mode, implicit $exec599 ; GFX9-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec600 ; GFX9-NEXT: S_BRANCH %bb.1601 ; GFX9-NEXT: {{ $}}602 ; GFX9-NEXT: bb.1:603 ; GFX9-NEXT: successors: %bb.2(0x80000000)604 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc605 ; GFX9-NEXT: {{ $}}606 ; GFX9-NEXT: S_NOP 0607 ; GFX9-NEXT: S_BRANCH %bb.2608 ; GFX9-NEXT: {{ $}}609 ; GFX9-NEXT: bb.2:610 ; GFX9-NEXT: successors: %bb.3(0x40000000), %bb.4(0x40000000)611 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc612 ; GFX9-NEXT: {{ $}}613 ; GFX9-NEXT: S_NOP 0, implicit [[V_FMAC_F32_e64_]], implicit [[V_FMAC_F32_e64_1]]614 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0615 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1616 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY4]](s32), [[S_MOV_B32_]], implicit $exec617 ; 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 $exec618 ; GFX9-NEXT: S_BRANCH %bb.3619 ; GFX9-NEXT: {{ $}}620 ; GFX9-NEXT: bb.3:621 ; GFX9-NEXT: successors: %bb.4(0x80000000)622 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc623 ; GFX9-NEXT: {{ $}}624 ; GFX9-NEXT: S_NOP 0625 ; GFX9-NEXT: S_BRANCH %bb.4626 ; GFX9-NEXT: {{ $}}627 ; GFX9-NEXT: bb.4:628 ; GFX9-NEXT: successors: %bb.5(0x40000000), %bb.7(0x40000000)629 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc630 ; GFX9-NEXT: {{ $}}631 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec632 ; GFX9-NEXT: S_CBRANCH_EXECZ %bb.7, implicit $exec633 ; GFX9-NEXT: S_BRANCH %bb.5634 ; GFX9-NEXT: {{ $}}635 ; GFX9-NEXT: bb.5:636 ; GFX9-NEXT: successors: %bb.6(0x04000000), %bb.5(0x7c000000)637 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc638 ; GFX9-NEXT: {{ $}}639 ; GFX9-NEXT: S_NOP 0640 ; GFX9-NEXT: S_CBRANCH_EXECZ %bb.5, implicit $exec641 ; GFX9-NEXT: S_BRANCH %bb.6642 ; GFX9-NEXT: {{ $}}643 ; GFX9-NEXT: bb.6:644 ; GFX9-NEXT: successors: %bb.7(0x80000000)645 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc646 ; GFX9-NEXT: {{ $}}647 ; GFX9-NEXT: S_NOP 0648 ; GFX9-NEXT: S_BRANCH %bb.7649 ; GFX9-NEXT: {{ $}}650 ; GFX9-NEXT: bb.7:651 ; GFX9-NEXT: successors: %bb.8(0x04000000), %bb.2(0x7c000000)652 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc653 ; GFX9-NEXT: {{ $}}654 ; GFX9-NEXT: S_CBRANCH_VCCZ %bb.2, implicit $vcc655 ; GFX9-NEXT: S_BRANCH %bb.8656 ; GFX9-NEXT: {{ $}}657 ; GFX9-NEXT: bb.8:658 ; GFX9-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc659 ; GFX9-NEXT: {{ $}}660 ; GFX9-NEXT: S_ENDPGM 0661 bb.0.entry:662 successors: %bb.1(0x40000000), %bb.2 (0x40000000)663 664 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc665 %101:vgpr_32 = COPY $vgpr0666 %102:vgpr_32 = COPY $vgpr1667 %15:vreg_64 = COPY $vgpr2_vgpr3668 %20:sreg_64 = S_MOV_B64 0669 %30:vreg_64 = COPY %20670 %29:vgpr_32 = GLOBAL_LOAD_DWORD killed %30, 0, 0, implicit $exec :: (load (s32), addrspace 1)671 %6:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %29, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec672 %31:vgpr_32 = GLOBAL_LOAD_DWORD killed %15, 0, 0, implicit $exec :: (load (s32), addrspace 1)673 %7:vgpr_32 = contract nofpexcept V_FMAC_F32_e64 0, %31, 0, %101, 0, %102, 0, 0, implicit $mode, implicit $exec674 S_CBRANCH_EXECZ %bb.2, implicit $exec675 S_BRANCH %bb.1676 677 bb.1:678 successors: %bb.2(0x80000000)679 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc680 S_NOP 0681 S_BRANCH %bb.2682 683 bb.2:684 successors: %bb.3(0x40000000), %bb.4(0x40000000)685 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc686 687 S_NOP 0, implicit %6, implicit %7688 %16:vgpr_32(s32) = COPY $vgpr0689 %23:sreg_32 = S_MOV_B32 1690 %24:sreg_64 = V_CMP_LT_I32_e64 %16(s32), %23, implicit $exec691 %0:sreg_64 = COPY %24692 %5:sreg_64 = SI_IF %0, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec693 S_BRANCH %bb.3694 695 bb.3:696 successors: %bb.4(0x80000000)697 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc698 699 S_NOP 0700 S_BRANCH %bb.4701 702 bb.4:703 successors: %bb.5(0x40000000), %bb.7(0x40000000)704 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc705 706 SI_END_CF %5, implicit-def dead $exec, implicit-def dead $scc, implicit $exec707 S_CBRANCH_EXECZ %bb.7, implicit $exec708 S_BRANCH %bb.5709 710 bb.5:711 successors: %bb.6(0x04000000), %bb.5(0x7c000000)712 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc713 714 S_NOP 0715 S_CBRANCH_EXECZ %bb.5, implicit $exec716 S_BRANCH %bb.6717 718 bb.6:719 successors: %bb.7(0x80000000)720 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc721 722 S_NOP 0723 S_BRANCH %bb.7724 725 bb.7:726 successors: %bb.8(0x04000000), %bb.2(0x7c000000)727 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc728 729 S_CBRANCH_VCCZ %bb.2, implicit $vcc730 S_BRANCH %bb.8731 732 bb.8:733 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vcc734 S_ENDPGM 0735...736---737name: test_no_sink_permlane_swap738tracksRegLiveness: true739machineFunctionInfo:740 isEntryFunction: true741body: |742 ; GFX9-LABEL: name: test_no_sink_permlane_swap743 ; GFX9: bb.0:744 ; GFX9-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)745 ; GFX9-NEXT: liveins: $vgpr0746 ; GFX9-NEXT: {{ $}}747 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0748 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec749 ; GFX9-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0750 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[S_MOV_B64_]]751 ; GFX9-NEXT: [[GLOBAL_LOAD_DWORD:%[0-9]+]]:vgpr_32 = GLOBAL_LOAD_DWORD killed [[COPY1]], 0, 0, implicit $exec :: (load (s32), addrspace 1)752 ; GFX9-NEXT: [[V_PERMLANE32_SWAP_B32_e64_:%[0-9]+]]:vgpr_32, [[V_PERMLANE32_SWAP_B32_e64_1:%[0-9]+]]:vgpr_32 = V_PERMLANE32_SWAP_B32_e64 [[GLOBAL_LOAD_DWORD]], [[GLOBAL_LOAD_DWORD]], 0, 0, implicit $exec753 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0754 ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1755 ; GFX9-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I32_e64 [[COPY2]], [[S_MOV_B32_]], implicit $exec756 ; 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 $exec757 ; GFX9-NEXT: S_BRANCH %bb.1758 ; GFX9-NEXT: {{ $}}759 ; GFX9-NEXT: bb.1:760 ; GFX9-NEXT: successors: %bb.2(0x80000000)761 ; GFX9-NEXT: {{ $}}762 ; GFX9-NEXT: [[V_MAX_I32_e64_:%[0-9]+]]:vgpr_32 = V_MAX_I32_e64 [[V_PERMLANE32_SWAP_B32_e64_]], [[V_PERMLANE32_SWAP_B32_e64_1]], implicit $exec763 ; GFX9-NEXT: {{ $}}764 ; GFX9-NEXT: bb.2:765 ; GFX9-NEXT: successors: %bb.3(0x80000000)766 ; GFX9-NEXT: {{ $}}767 ; GFX9-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[V_MOV_B32_e32_]], %bb.0, [[V_MAX_I32_e64_]], %bb.1768 ; GFX9-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec769 ; GFX9-NEXT: {{ $}}770 ; GFX9-NEXT: bb.3:771 ; GFX9-NEXT: S_ENDPGM 0, implicit [[PHI]]772 bb.0:773 successors: %bb.2(0x40000000), %bb.1(0x40000000)774 liveins: $vgpr0775 776 %0:vgpr_32 = COPY $vgpr0777 %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec778 %2:sreg_64 = S_MOV_B64 0779 %3:vreg_64 = COPY %2780 %4:vgpr_32 = GLOBAL_LOAD_DWORD killed %3, 0, 0, implicit $exec :: (load (s32), addrspace 1)781 %5:vgpr_32, %6:vgpr_32 = V_PERMLANE32_SWAP_B32_e64 %4, %4, 0, 0, implicit $exec782 %7:vgpr_32 = COPY $vgpr0783 %8:sreg_32 = S_MOV_B32 1784 %9:sreg_64 = V_CMP_LT_I32_e64 %7, %8, implicit $exec785 %10:sreg_64 = COPY %9786 %11:sreg_64 = SI_IF %10, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec787 S_BRANCH %bb.1788 789 bb.1:790 successors: %bb.2(0x80000000)791 792 %12:vgpr_32 = V_MAX_I32_e64 %5, %6, implicit $exec793 794 bb.2:795 successors: %bb.3(0x80000000)796 797 %13:vgpr_32 = PHI %1, %bb.0, %12, %bb.1798 SI_END_CF %11, implicit-def dead $exec, implicit-def dead $scc, implicit $exec799 800 bb.3:801 S_ENDPGM 0, implicit %13802...803