From: Duncan P. N. Exon Smith Date: Sat, 24 Sep 2016 19:39:47 +0000 (+0000) Subject: Analysis: Return early in isKnownNonNullAt for ConstantData X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e31ddb432936642e8c992a420ab6e8afb3965dde;p=llvm Analysis: Return early in isKnownNonNullAt for ConstantData Check and return early for ConstantPointerNull and UndefValue specifically in isKnownNonNullAt, and assert that ConstantData never make it to isKnownNonNullFromDominatingCondition. This confirms that isKnownNonNullFromDominatingCondition never walks through the use-list of an instance of ConstantData. Given that such use-lists cross module boundaries, it never really made sense to do so, and was potentially very expensive. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282333 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp index df86a015569..827e2524915 100644 --- a/lib/Analysis/ValueTracking.cpp +++ b/lib/Analysis/ValueTracking.cpp @@ -3297,6 +3297,7 @@ static bool isKnownNonNullFromDominatingCondition(const Value *V, const Instruction *CtxI, const DominatorTree *DT) { assert(V->getType()->isPointerTy() && "V must be pointer type"); + assert(!isa(V) && "Did not expect ConstantPointerNull"); unsigned NumUsesExplored = 0; for (auto *U : V->users()) { @@ -3333,6 +3334,9 @@ static bool isKnownNonNullFromDominatingCondition(const Value *V, bool llvm::isKnownNonNullAt(const Value *V, const Instruction *CtxI, const DominatorTree *DT) { + if (isa(V) || isa(V)) + return false; + if (isKnownNonNull(V)) return true;