Some stackslots are allocated to vregs which have no real reference.
authorWei Mi <wmi@google.com>
Fri, 5 Feb 2016 18:14:24 +0000 (18:14 +0000)
committerWei Mi <wmi@google.com>
Fri, 5 Feb 2016 18:14:24 +0000 (18:14 +0000)
commita62f05898959a7e58e512614e50082e2e6eb588c
tree6e9bcbe4858bf61b88144349b9c9a04a6e39d1de
parent6e1967ef668c284e8cfd4437c47861ea8ec8485c
Some stackslots are allocated to vregs which have no real reference.

LiveRangeEdit::eliminateDeadDef is used to remove dead define instructions
after rematerialization. To remove a VNI for a vreg from its LiveInterval,
LiveIntervals::removeVRegDefAt is used. However, after non-PHI VNIs are all
removed, PHI VNI are still left in the LiveInterval. Such unused vregs will
be kept in RegsToSpill[] at the end of InlineSpiller::reMaterializeAll and
spiller will allocate stackslot for them.

The fix is to get rid of unused reg by checking whether it has non-dbg
reference instead of whether it has non-empty interval.

llvm-svn: 259895
llvm/lib/CodeGen/InlineSpiller.cpp
llvm/test/CodeGen/X86/unused_stackslots.ll [new file with mode: 0644]