Re: [llvm-commits] [llvm] r47252 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

2008-02-18 Thread Owen Anderson
Two issues: first, it was ignoring  the parameters to a memcpy when  
determining if the memcpy mod/ref'ed a value, and the tail call based  
check is invalid for sret arguments.


--Owen

On Feb 18, 2008, at 12:27 AM, Bill Wendling wrote:


What are the bugs?

-bw

On Feb 17, 2008, at 6:31 PM, Owen Anderson wrote:


Author: resistor
Date: Sun Feb 17 20:31:23 2008
New Revision: 47252

URL: http://llvm.org/viewvc/llvm-project?rev=47252view=rev
Log:
Fix bugs that Chris noticed in my last patch.

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=47252r1=47251r2=47252view=diff

= 
=


--- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Sun Feb 17
20:31:23 2008
@@ -250,22 +250,30 @@
const Value *Object = getUnderlyingObject(P);
// Allocations and byval arguments are new objects.
if (Object 
-(isaAllocationInst(Object) ||
- (isaArgument(Object) 
- (castArgument(Object)-

hasByValAttr() ||

-  castArgument(Object)-

hasNoAliasAttr() {

+(isaAllocationInst(Object) || isaArgument(Object))) {
  // 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))
-return NoModRef;
+  if (isaAllocationInst(Object) ||
+  castArgument(Object)-hasByValAttr() ||
+  castArgument(Object)-hasNoAliasAttr())
+if (!AddressMightEscape(Object)) {
+  for (CallSite::arg_iterator CI = CS.arg_begin(), CE =
CS.arg_end();
+  CI != CE; ++CI)
+if (getUnderlyingObject(CI-get()) == P)
+  return AliasAnalysis::getModRefInfo(CS, P, Size);
+
+  return NoModRef;
+}

  // If this is a tail call and P points to a stack location,
we know that
  // the tail call cannot access or modify the local stack.
-  if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
-if (CI-isTailCall()  !isaMallocInst(Object))
-  return NoModRef;
+  if (isaAllocationInst(Object) ||
+  castArgument(Object)-hasByValAttr())
+if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
+  if (CI-isTailCall()  !isaMallocInst(Object))
+return NoModRef;
}
  }



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


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




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


[llvm-commits] [llvm] r47252 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

2008-02-17 Thread Owen Anderson
Author: resistor
Date: Sun Feb 17 20:31:23 2008
New Revision: 47252

URL: http://llvm.org/viewvc/llvm-project?rev=47252view=rev
Log:
Fix bugs that Chris noticed in my last patch.

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=47252r1=47251r2=47252view=diff

==
--- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Sun Feb 17 20:31:23 2008
@@ -250,22 +250,30 @@
 const Value *Object = getUnderlyingObject(P);
 // Allocations and byval arguments are new objects.
 if (Object 
-(isaAllocationInst(Object) ||
- (isaArgument(Object) 
- (castArgument(Object)-hasByValAttr() ||
-  castArgument(Object)-hasNoAliasAttr() 
{
+(isaAllocationInst(Object) || isaArgument(Object))) {
   // 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))
-return NoModRef;
+  if (isaAllocationInst(Object) ||
+  castArgument(Object)-hasByValAttr() ||
+  castArgument(Object)-hasNoAliasAttr())
+if (!AddressMightEscape(Object)) {
+  for (CallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
+  CI != CE; ++CI)
+if (getUnderlyingObject(CI-get()) == P)
+  return AliasAnalysis::getModRefInfo(CS, P, Size);
+
+  return NoModRef;
+}
 
   // If this is a tail call and P points to a stack location, we know that
   // the tail call cannot access or modify the local stack.
-  if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
-if (CI-isTailCall()  !isaMallocInst(Object))
-  return NoModRef;
+  if (isaAllocationInst(Object) ||
+  castArgument(Object)-hasByValAttr())
+if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
+  if (CI-isTailCall()  !isaMallocInst(Object))
+return NoModRef;
 }
   }
 


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


Re: [llvm-commits] [llvm] r47252 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

2008-02-17 Thread Bill Wendling
What are the bugs?

-bw

On Feb 17, 2008, at 6:31 PM, Owen Anderson wrote:

 Author: resistor
 Date: Sun Feb 17 20:31:23 2008
 New Revision: 47252

 URL: http://llvm.org/viewvc/llvm-project?rev=47252view=rev
 Log:
 Fix bugs that Chris noticed in my last patch.

 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=47252r1=47251r2=47252view=diff

 == 
 
 --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
 +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Sun Feb 17  
 20:31:23 2008
 @@ -250,22 +250,30 @@
  const Value *Object = getUnderlyingObject(P);
  // Allocations and byval arguments are new objects.
  if (Object 
 -(isaAllocationInst(Object) ||
 - (isaArgument(Object) 
 - (castArgument(Object)- 
 hasByValAttr() ||
 -  castArgument(Object)- 
 hasNoAliasAttr() {
 +(isaAllocationInst(Object) || isaArgument(Object))) {
// 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))
 -return NoModRef;
 +  if (isaAllocationInst(Object) ||
 +  castArgument(Object)-hasByValAttr() ||
 +  castArgument(Object)-hasNoAliasAttr())
 +if (!AddressMightEscape(Object)) {
 +  for (CallSite::arg_iterator CI = CS.arg_begin(), CE =  
 CS.arg_end();
 +  CI != CE; ++CI)
 +if (getUnderlyingObject(CI-get()) == P)
 +  return AliasAnalysis::getModRefInfo(CS, P, Size);
 +
 +  return NoModRef;
 +}

// If this is a tail call and P points to a stack location,  
 we know that
// the tail call cannot access or modify the local stack.
 -  if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
 -if (CI-isTailCall()  !isaMallocInst(Object))
 -  return NoModRef;
 +  if (isaAllocationInst(Object) ||
 +  castArgument(Object)-hasByValAttr())
 +if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
 +  if (CI-isTailCall()  !isaMallocInst(Object))
 +return NoModRef;
  }
}



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

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


Re: [llvm-commits] [llvm] r47252 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

2008-02-17 Thread Chris Lattner

On Feb 17, 2008, at 10:27 PM, Bill Wendling wrote:

 What are the bugs?

Specifically, it is good to say what you're fixing in the commit log,  
so that it shows up in svn log.

-Chris


 -bw

 On Feb 17, 2008, at 6:31 PM, Owen Anderson wrote:

 Author: resistor
 Date: Sun Feb 17 20:31:23 2008
 New Revision: 47252

 URL: http://llvm.org/viewvc/llvm-project?rev=47252view=rev
 Log:
 Fix bugs that Chris noticed in my last patch.

 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=47252r1=47251r2=47252view=diff

 = 
 =
 
 --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
 +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Sun Feb 17
 20:31:23 2008
 @@ -250,22 +250,30 @@
 const Value *Object = getUnderlyingObject(P);
 // Allocations and byval arguments are new objects.
 if (Object 
 -(isaAllocationInst(Object) ||
 - (isaArgument(Object) 
 - (castArgument(Object)-
 hasByValAttr() ||
 -  castArgument(Object)-
 hasNoAliasAttr() {
 +(isaAllocationInst(Object) || isaArgument(Object))) {
   // 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))
 -return NoModRef;
 +  if (isaAllocationInst(Object) ||
 +  castArgument(Object)-hasByValAttr() ||
 +  castArgument(Object)-hasNoAliasAttr())
 +if (!AddressMightEscape(Object)) {
 +  for (CallSite::arg_iterator CI = CS.arg_begin(), CE =
 CS.arg_end();
 +  CI != CE; ++CI)
 +if (getUnderlyingObject(CI-get()) == P)
 +  return AliasAnalysis::getModRefInfo(CS, P, Size);
 +
 +  return NoModRef;
 +}

   // If this is a tail call and P points to a stack location,
 we know that
   // the tail call cannot access or modify the local stack.
 -  if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
 -if (CI-isTailCall()  !isaMallocInst(Object))
 -  return NoModRef;
 +  if (isaAllocationInst(Object) ||
 +  castArgument(Object)-hasByValAttr())
 +if (CallInst *CI = dyn_castCallInst(CS.getInstruction()))
 +  if (CI-isTailCall()  !isaMallocInst(Object))
 +return NoModRef;
 }
   }



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

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

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