https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122448
--- Comment #7 from Robin Dapp <rdapp at gcc dot gnu.org> ---
Looks like another case of lifting up a vsetvl where we shouldn't.
...
ld s8,40(sp)
.cfi_restore 24
ld s9,32(sp)
.cfi_restore 25
vsetvli a5,zero,e16,m1,ta,ma # This clobbers a5
.L12:
beq a1,zero,.L29
sb a5,%lo(d)(s11) # Here we store the value to be printed
sh a4,%lo(c)(s10)
a5 is zero before the vsetvli and 8 after.
Still need to figure out where exactly we go wrong.
I'm pretty sure we check for "transparency" before lifting up a vsetvl.