I can't reproduce on my Mac Pro. Can you file a bug report with a reduce testcase?

--Owen

On Feb 18, 2008, at 1:43 PM, Evan Cheng wrote:

Hi Resistor,

This breaks MultiSource/Benchmarks/Prolangs-C++/city under x86-64. Please take a look.

Thanks,

Evan

On Feb 17, 2008, at 1:29 PM, Owen Anderson wrote:

Author: resistor
Date: Sun Feb 17 15:29:08 2008
New Revision: 47247

URL: http://llvm.org/viewvc/llvm-project?rev=47247&view=rev
Log:
Teach getModRefInfo that memcpy, memmove, and memset don't "capture" memory addresses. Also, noalias arguments are be considered "like" stack allocated ones for this purpose, because the only way they can be modref'ed is if they escape somewhere in the current function.

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

Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=47247&r1=47246&r2=47247&view=diff

= = = = = = = = = =====================================================================
--- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Sun Feb 17 15:29:08 2008
@@ -21,7 +21,7 @@
#include "llvm/ParameterAttributes.h"
#include "llvm/GlobalVariable.h"
#include "llvm/Instructions.h"
-#include "llvm/Intrinsics.h"
+#include "llvm/IntrinsicInst.h"
#include "llvm/Pass.h"
#include "llvm/Target/TargetData.h"
#include "llvm/ADT/SmallVector.h"
@@ -228,6 +228,13 @@
// If returned, the address will escape to calling functions, but no
   // callees could modify it.
   break; // next use
+    case Instruction::Call:
+ // If the call is to a few known safe intrinsics, we know that it does
+      // not escape
+      if (isa<MemIntrinsic>(I))
+        return false;
+      else
+        return true;
 default:
   return true;
 }
@@ -247,8 +254,11 @@
 // Allocations and byval arguments are "new" objects.
 if (Object &&
     (isa<AllocationInst>(Object) ||
- (isa<Argument>(Object) && cast<Argument>(Object)- >hasByValAttr()))) { - // Okay, the pointer is to a stack allocated object. If we can prove that
+         (isa<Argument>(Object) &&
+ (cast<Argument>(Object)- >hasByValAttr() || + cast<Argument>(Object)- >hasNoAliasAttr())))) { + // Okay, the pointer is to a stack allocated (or effectively so, for
+      // for noalias parameters) object.  If we can prove that
// the pointer never "escapes", then we know the call cannot clobber it,
   // because it simply can't get its address.
   if (!AddressMightEscape(Object))


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to