This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch, avr] extend part-clobbered check to AVR_TINY architecture
- From: "Sivanupandi, Pitchumani" <Pitchumani dot Sivanupandi at atmel dot com>
- To: Georg-Johann Lay <avr at gjlay dot de>, Denis Chertykov <chertykov at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 21 Apr 2015 14:50:30 +0000
- Subject: [patch, avr] extend part-clobbered check to AVR_TINY architecture
- Authentication-results: sourceware.org; auth=none
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