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