ScheduleDAGInstrs should toggle kill flags on bundled instrs.
authorPete Cooper <peter_cooper@apple.com>
Mon, 4 May 2015 16:52:06 +0000 (16:52 +0000)
committerPete Cooper <peter_cooper@apple.com>
Mon, 4 May 2015 16:52:06 +0000 (16:52 +0000)
commitba99a57342343cc771b751c8c1fcb818947e3307
tree3c4cec02e927a025dfe501fc949e53ddf9658bd3
parent01007da245d6a854447fc8590975951dfd4227e1
ScheduleDAGInstrs should toggle kill flags on bundled instrs.

ScheduleDAGInstrs wasn't setting or clearing the kill flags on instructions inside bundles.  This led to code such as this

%R3<def> = t2ANDrr %R0
BUNDLE %ITSTATE<imp-def,dead>, %R0<imp-use,kill>
  t2IT 1, 24, %ITSTATE<imp-def>
  R6<def,tied6> = t2ORRrr %R0<kill>, ...

being transformed to

BUNDLE %ITSTATE<imp-def,dead>, %R0<imp-use>
  t2IT 1, 24, %ITSTATE<imp-def>
  R6<def,tied6> = t2ORRrr %R0<kill>, ...
%R3<def> = t2ANDrr %R0<kill>

where the kill flag was removed from the BUNDLE instruction, but not the t2ORRrr inside it.  The verifier then thought that
R0 was undefined when read by the AND.

This change make the toggleKillFlags method also check for bundles and toggle flags on bundled instructions.
Setting the kill flag is special cased as we only want to set the kill flag on the last instruction in the bundle.

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