Many changes
* Simplify a lot of the inlining stuff.  There are still problems, but not
  many
* Break up the Function representation to have a vector for every different
  node type so it is fast to find nodes of a particular flavor.
* Do more intelligent merging of call values
* Allow elimination of unreachable shadow and allocation nodes
* Generalize indistinguishability testing to allow merging of identical calls.
* Increase shadow node merging power


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2010 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/DataStructure/FunctionRepBuilder.h b/lib/Analysis/DataStructure/FunctionRepBuilder.h
index 6809261..bc56134 100644
--- a/lib/Analysis/DataStructure/FunctionRepBuilder.h
+++ b/lib/Analysis/DataStructure/FunctionRepBuilder.h
@@ -61,8 +61,11 @@
   // Nodes - Keep track of all of the resultant nodes, because there may not
   // be edges connecting these to anything.
   //
-  std::vector<DSNode*> Nodes;
+  std::vector<ArgDSNode*>    ArgNodes;
+  std::vector<AllocDSNode*>  AllocNodes;
   std::vector<ShadowDSNode*> ShadowNodes;
+  std::vector<GlobalDSNode*> GlobalNodes;
+  std::vector<CallDSNode*>   CallNodes;
 
   // addAllUsesToWorkList - Add all of the instructions users of the specified
   // value to the work list for further processing...
@@ -75,11 +78,13 @@
     processWorkList();
   }
 
-  void addNode(DSNode *N) { Nodes.push_back(N); }
-  const std::vector<DSNode*> &getNodes() const { return Nodes; }
-
-  void addShadowNode(ShadowDSNode *N) { ShadowNodes.push_back(N); }
+  const std::vector<ArgDSNode*>    &getArgNodes() const { return ArgNodes; }
+  const std::vector<AllocDSNode*>  &getAllocNodes() const { return AllocNodes; }
   const std::vector<ShadowDSNode*> &getShadowNodes() const {return ShadowNodes;}
+  const std::vector<GlobalDSNode*> &getGlobalNodes() const {return GlobalNodes;}
+  const std::vector<CallDSNode*>   &getCallNodes() const { return CallNodes; }
+
+  void addShadowNode(ShadowDSNode *SN) { ShadowNodes.push_back(SN); }
 
   const PointerValSet &getRetNode() const { return RetNode; }