Fix bug in PEI's virtual-register scavenging
authorHal Finkel <hfinkel@anl.gov>
Fri, 5 Apr 2013 05:01:13 +0000 (05:01 +0000)
committerHal Finkel <hfinkel@anl.gov>
Fri, 5 Apr 2013 05:01:13 +0000 (05:01 +0000)
commitafe2f43e4ea0a514413bc742fc03ef5c675ae86a
tree07c9b2a02903c4c0ebe76969ede44868ef9ebec4
parentfc61e635fd09e0cb852313f5533fb7fe694158fb
Fix bug in PEI's virtual-register scavenging

This change fixes a bug that I introduced in r178058. After a register is
scavenged using one of the available spills slots the instruction defining the
virtual register needs to be moved to after the spill code. The scavenger has
already processed the defining instruction so that registers killed by that
instruction are available for definition in that same instruction. Unfortunately,
after this, the scavenger needs to iterate through the spill code and then
visit, again, the instruction that defines the now-scavenged register. In order
to avoid confusion, the register scavenger needs the ability to 'back up'
through the spill code so that it can again process the instructions in the
appropriate order. Prior to this fix, once the scavenger reached the
just-moved instruction, it would assert if it killed any registers because,
having already processed the instruction, it believed they were undefined.

Unfortunately, I don't yet have a small test case. Thanks to Pranav Bhandarkar
for diagnosing the problem and testing this fix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178845 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/RegisterScavenging.h
lib/CodeGen/PrologEpilogInserter.cpp
lib/CodeGen/RegisterScavenging.cpp