1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00
llvm-mirror/test/CodeGen/X86/coalesce-dead-lanes.mir
Bjorn Pettersson adaa1f3e2c [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
2018-08-21 07:49:05 +00:00

20 lines
631 B
YAML

# 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