Preserve 2-addr constraints in ConnectedVNInfoEqClasses.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 25 Jul 2012 17:15:15 +0000 (17:15 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 25 Jul 2012 17:15:15 +0000 (17:15 +0000)
commit84315f03cb6127ac92a5b02239c6edc2a347069a
tree301ffcca64721f24755950b2d5f6295e542c88f3
parent242204784bae63da503c2f509a38c532085f0eb1
Preserve 2-addr constraints in ConnectedVNInfoEqClasses.

When a live range splits into multiple connected components, we would
arbitrarily assign <undef> uses to component 0. This is wrong when the
use is tied to a def that gets assigned to a different component:

  %vreg69<def> = ADD8ri %vreg68<undef>, 1

The use and def must get the same virtual register.

Fix this by assigning <undef> uses to the same component as the value
defined by the instruction, if any:

  %vreg69<def> = ADD8ri %vreg69<undef>, 1

This fixes PR13402. The PR has a test case which I am not including
because it is unlikely to keep exposing this behavior in the future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160739 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/LiveInterval.cpp