[PATCH] [IR] Introduce a dereferenceable_xor_null(N) attribute.
Nick Lewycky
nicholas at mxc.ca
Thu Mar 26 22:24:00 PDT 2015
Sanjoy Das wrote:
> Hi hfinkel, rafael,
>
> If a pointer is marked as dereferenceable_xor_null(N), LLVM assumes it
> is exactly one of { null, dereferenceable(N) }.
Painting the bike shed ... I dislike the name so much I'd rather you
changed "dereferenceable" to mean this, and then allow people to apply
"nonnull" with dereferenceable to get the current meaning of
deferenceable. Changing the meaning of the existing attribute is less
bad. (I also think that it's strict a loosening of the guarantees that
dereferenceable offers, so using older .ll/.bc files with newer llvm
will work, with loss of optimization opportunity in the worst case.
That's fine.)
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_xor_null(N)`&& `nonnull`. For other
> address spaces, `dereferenceable(N)` is potentially weaker than
> `dereferenceable_xor_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.
Also pointers returned by malloc. LibCallSimplifier::optimizeCall
annotates known functions with attributes, please add that there to
anything that it applies to.
> http://reviews.llvm.org/D8650
>
> Files:
>
> docs/LangRef.rst
> include/llvm-c/Core.h
> include/llvm/Bitcode/LLVMBitCodes.h
> include/llvm/IR/Attributes.h
> include/llvm/IR/Function.h
> include/llvm/IR/Instructions.h
> lib/AsmParser/LLLexer.cpp
> lib/AsmParser/LLParser.cpp
> lib/AsmParser/LLParser.h
> lib/AsmParser/LLToken.h
> lib/Bitcode/Reader/BitcodeReader.cpp
> lib/Bitcode/Writer/BitcodeWriter.cpp
> lib/IR/AttributeImpl.h
> lib/IR/Attributes.cpp
> lib/IR/Function.cpp
> lib/IR/Instructions.cpp
> test/Assembler/deref-xor-null.ll
>
> EMAIL PREFERENCES
>
> http://reviews.llvm.org/settings/panel/emailpreferences/
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
http://reviews.llvm.org/D8650
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
More information about the llvm-commits
mailing list