[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)
commitd5289d9724ec8d1a0bd650feaa22276b7d74ec5b
tree8741443fa8143ed30624fd59fa00b7d59f8c5fd2
parentb7f02d371fc8232ec88d7abd40314c5c44966b8a
[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

llvm-svn: 239439
llvm/lib/CodeGen/RegisterScavenging.cpp