This is the mail archive of the
mailing list for the GCC project.
[Patch,AVR,4.6]: Fix PR50063 GCC does not support FP = SP
Denis Chertykov wrote:
> 2012/2/21 Richard Henderson:
>> On 02/21/12 09:08, Georg-Johann Lay wrote:
>>> PR rtl-optimization/50063
>>> * config/avr/avr.md (movhi_sp_r): Handle -1 (unknown IRQ state)
>>> and 2 (8-bit SP) in operand 2.
>>> * config/avr/avr.c (avr_prologue_setup_frame): Adjust prologue
>>> setup to use movhi_sp_r instead of vanilla move to write SP.
>>> Adjust REG_CFA notes to superseed unspec.
>>> (expand_epilogue): Adjust epilogue setup to use read_sp instead
>>> of vanilla move.
>>> As function body might contain CLI or SEI: Use irq_state 0 (IRQ
>>> known to be off) only with TARGET_NO_INTERRUPTS. Never use
>>> irq_state 1 (IRQ known to be on) here.
>> The CFA bits in avr_prologue_setup_frame look good.
>> I'll let Denis or Eric review the movhi_sp_r change.
Here is a patchlet for 4.6. It just sets -fno-dse to work around the problem
because I think back-porting all what's needed is too much change.
Compiling avr-libc without DSE gives the same sizes for all objects which shows
that this is not a crucial optimization for avr.
Ok for 4.6 branch?
* config/avr/avr.c (avr_option_override): Disable DSE.
--- config/avr/avr.c (revision 184460)
+++ config/avr/avr.c (working copy)
@@ -245,6 +245,11 @@ avr_option_override (void)
flag_delete_null_pointer_checks = 0;
+ /* Kick off DSE in order to hack around PR rtl-optimization/50063.
+ Backporting all of 4.7 is too much. */
+ flag_dse = 0;
for (t = avr_mcu_types; t->name; t++)
if (strcmp (t->name, avr_mcu_name) == 0)