summaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/MachineOperand.h
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2011-01-09 05:33:21 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2011-01-09 05:33:21 +0000
commit0804ead404d694b35e9c55ccbf43f99cd394e487 (patch)
tree0ebd2b11c83f6e346d932a90e241ec2db3d939a2 /include/llvm/CodeGen/MachineOperand.h
parent00f93fc0467e89d5e63b8ebd9a18909a3b031ccc (diff)
downloadllvm-0804ead404d694b35e9c55ccbf43f99cd394e487.tar.gz
llvm-0804ead404d694b35e9c55ccbf43f99cd394e487.tar.bz2
llvm-0804ead404d694b35e9c55ccbf43f99cd394e487.tar.xz
Simplify LiveDebugVariables by storing MachineOperand copies locations instead
of using a Location class with the same information. When making a copy of a MachineOperand that was already stored in a MachineInstr, it is necessary to clear the parent pointer on the copy. Otherwise the register use-def lists become inconsistent. Add MachineOperand::clearParent() to do that. An alternative would be a custom MachineOperand copy constructor that cleared ParentMI. I didn't want to do that because of the performance impact. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123109 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/MachineOperand.h')
-rw-r--r--include/llvm/CodeGen/MachineOperand.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MachineOperand.h b/include/llvm/CodeGen/MachineOperand.h
index 1aae5c0e6f..8acc9490d8 100644
--- a/include/llvm/CodeGen/MachineOperand.h
+++ b/include/llvm/CodeGen/MachineOperand.h
@@ -153,6 +153,16 @@ public:
MachineInstr *getParent() { return ParentMI; }
const MachineInstr *getParent() const { return ParentMI; }
+ /// clearParent - Reset the parent pointer.
+ ///
+ /// The MachineOperand copy constructor also copies ParentMI, expecting the
+ /// original to be deleted. If a MachineOperand is ever stored outside a
+ /// MachineInstr, the parent pointer must be cleared.
+ ///
+ /// Never call clearParent() on an operand in a MachineInstr.
+ ///
+ void clearParent() { ParentMI = 0; }
+
void print(raw_ostream &os, const TargetMachine *TM = 0) const;
//===--------------------------------------------------------------------===//