forked from OSchip/llvm-project
[RegisterCoalescer] Do not assert when trying to remat dead values
Summary: RegisterCoalescer::reMaterializeTrivialDef used to assert that the input register was live in. But as shown by the new coalesce-dead-lanes.mir test case that seems to be a valid scenario. We now return false instead of the assert, simply avoiding to remat the dead def. Normally a COPY of an undef value is eliminated by eliminateUndefCopy(). Although we only do that when the destination isn't a physical register. So the situation above should be limited to the case when we copy an undef value to a physical register. Reviewers: kparzysz, wmi, tpr Reviewed By: kparzysz Subscribers: MatzeB, qcolombet, tpr, llvm-commits Differential Revision: https://reviews.llvm.org/D50842 llvm-svn: 340255
This commit is contained in:
parent
f1dc867396
commit
880f291577
|
@ -1159,7 +1159,8 @@ bool RegisterCoalescer::reMaterializeTrivialDef(const CoalescerPair &CP,
|
|||
LiveInterval &SrcInt = LIS->getInterval(SrcReg);
|
||||
SlotIndex CopyIdx = LIS->getInstructionIndex(*CopyMI);
|
||||
VNInfo *ValNo = SrcInt.Query(CopyIdx).valueIn();
|
||||
assert(ValNo && "CopyMI input register not live");
|
||||
if (!ValNo)
|
||||
return false;
|
||||
if (ValNo->isPHIDef() || ValNo->isUnused())
|
||||
return false;
|
||||
MachineInstr *DefMI = LIS->getInstructionFromIndex(ValNo->def);
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# RUN: llc -run-pass simple-register-coalescing -O0 -mtriple x86_64-pc-linux-gnu -o - %s | FileCheck %s
|
||||
|
||||
---
|
||||
name: foo
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.0:
|
||||
undef %18.sub_8bit_hi:gr16_abcd = COPY undef $al
|
||||
%1:gr16_abcd = COPY killed %18
|
||||
dead %8:gr8 = COPY undef %1.sub_8bit_hi
|
||||
$al = COPY undef %8
|
||||
...
|
||||
|
||||
# This used to hit an assertion:
|
||||
# lib/CodeGen/RegisterCoalescer.cpp:1110: RegisterCoalescer::reMaterializeTrivialDef(...): Assertion `ValNo && "CopyMI input register not live"' failed.
|
||||
#
|
||||
# CHECK_LABEL: name: foo
|
||||
# CHECK: bb.0:
|
||||
# CHECK-NEXT: $al = COPY undef %2:gr8
|
Loading…
Reference in New Issue