[llvm-commits] [poolalloc] r126889 - /poolalloc/trunk/lib/DSA/DataStructure.cpp

Arushi Aggarwal aggarwa4 at illinois.edu
Wed Mar 2 14:36:54 PST 2011


Author: aggarwa4
Date: Wed Mar  2 16:36:54 2011
New Revision: 126889

URL: http://llvm.org/viewvc/llvm-project?rev=126889&view=rev
Log:
When merging call sites, either the caller or 
callee might have extra params. Handle each case
appropriately. See comments in code. 

Modified:
    poolalloc/trunk/lib/DSA/DataStructure.cpp

Modified: poolalloc/trunk/lib/DSA/DataStructure.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DataStructure.cpp?rev=126889&r1=126888&r2=126889&view=diff
==============================================================================
--- poolalloc/trunk/lib/DSA/DataStructure.cpp (original)
+++ poolalloc/trunk/lib/DSA/DataStructure.cpp Wed Mar  2 16:36:54 2011
@@ -983,8 +983,22 @@
   for (unsigned a = 0; a != MinArgs; ++a)
     merge(DestCS.getPtrArg(a), SrcCS.getPtrArg(a));
 
-  for (unsigned a = MinArgs, e = SrcCS.getNumPtrArgs(); a != e; ++a)
-    DestCS.addPtrArg(getClonedNH(SrcCS.getPtrArg(a)));
+  for (unsigned a = MinArgs, e = SrcCS.getNumPtrArgs(); a != e; ++a) {
+    // If a call site passes more params, ignore the extra params.
+    // If the called function is varargs, merge the extra params, with
+    // the varargs node.
+    if(DestCS.getVAVal() != NULL) {
+      merge(DestCS.getVAVal(), SrcCS.getPtrArg(a));
+    }
+  }
+
+  for (unsigned a = MinArgs, e = DestCS.getNumPtrArgs(); a!=e; ++a) {
+    // If a call site passes less explicit params, than the function needs
+    // But passes params through a varargs node, merge those in.
+    if(SrcCS.getVAVal() != NULL)  {
+      merge(DestCS.getPtrArg(a), SrcCS.getVAVal());
+    }
+  }
 }
 
 DSCallSite ReachabilityCloner::cloneCallSite(const DSCallSite& SrcCS) {





More information about the llvm-commits mailing list