https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91683

--- Comment #6 from Jim Wilson <wilson at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> Btw, the rtx of pseudos doesn't change, what changes is the address of the
> entry in regno_reg_rtx[] which is the pseudo-nr -> rtx map.  But I don't see
> that involved...

do_SUBST_MODE saves the address of the rtx being modified, in this case the
address of a pseudo reg.

Breakpoint 5, do_SUBST_MODE (into=0x7ffff6280458, newval=E_DImode)
    at ../../gcc-svn/gcc/combine.c:809
(gdb) print into
$5 = (rtx *) 0x7ffff6280458
(gdb) print *into
$6 = (rtx) 0x7ffff6287630
(gdb) pr
warning: Expression is not an assignment (and might have no effect)
(reg:SI 139)
(gdb) print regno_reg_rtx[139]
$7 = (rtx) 0x7ffff6287630
(gdb) print &regno_reg_rtx[139]
$8 = (rtx *) 0x7ffff6280458
(gdb) 

So into is an address into regno_reg_rtx.  When we realloc regno_reg_rtx this
changes.

Breakpoint 6, emit_status::ensure_regno_capacity (this=0x1a881f0 <x_rtl+48>)
    at ../../gcc-svn/gcc/emit-rtl.c:1215
(gdb) next 6
(gdb) print regno_reg_rtx[139]
$13 = (rtx) 0x7ffff6287630
(gdb) print &regno_reg_rtx[139]
$14 = (rtx *) 0x7ffff627b458
(gdb) print $5
$15 = (rtx *) 0x7ffff6280458
(gdb) print *$5
$16 = (rtx) 0xa5a5a5a5a5a5a5a5
(gdb)

Reply via email to