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.



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.

jeff

Reply via email to