[PATCH] Make inlining consistent in LTO and non-LTO mode (PR target/71991).

Jan Hubicka hubicka@ucw.cz
Thu Aug 10 13:42:00 GMT 2017


> >>>>> -  /* If callee has no option attributes, then it is ok to inline.  */
> >>>>> -  if (!callee_tree)
> >>>>> +  /* If callee has no option attributes (or default),
> >>>>> +     then it is ok to inline.  */
> >>>>> +  if (!callee_tree || callee_tree == target_option_default_node)
> >>>>
> >>>> I am not sure this actually makes sense, because target_option_default_node is not very
> >>>> meaningful for LTO (it contains whatever was passed to LTO driver). 
> >>>
> >>> I see!
> >>>
> >>>  Perhaps one can check
> >>>> for explicit optimization/machine attribute and whether caller and callee come from
> > 
> > I'm not sure what you mean by 'for explicit optimization/machine attribute' ?

You can simply do lookup_attribute and see if callee_tree was set because of attribute
or because of LTO.  In current patch the comparsion with target_option_default_node
still does not make much of sense.  But perhaps just 
lookup_attribute ("optimize", DECL_ATTRIBUTES (...)) would do the job. This is already
done in ipa-inline.

Honza
> > 
> > I'm attaching a new patch, is it closer?
> > 
> > Martin
> > 
> >>>> same compilation unit, though this is quite hackish and will do unexpected things with COMDATs.
> >>>
> >>> That's quite cumbersome. Any other idea than marking the PR as won't fix?
> >>
> >> Yep, it is not prettiest. The problem is that the concept that callee can change semantics
> >> when no explicit attribute is present is sloppy.  I am not sure how many programs rely on it
> >> (it is kind of surprising to see functions not being inlined into your target attribute annotated
> >> function I guess).
> >> Note that we check for original file in inliner already - this can be done by comparing lto_file_data
> >> of corresponding cgraph nodes.
> >>
> >> Honza
> >>
> > 



More information about the Gcc-patches mailing list