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

    <tr>
        <th>Summary</th>
        <td>
            [Control Flow Optimizer] Bad machine code: Using an undefined physical register
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:codegen
      </td>
    </tr>

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

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

<pre>
    At first glance, I see:

```
bb.1 (%ir-block.1):
; predecessors: %bb.0
 successors: %bb.3(0x80000000); %bb.3(100.00%)

  ...
  renamable $r0l = LOCHIMux killed renamable $r0l(tied-def 0), 1, 14, 4, implicit killed $cc
 renamable $r2d = LARL @d
  STCMux renamable $r0l, killed renamable $r2d, 0, $noreg :: (store (s8) into @d, align 2)
  STMux killed renamable $r0l, killed renamable $r1d, 0, $noreg :: (volatile store (s32) into %ir.2)
  J %bb.3

bb.2 (%ir-block.7):
; predecessors: %bb.0
  successors: %bb.3(0x80000000); %bb.3(100.00%)

 renamable $r0l = LHIMux 0
  renamable $r0l = LOCHIMux killed renamable $r0l(tied-def 0), 1, 14, 4, implicit killed $cc
  renamable $r2d = LARL @b
  STCMux killed renamable $r0l, killed renamable $r2d, 0, $noreg :: (store (s8) into @b, align 2)
  STMux undef renamable $r0l, killed renamable $r1d, 0, $noreg :: (volatile store (s32) into %ir.8)
```
=>

```
# *** IR Dump After Control Flow Optimizer (branch-folder) ***:
...
bb.3 (%ir-block.12):
; predecessors: %bb.2, %bb.1
  liveins: $r0l, $r1d, $r2d
  STCMux killed renamable $r0l, killed renamable $r2d, 0, $noreg :: (store (s8) into @b, align 2), (store (s8) into @d, align 2)
  STMux renamable $r0l, killed renamable $r1d, 0, $noreg :: (volatile store (s32) into %ir.8), (volatile store (s32) into %ir.2)
 Return
```
```
*** Bad machine code: Using an undefined physical register ***
- function:    n
- basic block: %bb.3  (0x2aa047384c8)
- instruction: STMux renamable $r0l, killed renamable $r1d, 0, $noreg :: (volatile store (s32) into %ir.8), (volatile store (s32) into %ir.2)
- operand 0: renamable $r0l
LLVM ERROR: Found 1 machine code errors.
```

Somehow the kill and undef flags have been combined into an illegal sequence where $r0l is used after a kill. @arsenm Once again, the maintaining of kill flags are coming back...

@dominik-steenken This is the reduced test case, so not sure if the storing of undef is a bug, but probably not. Attaching also the original .i file and the reduced .i file.

```
clang -O3 -march=z15 crash10.orig.i -o a.out -w -mllvm -enable-unswitch-cost-multiplier=false -mllvm -sink-common-insts -mllvm -aggressive-machine-cse -mllvm -verify-misched

llc -mcpu=z15 -O3 -verify-machineinstrs tc_crash10_aftercreduce.ll
```

[crash10.tar.gz](https://github.com/user-attachments/files/19955295/crash10.tar.gz)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUV0Fv2zgT_TX0ZSCBoiRbPvjg2DW-FinyIe3utaCokcQNRXpJymn66xekHMeN26ApFi02ICiDHM6befM4irhzstOIK1JekXI746PvjV29M_r_zhmdzWrTPKzWHlppnYdOcS2QsA28BYdI8jWhcczpcdB1XacZEFYRVkqb1MqIuzQjbHk0zq9gb7FBgc4Z60i-BsLKuk7DWXCjuNjICavo54pOf9HT1dlWRmkalsuwE6MBSNM0Pi1qPvBaIRBWWKqA5Fu4vtn87-378TPcSaWwuTAirPISm6TBFiIc20AWpyLMcZLDXkkh_aMPwgohAuTXzlgzIa5vr4EUtIlBffi4CeiXsJtvR8SasEXDRFihjcUOApmRoMp5YzH-qAhbgtTeTFBsA1zJTgObiAnAL2b9HfjsRfiDUdxLhfAUR86eAgkaSE8BvDuVLdaprlP2XCmLH1XKvySVbytk0gf9TRp6WUT1uYheW8yf0lL9XS2NOiT4C6VUHSt31m9IviX5m8s-RFgOhK2nAW9vYTsOe1i3Hi1sjPbWKNgpcw83ey8H-QVtgKwt16JPWqMatAH85GJS5dRZgp4uehz7AemyKffwM4s8KnlAqY8Wj-Q9cXWs2e-ueDz8-lbzq4UxhfmalnSLfrT6uXK-UtGjgq54AwMXvdQIwjTh5Qd_OKk74Hq6CFJjA_v-wUnBFVjspPNRVY9e6DqBdtTCS6PDcQDQcbHmTgqIOjprZgCxnTHOabHIq0Ic1Z-A1M7b8eTnP8J2AmaPlusGaMC6iJeur6__fA9vbm9vboPBzoy6gewr1gGtNdalz8tE1x_MgL25B99jTBsC0NSgWsU7Bz0_INSIGoQZ6lisGCPXEFjquAKHf4-oBcJ9j_bU8KWD0WEDPPYOHr2nQfncOtQD3IQTvONSB04C_sCl9lzqoA7TTuFMQXAb8hjCRs3F3dROwihoE5blXeI8or5DDR976QJ48GixGQU24NF5ENzFf8KcAW08uNEiyDbahSocUafcpQMO9dgF-3r0sLem5rV6CCdTWHsfye2AK2eiB2NlJzVXkEpoQ2EDj-chHNfTy5YrFNcdJDc5JAO3oif59ktWgrDc9RlNg-dUQmKAp2b0kNxDMih1GCBBHYSQjNrdSy_6RBjnk2FUXu6VREvybcuVw5O9k_ouEWYYjE7CZXCnHd51Fp2TB0yOuknE2cEDWtk-JIN0osdmSkEpAckg9uMx3pjAo-HkI144B158OibzKYpBTJykSl3qkZRXj4l7btPuCym3hFW99_vQ7gnbEbbrpO_HOhVmIGw3OrQJjxUZUHtH2C4QHZ7ZclmWbFkStnvmlC1nzSpvlvmSz3CVLYpymRXlvJj1q4zRMq8YZ0XRLLKsZTllXDC2pDWv5nk5kytGWUkLtqRVNqdFWizmZT1vs2KetfM8o6SgOHCp0kBeamw3k86NuMryxWJezRSvUbn47cBYMCH5OlzSDjVhLHxP2FVYTuqxc6SgSjrvnnx56VX88vj265iU259uurPRqtULVMdgp0eyt-YvFJ6wXUwu0j3ld1ixfwIAAP__qeftPw">