On Tue, 6 Sep 2011, Martin Jambor wrote:

> Hi,
> 
> the patch below makes SRA produce intere type replacements when it
> currently produces enumeration type ones because this then may cause
> VRP to assume wrong bounds (PR 49911).
> 
> I do not know how to create a testcase for the PR this should solve
> because I could not reproduce it on yesterday's trunk checkout.
> 
> The patch is against trunk, where it successfully passes bootstrap and
> testing on x86_64-linux, but applies well also to 4.6 and 4.5 branches
> and there has been a request to commit them there as well so I'd like
> to do so (after testing it on them which I have not done yet).
> 
> OK?

Ok.  Can you add the testcase from the PR?

Thanks,
Richard.

> Thanks,
> 
> Martin
> 
> 
> 2011-09-05  Martin Jambor  <mjam...@suse.cz>
> 
>       PR tree-optimization/49911
>       * tree-sra.c (analyze_access_subtree): Change type of to-be-replaced
>       enumerations to the corresponding plain integer type.
> 
> Index: src/gcc/tree-sra.c
> ===================================================================
> --- src.orig/gcc/tree-sra.c
> +++ src/gcc/tree-sra.c
> @@ -2075,13 +2075,25 @@ analyze_access_subtree (struct access *r
>         || ((root->grp_scalar_read || root->grp_assignment_read)
>             && (root->grp_scalar_write || root->grp_assignment_write))))
>      {
> +      bool new_integer_type;
> +      if (TREE_CODE (root->type) == ENUMERAL_TYPE)
> +     {
> +       tree rt = root->type;
> +       root->type = build_nonstandard_integer_type (TYPE_PRECISION (rt),
> +                                                    TYPE_UNSIGNED (rt));
> +       new_integer_type = true;
> +     }
> +      else
> +     new_integer_type = false;
> +
>        if (dump_file && (dump_flags & TDF_DETAILS))
>       {
>         fprintf (dump_file, "Marking ");
>         print_generic_expr (dump_file, root->base, 0);
> -       fprintf (dump_file, " offset: %u, size: %u: ",
> +       fprintf (dump_file, " offset: %u, size: %u ",
>                  (unsigned) root->offset, (unsigned) root->size);
> -       fprintf (dump_file, " to be replaced.\n");
> +       fprintf (dump_file, " to be replaced%s.\n",
> +                new_integer_type ? " with an integer": "");
>       }
>  
>        root->grp_to_be_replaced = 1;
> 
> 

-- 
Richard Guenther <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer

Reply via email to