Other parts of this code treat noalias arguments as objects for

the purposes of escape analysis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52302 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-06-16 06:28:01 +00:00
parent 845f0d2f0f
commit e7275794d3

View File

@ -320,11 +320,15 @@ static bool isKnownNonNull(const Value *V) {
/// isNonEscapingLocalObject - Return true if the pointer is to a function-local
/// object that never escapes from the function.
static bool isNonEscapingLocalObject(const Value *V) {
// If this is a local allocation or byval argument, check to see if it
// escapes.
if (isa<AllocationInst>(V) ||
(isa<Argument>(V) && cast<Argument>(V)->hasByValAttr()))
// If this is a local allocation, check to see if it escapes.
if (isa<AllocationInst>(V))
return !AddressMightEscape(V);
// If this is an argument that corresponds to a byval or noalias argument,
// it can't escape either.
if (const Argument *A = dyn_cast<Argument>(V))
if (A->hasByValAttr() || A->hasNoAliasAttr())
return !AddressMightEscape(V);
return false;
}