https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320
--- Comment #56 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to rguent...@suse.de from comment #55) > On July 17, 2014 6:13:14 PM CEST, "thopre01 at gcc dot gnu.org" > <gcc-bugzi...@gcc.gnu.org> wrote: > >https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320 > > > >--- Comment #53 from thopre01 at gcc dot gnu.org --- > >(In reply to thopre01 from comment #52) > >> (In reply to Eric Botcazou from comment #51) > >> > > >> > TARGET_MEM_REF is supposed to be a valid memory access for the > >target though > >> > and, by definition, an unaligned access is not valid for a strict > >alignment > >> > target (unless you have a movmisalign pattern), so the problem is > >the > >> > TARGET_MEM_REF. > >> > >> So we just need to identify what changes the MEM_REF that bswap > >introduce > >> into a TARGET_MEM_REF without taking alignment into account. > >> > >> After bswap it's only a MEM_REF: > >> > >> load_dst_215 = MEM[(unsigned char *)load_src_277]; > > > >So it changes from a MEM_REF to a TARGET_MEM_REF in ivopts from a quick > >grep. I > >don't know how much this system but I can take a look after Cauldron > >where does > >this happen and bring the right person into this discussion. > > You need to fix may_be_unaligned (or similar) in ivopts. So actually that function now looks completely sane (thanks Eric). So I still need preprocessed source and a target triplet to configure a cross for. There must be missing may_be_unaligned_p calls in IVOPTs.