[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