[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