<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">