aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2014-05-20 01:23:40 +0000
committerNick Lewycky <nicholas@mxc.ca>2014-05-20 01:23:40 +0000
commitd52b1528c0dd7a5f00e18d9ba974c8ef0e549f0b (patch)
treec00b5abebd9a613232f62650ef6c5cfd5a857e96 /llvm/lib/Analysis/ValueTracking.cpp
parent57cccec4467282be31fb1c8b47bd1a71629ff732 (diff)
downloadllvm-d52b1528c0dd7a5f00e18d9ba974c8ef0e549f0b.zip
llvm-d52b1528c0dd7a5f00e18d9ba974c8ef0e549f0b.tar.gz
llvm-d52b1528c0dd7a5f00e18d9ba974c8ef0e549f0b.tar.bz2
Add 'nonnull', a new parameter and return attribute which indicates that the pointer is not null. Instcombine will elide comparisons between these and null. Patch by Luqman Aden!
llvm-svn: 209185
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 44305bb..280f15b 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -2065,9 +2065,9 @@ bool llvm::isKnownNonNull(const Value *V, const TargetLibraryInfo *TLI) {
// Alloca never returns null, malloc might.
if (isa<AllocaInst>(V)) return true;
- // A byval or inalloca argument is never null.
+ // A byval, inalloca, or nonnull argument is never null.
if (const Argument *A = dyn_cast<Argument>(V))
- return A->hasByValOrInAllocaAttr();
+ return A->hasByValOrInAllocaAttr() || A->hasNonNullAttr();
// Global values are not null unless extern weak.
if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))