diff options
author | Jim Grosbach <grosbach@apple.com> | 2010-06-04 23:01:26 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2010-06-04 23:01:26 +0000 |
commit | 870c80540d90e748df95b2e9180fa1961d739229 (patch) | |
tree | af92ae930e25e22313a19f4e466239ac13e110bf /lib/CodeGen/IfConversion.cpp | |
parent | 9e584b37b0ab90f817df476b803e96907bd504ae (diff) |
Make if-conversion ignore dbg_value instructions in its analysis. rdar://7797940
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105498 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/IfConversion.cpp')
-rw-r--r-- | lib/CodeGen/IfConversion.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/lib/CodeGen/IfConversion.cpp b/lib/CodeGen/IfConversion.cpp index c61fd17e79..2abcb51b4e 100644 --- a/lib/CodeGen/IfConversion.cpp +++ b/lib/CodeGen/IfConversion.cpp @@ -514,7 +514,15 @@ bool IfConverter::ValidDiamond(BBInfo &TrueBBI, BBInfo &FalseBBI, MachineBasicBlock::iterator TI = TrueBBI.BB->begin(); MachineBasicBlock::iterator FI = FalseBBI.BB->begin(); - while (TI != TrueBBI.BB->end() && FI != FalseBBI.BB->end()) { + while (1) { + // Skip dbg_value instructions + if (TI->isDebugValue()) + ++TI; + if (FI->isDebugValue()) + ++FI; + if (TI == TrueBBI.BB->end() || FI == FalseBBI.BB->end()) + break; + if (!TI->isIdenticalTo(FI)) break; ++Dups1; @@ -524,7 +532,15 @@ bool IfConverter::ValidDiamond(BBInfo &TrueBBI, BBInfo &FalseBBI, TI = firstNonBranchInst(TrueBBI.BB, TII); FI = firstNonBranchInst(FalseBBI.BB, TII); - while (TI != TrueBBI.BB->begin() && FI != FalseBBI.BB->begin()) { + while (1) { + // Skip dbg_value instructions + if (TI->isDebugValue()) + --TI; + if (FI->isDebugValue()) + --FI; + if (TI == TrueBBI.BB->begin() || FI == FalseBBI.BB->begin()) + break; + if (!TI->isIdenticalTo(FI)) break; ++Dups2; @@ -569,6 +585,9 @@ void IfConverter::ScanInstructions(BBInfo &BBI) { BBI.ClobbersPred = false; for (MachineBasicBlock::iterator I = BBI.BB->begin(), E = BBI.BB->end(); I != E; ++I) { + if (I->isDebugValue()) + continue; + const TargetInstrDesc &TID = I->getDesc(); if (TID.isNotDuplicable()) BBI.CannotBeCopied = true; @@ -1137,7 +1156,7 @@ void IfConverter::PredicateBlock(BBInfo &BBI, MachineBasicBlock::iterator E, SmallVectorImpl<MachineOperand> &Cond) { for (MachineBasicBlock::iterator I = BBI.BB->begin(); I != E; ++I) { - if (TII->isPredicated(I)) + if (I->isDebugValue() || TII->isPredicated(I)) continue; if (!TII->PredicateInstruction(I, Cond)) { #ifndef NDEBUG @@ -1174,7 +1193,7 @@ void IfConverter::CopyAndPredicateBlock(BBInfo &ToBBI, BBInfo &FromBBI, ToBBI.BB->insert(ToBBI.BB->end(), MI); ToBBI.NonPredSize++; - if (!isPredicated) + if (!isPredicated && !MI->isDebugValue()) if (!TII->PredicateInstruction(MI, Cond)) { #ifndef NDEBUG dbgs() << "Unable to predicate " << *I << "!\n"; |