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

    <tr>
        <th>Summary</th>
        <td>
            SIOptimizeExecMaskingPreRA does not preserve LiveIntervals
        </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>
    See https://reviews.llvm.org/D127731 WIP: [MachineVerifier] Try harder to verify analyses

If I apply just the MachineVerifier part of this patch then I get see a couple of AMDGPU CodeGen tests failing with `Bad machine code: Multiple connected components in live interval`:
```
FAIL: LLVM :: CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir (1460 of 2843)
******************** TEST 'LLVM :: CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir' FAILED ********************
Script:
--
: 'RUN: at line 1';   /home/jayfoad2/llvm-release/bin/llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir | /home/jayfoad2/llvm-release/bin/FileCheck -check-prefix=GCN /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir
: 'RUN: at line 2';   /home/jayfoad2/llvm-release/bin/llc -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir | /home/jayfoad2/llvm-release/bin/FileCheck -check-prefix=GCN /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir
--
Exit Code: 2

Command Output (stderr):
--
+ : 'RUN: at line 1'
+ /home/jayfoad2/llvm-release/bin/llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir
+ /home/jayfoad2/llvm-release/bin/FileCheck -check-prefix=GCN /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir

# After SI optimize exec mask operations pre-RA
********** INTERVALS **********
VCC_LO_LO16 [80r,96r:0) 0@80r
VCC_LO_HI16 [80r,96r:0) 0@80r
%0 [16r,32r:0) 0@16r  weight:0.000000e+00
%1 [32r,48r:0) 0@32r  weight:0.000000e+00
%2 [48r,48d:1)[64r,80r:0) 0@64r 1@48r  weight:0.000000e+00
RegMasks:
********** MACHINEINSTRS **********
# Machine code for function negated_cond_vop3_redef_cmp: NoPHIs

0B      bb.0:
        ; predecessors: %bb.1
          successors: %bb.2(0x40000000), %bb.1(0x40000000); %bb.2(50.00%), %bb.1(50.00%)

16B       %0:sgpr_32 = IMPLICIT_DEF
32B       %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0:sgpr_32, implicit $exec
48B       dead %2:sgpr_32 = V_CMP_NE_U32_e64 %1:vgpr_32, 1, implicit $exec
64B       %2:sgpr_32 = COPY $sgpr0
80B       $vcc_lo = S_AND_B32 %2:sgpr_32, $exec_lo, implicit-def dead $scc
96B       S_CBRANCH_VCCNZ %bb.2, implicit $vcc
112B      S_BRANCH %bb.1

128B    bb.1:
        ; predecessors: %bb.0
          successors: %bb.0(0x80000000); %bb.0(100.00%)

144B      S_BRANCH %bb.0

160B    bb.2:
        ; predecessors: %bb.0

176B      S_ENDPGM 0

# End machine code for function negated_cond_vop3_redef_cmp.

*** Bad machine code: Multiple connected components in live interval ***
- function:    negated_cond_vop3_redef_cmp
- interval:    %2 [48r,48d:1)[64r,80r:0) 0@64r 1@48r  weight:0.000000e+00
0: valnos 0
1: valnos 1
LLVM ERROR: Found 1 machine code errors.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/jayfoad2/llvm-release/bin/llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir
1.      Running pass 'Function Pass Manager' on module '/home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir'.
2.      Running pass 'Verify generated machine code' on function '@negated_cond_vop3_redef_cmp'
 #0 0x0000000005682ed3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/jayfoad2/llvm-release/bin/llc+0x5682ed3)
 #1 0x0000000005680bfe llvm::sys::RunSignalHandlers() (/home/jayfoad2/llvm-release/bin/llc+0x5680bfe)
 #2 0x000000000568325f SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fdcc0a92420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007fdcc052500b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007fdcc0504859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00000000055e9b63 llvm::report_fatal_error(llvm::Twine const&, bool) (/home/jayfoad2/llvm-release/bin/llc+0x55e9b63)
 #7 0x0000000004a1fdef (/home/jayfoad2/llvm-release/bin/llc+0x4a1fdef)
 #8 0x0000000004959c5e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4959c5e)
 #9 0x0000000004dd5b38 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd5b38)
#10 0x0000000004ddc378 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4ddc378)
#11 0x0000000004dd61e7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd61e7)
#12 0x000000000311d3de main (/home/jayfoad2/llvm-release/bin/llc+0x311d3de)
#13 0x00007fdcc0506083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#14 0x000000000311a96e _start (/home/jayfoad2/llvm-release/bin/llc+0x311a96e)
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/jayfoad2/llvm-release/bin/FileCheck -check-prefix=GCN /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking-wave32.mir

--

********************
FAIL: LLVM :: CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir (2162 of 2843)
******************** TEST 'LLVM :: CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir' FAILED ********************
Script:
--
: 'RUN: at line 1';   /home/jayfoad2/llvm-release/bin/llc -march=amdgcn -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir | /home/jayfoad2/llvm-release/bin/FileCheck -check-prefix=GCN /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir
--
Exit Code: 2

Command Output (stderr):
--
+ : 'RUN: at line 1'
+ /home/jayfoad2/llvm-release/bin/FileCheck -check-prefix=GCN /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir
+ /home/jayfoad2/llvm-release/bin/llc -march=amdgcn -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir

# After SI optimize exec mask operations pre-RA
********** INTERVALS **********
VCC_LO_LO16 [80r,96r:0) 0@80r
VCC_LO_HI16 [80r,96r:0) 0@80r
VCC_HI_LO16 [80r,96r:0) 0@80r
VCC_HI_HI16 [80r,96r:0) 0@80r
%0 [16r,32r:0) 0@16r  weight:0.000000e+00
%1 [32r,32d:1)[48r,64r:0) 0@48r 1@32r  weight:0.000000e+00
%2 [64r,80r:0) 0@64r  weight:0.000000e+00
RegMasks:
********** MACHINEINSTRS **********
# Machine code for function negated_cond_vop3_redef_sel: NoPHIs

0B      bb.0:
        ; predecessors: %bb.1
          successors: %bb.2(0x40000000), %bb.1(0x40000000); %bb.2(50.00%), %bb.1(50.00%)

16B       %0:sreg_64_xexec = IMPLICIT_DEF
32B       dead %1:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %0:sreg_64_xexec, implicit $exec
48B       %1:vgpr_32 = COPY $vgpr0
64B       %2:sreg_64_xexec = V_CMP_NE_U32_e64 %1:vgpr_32, 1, implicit $exec
80B       $vcc = S_AND_B64 %2:sreg_64_xexec, $exec, implicit-def dead $scc
96B       S_CBRANCH_VCCNZ %bb.2, implicit $vcc
112B      S_BRANCH %bb.1

128B    bb.1:
        ; predecessors: %bb.0
          successors: %bb.0(0x80000000); %bb.0(100.00%)

144B      S_BRANCH %bb.0

160B    bb.2:
        ; predecessors: %bb.0

176B      S_ENDPGM 0

# End machine code for function negated_cond_vop3_redef_sel.

*** Bad machine code: Multiple connected components in live interval ***
- function:    negated_cond_vop3_redef_sel
- interval:    %1 [32r,32d:1)[48r,64r:0) 0@48r 1@32r  weight:0.000000e+00
0: valnos 0
1: valnos 1
LLVM ERROR: Found 1 machine code errors.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/jayfoad2/llvm-release/bin/llc -march=amdgcn -verify-machineinstrs -run-pass=si-optimize-exec-masking-pre-ra -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir
1.      Running pass 'Function Pass Manager' on module '/home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir'.
2.      Running pass 'Verify generated machine code' on function '@negated_cond_vop3_redef_sel'
 #0 0x0000000005682ed3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/jayfoad2/llvm-release/bin/llc+0x5682ed3)
 #1 0x0000000005680bfe llvm::sys::RunSignalHandlers() (/home/jayfoad2/llvm-release/bin/llc+0x5680bfe)
 #2 0x000000000568325f SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f34f324d420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f34f2ce000b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f34f2cbf859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00000000055e9b63 llvm::report_fatal_error(llvm::Twine const&, bool) (/home/jayfoad2/llvm-release/bin/llc+0x55e9b63)
 #7 0x0000000004a1fdef (/home/jayfoad2/llvm-release/bin/llc+0x4a1fdef)
 #8 0x0000000004959c5e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4959c5e)
 #9 0x0000000004dd5b38 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd5b38)
#10 0x0000000004ddc378 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4ddc378)
#11 0x0000000004dd61e7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd61e7)
#12 0x000000000311d3de main (/home/jayfoad2/llvm-release/bin/llc+0x311d3de)
#13 0x00007f34f2cc1083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#14 0x000000000311a96e _start (/home/jayfoad2/llvm-release/bin/llc+0x311a96e)
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/jayfoad2/llvm-release/bin/FileCheck -check-prefix=GCN /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/AMDGPU/optimize-negated-cond-exec-masking.mir

--

********************
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztW1tz4joS_jXkRWVKli_AQx64ZUJtIBRksrX74pJtAZ5jbJdlk2R-_XbLNtgkJ5PLzJlklhQDttTq_rrVarXUNW7sP5wvhSCbLEtky-i32AV8UrELxJ1sh-Fu247TNTSNdNbpGDr592QOZKRlDabc2wSRuBVpsApE2rJG5CZ9IBue-iIlWUx22PNAeMTDBylki45atF98T1ZkQniShA_kWy4zkm0EOeJHEp5mJF5BXyDhJfM2SBbBwLXIiATQnHhxnoQCqfrT0Zf5VzKMffEFiDIhM0lWPAiDaE3ugmxDWjYdcJ9sCzEw1BeoyTQPswCZeHEUCS8TPjxtkzgSEXAIIhIGOwG_mUh3PAQmaKVCFXguPur1oj-5QoZXV7dTgkTwXMIB-xX44CFOsmAbfBdaJNYcpGkg19fEvfC0LZd_AVztju-EwdrbICUt1tVNm6KGrGsaLdYrZbO3f8jNeHkDnDs_EymwI2iB8Yi8B1uh3dJLgyTbG1rTSqXR8Vhn8XWGTzyDqYGJ1KGpZQwIgb6LTbwV8PONP6xi7jN4RB_WUhEKLrHHDSLV6BFQIvU2LWPEt_7ai-DdS3J4Xa_udapTohX-q5UOE0QySyXR0jzSEi5hsYxkoO1t1DBLkgot5USLifY0qHWQVdCSNP4Gble-wg-6Lvy833U6w1dY5CIIxXAjvL-I5uEP6rAK7kHLL8PZb1PiuXlnv2DedXqa948z79W6H98HmQpQOP2svo8M4-2WRz65zrMkzzBaygx2nxTj5KPowQbkmQhyoDlFkUcL8FVm-cguVeljkP4KdnSynJCKC8GBBAdCk0h5FsQRJB4wCYv-SzZdMpndjBe3_avlj3ZAxex2OHSuruGj25hNdSk47bBnp-CYFNyX0JZJsbFOfDl5CXGLWRSpdBupDNaggkZC7kSw3uD-SttU_cF0DCjdD9dxOA5kQ7PbGA6NPx7OcDgOxOE-0Om4Hq2BbWIT4qxxhEZYgCYF-h9wXoj1FGZHHhKw5-dj2h9eTmbjyWx5s3jZnKBfTGv5IVnFKVnlkYe-QEovc9DLnF2cGE4qfLFyvG2C0WQWzy8njSyXDlq057rtWspIe7hlJTjQE1LGqSxCkgVk-p6GEJl7j_phoXTpvVkYBu0HxtwPPe4yBrVRFpoTXh-NqXfUgOv2QKFATwL5cp2kjgGzaozIZDq_mgwnN85ofFEQG2xPrAPxrkZ86wxno2l_-S8HvMkRtgkzDvIPX3oJpyYFW4JtEgZegAHdxFVZCDK7hSBfQBqPbnYEDaRN585s7HwthTUR7eU9zd0292ocMx5ez_-DxNhW-mKXVtTmzvOcMFaES6c_G6GuR1wKLZUwIK1j0MCBKoVM6ZVYeqX9l85wsOjPhpcOBIDZfw8z2lRiV43TdVYNLMYde5YiYt3SL_WX-SX9gV9S5Xzdp5wPuyCnetrJTPNJsLTpidUiYq8Eq0Z39oYcz0bzL1PS6MblPo6aR8IXL_l2k1MVdN5_xCRHQUnbw0Fe8PdcHCpH7I-rxYhfF5Nx4RIQFMWysq1eayodTx00x4vF9QL7LuIcjK43zQ5JG8xjadT51bi_HIOzuVvwcE7cfE1SkcRphvcKzbsK6GtcVBDMB4PIC3PgivcKXsrlhrjc-ytLuSdKEcsMGoifq9hd6gJdvXkar1O-JTxd51ucn8K1TinhUSKlo7EWeRTh_QrCxrz6olo3c2yY8oivhboZgKZt7OewBDDV_l3AWaecfPYU-NviumotIkz-xNEyLpTYBwZUw6TPrcTqSAGkBiX0nlZ_lt1lwjeIUk5dvsgHWTzMU1i4yjNv0FUheB6IUn7nxOApgoNJbLUFRBkuWKB6lX_i6r0vQexDMqLUj1BSdyWeQgmGWwbriIeXsNRCAdEXEbwdCMppAGFHQAxmrUhDJIgqtS-aZdtLEhXB8N-ekVEy6qx8z6O8x0xGiQOTJLM4FU6alZjDwIXv-67t2KYGR8L8XltHedGRZBuwud-WMe5mgBj2LUYbeM2GGAvSGeqSlAcS3R0CVBD66OHAzNOW3yffO4P9K2sbEIgvpNICHtptfHuQvoAQx2A9wblJNewUGkAGv4p12wNdVX6jH5BYTSQQwK0e4W6sNH0ZkswvrKFGKSFdFFLzZrsxPZbouXbdm4tA7ax4xkNHhfWGH9_cFWsqwjWt_NiN4_Dt_lPIb8xHpw7Q5PoKk6w3cS8HN7h3G9x7Vs-z6sukPD9UoXCuIrqySx5dR1VzwySHRvvNdiiBNJD2Gkh933IBfE3sHMFVUfqfwFhAqF1iGzo9wugZnZdgnKrdpIGwanoXPhTfwKcf4bN10anhC2EH8B7K6H1AOoHsfI_256NEEA2UjYgJoH0Dkp8tD6K3iSg5NEQYR6HFpl0DYinGDkdmHFZ8Ke9FYcaTeRXtikfVqfiomGOYmO8bB_HmkYa8ZwtSCH6zjshjr-Ph1qqIWcVNYcsYQkSEgcYYU4BAErFNsof28RivvIjE-0SVdP9J12X7G9R3l55-cqWsKpEx3WYftET2h9TGPuGR5XMXQz5PFeRDGu0nFHI-qcv__9Q5kPhy8grOQPwbKigGq123FTdweOlW44jXbPqriit_e2v3OSsoUoR_eAUlFWvHNp17tfaer6NU5Y33FVPqAn9cUnlCXFX02B2KHsclkkdKva8C06yp1AsqBadHMmtllVNN5dPXVCAIfLyaCkamv62p_KIgf6qp_OnZ2WcpnvyzVRNca6eqyUeqmhjmymCm_6urJiCGeYJ-gKqJQuKuTlWTU9XkVDU5VU1-ZtVEhRZPP1VN_riqya8ul-z_n9GZf274PaPHz7IgC8X5cnJdghsDnGmBZp6KRZ_4sZAkijM80Uk4tghyBeehSXmEkWd5Gp43c36wziZ32zAlB6sc2SqQMhe4wVo2tfSzzXmn4_ZoR--6kBR51GbMdLtds9v1uejYVs8_C7krQnkOZ6IWY3hcEBGekyrjspY1OgvOGWWM2rqlM9Y17bapdwzXsyzb6HDBTA4po4BVEu5PJGfpuUKGxxToDAOZHY4rZxBPIC8QQkkF_jzPNnF6XjrCmVLiXGnwPxz9JyI">