This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [ping patch] Predict for loop exits in short-circuit conditions


Attached is the updated patch. Yes, if we add a VRP pass before
profile pass, this patch would be unnecessary. Should we add a VRP
pass?

Thanks,
Dehao

On Sat, Oct 6, 2012 at 9:38 AM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> ping^2
>>
>> Honza, do you think this patch can make into 4.8 stage 1?
>
> +      if (check_value_one ^ integer_onep (val))
>
> Probably better as !=
> (especially because GNU coding standard allows predicates to return more than
> just boolean)
>
>
> +    {
> +      edge e1;
> +      edge_iterator ei;
> +      tree val = gimple_phi_arg_def (phi_stmt, i);
> +      edge e = gimple_phi_arg_edge (phi_stmt, i);
> +
> +      if (!TREE_CONSTANT (val) || !(integer_zerop (val) || integer_onep (val)))
> +       continue;
> +      if (check_value_one ^ integer_onep (val))
> +       continue;
> +      if (VEC_length (edge, e->src->succs) != 1)
> +       {
> +         if (!predicted_by_p (exit_edge->src, PRED_LOOP_ITERATIONS_GUESSED)
> +             && !predicted_by_p (exit_edge->src, PRED_LOOP_ITERATIONS)
> +             && !predicted_by_p (exit_edge->src, PRED_LOOP_EXIT))
> +           predict_edge_def (e, PRED_LOOP_EXIT, NOT_TAKEN);
> +         continue;
> +       }
> +
> +      FOR_EACH_EDGE (e1, ei, e->src->preds)
> +       if (!predicted_by_p (exit_edge->src, PRED_LOOP_ITERATIONS_GUESSED)
> +           && !predicted_by_p (exit_edge->src, PRED_LOOP_ITERATIONS)
> +           && !predicted_by_p (exit_edge->src, PRED_LOOP_EXIT))
> +         predict_edge_def (e1, PRED_LOOP_EXIT, NOT_TAKEN);
>
> Here you found an edge that you know is going to terminate the loop
> and you want to predict all paths to this edge as unlikely.
> Perhaps you want to use predict paths leading_to_edge for edge?
>
> You do not need to check PRED_LOOP_ITERATIONS and PRED_LOOP_ITERATIONS_GUESSED
> because those never go to the non-exit edges.
>
> The nature of predict_paths_for_bb type heuristic is that they are not really
> additive: if the path leads to two different aborts it does not make it more
> sure that it will be unlikely.  So perhaps you can add !predicted_by_p (e, pred)
> prior predict_edge_def call in the function?
>
> I wonder if we did VRP just before branch predction to jump thread the shortcut
> condtions into loopback edges, would be there still cases where this
> optimization will match?
>
> Honza

Attachment: predict.patch
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]