summaryrefslogtreecommitdiff
path: root/lib/CodeGen/AntiDepBreaker.h
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2011-06-02 21:26:52 +0000
committerDevang Patel <dpatel@apple.com>2011-06-02 21:26:52 +0000
commite29e8e100ea38be1771e5f010a5511cbb990d515 (patch)
treed1e697d9d8b735db92ffb286771f36eeb6baa313 /lib/CodeGen/AntiDepBreaker.h
parent201cfcd6de70f45174567572028b6e53f7e7d92b (diff)
downloadllvm-e29e8e100ea38be1771e5f010a5511cbb990d515.tar.gz
llvm-e29e8e100ea38be1771e5f010a5511cbb990d515.tar.bz2
llvm-e29e8e100ea38be1771e5f010a5511cbb990d515.tar.xz
Update DBG_VALUEs while breaking anti dependencies.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132487 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AntiDepBreaker.h')
-rw-r--r--lib/CodeGen/AntiDepBreaker.h18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/CodeGen/AntiDepBreaker.h b/lib/CodeGen/AntiDepBreaker.h
index 086b757956..df47f984d5 100644
--- a/lib/CodeGen/AntiDepBreaker.h
+++ b/lib/CodeGen/AntiDepBreaker.h
@@ -30,6 +30,9 @@ namespace llvm {
/// anti-dependencies.
class AntiDepBreaker {
public:
+ typedef std::vector<std::pair<MachineInstr *, MachineInstr *> >
+ DbgValueVector;
+
virtual ~AntiDepBreaker();
/// Start - Initialize anti-dep breaking for a new basic block.
@@ -40,9 +43,10 @@ public:
/// the number of anti-dependencies broken.
///
virtual unsigned BreakAntiDependencies(const std::vector<SUnit>& SUnits,
- MachineBasicBlock::iterator Begin,
- MachineBasicBlock::iterator End,
- unsigned InsertPosIndex) =0;
+ MachineBasicBlock::iterator Begin,
+ MachineBasicBlock::iterator End,
+ unsigned InsertPosIndex,
+ DbgValueVector &DbgValues) = 0;
/// Observe - Update liveness information to account for the current
/// instruction, which will not be scheduled.
@@ -52,6 +56,14 @@ public:
/// Finish - Finish anti-dep breaking for a basic block.
virtual void FinishBlock() =0;
+
+ /// UpdateDbgValue - Update DBG_VALUE if dependency breaker is updating
+ /// other machine instruction to use NewReg.
+ void UpdateDbgValue(MachineInstr *MI, unsigned OldReg, unsigned NewReg) {
+ assert (MI->isDebugValue() && "MI is not DBG_VALUE!");
+ if (MI && MI->getOperand(0).isReg() && MI->getOperand(0).getReg() == OldReg)
+ MI->getOperand(0).setReg(NewReg);
+ }
};
}