This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch PR39806] Potential fix for spurious code generation
- From: Olga Golovanevsky <OLGA at il dot ibm dot com>
- To: Richard Guenther <rguenther at suse dot de>
- Cc: bonzini at gnu dot org, pinskia at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Mon, 30 Nov 2009 15:05:39 +0200
- Subject: Re: [patch PR39806] Potential fix for spurious code generation
As for now none of us can reproduce this bug any more.
What should I do: commit or drop?
Regtested on ppc-suse-linux64.
Thanks,
Olga
Olga Golovanevsky/Haifa/IBM wrote on 26/11/2009 17:29:28:
> This patch is a potential fix for spurious code generation due to
> struct reorg (as suggested by Andrew).
> As I cannot reproduce it on ppc, please check it on your platform.
>
> Thanks,
> Olga
>
> Index: ipa-struct-reorg.c
> ===================================================================
> --- ipa-struct-reorg.c (revision 154644)
> +++ ipa-struct-reorg.c (working copy)
> @@ -569,7 +569,7 @@ static new_var
> is_in_new_vars_htab (tree decl, htab_t new_vars_htab)
> {
> return (new_var) htab_find_with_hash (new_vars_htab, decl,
> - htab_hash_pointer (decl));
> + DECL_UID (decl));
> }
>
> /* Given original variable ORIG_VAR, this function returns
> @@ -1962,7 +1962,7 @@ add_to_new_vars_htab (new_var new_node,
> void **slot;
>
> slot = htab_find_slot_with_hash (new_vars_htab, new_node->orig_var,
> - htab_hash_pointer (new_node->orig_var),
> + DECL_UID (new_node->orig_var),
> INSERT);
> *slot = new_node;
> }
> @@ -2254,15 +2254,19 @@ create_new_var (tree var_decl, htab_t ne
> static hashval_t
> new_var_hash (const void *x)
> {
> - return htab_hash_pointer (((const_new_var)x)->orig_var);
> + return DECL_UID (((const_new_var)x)->orig_var);
> }
>
> -/* This function returns nonzero if orig_var of new_var X is equal to Y.
*/
> +/* This function returns nonzero if orig_var of new_var X
> + and tree Y have equal UIDs. */
>
> static int
> new_var_eq (const void *x, const void *y)
> {
> - return ((const_new_var)x)->orig_var == (const_tree)y;
> + if (DECL_P ((const_tree)y))
> + return DECL_UID (((const_new_var)x)->orig_var) == DECL_UID
> ((const_tree)y);
> + else
> + return 0;
> }
>
> /* This function check whether a structure type represented by STR