Jeff Law <l...@redhat.com> 于2021年2月17日周三 上午3:16写道: > > > > On 2/14/21 6:33 PM, YunQiang Su wrote: > > It is found by ada s-pack96.adb ftbfs, due to 96bit load: 96 = 64 + 32. > > While the 32bit pair of <load>l <load>r is mark as SUBREG, so they are > > not in SImode, make it fail to find suitable insn. > > > > gcc/ChangeLog: > > > > * config/mips/mips.c (mips_expand_ext_as_unaligned_load): > > If TARGET_64BIT and dest is SUBREG, we check the width, if it > > equal to SImode, we use SImode operation, just like what we are > > doing for REG one. > > --- > > gcc/ChangeLog | 8 ++++++++ > > gcc/config/mips/mips.c | 2 +- > > 2 files changed, 9 insertions(+), 1 deletion(-) > > > > diff --git a/gcc/ChangeLog b/gcc/ChangeLog > > index ddf4c7f92d7..fb12eeb971d 100644 > > --- a/gcc/ChangeLog > > +++ b/gcc/ChangeLog > > @@ -1,3 +1,11 @@ > > +2021-02-15 YunQiang Su <yunqiang...@cipunited.com> > > + > > + PR target/98996 > > + * config/mips/mips.c (mips_expand_ext_as_unaligned_load): > > + If TARGET_64BIT and dest is SUBREG, we check the width, if it > > + equal to SImode, we use SImode operation, just like what we are > > + doing for REG one. > Do you need to do any checking on the contents of the SUBREG? ie, do > you need to know if you've got (subreg (reg)) vs (subreg (mem)) >
Yes. you are right, we'd better to check it. > Similarly I'd expect you may need to look at the mode of the inner > object. You could have a true subreg (outer mode is smaller than inner > mode), but you might also be able to have a paradoxical subreg (outer > mode is larger than inner mode). > I don't think that it is needed, since we we make sure that the mode of `dest' is DImode, and the width is SImode. > Jeff >