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

Hal Finkel hfinkel at anl.gov
Mon Mar 30 05:30:35 PDT 2015


----- Original Message -----
> From: "Nick Lewycky" <nicholas at mxc.ca>
> To: hfinkel at anl.gov, "rafael espindola" <rafael.espindola at gmail.com>
> Cc: nicholas at mxc.ca, llvm-commits at cs.uiuc.edu
> Sent: Friday, March 27, 2015 12:24:00 AM
> Subject: Re: [PATCH] [IR] Introduce a dereferenceable_xor_null(N) attribute.
> 
> 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

FWIW, I dislike this name as well, specifically the 'xor' part. Honestly, I think that dereferenceable_or_null is clear enough, but I can understand how some might find this confusing. Maybe dereferenceable_unless_null? Or just dereferenceable_if_not_null? A null pointer is address space 0 is not dereferenceable (regardless of this attribute), but what about not in address space zero? Normally, being null does not convey any information about being dereferenceable, but with this attribute, do you intend to change that?

My preference for using a different name was for correspondence with the API. It would be odd, I think, if adding dereferenceable to a pointer value was insufficient to cause isDereferenceablePointer to return true. This is not a super-strong preference ;)

 -Hal

> 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/
> 
> 
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-commits mailing list