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: [PATCH] SSA expand: Convert mode when copying between partition base vars


On Tue, Apr 28, 2009 at 4:50 PM, Andreas Krebbel
<krebbel@linux.vnet.ibm.com> wrote:
>> Put the start_sequence/get_insns/end_sequence here too, and return an rtx
>> (the get_insns() return value). ?With those changes I would be fine with
>> the patch, but I can't approve it.
>
> Done. I've also changed insert_value_copy_on_edge to use the new
> function.

Ok if it passes bootstrap & regtest.

Thanks,
Richard.

> Bye,
>
> -Andreas-
>
> 2009-04-28 ?Andreas Krebbel ?<krebbel1@de.ibm.com>
>
> ? ? ? ?* tree-outof-ssa.c (emit_partition_copy): New function.
> ? ? ? ?(insert_partition_copy_on_edge, insert_rtx_to_part_on_edge,
> ? ? ? ?insert_part_to_rtx_on_edge, insert_value_copy_on_edge): Perform
> ? ? ? ?the partition base var copy using emit_partition_copy.
> ? ? ? ?(insert_rtx_to_part_on_edge): Add UNSIGNEDSRCP parameter.
> ? ? ? ?(elim_create): Pass the sign of the src to
> ? ? ? ?insert_rtx_to_part_on_edge.
>
>
> Index: gcc/tree-outof-ssa.c
> ===================================================================
> --- gcc/tree-outof-ssa.c.orig ? 2009-04-28 15:54:08.000000000 +0200
> +++ gcc/tree-outof-ssa.c ? ? ? ?2009-04-28 15:57:38.000000000 +0200
> @@ -128,6 +128,25 @@ set_location_for_edge (edge e)
> ? ? }
> ?}
>
> +/* Emit insns to copy SRC into DEST converting SRC if necessary. ?*/
> +
> +static inline rtx
> +emit_partition_copy (rtx dest, rtx src, int unsignedsrcp)
> +{
> + ?rtx seq;
> +
> + ?start_sequence ();
> +
> + ?if (GET_MODE (src) != VOIDmode && GET_MODE (src) != GET_MODE (dest))
> + ? ?src = convert_to_mode (GET_MODE (dest), src, unsignedsrcp);
> + ?emit_move_insn (dest, src);
> +
> + ?seq = get_insns ();
> + ?end_sequence ();
> +
> + ?return seq;
> +}
> +
> ?/* Insert a copy instruction from partition SRC to DEST onto edge E. ?*/
>
> ?static void
> @@ -149,12 +168,10 @@ insert_partition_copy_on_edge (edge e, i
>
> ? set_location_for_edge (e);
>
> - ?/* Partition copy between same base variables only, so it's the same mode,
> - ? ? hence we can use emit_move_insn. ?*/
> - ?start_sequence ();
> - ?emit_move_insn (SA.partition_to_pseudo[dest], SA.partition_to_pseudo[src]);
> - ?seq = get_insns ();
> - ?end_sequence ();
> + ?seq = emit_partition_copy (SA.partition_to_pseudo[dest],
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?SA.partition_to_pseudo[src],
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE_UNSIGNED (TREE_TYPE (
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?partition_to_var (SA.map, src))));
>
> ? insert_insn_on_edge (seq, e);
> ?}
> @@ -166,7 +183,6 @@ static void
> ?insert_value_copy_on_edge (edge e, int dest, tree src)
> ?{
> ? rtx seq, x;
> - ?enum machine_mode mode;
> ? if (dump_file && (dump_flags & TDF_DETAILS))
> ? ? {
> ? ? ? fprintf (dump_file,
> @@ -181,15 +197,12 @@ insert_value_copy_on_edge (edge e, int d
>
> ? set_location_for_edge (e);
>
> - ?start_sequence ();
> - ?mode = GET_MODE (SA.partition_to_pseudo[dest]);
> - ?x = expand_expr (src, SA.partition_to_pseudo[dest], mode, EXPAND_NORMAL);
> - ?if (GET_MODE (x) != VOIDmode && GET_MODE (x) != mode)
> - ? ?x = convert_to_mode (mode, x, TYPE_UNSIGNED (TREE_TYPE (src)));
> - ?if (x != SA.partition_to_pseudo[dest])
> - ? ?emit_move_insn (SA.partition_to_pseudo[dest], x);
> - ?seq = get_insns ();
> - ?end_sequence ();
> + ?x = expand_expr (src, SA.partition_to_pseudo[dest],
> + ? ? ? ? ? ? ? ? ?GET_MODE (SA.partition_to_pseudo[dest]),
> + ? ? ? ? ? ? ? ? ?EXPAND_NORMAL);
> + ?seq = emit_partition_copy (SA.partition_to_pseudo[dest],
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?x,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE_UNSIGNED (TREE_TYPE (src)));
>
> ? insert_insn_on_edge (seq, e);
> ?}
> @@ -198,7 +211,7 @@ insert_value_copy_on_edge (edge e, int d
> ? ?onto edge E. ?*/
>
> ?static void
> -insert_rtx_to_part_on_edge (edge e, int dest, rtx src)
> +insert_rtx_to_part_on_edge (edge e, int dest, rtx src, int unsignedsrcp)
> ?{
> ? rtx seq;
> ? if (dump_file && (dump_flags & TDF_DETAILS))
> @@ -214,11 +227,9 @@ insert_rtx_to_part_on_edge (edge e, int
> ? gcc_assert (SA.partition_to_pseudo[dest]);
> ? set_location_for_edge (e);
>
> - ?start_sequence ();
> - ?gcc_assert (GET_MODE (src) == GET_MODE (SA.partition_to_pseudo[dest]));
> - ?emit_move_insn (SA.partition_to_pseudo[dest], src);
> - ?seq = get_insns ();
> - ?end_sequence ();
> + ?seq = emit_partition_copy (SA.partition_to_pseudo[dest],
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?src,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?unsignedsrcp);
>
> ? insert_insn_on_edge (seq, e);
> ?}
> @@ -243,11 +254,10 @@ insert_part_to_rtx_on_edge (edge e, rtx
> ? gcc_assert (SA.partition_to_pseudo[src]);
> ? set_location_for_edge (e);
>
> - ?start_sequence ();
> - ?gcc_assert (GET_MODE (dest) == GET_MODE (SA.partition_to_pseudo[src]));
> - ?emit_move_insn (dest, SA.partition_to_pseudo[src]);
> - ?seq = get_insns ();
> - ?end_sequence ();
> + ?seq = emit_partition_copy (dest,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?SA.partition_to_pseudo[src],
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE_UNSIGNED (TREE_TYPE (
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?partition_to_var (SA.map, src))));
>
> ? insert_insn_on_edge (seq, e);
> ?}
> @@ -522,14 +532,17 @@ elim_create (elim_graph g, int T)
>
> ? if (elim_unvisited_predecessor (g, T))
> ? ? {
> - ? ? ?rtx U = get_temp_reg (partition_to_var (g->map, T));
> + ? ? ?tree var = partition_to_var (g->map, T);
> + ? ? ?rtx U = get_temp_reg (var);
> + ? ? ?int unsignedsrcp = TYPE_UNSIGNED (TREE_TYPE (var));
> +
> ? ? ? insert_part_to_rtx_on_edge (g->e, U, T);
> ? ? ? FOR_EACH_ELIM_GRAPH_PRED (g, T, P,
> ? ? ? ?{
> ? ? ? ? ?if (!TEST_BIT (g->visited, P))
> ? ? ? ? ? ?{
> ? ? ? ? ? ? ?elim_backward (g, P);
> - ? ? ? ? ? ? insert_rtx_to_part_on_edge (g->e, P, U);
> + ? ? ? ? ? ? insert_rtx_to_part_on_edge (g->e, P, U, unsignedsrcp);
> ? ? ? ? ? ?}
> ? ? ? ?});
> ? ? }
>


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