Add support for TargetConstantPool nodes to the dag isel emitter, and use
them in the PPC backend, to simplify some logic out of Select and
SelectAddr.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24657 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
index 8517bf7..01d089d 100644
--- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -423,7 +423,8 @@
       assert(!cast<ConstantSDNode>(Addr.getOperand(1).getOperand(1))->getValue()
              && "Cannot handle constant offsets yet!");
       Op1 = Addr.getOperand(1).getOperand(0);  // The global address.
-      assert(Op1.getOpcode() == ISD::TargetGlobalAddress);
+      assert(Op1.getOpcode() == ISD::TargetGlobalAddress ||
+             Op1.getOpcode() == ISD::TargetConstantPool);
       Op2 = Select(Addr.getOperand(0));
       return false;   // [&g+r]
     } else {
@@ -433,20 +434,11 @@
     }
   }
 
-  if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Addr)) {
-    Op1 = getI32Imm(0);
+  if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Addr))
     Op2 = CurDAG->getTargetFrameIndex(FI->getIndex(), MVT::i32);
-    return false;
-  } else if (ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(Addr)) {
-    Op1 = Addr;
-    if (PICEnabled)
-      Op2 = CurDAG->getTargetNode(PPC::ADDIS, MVT::i32, getGlobalBaseReg(),Op1);
-    else
-      Op2 = CurDAG->getTargetNode(PPC::LIS, MVT::i32, Op1);
-    return false;
-  }
+  else
+    Op2 = Select(Addr);
   Op1 = getI32Imm(0);
-  Op2 = Select(Addr);
   return false;
 }
 
@@ -893,17 +885,6 @@
                             CurDAG->getTargetFrameIndex(FI, MVT::i32),
                             getI32Imm(0));
   }
-  case ISD::ConstantPool: {
-    Constant *C = cast<ConstantPoolSDNode>(N)->get();
-    SDOperand Tmp, CPI = CurDAG->getTargetConstantPool(C, MVT::i32);
-    if (PICEnabled)
-      Tmp = CurDAG->getTargetNode(PPC::ADDIS, MVT::i32, getGlobalBaseReg(),CPI);
-    else
-      Tmp = CurDAG->getTargetNode(PPC::LIS, MVT::i32, CPI);
-    if (N->hasOneUse())
-      return CurDAG->SelectNodeTo(N, PPC::LA, MVT::i32, Tmp, CPI);
-    return CodeGenMap[Op] = CurDAG->getTargetNode(PPC::LA, MVT::i32, Tmp, CPI);
-  }
   case ISD::FADD: {
     MVT::ValueType Ty = N->getValueType(0);
     if (!NoExcessFPPrecision) {  // Match FMA ops