Move the BBNodes, GlobalValues, TargetGlobalValues, Constants, TargetConstants,
RegNodes, and ValueNodes maps into the CSEMap.

llvm-svn: 29626
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp
index 6359992..bfd2f9e 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp
@@ -23,6 +23,32 @@
   SetValueTypes(N->value_begin());
   // Add the operand info.
   SetOperands(N->op_begin(), N->getNumOperands());
+
+  // Handle SDNode leafs with special info.
+  if (N->getNumOperands() == 0) {
+    switch (N->getOpcode()) {
+    default: break;  // Normal nodes don't need extra info.
+    case ISD::TargetConstant:
+    case ISD::Constant:
+      AddInteger(cast<ConstantSDNode>(N)->getValue());
+      break;
+    case ISD::TargetGlobalAddress:
+    case ISD::GlobalAddress:
+      AddPointer(cast<GlobalAddressSDNode>(N)->getGlobal());
+      AddInteger(cast<GlobalAddressSDNode>(N)->getOffset());
+      break;
+    case ISD::BasicBlock:
+      AddPointer(cast<BasicBlockSDNode>(N)->getBasicBlock());
+      break;
+    case ISD::Register:
+      AddInteger(cast<RegisterSDNode>(N)->getReg());
+      break;
+    case ISD::SRCVALUE:
+      AddPointer(cast<SrcValueSDNode>(N)->getValue());
+      AddInteger(cast<SrcValueSDNode>(N)->getOffset());
+      break;
+    }
+  }
 }
 
 SelectionDAGCSEMap::NodeID::NodeID(unsigned short ID, const void *VTList) {