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

    <tr>
        <th>Summary</th>
        <td>
            ppc-reduce-cr-ops mishandles subregister uses and emits verifier error
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:PowerPC,
            crash-on-valid
      </td>
    </tr>

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

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

<pre>
    ```
# RUN: llc -mtriple=powerpc64-unknown-linux-gnu -run-pass=ppc-reduce-cr-ops -verify-machineinstrs -o - %s

---
name: subreg_folding_regression
tracksRegLiveness: true
isSSA: true
body:             |
  bb.0:
    liveins: $x3

 %0:g8rc_and_g8rc_nox0 = COPY $x3
    %1:g8rc = LD 0, %0 :: (load (s64))

 bb.1:
    %2:g8rc_and_g8rc_nox0 = PHI %1, %bb.0, %3, %bb.1, %4, %bb.2
 %5:gprc = LBZ 0, %2 :: (load (s8))
    %6:crrc = CMPWI killed %5, 0
 %3:g8rc = nuw ADDI8 %2, 1
    STD %3, 0, %0 :: (store (s64))
    %7:gprc = LBZ 1, %2 :: (load (s8))
    %8:crrc = CMPWI killed %7, 0
    %9:crbitrc = CRORC %8.sub_eq, %6.sub_eq
    BC killed %9, %bb.1
    B %bb.2

  bb.2:
 %4:g8rc = nuw ADDI8 %2, 2
    STD %4, 0, %0 :: (store (s64))
    B %bb.1

...
```

