<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/54201>54201</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            SIFoldOperands causes Bad machine code: Virtual register killed in block, but needed live out.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AMDGPU
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jayfoad
      </td>
    </tr>
</table>

<pre>
    With the attached [test case](https://github.com/llvm/llvm-project/files/8186866/reduced.txt) I get:
```
$ ~/llvm-debug/bin/llc -march=amdgcn -mcpu=gfx900 -o /dev/null -verify-machineinstrs reduced.txt

# After SI Fold Operands
# Machine code for function _amdgpu_cs_main: IsSSA, TracksLiveness
Function Live Ins: $vgpr0 in %24, $vgpr1 in %25, $vgpr2 in %26, $vgpr3 in %27, $vgpr4 in %28, $vgpr12 in %36, $vgpr13 in %37, $vgpr14 in %38, $vgpr15 in %39, $vgpr16 in %40, $vgpr17 in %41, $vgpr18 in %42, $vgpr19 in %43, $vgpr20 in %44, $vgpr75 in %99, $vgpr76 in %100, $vgpr77 in %101

bb.0..entry:
  successors: %bb.12(0x40000000), %bb.1(0x40000000); %bb.12(50.00%), %bb.1(50.00%)
  liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr75, $vgpr76, $vgpr77
  %44:vgpr_32 = COPY $vgpr20
  %43:vgpr_32 = COPY $vgpr19
  %42:vgpr_32 = COPY $vgpr18
  %41:vgpr_32 = COPY $vgpr17
  %40:vgpr_32 = COPY $vgpr16
  %36:vgpr_32 = COPY $vgpr12
  %28:vgpr_32 = COPY $vgpr4
  %27:vgpr_32 = COPY $vgpr3
  %25:vgpr_32 = COPY $vgpr1
  %24:vgpr_32 = COPY $vgpr0
  S_CBRANCH_SCC1 %bb.12, implicit undef $scc
  S_BRANCH %bb.1

bb.1..lr.ph181.preheader:
; predecessors: %bb.0
  successors: %bb.2(0x80000000); %bb.2(100.00%)

  %101:vgpr_32 = COPY $vgpr77
  %100:vgpr_32 = COPY $vgpr76
  %99:vgpr_32 = COPY $vgpr75
  %0:vgpr_32 = COPY %24:vgpr_32
  %1:vgpr_32 = V_ADD_U32_e64 %28:vgpr_32, %25:vgpr_32, 0, implicit $exec
  %3:vgpr_32 = nofpexcept V_RCP_F32_e64 0, %40:vgpr_32, 0, 1, implicit $mode, implicit $exec
  %143:sreg_64 = V_CMP_GE_U32_e64 %28:vgpr_32, %27:vgpr_32, implicit $exec
  %141:sreg_64 = S_MOV_B64 0
  %147:sgpr_32 = S_MOV_B32 0
  %152:vgpr_32 = nnan nsz arcp contract afn reassoc nofpexcept V_ADD_F32_e64 0, %42:vgpr_32, 0, %42:vgpr_32, 0, 0, implicit $mode, implicit $exec
  %195:sreg_64 = IMPLICIT_DEF
  %201:sreg_64 = IMPLICIT_DEF
  %208:sreg_64 = IMPLICIT_DEF

bb.2..lr.ph181:
; predecessors: %bb.1, %bb.8
  successors: %bb.3(0x40000000), %bb.4(0x40000000); %bb.3(50.00%), %bb.4(50.00%)

  %5:sreg_64 = PHI %141:sreg_64, %bb.1, %16:sreg_64, %bb.8
  %6:vgpr_32 = PHI %99:vgpr_32, %bb.1, %101:vgpr_32, %bb.8
  %144:vgpr_32 = V_MUL_LO_U32_e64 %6:vgpr_32, %1:vgpr_32, implicit $exec
  %145:vgpr_32 = V_ADD_U32_e64 killed %144:vgpr_32, %100:vgpr_32, 0, implicit $exec
  %180:vreg_64 = REG_SEQUENCE %0:vgpr_32, %subreg.sub0, killed %145:vgpr_32, %subreg.sub1
  %148:sgpr_256 = REG_SEQUENCE %147:sgpr_32, %subreg.sub0, %147:sgpr_32, %subreg.sub1, %147:sgpr_32, %subreg.sub2, %147:sgpr_32, %subreg.sub3, %147:sgpr_32, %subreg.sub4, %147:sgpr_32, %subreg.sub5, %147:sgpr_32, %subreg.sub6, %147:sgpr_32, %subreg.sub7
  %149:vgpr_32 = IMAGE_LOAD_V1_V2 %180:vreg_64, killed %148:sgpr_256, 1, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96) from custom "ImageResource", align 16)
  %153:vgpr_32 = nnan nsz arcp contract afn reassoc V_MAC_F32_e64 0, %149:vgpr_32, 0, %152:vgpr_32, 0, %44:vgpr_32(tied-def 0), 0, 0, implicit $mode, implicit $exec
  %154:vgpr_32 = nnan nsz arcp contract afn reassoc nofpexcept V_MUL_F32_e64 0, %40:vgpr_32, 0, killed %153:vgpr_32, 0, 0, implicit $mode, implicit $exec
  %155:vgpr_32 = nnan nsz arcp contract afn reassoc V_MAC_F32_e64 0, %36:vgpr_32, 0, killed %154:vgpr_32, 0, %43:vgpr_32(tied-def 0), 0, 0, implicit $mode, implicit $exec
  %157:sreg_64 = nofpexcept V_CMP_NGT_F32_e64 0, %155:vgpr_32, 0, 0, 0, implicit $mode, implicit $exec
  %158:sreg_64 = nofpexcept V_CMP_GT_F32_e64 0, %155:vgpr_32, 0, 0, 0, implicit $mode, implicit $exec
  %8:sreg_64 = SI_IF killed %158:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.3

bb.3 (%ir-block.43):
; predecessors: %bb.2
  successors: %bb.5(0x40000000), %bb.6(0x40000000); %bb.5(50.00%), %bb.6(50.00%)

  %159:sreg_64 = S_MOV_B64 -1
  S_CBRANCH_SCC1 %bb.5, implicit undef $scc
  S_BRANCH %bb.6

bb.4.Flow2:
; predecessors: %bb.2, %bb.6
  successors: %bb.11(0x40000000), %bb.8(0x40000000); %bb.11(50.00%), %bb.8(50.00%)

  %9:sreg_64 = PHI %157:sreg_64, %bb.2, %188:sreg_64, %bb.6
  SI_END_CF %8:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  %174:sreg_64 = S_MOV_B64 -1
  %10:sreg_64 = SI_IF %9:sreg_64, %bb.8, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.11

bb.5..lr.ph105:
; predecessors: %bb.3
  successors: %bb.7(0x80000000); %bb.7(100.00%)

  %160:sreg_64 = S_MOV_B64 0
  %182:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
  S_BRANCH %bb.7

bb.6.Flow3:
; predecessors: %bb.3, %bb.14
  successors: %bb.4(0x80000000); %bb.4(100.00%)

  %11:sreg_64 = PHI %159:sreg_64, %bb.3, %22:sreg_64, %bb.14
  %189:sreg_64 = S_ANDN2_B64 %157:sreg_64, $exec, implicit-def $scc
  %190:sreg_64 = S_AND_B64 %11:sreg_64, $exec, implicit-def $scc
  %188:sreg_64 = S_OR_B64 %189:sreg_64, %190:sreg_64, implicit-def $scc
  S_BRANCH %bb.4

bb.7 (%ir-block.49):
; predecessors: %bb.5, %bb.13
  successors: %bb.10(0x40000000), %bb.13(0x40000000); %bb.10(50.00%), %bb.13(50.00%)

  %210:sreg_64 = PHI %208:sreg_64, %bb.5, %22:sreg_64, %bb.13
  %205:sreg_64 = PHI %201:sreg_64, %bb.5, %19:sreg_64, %bb.13
  %199:sreg_64 = PHI %195:sreg_64, %bb.5, %18:sreg_64, %bb.13
  %12:sreg_64 = PHI %160:sreg_64, %bb.5, %21:sreg_64, %bb.13
  %13:vgpr_32 = PHI %182:vgpr_32, %bb.5, %27:vgpr_32, %bb.13
  %163:vgpr_32 = V_CVT_F32_U32_e64 %13:vgpr_32, 0, 0, implicit $mode, implicit $exec
  %165:vgpr_32 = nnan nsz arcp contract afn reassoc nofpexcept V_MUL_F32_e64 0, killed %163:vgpr_32, 0, killed %3:vgpr_32, 0, 0, implicit $mode, implicit $exec
  %166:vgpr_32 = nnan nsz arcp contract afn reassoc nofpexcept V_MUL_F32_e64 0, killed %165:vgpr_32, 0, %41:vgpr_32, 0, 0, implicit $mode, implicit $exec
  %168:sreg_64 = nofpexcept V_CMP_NLG_F32_e64 0, killed %166:vgpr_32, 0, 0, 0, implicit $mode, implicit $exec
  %196:sreg_64 = S_OR_B64 %199:sreg_64, $exec, implicit-def $scc
  %202:sreg_64 = S_OR_B64 %205:sreg_64, $exec, implicit-def $scc
  %14:sreg_64 = SI_IF killed %168:sreg_64, %bb.13, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.10

bb.8.Flow4:
; predecessors: %bb.4, %bb.11
  successors: %bb.9(0x04000000), %bb.2(0x7c000000); %bb.9(3.12%), %bb.2(96.88%)

  %15:sreg_64 = PHI %174:sreg_64, %bb.4, %193:sreg_64, %bb.11
  SI_END_CF %10:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  %16:sreg_64 = SI_IF_BREAK %15:sreg_64, %5:sreg_64, implicit-def dead $scc
  SI_LOOP %16:sreg_64, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.9

bb.9 (%ir-block.60):
; predecessors: %bb.8

  SI_END_CF %16:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_ENDPGM 0

bb.10 (%ir-block.61):
; predecessors: %bb.7
  successors: %bb.13(0x80000000); %bb.13(100.00%)

  %200:sreg_64 = S_ANDN2_B64 %196:sreg_64, $exec, implicit-def $scc
  %197:sreg_64 = COPY %200:sreg_64
  %206:sreg_64 = S_ANDN2_B64 %202:sreg_64, $exec, implicit-def $scc
  %207:sreg_64 = S_AND_B64 %143:sreg_64, $exec, implicit-def $scc
  %203:sreg_64 = S_OR_B64 %206:sreg_64, %207:sreg_64, implicit-def $scc
  S_BRANCH %bb.13

bb.11.._crit_edge144:
; predecessors: %bb.4
  successors: %bb.8(0x80000000); %bb.8(100.00%)

  %193:sreg_64 = S_XOR_B64 $exec, -1, implicit-def $scc
  S_BRANCH %bb.8

bb.12.._crit_edge182:
; predecessors: %bb.0

  S_ENDPGM 0

bb.13.Flow:
; predecessors: %bb.7, %bb.10
  successors: %bb.14(0x04000000), %bb.7(0x7c000000); %bb.14(3.12%), %bb.7(96.88%)

  %19:sreg_64 = PHI %202:sreg_64, %bb.7, %203:sreg_64, %bb.10
  %18:sreg_64 = PHI %196:sreg_64, %bb.7, %197:sreg_64, %bb.10
  SI_END_CF %14:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  %171:sreg_64 = S_XOR_B64 %18:sreg_64, -1, implicit-def dead $scc
  %21:sreg_64 = SI_IF_BREAK %19:sreg_64, %12:sreg_64, implicit-def dead $scc
  %211:sreg_64 = S_ANDN2_B64 %210:sreg_64, $exec, implicit-def $scc
  %212:sreg_64 = S_AND_B64 %171:sreg_64, $exec, implicit-def $scc
  %22:sreg_64 = S_OR_B64 %211:sreg_64, %212:sreg_64, implicit-def $scc
  SI_LOOP %21:sreg_64, %bb.7, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.14

bb.14.loop.exit.guard:
; predecessors: %bb.13
  successors: %bb.6(0x80000000); %bb.6(100.00%)

  SI_END_CF %21:sreg_64, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.6

# End machine code for function _amdgpu_cs_main.

*** Bad machine code: Virtual register killed in block, but needed live out. ***
- function:    _amdgpu_cs_main
- basic block: %bb.7  (0xa891970)
Virtual register %3 is used after the block.
LLVM ERROR: Found 1 machine code errors.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9Gttyozj2a5wXVSjEnYc8OLaTca1zmbg7O_tEYZBtpjG4uGTT-_V7hAFLQmDSnUxXOo7F0dG539AmDX_e_Dsq9qjYE-QXhR_sSYgm5m1B8gIFfk4m5nyiOfuiOOYTfTrR7uBnBzvKjRKkB_gSx2_Nx_UxS_8mQQFft1FMcvh0sGM5lgV_ZSQsAxIqxTs8d9ES7UhBMarziTqdWGr9c_qqGWhiLxq0IdmUO_iyiZJqKUDXBz8L9hN97h_CXZDA9-BYwtfd9t1VVXSdIgAMyRv8Tso4RtdvJIu2P2FbsI8SEiV5keWIJel0bn26jqbbgmRovUR3aRyipyPJ_CTMz88fTohQkIYEbdMMbcskKKI0QR4l6Vh6Qe4dfCBYn6Jlvl7Drhn6lvnBj3wVvZGE5DW2u2YjXUbLhIoZqDfedsdMRVECf5uaQXfXi7hZNJlFrVm0mEW9WbSZRaNZdFiczX6d3Y8bBDqLADcYdA6D2ay67KpVrxoqu2o3q5hddZpVjV11m1WdZbeRjMFKxm5ocFka7IYGrLJE2Ha7jFntbzaKqigkKbKfrXkilJdBACpLs1o9JoBhoNNR3w319A-s-oS-etZ5pN-y20xVoctmZxP7oD47BsOIeLtgBcSKhVU-q3NO1ZyGOcVy-uTUyGmPUxqnK05FnGY4hXBqaNg8aVOf0lVP1xC4M5o9Pf-HQchA6gOQ2GUhtSFIh4XEQ5AcneoQpMVAgj8NQGoMJPhjP6TBAtoDgDoLaA6dzQIOib2V-tqb3b5MH2d_eOvZDDPGPEPR4RhHQVSgMgnJlu7Mg-C877StNXLe2bCixJly3GMHK8eM7IkfkuycGMBtYDUkHe9Th1zz5JmOzP3oI4gEgpcx0qDxoF8cnL3SiDIAyhoChKQBSJOB7EHJaYmlQQB_9abzufdd1zxiGaJh1bGGtQy6pHJKBKLIOwlYKxbOSNLtkbwH5FjAcS-zZ--uPq72ec5B2gOweMoBkueFk3Hl6HlGdh7lpuJv9vDs3S8usWjzS4NnYOGMtffw9OrdVgyxcBRnzsihhoNvHJwphpwk8ROU5P9DULUcoWaA5OIHBfK3CdQgPthuwIuUarAjUk0i0r71jkLHiNo1BTEsH55Xy9nymzdf3LHhQhXl1QvoXARs44B2jgMjvB-fs6YzFAj0_hRt9KdovS9DG7IMzXAsSvD5j2XHwrh8X_2JLdlTNjWJWaTGywYVCVo2kMnx4k7GffUevq-81RPrXlYHDf6Ac4lZiA9QP6I4pi2HQEvLgiyQDB3nVBsYFbws7r314s_vi8fZQgiv9SF5uQF4BT4q7CxF5gAw5rh0mtAA4pKey0UP-ckXofAoKG0UlD4KyhgFZY6CskZBcfnVELPm8mEKoX_1NJ17r9h71To6FzXI6qVNQteYj5SyX6KRIRqVqrjiQIFCtvA_CYi_iQmKU5-e5uSuRVvbbZYeUFDmBXxMNG158HfkheRpmQUQgyuO_TjaJYiW1S6XODqJ9nLiAIedzjrZgpMcmy645MTlEc77nCIi4TUt5pqg-et5xRRjzEfTIY1IoyoMRvGsKH-TfDGA_bJSdOsCzUaPavQvU40tJCxO7rTQerz_1jUuU1Y__gYVYpnQoeLriRBJWC-95R2nHAaCKwjOaCulhKQKBif8fQ9pezRAj9Ay6UKppNNgA4-i7HoTp8EPhc5G3BFVkzZUKpn9pZLVXyqZfaWSdaFUwqbbW3Vf47MkJE2n-dGe0xIEaCh3cfpfbZTEGIaGZkHdgQ9TcPXPgsSRD7dpSHyi8JpKk_XoM7a2JHCkVtyyBla_eJx7szvBJb7Eyik9tjHCCKpCUOqfvCA46X29W2JxlGE2LYxqjjAtfcie7P4Bhn1xgGF1hCXvZx2xT31t-lmPVD3teFnYgiisysP0UWI4Ny7GkEiMfpEYF0Uidqytu0jNp6FJ06Rtm8EJsRvGpo_zR60St9wj5UbIR7CqIe_qEVC3iDs95Vi8TifZeU8vLVqnKxKOkgsHCIZhCIZhd3KXOy53mYwCBl0HQkX_WL47DzjHYrV3Li_OA0Tz0jrhqbYvbgJyRmgO2xc3xFV7ZgrcFKaLGksNm0ON3b4kwk6CJKilPPGotR7MljooD_mYhMMstkgNZkfoawTMtuwpj9kSUUPt-XoqPJlhCP60xsL6hcZiuC9iylVLRub5-ecxIY6mPpUJWYk_4d_U_Cb5F1uPx9V9P32yhu43BrDWUFx2Ox49Mt5rquiNLF4uwHwsj3RqN7FnsvoixT9RnalC5nGqksQYkWpYWvFQqnGrbKIakkxzegNlB5JEQ3fp1Zszs7PFtRTH6e2YeoIqW0QLrWllOLpUC-ceiy368VCm_6yqv2Pn1HBAfYvpv0RGa4LNEVSxRcjSWz09PYuHCQ3RV5ugK1igK9Y-ljqu9nF4W-AVZn2xwtb0sOf7ByQ6FFY7_OBx_NhDTlXXaNJCv3o2WOlrqrRoZupxt2MQo-txcVrWvpplD-WI6UZ0jhguNH8wqIvE8M2B0XH60YjFN658tui6E0fKx7oDLI62MFYUL8iiwiPhjpxeCV0O1wPW5PQbk3Oxa3S7ovirlUUrz2v8MaYdkWeN49kZM5dShYjQ66N6lfVG-eQ5NQzercBGf9az-7NetU2W9uxLaa-nS5H4DssHZ8cy3oROhm-ApEnDbjOqdMh2Rs0HaOOLA3RVAnSvMPzF9vQ8CRKLlSRRoSGTZmrJrEAbwa54Spd6PkyKVcn4aNbpRPkwaf_qEEUbrKm7sxmekksB41y-yFti-x-poMXZDTaUOE2PCnmPCmVX-lk4Iq4MD2us_vBsDYZnzsVEIX21ZLj3CfQ68CIJ0WHslWCF313_oFufx0GF9BplRenH0DnvopzeSK6bqyhBVcVFad6UBUoIiD6sboqitCwU1KI9nXLdEkOxwj_xlnINtfHzKKhRnzMDNXjQku-4EPnUVhUd4uhcAUU5KnOgxa9uUNN75afa8LRntXp9QIuXl6cXiv8uLUFwmBcdyTIwkRr-ebWYrhdgOpsDaMUHZndw3jHNClSkiL-WDs9yhV4YV9KMXhdHfkIlFcQlYKWEBJmf74HH4AedSZBGD83d86vwRg9d3fWviqiIyc16SS9_N3e_UeADX_mnqumqzOKbD9-tj_K8rC7Xm4am4qv9jePgrasGWxcKpsC1NdsK1a1qmsTQfWdD7KvY35A4v5mYtxNNo_yThLru9GF-__ydXkkw51fRDSRUSJqqgSG4GVjxbde0DVVzjcBRQ0ImhkrAVuJWxFfZTUUZlTs8jIH1s_yv_DyPdsBwdSrg98tin2Y3f_s_t6kfXlVM3FQc_B8gSR7A">