Fix eager reloads of dead registers
commit89cb1879cf4ebd66a9f71d263445eee6ac31ace2
authormwilliams <mwilliams@fb.com>
Tue, 19 May 2015 21:34:40 +0000 (19 14:34 -0700)
committerhhvm-bot <hhvm-bot@fb.com>
Wed, 27 May 2015 17:00:33 +0000 (27 10:00 -0700)
tree0fa6bc8e97ce6dbc2c3790b418745eec288ab8d1
parent70733f1dc12dbf0ca387a53bab762190b2b7911b
Fix eager reloads of dead registers

Summary: When we find a register that covers the beginning of a
range, but which is unused for the latter part of that range,
we would spill at the latest possible point - usually the middle
of a block. So any incoming edges to that block would need to
shuffle the registers into place, or reload them from the stack;
even though the registers will never be used.

By splitting the range at a block boundary after the last use,
we can avoid doing that.

With this change we no longer load every xmm register, and all the
caller save gprs immediately prior to the call to loadClassConstantTv
in hphp/test/slow/compilation/regalloc.php

Reviewed By: @edwinsmith

Differential Revision: D2085623
hphp/runtime/vm/jit/vasm-xls.cpp