mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 14:35:54 +00:00
2d08e46e8b
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 llvm-svn: 235132 |
||
---|---|---|
.. | ||
Transforms | ||
Analysis.h | ||
BitReader.h | ||
BitWriter.h | ||
Core.h | ||
Disassembler.h | ||
ExecutionEngine.h | ||
Initialization.h | ||
IRReader.h | ||
Linker.h | ||
LinkTimeOptimizer.h | ||
lto.h | ||
module.modulemap | ||
Object.h | ||
Support.h | ||
Target.h | ||
TargetMachine.h |