This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch, avr] extend part-clobbered check to AVR_TINY architecture


Hi,

When tried backporting AVR_TINY architecture support to 4.9, build failed in libgcc for AVR_TINY.
Failure was due to ICE same as:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53065

Fix provided for that bug checks for if the mode crosses the callee saved register.
Below patch updates that check as the AVR_TINY has different set of callee saved 
registers (r18 and r19).

This patch is against trunk.

NOTE: ICE is re-produciable only with 4.9 + tiny patch and --with-dwarf2 enabled.

Is this ok for trunk?

diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 68d5ddc..2f441e5 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -11333,9 +11333,10 @@ avr_hard_regno_call_part_clobbered (unsigned regno, machine_mode mode)
     return 0;

   /* Return true if any of the following boundaries is crossed:
-     17/18, 27/28 and 29/30.  */
+     17/18 or 19/20 (if AVR_TINY), 27/28 and 29/30.  */

-  return ((regno < 18 && regno + GET_MODE_SIZE (mode) > 18)
+  return ((regno <= LAST_CALLEE_SAVED_REG &&
+           regno + GET_MODE_SIZE (mode) > (LAST_CALLEE_SAVED_REG + 1))
           || (regno < REG_Y && regno + GET_MODE_SIZE (mode) > REG_Y)
           || (regno < REG_Z && regno + GET_MODE_SIZE (mode) > REG_Z));
 }


Regards,
Pitchumani


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]