[RegisterScavenger] Fix handling of predicated instructions
authorTobias Edler von Koch <tobias@codeaurora.org>
Tue, 9 Jun 2015 22:10:58 +0000 (22:10 +0000)
committerTobias Edler von Koch <tobias@codeaurora.org>
Tue, 9 Jun 2015 22:10:58 +0000 (22:10 +0000)
commitcbe2100f7ede7e997bf610a0510f4aa8fd99f1a0
tree1aec982602774a67c722b4692745a14bc8cdd457
parent8478c82b282983553e94fed00f62f4d9f157de08
[RegisterScavenger] Fix handling of predicated instructions

Summary:
The RegisterScavenger explicitly ignores <kill> flags on operands of
predicated instructions and therefore assumes that such registers remain
live. When it then scavenges such a register, it inserts a spill of this
(killed) register. This is invalid code and gets flagged up by the
verifier.

Nowadays kill flags are set correctly on predicated instructions. This
patch makes the Scavenger respect them.

The bug has so far only been triggered by an internal pass, so I don't
have a test case unfortunately.

Fixes PR23119.

Reviewers: hfinkel, tobiasvk_caf

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D9039

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