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

Francis Visoiu Mistrih via llvm-dev llvm-dev at lists.llvm.org
Thu Jul 25 15:00:34 PDT 2019


Hi,

> On Jul 25, 2019, at 2:11 PM, William Moses <wmoses at mit.edu> wrote:
> 
> Hi Francis,
> 
> I'm wondering if it makes more sense to have a single pass to emit attributes rather than making sure that this is emitted in all passes that could modify arguments. If memory serves there's more than just FunctionAttrs.

It could be, but I think emitting the remarks at the point where attributes are modified could also give you more information on what triggered a specific change, and that can be added to the remark. It’s also more in the spirit of the remarks to act on a compiler decision rather than doing extra work.

Thanks,

— 
Francis

> 
> Cheers,
> Billy
> 
> On Wed, Jul 24, 2019 at 5:32 PM Francis Visoiu Mistrih <francisvm at yahoo.com> wrote:
> 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
>>  
>> Cheers,
>> Billy Moses
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> 



More information about the llvm-dev mailing list