[llvm-dev] [RFC] Optimization Remark for derived function / argument attributes

Francis Visoiu Mistrih via llvm-dev llvm-dev at lists.llvm.org
Wed Jul 24 17:29:30 PDT 2019


Hi Billy,

> On Jul 23, 2019, at 4:46 PM, William Moses via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hello all,
> 
> During the compilation process, LLVM automatically derives various attributes about functions and values (for example that a pointer is nonnull, a function is constant, etc) that are used within a translation unit.
>  
> I propose adding a pass to LLVM that allows front-ends to output derived attributes. Such a pass would be useful both for developers and end users to debug programs, either learning that an expected attribute was learned, or an unexpected attribute was learned (for example a pointer never being written to).

This sounds like a good idea! Would adding new optimization remarks to passes that modify the attributes work? For example, we could emit an “analysis” remark in FunctionAttrs::setDoesNotRecurse.

>  
> Evidently the following might not be the final interface, but one could imagine something like the following:
>  
> $ ./clang foobar.c -g -Rannotations -O3
>    foobar.c:2:1: remark: derived following attributes for function f: fn_attr("norecurse") fn_attr("nounwind") fn_attr("readonly") arg_attr(0, "nocapture") arg_attr(0, "readonly") [-Rannotations]
>    double f(double* a) {
>  
> foobar.c:
>  
> double f(double* a) {
>     return a[0];
> }

If this is emitted as an analysis remark as suggested above, clang -Rpass-analysis=functionattrs could display the remarks in a similar way.

This has also the advantage that it can be serialized to a file using -fsave-optimization-record without any extra work involved.

Cheers,

— 
Francis

>  
> A work in progress patch implementing such an optimization remark is available here: https://reviews.llvm.org/D65169 <https://reviews.llvm.org/D65169>
>  
> Cheers,
> Billy Moses
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190724/41aac28b/attachment-0001.html>


More information about the llvm-dev mailing list