summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>2018-08-21 07:49:05 +0000
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>2018-08-21 07:49:05 +0000
commit880f29157770a2fe51f08887c363e789f8d47ba6 (patch)
tree7b6a588cb789735d9680b3219bcb634ac8322a61 /llvm/test
parentf1dc867396a57afb26d91d1bd8d039817c263805 (diff)
downloadbcm5719-llvm-880f29157770a2fe51f08887c363e789f8d47ba6.tar.gz
bcm5719-llvm-880f29157770a2fe51f08887c363e789f8d47ba6.zip
[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
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/X86/coalesce-dead-lanes.mir19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/coalesce-dead-lanes.mir b/llvm/test/CodeGen/X86/coalesce-dead-lanes.mir
new file mode 100644
index 00000000000..a1bd9df9e67
--- /dev/null
+++ b/llvm/test/CodeGen/X86/coalesce-dead-lanes.mir
@@ -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
OpenPOWER on IntegriCloud