[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