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=47252&view=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=47252&r1=47251&r2=47252&view=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 && > - (isa<AllocationInst>(Object) || > - (isa<Argument>(Object) && > - (cast<Argument>(Object)- > >hasByValAttr() || > - cast<Argument>(Object)- > >hasNoAliasAttr())))) { > + (isa<AllocationInst>(Object) || isa<Argument>(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 (isa<AllocationInst>(Object) || > + cast<Argument>(Object)->hasByValAttr() || > + cast<Argument>(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_cast<CallInst>(CS.getInstruction())) > - if (CI->isTailCall() && !isa<MallocInst>(Object)) > - return NoModRef; > + if (isa<AllocationInst>(Object) || > + cast<Argument>(Object)->hasByValAttr()) > + if (CallInst *CI = dyn_cast<CallInst>(CS.getInstruction())) > + if (CI->isTailCall() && !isa<MallocInst>(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