[llvm-commits] [llvm] r127673 - /llvm/trunk/lib/Analysis/MemoryBuiltins.cpp

Nick Lewycky nicholas at mxc.ca
Tue Mar 15 00:31:33 PDT 2011


Author: nicholas
Date: Tue Mar 15 02:31:32 2011
New Revision: 127673

URL: http://llvm.org/viewvc/llvm-project?rev=127673&view=rev
Log:
Add C++ global operator {new,new[],delete,delete[]}(unsigned {int,long}) to the
memory builtins as equivalent to malloc/free.

This is different from any attribute we have. For example, you can delete the
allocators when their result is unused, but you can't collapse two calls to the
same function, even if no global/memory state has changed in between. The
noalias return states that the result does not alias any other pointer, but
instcombine optimizes malloc() as though the result is non-null for the purpose
of eliminating unused pointers.


Modified:
    llvm/trunk/lib/Analysis/MemoryBuiltins.cpp

Modified: llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryBuiltins.cpp?rev=127673&r1=127672&r2=127673&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/MemoryBuiltins.cpp (original)
+++ llvm/trunk/lib/Analysis/MemoryBuiltins.cpp Tue Mar 15 02:31:32 2011
@@ -35,7 +35,11 @@
     return false;
 
   Function *Callee = CI->getCalledFunction();
-  if (Callee == 0 || !Callee->isDeclaration() || Callee->getName() != "malloc")
+  if (Callee == 0 || !Callee->isDeclaration())
+    return false;
+  if (Callee->getName() != "malloc" &&
+      Callee->getName() != "_Znwj" && Callee->getName() != "_Znwm" &&
+      Callee->getName() != "_Znaj" && Callee->getName() != "_Znam")
     return false;
 
   // Check malloc prototype.
@@ -189,7 +193,12 @@
   if (!CI)
     return 0;
   Function *Callee = CI->getCalledFunction();
-  if (Callee == 0 || !Callee->isDeclaration() || Callee->getName() != "free")
+  if (Callee == 0 || !Callee->isDeclaration())
+    return 0;
+
+  if (Callee->getName() != "free" &&
+      Callee->getName() != "_Zdlj" && Callee->getName() != "_Zdlm" &&
+      Callee->getName() != "_Zdaj" && Callee->getName() != "_Zdam")
     return 0;
 
   // Check free prototype.





More information about the llvm-commits mailing list