> Is this really necessary, is it not enough to remove the assignment to > ret below? If the parameter is not used, devirtualization time bonus, > which you then rely on estimate_local_effects, should be zero for it. > > It is a very minor point, I suppose, but if the function gets cloned > for a different reason, it might still be beneficial to have as much > context-independent information for it as possible too, because that > can then be used in a callee (see the second call of > gather_context_independent_values). > > Other than that, all the changes seem like a clear improvement.
The cutoff is there mainly for the rest of the function: if (known_aggs) { vec<ipa_agg_jf_item, va_gc> *agg_items; struct ipa_agg_jump_function *ajf; agg_items = context_independent_aggregate_values (plats); ajf = &(*known_aggs)[i]; ajf->items = agg_items; ajf->by_ref = plats->aggs_by_ref; ret |= agg_items != NULL; } I did not want ret to become true if we manage to propagate into an unused aggregate parameter. Honza