On Thu, Aug 08, 2024 at 06:03:13AM -0600, Jeff Law wrote:
>
>
> On 8/8/24 5:15 AM, Stefan Schulze Frielinghaus via Gcc wrote:
>
> >
> > However `(reg:DI 61 [ MEM[(const union T *)p_2(D)] ])` referencing the
> > same pseudo in a different mode is not substituted in insn 6 which
> > leads in the following to an error. The insn is emitted in
> > s390_expand_insv() during
> There can only be a single instance of a given pseudo, if you have multiple
> instances, that's the bug.
Yeah I was fearing this might be the culprit.
>
> >
>
> > rtx
> > s390_gen_lowpart_subreg (machine_mode mode, rtx expr)
> > {
> > rtx lowpart = gen_lowpart (mode, expr);
> >
> > /* There might be no SUBREG in case it could be applied to the hard
> > REG rtx or it could be folded with a paradoxical subreg. Bring
> > it back. */
> > if (!SUBREG_P (lowpart))
> > {
> > machine_mode reg_mode = TARGET_ZARCH ? DImode : SImode;
> > gcc_assert (REG_P (lowpart));
> > lowpart = gen_lowpart_SUBREG (mode,
> > gen_rtx_REG (reg_mode,
> > REGNO (lowpart)));
> Yup, that's your problem I think. You can't create another instance of the
> pseudo like that.
Thanks for confirmation. I will come up with a fix.
Cheers,
Stefan