> >>>>> - /* 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 > >> > >