Produces:
```
# After PowerPC Reduce CR logical Operation
# Machine code for function subreg_folding_regression: IsSSA, TracksLiveness

bb.0:
  successors: %bb.1(0x80000000); %bb.1(100.00%)
 liveins: $x3
  %0:g8rc_and_g8rc_nox0 = COPY $x3
  %1:g8rc = LD 0, %0:g8rc_and_g8rc_nox0 :: (load (s64))

bb.1:
; predecessors: %bb.0, %bb.2, %bb.3, %bb.1
  successors: %bb.1(0x20000000), %bb.3(0x60000000); %bb.1(25.00%), %bb.3(75.00%)

  %2:g8rc_and_g8rc_nox0 = PHI %1:g8rc, %bb.0, %3:g8rc, %bb.1, %4:g8rc, %bb.2, %3:g8rc, %bb.3
  %5:gprc = LBZ 0, %2:g8rc_and_g8rc_nox0 :: (load (s8))
  %6:crrc = CMPWI killed %5:gprc, 0
 %3:g8rc = nuw ADDI8 %2:g8rc_and_g8rc_nox0, 1
  STD %3:g8rc, 0, %0:g8rc_and_g8rc_nox0 :: (store (s64))
  %7:gprc = LBZ 1, %2:g8rc_and_g8rc_nox0 :: (load (s8))
  BCn %6:crrc, %bb.1
  B %bb.3

bb.3:
; predecessors: %bb.1
  successors: %bb.1(0x2aaaaaab), %bb.2(0x55555555); %bb.1(33.33%), %bb.2(66.67%)

  %8:crrc = CMPWI killed %7:gprc, 0
  BC killed %8:crrc, %bb.1
  B %bb.2

bb.2:
; predecessors: %bb.3
  successors: %bb.1(0x80000000); %bb.1(100.00%)

  %4:g8rc = nuw ADDI8 %2:g8rc_and_g8rc_nox0, 2
  STD %4:g8rc, 0, %0:g8rc_and_g8rc_nox0 :: (store (s64))
  B %bb.1

# End machine code for function subreg_folding_regression.

*** Bad machine code: Illegal virtual register for instruction ***
- function:    subreg_folding_regression
- basic block: %bb.1  (0x15a058748)
- instruction: BCn %6:crrc, %bb.1
- operand 0: %6:crrc
Expected a CRBITRC register, but got a CRRC register

*** Bad machine code: Illegal virtual register for instruction ***
- function: subreg_folding_regression
- basic block: %bb.3  (0x15a05f290)
- instruction: BC killed %8:crrc, %bb.1
- operand 0:   killed %8:crrc
Expected a CRBITRC register, but got a CRRC register
LLVM ERROR: Found 2 machine code errors.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
```


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8V1uPqzYQ_jXOywhkzCXkIQ8k2VVX2tONsqet2peVAYe462BqQ07Ov69sCGGzueyeHhVFCuDxXL6Z-cZQrXlRMjZF4QyFixFt6o1UU6o0K7ejVObfpyjC3Q8niPiw-u1X5CcgRAbOtla8Egz5i0p-Y6rKosBpytdSfisdwctm7xRlA45qSqeiWhu5KnMUy5uMOZlyZKXB2THF19-dLc02vGS81LXS4EhwAJFQG6s4cRwH4aSkW2Zs6yZVrHhZS5HzsnhRrFBMay5LhJNa0exVr1jxyHesZMZoArVqGMIJ18_PyeDZxGcehxcazxFOANLUxchP7D2A4DvjmRFGJNj7rVfGQSNUxCp7oWX-Ym9KuceA_AXMn5Z_9uJWNwm9TtwKPC4AIzK3asAYs-pjIWlu_nUUIDIxv9Zamrre0SVEQnLZ9vKXh9Zcq95G0976x1eH1eD4inRhhUZ1dfBz9lfvKDnnaNz72XkWIT_JVLd9_mX5xwO8ciFY3uomc8CdIX8ISNl8g2SxeIjb6MgcvE7n89dF7_w5zHQtFTsFrXNmfBqL96lY4muxjPtYWuGJFU55fZBfPa2srdjVTfrC_ulMR4fHdudsPtA5GWaoWx-k51CepKsFm8CrIJK3IAafBnE2cAfhxHVdczMkBpwslTRtrVuvTlkjWddMwdKwxHIOK8sAMF-BkAXPqICniilaty1s5L-0bACZzBmspYJ1U2Zm_Urz-wk82A4nc_hqaaDnAOvhsKV1k2VMa6m6nu7aIcb7GLeXid6fDZY8jF3zOuxwOcMJ8DlGuMYHl5TcIIkjRxjnK8Vy9i5OPGz3_tY_rbrLEJEBRMP9Md5Hl9Aj4RG8N3vG4RDVAy4fobZW4hzDna4cie50hVzc06foMhV-OEdDTrnNjq25j5LkOR-OzNnz5jG8D5fYBTq4yqg_BMlsXg5hOS3E2SAjbYn7t0r8ZgVTe6VvqpHYpbC73lWw77u-f1rBZk8UudH4XQXfGBsnSX47AeIbSJAeCXILCf8n0d0hrGuj5lIpkmEpBj-xFE_mkhkcd2UO288PD_egofvBjL7VY6eLEKygAnZc1Q0VoFjBtZlrxoY9uDatmV6NObr21ruj5rXTqwMp1TyDVMjsdZAqA32M915IcRiPg7gFwBkaNdJXG8kBaYZsmQPuNPdyOLnbVyyrWQ4U5qvZw9fVvI_OaEmbGgpZ29Xh0v8D2g8g5g8RW5MJvojYzbY7wQ3ObfgPAD4-_v4F7larp5XRfi-bMgfytoSZUlJpU6LLx7vk-c4AsuVGWdoUoFglVQ21hE1dV_b8Re4RuS94vWlSN5NbRO6F2B3-nErJv1lWI3LPtW6YRuQeTHi8zESTM6g3DDJF9QZSmr2aDypmbD_XNHuFvNlWZ454OBnlUz-f-BM6YlNvHMR-FAdxNNpM2TpK08kkDWlM42gS4wmL1tiLQhyvwygYj_iUYBLikIy9cRgEkRt6YRTEvk8z6nlknaIAsy3lwjXuu1IVI-v41Au8KPBHgqZMaPsJS4hxmZU58pPusImImfGIEBuSI0tnRwXPzetwMVJTC0naFBoFWHBd66OVmteCTd9_sm653tAyF0x3pdkWdKOZtkCyLa812O9azlSbvlGjxPTHE9SFupuSfwMAAP__D5VatA">