diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-01-09 22:44:02 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-01-09 22:44:02 +0000 |
commit | 5c3c5a4d9c21e73f7a0e11d77a85997c9f34f2ba (patch) | |
tree | b0ed9aff398ece2c1833bba28d0f8ecde417a15f /lib/CodeGen | |
parent | 0cb24f81312d9eee668e25eda7a1a079a1615e29 (diff) |
Duplicated node may produce a non-physical register def.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62015 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp index 4019ec1303..ebe084d811 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp @@ -157,8 +157,8 @@ unsigned ScheduleDAGSDNodes::getDstOfOnlyCopyToRegUse(SDNode *Node, } void ScheduleDAGSDNodes::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI, - const TargetInstrDesc &II, - DenseMap<SDValue, unsigned> &VRBaseMap) { + const TargetInstrDesc &II, bool IsClone, + DenseMap<SDValue, unsigned> &VRBaseMap) { assert(Node->getMachineOpcode() != TargetInstrInfo::IMPLICIT_DEF && "IMPLICIT_DEF should have been handled as a special case elsewhere!"); @@ -192,6 +192,8 @@ void ScheduleDAGSDNodes::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI, } SDValue Op(Node, i); + if (IsClone) + VRBaseMap.erase(Op); bool isNew = VRBaseMap.insert(std::make_pair(Op, VRBase)).second; isNew = isNew; // Silence compiler warning. assert(isNew && "Node emitted out of order - early"); @@ -487,7 +489,7 @@ void ScheduleDAGSDNodes::EmitNode(SDNode *Node, bool IsClone, // Add result register values for things that are defined by this // instruction. if (NumResults) - CreateVirtualRegisters(Node, MI, II, VRBaseMap); + CreateVirtualRegisters(Node, MI, II, IsClone, VRBaseMap); // Emit all of the actual operands of this instruction, adding them to the // instruction as appropriate. |