This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [tree-ssa] Generic NRV optimization [was Re: two-elementstruct performance (was: strict-aliasing and typedefs) ]
- From: Diego Novillo <dnovillo at redhat dot com>
- To: Andreas Schwab <schwab at suse dot de>
- Cc: Jeff Law <law at redhat dot com>, Joe Buck <jbuck at synopsys dot com>, Gabriel Dos Reis <gdr at integrable-solutions dot net>, Brad Lucier <lucier at math dot purdue dot edu>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 26 Feb 2004 11:36:45 -0500
- Subject: Re: [tree-ssa] Generic NRV optimization [was Re: two-elementstruct performance (was: strict-aliasing and typedefs) ]
- Organization: Red Hat Canada
- References: <200402241628.i1OGSrdG008847@speedy.slc.redhat.com> <jebrnnxocc.fsf@sykes.suse.de> <1077718049.16194.206.camel@localhost.localdomain>
On Wed, 2004-02-25 at 09:07, Diego Novillo wrote:
> #1 0x00000000005d0589 in change_address_1 (memref=0x2a9779fb30, mode=SImode,
> addr=0x2a97db3720, validate=1)
> at /home/cygnus/dnovillo/perf/sbox/tree-ssa-branch/local.x86_64/src/gcc/emit-rtl.c:1770
> 1770 abort ();
> (gdb) list 1770
> 1765 change_address_1 (rtx memref, enum machine_mode mode, rtx addr, int validate)
> 1766 {
> 1767 rtx new;
> 1768
> 1769 if (GET_CODE (memref) != MEM)
> 1770 abort ();
> 1771 if (mode == VOIDmode)
> 1772 mode = GET_MODE (memref);
> 1773 if (addr == 0)
> 1774 addr = XEXP (memref, 0);
> (gdb) p memref
> $1 = 0x2a9779fb30
> (gdb) pr
> (parallel:BLK [
> (expr_list (reg:SI 58 [ val ])
> (const_int 0 [0x0]))
> (expr_list (reg:DI 59 [ val+8 ])
> (const_int 8 [0x8]))
> ])
>
Well, we could move the RTL expanding logic from expand_return() but I'm
not sure this the real fix. This will fail on every host that has a
parallel:BLK in DECL_RTL of RESULT_DECL.
We don't seem to know how to handle this type of DECL_RTL when expanding
assignments.
Does moving the expand logic from expand_return() look like the thing to
do here?
Diego.