Fix ICE due to commit for PR88834

Jeff Law law@redhat.com
Mon Jun 17 19:13:00 GMT 2019


On 6/17/19 3:08 AM, Richard Sandiford wrote:
> Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org> writes:
>> Hi All,
>>
>> As pointed to me by Jeff, after committing patch to fix PR88834, some
>> tests are failing for target rx-elf. This is because in
>> preferred_mem_scale_factor we end up with mem_mode which is BLKmode
>> and hence GET_MODE_UNIT_SIZE returns zero.
>>
>> I have fixed this by checking for BLKmode. I believe this is the only
>> way we can have GET_MODE_UNIT_SIZE of 0. Otherwise, we can check for
>> GET_MODE_UNIT_SIZE of zero.
>>
>> Bootstrapped and regression tested attached patch on x86_64-linux-gnu
>> with no new regressions. Is this OK for trunk?
>>
>> Thanks,
>> Kugan
>>
>> gcc/ChangeLog:
>>
>> 2019-06-17  Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
>>
>>     * tree-ssa-address.c (preferred_mem_scale_factor): Handle when
>> mem_mode is BLKmode.
>>
>> From 5cd4ac35ce8006a6c407a2386175382f053dcdd3 Mon Sep 17 00:00:00 2001
>> From: Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
>> Date: Sun, 16 Jun 2019 21:02:59 +1000
>> Subject: [PATCH] Fix ICE for rx-elf
>>
>> Change-Id: I503b6b8316e7d11d63ec7749ff44dbc641078539
>> ---
>>  gcc/tree-ssa-address.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/gcc/tree-ssa-address.c b/gcc/tree-ssa-address.c
>> index cdd432a..1dca779 100644
>> --- a/gcc/tree-ssa-address.c
>> +++ b/gcc/tree-ssa-address.c
>> @@ -1138,6 +1138,10 @@ preferred_mem_scale_factor (tree base, machine_mode mem_mode,
>>    addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (base));
>>    unsigned int fact = GET_MODE_UNIT_SIZE (mem_mode);
>>  
>> +  /* for BLKmode, we cant do anything so return 1.  */
> 
> s/for/For/;s/cant/can't/
> 
>> +  if (mem_mode == BLKmode)
>> +    return 1;
>> +
> 
> Think it makes more sense to do this at the start of the function,
> before:
> 
>   struct mem_address parts = {};
>   addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (base));
>   unsigned int fact = GET_MODE_UNIT_SIZE (mem_mode);
> 
> (Hopefully one day GET_MODE_SIZE & co. will assert on BLKmode and VOIDmode.)
Yea.  Not sure why.  There's probably a compile-time hit, but I suspect
it'd turn up some interesting bugs.

jeff



More information about the Gcc-patches mailing list