Re: [llvm-commits] [llvm] r47252 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
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
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
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
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