diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-10-25 20:26:41 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-10-25 20:26:41 +0000 |
| commit | c0a201c3182370b7c01ea0b9d37d80726b2f3794 (patch) | |
| tree | 7f34a8b896a6f2cdd2f65cb1af7b4b70b8e9b62d /llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | |
| parent | e1fd05ebde0de282c4eb7abde9a32d1beec356e7 (diff) | |
| download | bcm5719-llvm-c0a201c3182370b7c01ea0b9d37d80726b2f3794.tar.gz bcm5719-llvm-c0a201c3182370b7c01ea0b9d37d80726b2f3794.zip | |
Be a bit more paranoid about calling SelectNodeTo
llvm-svn: 23982
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 7b3227dcaa8..16622693ded 100644 --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -886,10 +886,15 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) { return SDOperand(N, 0); case ISD::FrameIndex: { int FI = cast<FrameIndexSDNode>(N)->getIndex(); - CurDAG->SelectNodeTo(N, PPC::ADDI, MVT::i32, - CurDAG->getTargetFrameIndex(FI, MVT::i32), - getI32Imm(0)); - return SDOperand(N, 0); + if (N->hasOneUse()) { + CurDAG->SelectNodeTo(N, PPC::ADDI, MVT::i32, + CurDAG->getTargetFrameIndex(FI, MVT::i32), + getI32Imm(0)); + return SDOperand(N, 0); + } + return CurDAG->getTargetNode(PPC::ADDI, MVT::i32, + CurDAG->getTargetFrameIndex(FI, MVT::i32), + getI32Imm(0)); } case ISD::ConstantPool: { Constant *C = cast<ConstantPoolSDNode>(N)->get(); @@ -914,10 +919,9 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) { Tmp = CurDAG->getTargetNode(PPC::LIS, MVT::i32, GA); if (GV->hasWeakLinkage() || GV->isExternal()) - CurDAG->SelectNodeTo(N, PPC::LWZ, MVT::i32, GA, Tmp); + return CurDAG->getTargetNode(PPC::LWZ, MVT::i32, GA, Tmp); else - CurDAG->SelectNodeTo(N, PPC::LA, MVT::i32, Tmp, GA); - return SDOperand(N, 0); + return CurDAG->getTargetNode(PPC::LA, MVT::i32, Tmp, GA); } case PPCISD::FSEL: { |

