Correctly deal with identity copies in RegisterCoalescer.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 23 May 2012 20:21:06 +0000 (20:21 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 23 May 2012 20:21:06 +0000 (20:21 +0000)
commite3b548219ff47b1384aa7325ebbe21c795c19974
treebe2ad173cce5c9060b331bcfdcea6e315780bad8
parent4c8657a9578e171f198adda8d5910b78dbb7bdc6
Correctly deal with identity copies in RegisterCoalescer.

Now that the coalescer keeps live intervals and machine code in sync at
all times, it needs to deal with identity copies differently.

When merging two virtual registers, all identity copies are removed
right away. This means that other identity copies must come from
somewhere else, and they are going to have a value number.

Deal with such copies by merging the value numbers before erasing the
copy instruction. Otherwise, we leave dangling value numbers in the live
interval.

This fixes PR12927.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157340 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/RegisterCoalescer.cpp
test/CodeGen/X86/coalescer-identity.ll [new file with mode: 0644]