https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120782
--- Comment #8 from Robin Dapp <rdapp at gcc dot gnu.org> ---
The vlse comes from a vec_duplicate:V2DI that has a reg pointing to a
"real(kind=4)", so a float.
What's interesting, though, is that the MEM is supposedly 64-bit aligned (see
below, A64).
(insn 285 282 287 13 (set (reg:V2DI 474)
(vec_duplicate:V2DI (mem:DI (reg:DI 202 [ ivtmp.4273 ]) [0 MEM
<unsigned long> [(real(kind=4) *)_173]+0 S8 A64])))
"module_ra_rrtm.fppized.f90":5172:83 3602 {*vec_duplicatev2di}
(nil))
We expand the vec_duplicate as vlse64.v eventually. I audited several other
uses of vlse for broadcast and they appear safe (at first sight) to me. There
is one split where we create a new stack slot for broadcasting a 64-bit value
on rv32 but even that should be ok.
So just from this issue here I'd be wary to unconditionally require
TARGET_VECTOR_MISALIGN_SUPPORTED for zero-stride broadcast.
I'm not very accustomed with the alignment attributes of a MEM but shouldn't
they be correct/reliable? Guess I need to dig some more but from my current
understanding I wouldn't rule out a frontend/middle-end issue either.