[llvm-commits] [poolalloc] r120950 - in /poolalloc/trunk: include/dsa/DSNode.h lib/DSA/DataStructure.cpp

Arushi Aggarwal aggarwa4 at illinois.edu
Sun Dec 5 11:47:41 PST 2010


Author: aggarwa4
Date: Sun Dec  5 13:47:41 2010
New Revision: 120950

URL: http://llvm.org/viewvc/llvm-project?rev=120950&view=rev
Log:
Allow merging of 2 array nodes, if one is multiple of
other in size. Also , make sure to copy over the type
information.

Modified:
    poolalloc/trunk/include/dsa/DSNode.h
    poolalloc/trunk/lib/DSA/DataStructure.cpp

Modified: poolalloc/trunk/include/dsa/DSNode.h
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/include/dsa/DSNode.h?rev=120950&r1=120949&r2=120950&view=diff
==============================================================================
--- poolalloc/trunk/include/dsa/DSNode.h (original)
+++ poolalloc/trunk/include/dsa/DSNode.h Sun Dec  5 13:47:41 2010
@@ -241,6 +241,7 @@
   void mergeTypeInfo(const Type *Ty, unsigned Offset);
   void mergeTypeInfo(const TyMapTy::mapped_type TyIt, unsigned Offset);
   void mergeTypeInfo(const DSNode* D, unsigned Offset);
+  void mergeArrayTypeInfo(const DSNode* D);
 
   // Types records might exist without types in them
   bool hasNoType() {

Modified: poolalloc/trunk/lib/DSA/DataStructure.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DataStructure.cpp?rev=120950&r1=120949&r2=120950&view=diff
==============================================================================
--- poolalloc/trunk/lib/DSA/DataStructure.cpp (original)
+++ poolalloc/trunk/lib/DSA/DataStructure.cpp Sun Dec  5 13:47:41 2010
@@ -446,6 +446,13 @@
     mergeTypeInfo(ii->second, ii->first + Offset);
 }
 
+void DSNode::mergeArrayTypeInfo(const DSNode* DN) {
+  unsigned Offset = 0;
+  while(Offset < getSize()) {
+    mergeTypeInfo(DN, Offset);
+    Offset += DN->getSize();
+  }
+}
 /// addEdgeTo - Add an edge from the current node to the specified node.  This
 /// can cause merging of nodes in the graph.
 ///
@@ -571,6 +578,12 @@
         NH.getNode()->foldNodeCompletely();
         NSize = NH.getNode()->getSize();
         NOffset = NH.getOffset();
+      } else {
+        if(NH.getNode()->getSize() > CurNodeH.getNode()->getSize()) {
+          NH.getNode()->mergeArrayTypeInfo(CurNodeH.getNode());
+        } else {
+          CurNodeH.getNode()->mergeArrayTypeInfo(NH.getNode());
+        }
       }
     }
   }
@@ -858,6 +871,12 @@
               ((DN->getSize() % SN->getSize()) != 0)){
              DN->foldNodeCompletely();
              DN = NH.getNode();
+           } else {
+             if(DN->getSize() > SN->getSize()) {
+               DN->mergeArrayTypeInfo(SN);
+             } else {
+               SrcNH.getNode()->mergeArrayTypeInfo(NH.getNode());
+             }
            }
         }
       }





More information about the llvm-commits mailing list