A hack to fix a problem folding immedaites. This fixes Olden/power.
authorChris Lattner <sabre@nondot.org>
Mon, 29 Aug 2005 01:01:01 +0000 (01:01 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 29 Aug 2005 01:01:01 +0000 (01:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23126 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCISelDAGToDAG.cpp

index 89f0f64223bda675c266e68e2e47eaa3664d2fd3..2503e26e614fc30f8f8fdf5d3e1611386f40168f 100644 (file)
@@ -685,16 +685,20 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) {
     unsigned v = (unsigned)cast<ConstantSDNode>(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)