Revital Eres <revital.e...@linaro.org> wrote on 19/05/2011 07:44:23 AM:

> From: Revital Eres <revital.e...@linaro.org>
> To: Ayal Zaks/Haifa/IBM@IBMIL
> Cc: gcc-patches@gcc.gnu.org, Patch Tracking <patc...@linaro.org>
> Date: 19/05/2011 07:44 AM
> Subject: [PATCH, SMS 2/4] Move the creation of anti-dep edge
>
> Hello,
>
> The attached patch moves the creation of anti-dep edge from a
> branch to it's def from create_ddg_dep_from_intra_loop_link () to
> add_cross_iteration_register_deps  () due to the fact the edge is with
> distance 1 and thus should be in the later function.
> The edge was added to avoid creating reg-moves.
>
> The patch was tested together with the rest of the patches in this
series.
> On ppc64-redhat-linux regtest as well as bootstrap with SMS flags
> enabling SMS also on loops with stage count 1.  Regtested on SPU.
> On arm-linux-gnueabi regtseted on c,c++. Bootstrap c language with SMS
> flags enabling SMS also on loops with stage count 1.
>
> OK for mainline?
>

OK, this makes sense. Just to re-confirm, the exact same edges are created
in both cases, right?

>+         /* Always create the edge if the use node is a branch in
>+            order to prevent the creation of reg-moves.  */
>           if (DF_REF_ID (last_def) != DF_REF_ID (first_def)
>-              || !flag_modulo_sched_allow_regmoves)
>+              || !flag_modulo_sched_allow_regmoves
>+             || (flag_modulo_sched_allow_regmoves && JUMP_P (use_node->
insn)))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  redundant; suffices to check

+               || JUMP_P (use_node->insn))

>             create_ddg_dep_no_link (g, use_node, first_def_node,
ANTI_DEP,
>                                     REG_DEP, 1);



> Thanks,
> Revital
>
>         * ddg.c (create_ddg_dep_from_intra_loop_link): Remove the
creation
>         of anti-dep edge from a branch.
>         (add_cross_iteration_register_deps): Create anti-dep edge from
>         a branch.
>
>
> Index: ddg.c
> ===================================================================
> --- ddg.c       (revision 173785)
> +++ ddg.c       (working copy)
> @@ -197,11 +197,6 @@ create_ddg_dep_from_intra_loop_link (ddg
>          }
>      }
>
> -  /* If a true dep edge enters the branch create an anti edge in the
> -     opposite direction to prevent the creation of reg-moves.  */
> -  if ((DEP_TYPE (link) == REG_DEP_TRUE) && JUMP_P (dest_node->insn))
> -    create_ddg_dep_no_link (g, dest_node, src_node, ANTI_DEP, REG_DEP,
1);
> -
>     latency = dep_cost (link);
>     e = create_ddg_edge (src_node, dest_node, t, dt, latency, distance);
>     add_edge_to_ddg (g, e);
> @@ -306,8 +301,11 @@ add_cross_iteration_register_deps (ddg_p
>
>           gcc_assert (first_def_node);
>
> +         /* Always create the edge if the use node is a branch in
> +            order to prevent the creation of reg-moves.  */
>            if (DF_REF_ID (last_def) != DF_REF_ID (first_def)
> -              || !flag_modulo_sched_allow_regmoves)
> +              || !flag_modulo_sched_allow_regmoves
> +             || (flag_modulo_sched_allow_regmoves && JUMP_P (use_node->
insn)))
>              create_ddg_dep_no_link (g, use_node, first_def_node,
ANTI_DEP,
>                                      REG_DEP, 1);

Reply via email to