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