On Thu, Mar 3, 2011 at 4:11 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> On Thu, Mar 03, 2011 at 03:31:55PM +1000, Richard Henderson wrote:
>> Do you really want to fallthru with newexp here?
>> In theory it could have folded to anything.  My guess is that
>> you want to restart instead...
>
> Here is an updated patch that does that, and also as requested by
> Richard Guenther instead of calling set_mem_expr with a type
> just clears MEM_EXPR if it isn't suitable for alias oracle.
>
> Bootstrapped/regtested again on x86_64-linux and i686-linux, ok?

Ok.

Thanks,
Richard.

> 2011-03-03  Jakub Jelinek  <ja...@redhat.com>
>
>        PR debug/47283
>        * cfgexpand.c (expand_debug_expr) <case MEM_REF>: If MEM_REF
>        first operand is not is_gimple_mem_ref_addr, try to fold it.
>        If the operand still isn't is_gimple_mem_ref_addr, clear
>        MEM_EXPR on op0.
>
> --- gcc/cfgexpand.c.jj  2011-02-21 15:37:42.000000000 +0100
> +++ gcc/cfgexpand.c     2011-03-02 11:05:32.000000000 +0100
> @@ -2578,6 +2578,15 @@ expand_debug_expr (tree exp)
>       }
>
>     case MEM_REF:
> +      if (!is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
> +       {
> +         tree newexp = fold_binary (MEM_REF, TREE_TYPE (exp),
> +                                    TREE_OPERAND (exp, 0),
> +                                    TREE_OPERAND (exp, 1));
> +         if (newexp)
> +           return expand_debug_expr (newexp);
> +       }
> +      /* FALLTHROUGH */
>     case INDIRECT_REF:
>       op0 = expand_debug_expr (TREE_OPERAND (exp, 0));
>       if (!op0)
> @@ -2611,6 +2620,9 @@ expand_debug_expr (tree exp)
>
>       op0 = gen_rtx_MEM (mode, op0);
>       set_mem_attributes (op0, exp, 0);
> +      if (TREE_CODE (exp) == MEM_REF
> +         && !is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
> +       set_mem_expr (op0, NULL_TREE);
>       set_mem_addr_space (op0, as);
>
>       return op0;
>
>
>        Jakub
>

Reply via email to