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