From: Chris Lattner Date: Mon, 29 Aug 2005 01:01:01 +0000 (+0000) Subject: A hack to fix a problem folding immedaites. This fixes Olden/power. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=2fef809b5b6a38d38aadc3399b5f7a78b537d092;p=oota-llvm.git A hack to fix a problem folding immedaites. This fixes Olden/power. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23126 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 89f0f64223b..2503e26e614 100644 --- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -685,16 +685,20 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) { unsigned v = (unsigned)cast(N)->getValue(); unsigned Hi = HA16(v); unsigned Lo = Lo16(v); + + // NOTE: This doesn't use SelectNodeTo, because doing that will prevent + // folding shared immediates into other the second instruction that + // uses it. if (Hi && Lo) { SDOperand Top = CurDAG->getTargetNode(PPC::LIS, MVT::i32, getI32Imm(v >> 16)); - CurDAG->SelectNodeTo(N, PPC::ORI, MVT::i32, Top, getI32Imm(v & 0xFFFF)); + return CurDAG->getTargetNode(PPC::ORI, MVT::i32, Top, + getI32Imm(v & 0xFFFF)); } else if (Lo) { - CurDAG->SelectNodeTo(N, PPC::LI, MVT::i32, getI32Imm(v)); + return CurDAG->getTargetNode(PPC::LI, MVT::i32, getI32Imm(v)); } else { - CurDAG->SelectNodeTo(N, PPC::LIS, MVT::i32, getI32Imm(v >> 16)); + return CurDAG->getTargetNode(PPC::LIS, MVT::i32, getI32Imm(v >> 16)); } - break; } case ISD::UNDEF: if (N->getValueType(0) == MVT::i32)