Allow loop detection during debug in forwarding nodes, and revert auxcall patch as it make 176.gcc untenable


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31510 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/DataStructure/DataStructure.cpp b/lib/Analysis/DataStructure/DataStructure.cpp
index 169cd65..15c6c75 100644
--- a/lib/Analysis/DataStructure/DataStructure.cpp
+++ b/lib/Analysis/DataStructure/DataStructure.cpp
@@ -62,7 +62,17 @@
 
 DSNode *DSNodeHandle::HandleForwarding() const {
   assert(N->isForwarding() && "Can only be invoked if forwarding!");
-
+  DEBUG(
+        { //assert not looping
+          DSNode* NH = N;
+          std::set<DSNode*> seen;
+          while(NH && NH->isForwarding()) {
+            assert(seen.find(NH) == seen.end() && "Loop detected");
+            seen.insert(NH);
+            NH = NH->ForwardNH.N;
+          }
+        }
+        );
   // Handle node forwarding here!
   DSNode *Next = N->ForwardNH.getNode();  // Cause recursive shrinkage
   Offset += N->ForwardNH.getOffset();
@@ -421,6 +431,8 @@
 ///
 bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
                            bool FoldIfIncompatible) {
+  DEBUG(std::cerr << "merging " << *NewTy << " at " << Offset 
+                  << " with " << *Ty << "\n");
   const TargetData &TD = getTargetData();
   // Check to make sure the Size member is up-to-date.  Size can be one of the
   // following:
@@ -1595,13 +1607,13 @@
     for (afc_iterator I = Graph.afc_begin(), E = Graph.afc_end(); I!=E; ++I)
       if (SCCFinder.PathExistsToClonedNode(*I))
         AuxCallToCopy.push_back(&*I);
-      else if (I->isIndirectCall()){
- 	//If the call node doesn't have any callees, clone it
- 	std::vector< Function *> List;
- 	I->getCalleeNode()->addFullFunctionList(List);
- 	if (!List.size())
- 	  AuxCallToCopy.push_back(&*I);
-       }
+//       else if (I->isIndirectCall()){
+//  	//If the call node doesn't have any callees, clone it
+//  	std::vector< Function *> List;
+//  	I->getCalleeNode()->addFullFunctionList(List);
+//  	if (!List.size())
+//  	  AuxCallToCopy.push_back(&*I);
+//        }
 
   const DSScalarMap &GSM = Graph.getScalarMap();
   for (DSScalarMap::global_iterator GI = GSM.global_begin(),