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 | ed74d8ac2af5f8c9a2db4fa87e0579f92a045d18 (patch) | |
| tree | e0e0649e45e5ae5a7d297f7fb9ef58a8506efb70 /llvm/lib/CodeGen/SelectionDAG | |
| parent | 658b9550bb07d9f5ab24487c9c2e33cbddec36b4 (diff) | |
| download | bcm5719-llvm-ed74d8ac2af5f8c9a2db4fa87e0579f92a045d18.tar.gz bcm5719-llvm-ed74d8ac2af5f8c9a2db4fa87e0579f92a045d18.zip | |
Duplicated node may produce a non-physical register def.
llvm-svn: 62015
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp index 4019ec1303f..ebe084d811f 100644 --- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp +++ b/llvm/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. |

