diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/IfConversion.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/IfConversion.cpp b/llvm/lib/CodeGen/IfConversion.cpp index 7d152b10753..a0ce2541583 100644 --- a/llvm/lib/CodeGen/IfConversion.cpp +++ b/llvm/lib/CodeGen/IfConversion.cpp @@ -1764,6 +1764,12 @@ bool IfConverter::IfConvertDiamondCommon( Redefs.stepForward(MI, Dummy); } } + // Kill flags in the true block for registers living into the false block + // must be removed. This should be done before extracting the common + // instructions from the beginning of the MBB1, since these instructions + // can actually differ between MBB1 and MBB2 in terms of <kill> flags. + RemoveKills(MBB1.begin(), MBB1.end(), DontKill, *TRI); + BBI.BB->splice(BBI.BB->end(), &MBB1, MBB1.begin(), DI1); MBB2.erase(MBB2.begin(), DI2); @@ -1788,10 +1794,6 @@ bool IfConverter::IfConvertDiamondCommon( } MBB1.erase(DI1, MBB1.end()); - // Kill flags in the true block for registers living into the false block - // must be removed. - RemoveKills(MBB1.begin(), MBB1.end(), DontKill, *TRI); - DI2 = BBI2->BB->end(); // The branches have been checked to match. Skip over the branch in the false // block so that we don't try to predicate it. |