This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Ping #1: [Patch,AVR]: Hack around PR rtl-optimization/52543
- From: Georg-Johann Lay <avr at gjlay dot de>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Denis Chertykov <chertykov at gmail dot com>, Eric Weddington <eric dot weddington at atmel dot com>
- Date: Mon, 19 Mar 2012 12:25:10 +0100
- Subject: Ping #1: [Patch,AVR]: Hack around PR rtl-optimization/52543
- References: <4F5A4FFE.9000203@gjlay.de>
http://gcc.gnu.org/ml/gcc-patches/2012-03/msg00641.html
Georg-Johann Lay wrote:
> The problem with the PR is that lower-subreg.c happily splits multi-byte moves
> from address spaces without knowing anything about the additional costs this is
> causing.
>
> The TARGET_MODE_DEPENDENT_ADDRESS_P hook cannot be used for 16-bit addresses
> because that hook is not sensitive to address spaces, but is is used for the
> 24-bit address space to avoid subreg lowering for PSImode.
>
> For the 16-bit address spaces the mov expander now assigns the address register
> by hand as post-increment.
>
> Luckily, post-increment is the only addressing mode that makes sense with the
> non-generic address spaces and there is no choice for the address register
> resp. addressing mode, anyway...
>
> This patch does not fix the PR issue, of course, it just avoids subreg lowering
> by using/pretending mode-dependent addresses.
>
> Ok for trunk?
>
> Johann
>
> PR rtl-optimization/52543
> * config/avr/avr.c (avr_mode_dependent_address_p): New function.
> (TARGET_MODE_DEPENDENT_ADDRESS_P): New define.
>
> * config/avr/avr.md (unspec): Add UNSPEC_LPM.
> (load_<mode>_libgcc): Use UNSPEC_LPM instead of MEM.
> (mov<mode>): For multi-byte move from non-generic
> 16-bit address spaces: Expand to use Z++ as address for
> inline code and use UNSPEC_LPM (Z) for code from libgcc.
> (load<mode>_libgcc): Remove expander.
> (split-lpmx): Remove split.