Kugan Vivekanandarajah <kugan.vivekanandara...@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.vivekanandara...@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.vivekanandara...@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.)

OK with those changes, thanks.

Richard

Reply via email to