On Jun 10, 2011, at 6:55 PM, Jan Hubicka wrote:
> Hi,
> this patch updated ipa-cp and ipa-prop for aliases. It is basically easy -
> we don't
> analyze nodes represneting aliases and when propagating we skip them, like
> everywhere
> else.
...
> @@ -759,7 +768,8 @@ ipcp_propagate_stage (void)
>
> for (cs = node->callees; cs; cs = cs->next_callee)
> {
> - struct ipa_node_params *callee_info = IPA_NODE_REF (cs->callee);
> + struct cgraph_node *callee = cgraph_function_or_thunk_node
> (cs->callee, NULL);
> + struct ipa_node_params *callee_info = IPA_NODE_REF (callee);
> struct ipa_edge_args *args = IPA_EDGE_REF (cs);
>
> if (ipa_is_called_with_var_arguments (callee_info)
> @@ -778,11 +788,11 @@ ipcp_propagate_stage (void)
> {
> dest_lat->type = new_lat.type;
> dest_lat->constant = new_lat.constant;
> - ipa_push_func_to_list (&wl, cs->callee);
> + ipa_push_func_to_list (&wl, callee);
> }
>
> if (ipcp_propagate_types (info, callee_info, jump_func, i))
> - ipa_push_func_to_list (&wl, cs->callee);
> + ipa_push_func_to_list (&wl, callee);
> }
> }
> }
Jan,
I have a question about the above hunk. With this hunk you replace all uses of
'cs->callee' with 'callee' in ipcp_propagate_stage() except for in the check:
if (ipa_is_called_with_var_arguments (callee_info)
|| !cs->callee->analyzed
|| ipa_is_called_with_var_arguments (callee_info))
continue;
Is there a reason why you left 'cs->callee' intact in this case?
Thank you,
--
Maxim Kuvyrkov
CodeSourcery / Mentor Graphics