[PATCH] [IR] Introduce a dereferenceable_xor_null(N) attribute.

Nick Lewycky nicholas at mxc.ca
Thu Mar 26 22:23:55 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




More information about the llvm-commits mailing list