On Tue, Jul 5, 2011 at 4:07 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> Ping.

That doesn't look correct without also ensuring we never create a
TARGET_MEM_REF with a base that is not in the default address-space.
In fact, with this patch the address-space argument to addr_for_mem_ref
should go away or we need a hook that provides a non-promoted mode
for address-spaces.

Uli?

HJ?  What testcase does this fix?  Please add it at least.

That said, this patch seems to paper over a problem that exists elsewhere.

Richard.

>
> On Sat, Jun 25, 2011 at 9:20 AM, H.J. Lu <hongjiu...@intel.com> wrote:
>> Hi,
>>
>> I was informed that MEM_REF only works in ptr_mode.  This patch changes
>> addr_for_mem_ref to use ptr_mode.  OK for trunk?
>>
>> Thanks.
>>
>>
>> H.J.
>> ---
>> 2011-06-25  H.J. Lu  <hongjiu...@intel.com>
>>
>>        PR middle-end/47383
>>        * tree-ssa-address.c (addr_for_mem_ref): Use ptr_mode instead
>>        of targetm.addr_space.address_mode.
>>
>> diff --git a/gcc/tree-ssa-address.c b/gcc/tree-ssa-address.c
>> index e3934e1..ddc6d58 100644
>> --- a/gcc/tree-ssa-address.c
>> +++ b/gcc/tree-ssa-address.c
>> @@ -188,12 +188,12 @@ rtx
>>  addr_for_mem_ref (struct mem_address *addr, addr_space_t as,
>>                  bool really_expand)
>>  {
>> -  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
>>   rtx address, sym, bse, idx, st, off;
>>   struct mem_addr_template *templ;
>>
>>   if (addr->step && !integer_onep (addr->step))
>> -    st = immed_double_int_const (tree_to_double_int (addr->step), 
>> address_mode);
>> +    st = immed_double_int_const (tree_to_double_int (addr->step),
>> +                                ptr_mode);
>>   else
>>     st = NULL_RTX;
>>
>> @@ -201,7 +201,7 @@ addr_for_mem_ref (struct mem_address *addr, addr_space_t 
>> as,
>>     off = immed_double_int_const
>>            (double_int_sext (tree_to_double_int (addr->offset),
>>                              TYPE_PRECISION (TREE_TYPE (addr->offset))),
>> -            address_mode);
>> +            ptr_mode);
>>   else
>>     off = NULL_RTX;
>>
>> @@ -220,16 +220,16 @@ addr_for_mem_ref (struct mem_address *addr, 
>> addr_space_t as,
>>       if (!templ->ref)
>>        {
>>          sym = (addr->symbol ?
>> -                gen_rtx_SYMBOL_REF (address_mode, ggc_strdup 
>> ("test_symbol"))
>> +                gen_rtx_SYMBOL_REF (ptr_mode, ggc_strdup ("test_symbol"))
>>                 : NULL_RTX);
>>          bse = (addr->base ?
>> -                gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1)
>> +                gen_raw_REG (ptr_mode, LAST_VIRTUAL_REGISTER + 1)
>>                 : NULL_RTX);
>>          idx = (addr->index ?
>> -                gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 2)
>> +                gen_raw_REG (ptr_mode, LAST_VIRTUAL_REGISTER + 2)
>>                 : NULL_RTX);
>>
>> -         gen_addr_rtx (address_mode, sym, bse, idx,
>> +         gen_addr_rtx (ptr_mode, sym, bse, idx,
>>                        st? const0_rtx : NULL_RTX,
>>                        off? const0_rtx : NULL_RTX,
>>                        &templ->ref,
>> @@ -247,16 +247,16 @@ addr_for_mem_ref (struct mem_address *addr, 
>> addr_space_t as,
>>
>>   /* Otherwise really expand the expressions.  */
>>   sym = (addr->symbol
>> -        ? expand_expr (addr->symbol, NULL_RTX, address_mode, EXPAND_NORMAL)
>> +        ? expand_expr (addr->symbol, NULL_RTX, ptr_mode, EXPAND_NORMAL)
>>         : NULL_RTX);
>>   bse = (addr->base
>> -        ? expand_expr (addr->base, NULL_RTX, address_mode, EXPAND_NORMAL)
>> +        ? expand_expr (addr->base, NULL_RTX, ptr_mode, EXPAND_NORMAL)
>>         : NULL_RTX);
>>   idx = (addr->index
>> -        ? expand_expr (addr->index, NULL_RTX, address_mode, EXPAND_NORMAL)
>> +        ? expand_expr (addr->index, NULL_RTX, ptr_mode, EXPAND_NORMAL)
>>         : NULL_RTX);
>>
>> -  gen_addr_rtx (address_mode, sym, bse, idx, st, off, &address, NULL, NULL);
>> +  gen_addr_rtx (ptr_mode, sym, bse, idx, st, off, &address, NULL, NULL);
>>   return address;
>>  }
>>
>>
>
>
>
> --
> H.J.
>

Reply via email to