Move isKnownNonNull out of AliasAnalysis.h and into ValueTracking.cpp since

it isn't really an AliasAnalysis concept, and ValueTracking has similar things
that it could plausibly share code with some day.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174027 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2013-01-31 02:40:59 +00:00
parent 85238aae1a
commit de0eb19248
5 changed files with 21 additions and 22 deletions

View File

@@ -2014,3 +2014,19 @@ bool llvm::isSafeToSpeculativelyExecute(const Value *V,
return false; // Misc instructions which have effects
}
}
/// isKnownNonNull - Return true if we know that the specified value is never
/// null.
bool llvm::isKnownNonNull(const Value *V) {
// Alloca never returns null, malloc might.
if (isa<AllocaInst>(V)) return true;
// A byval argument is never null.
if (const Argument *A = dyn_cast<Argument>(V))
return A->hasByValAttr();
// Global values are not null unless extern weak.
if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))
return !GV->hasExternalWeakLinkage();
return false;
}