HomePhabricator

[IR] Introduce a dereferenceable_or_null(N) attribute.

Description

[IR] Introduce a dereferenceable_or_null(N) attribute.

Summary:
If a pointer is marked as dereferenceable_or_null(N), LLVM assumes it
is either null or dereferenceable(N) or both. This change only
introduces the attribute and adds a token test case for the llvm-as
/ llvm-dis. It does not hook up other parts of the optimizer to
actually exploit the attribute -- those changes will come later.

For pointers in address space 0, dereferenceable(N) is now exactly
equivalent to dereferenceable_or_null(N) && nonnull. For other
address spaces, dereferenceable(N) is potentially weaker than
dereferenceable_or_null(N) && nonnull (since we could have a null
dereferenceable(N) pointer).

The motivating case for this change is Java (and other managed
languages), where pointers are either null or dereferenceable up to
some usually known-at-compile-time constant offset.

Reviewers: rafael, hfinkel

Reviewed By: hfinkel

Subscribers: nicholas, llvm-commits

Differential Revision: http://reviews.llvm.org/D8650

Details

Committed
sanjoyApr 16 2015, 1:29 PM
Reviewer
hfinkel
Differential Revision
D8650: [IR] Introduce a dereferenceable_or_null(N) attribute.
Parents
rL235131: Surround assignments w/ parenthesis to avoid mistakes.
Branches
Unknown
Tags
Unknown