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, 4.6] Enable IPA-CP to propagate &CONST_DECLs


On Fri, Mar 19, 2010 at 2:02 PM, Martin Jambor <mjambor@suse.cz> wrote:
> Hi,
>
> I thought that IPA-CP was already able to propagate fortran
> &CONST_DECLs but yesterday I have observed it cannot. ?I also found
> out the only piece that was missing was the lattice meet operation
> which did not consider the same constants as equal.
>
> The patch below adds this capability and with it (and -fwhole-program
> -flto) I can see such constants propagated in every polyhedron
> benchmark (I have not got to any execution-time measurements though).
>
> Bootstrapped and regression tested on current trunk, I'd like to
> commit it once stage 1 opens again (I have added this to the queue
> before my devirtualization patches, many of them need some very slight
> changes because of the thunks in dumping).

This is ok for stage1.

Thanks,
Richard.

> Thanks,
>
> Martin
>
>
> 2010-03-18 ?Martin Jambor ?<mjambor@suse.cz>
>
> ? ? ? ?* ipa-cp.c (ipcp_lats_are_equal): Return true also if the two
> ? ? ? ?lattices are addresses of CONST_DECLs with the same initial value.
> ? ? ? ?(ipcp_print_all_lattices): Print values of CONST_DECLs.
> ? ? ? ?* ipa-prop.c (ipa_print_node_jump_functions): Likewise.
>
> Index: icln/gcc/ipa-cp.c
> ===================================================================
> --- icln.orig/gcc/ipa-cp.c
> +++ icln/gcc/ipa-cp.c
> @@ -226,10 +226,14 @@ ipcp_lats_are_equal (struct ipcp_lattice
> ? if (lat1->type != lat2->type)
> ? ? return false;
>
> - ?if (operand_equal_p (lat1->constant, lat2->constant, 0))
> - ? ?return true;
> -
> - ?return false;
> + ?if (TREE_CODE (lat1->constant) == ?ADDR_EXPR
> + ? ? ?&& TREE_CODE (lat2->constant) == ?ADDR_EXPR
> + ? ? ?&& TREE_CODE (TREE_OPERAND (lat1->constant, 0)) == CONST_DECL
> + ? ? ?&& TREE_CODE (TREE_OPERAND (lat2->constant, 0)) == CONST_DECL)
> + ? ?return operand_equal_p (DECL_INITIAL (TREE_OPERAND (lat1->constant, 0)),
> + ? ? ? ? ? ? ? ? ? ? ? ? ? DECL_INITIAL (TREE_OPERAND (lat2->constant, 0)), 0);
> + ?else
> + ? ?return operand_equal_p (lat1->constant, lat2->constant, 0);
> ?}
>
> ?/* Compute Meet arithmetics:
> @@ -385,8 +389,16 @@ ipcp_print_all_lattices (FILE * f)
> ? ? ? ? ?fprintf (f, " ? ?param [%d]: ", i);
> ? ? ? ? ?if (lat->type == IPA_CONST_VALUE)
> ? ? ? ? ? ?{
> + ? ? ? ? ? ? tree cst = lat->constant;
> ? ? ? ? ? ? ?fprintf (f, "type is CONST ");
> - ? ? ? ? ? ? print_generic_expr (f, lat->constant, 0);
> + ? ? ? ? ? ? print_generic_expr (f, cst, 0);
> + ? ? ? ? ? ? if (TREE_CODE (cst) == ADDR_EXPR
> + ? ? ? ? ? ? ? ? && TREE_CODE (TREE_OPERAND (cst, 0)) == CONST_DECL)
> + ? ? ? ? ? ? ? {
> + ? ? ? ? ? ? ? ? fprintf (f, " -> ");
> + ? ? ? ? ? ? ? ? print_generic_expr (f, DECL_INITIAL (TREE_OPERAND (cst, 0)),
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0);
> + ? ? ? ? ? ? ? }
> ? ? ? ? ? ? ?fprintf (f, "\n");
> ? ? ? ? ? ?}
> ? ? ? ? ?else if (lat->type == IPA_TOP)
> Index: icln/gcc/ipa-prop.c
> ===================================================================
> --- icln.orig/gcc/ipa-prop.c
> +++ icln/gcc/ipa-prop.c
> @@ -288,6 +288,13 @@ ipa_print_node_jump_functions (FILE *f,
> ? ? ? ? ? ? ?tree val = jump_func->value.constant;
> ? ? ? ? ? ? ?fprintf (f, "CONST: ");
> ? ? ? ? ? ? ?print_generic_expr (f, val, 0);
> + ? ? ? ? ? ? if (TREE_CODE (val) == ADDR_EXPR
> + ? ? ? ? ? ? ? ? && TREE_CODE (TREE_OPERAND (val, 0)) == CONST_DECL)
> + ? ? ? ? ? ? ? {
> + ? ? ? ? ? ? ? ? fprintf (f, " -> ");
> + ? ? ? ? ? ? ? ? print_generic_expr (f, DECL_INITIAL (TREE_OPERAND (val, 0)),
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0);
> + ? ? ? ? ? ? ? }
> ? ? ? ? ? ? ?fprintf (f, "\n");
> ? ? ? ? ? ?}
> ? ? ? ? ?else if (type == IPA_JF_CONST_MEMBER_PTR)
>


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