summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-10-25 20:26:41 +0000
committerChris Lattner <sabre@nondot.org>2005-10-25 20:26:41 +0000
commitc0a201c3182370b7c01ea0b9d37d80726b2f3794 (patch)
tree7f34a8b896a6f2cdd2f65cb1af7b4b70b8e9b62d /llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
parente1fd05ebde0de282c4eb7abde9a32d1beec356e7 (diff)
downloadbcm5719-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.cpp18
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: {
OpenPOWER on IntegriCloud