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