Track register pressure a bit more carefully (weird corner case).
authorAndrew Trick <atrick@apple.com>
Thu, 6 Feb 2014 19:20:41 +0000 (19:20 +0000)
committerAndrew Trick <atrick@apple.com>
Thu, 6 Feb 2014 19:20:41 +0000 (19:20 +0000)
commit2be0fae98c54ff6b0e7a53ee1d01b5a402eaa51e
treeabb7a1ae3ee87ca29f17399619436a82c70ecc5b
parente75bf036116c78b3f0a315d6146e13e85f1114ef
Track register pressure a bit more carefully (weird corner case).

This solves a problem where a def machine operand has no uses but has
not been marked dead. In this case, the initial RP analysis was being
extra precise and determining from LiveIntervals the the register was
actually dead. This caused us to omit the register from the RP
tracker's block live out. That's all good, but the per-instruction
summary still accounted for it as a valid def. This could cause an
assertion in the tracker later when we underflow pressure.

This is from a bug report on an out-of-tree target. It is not
reproducible on well-behaved targets. I'm just making an obvious fix
without unit test.

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