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]

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


2015-05-11 9:07 GMT+03:00 Sivanupandi, Pitchumani
<Pitchumani.Sivanupandi@atmel.com>:
>> -----Original Message-----
>> From: Denis Chertykov [mailto:chertykov@gmail.com]
>> Sent: Sunday, May 10, 2015 12:55 PM
>> To: Sivanupandi, Pitchumani
>> Cc: Georg-Johann Lay; GCC Patches
>> Subject: Re: [patch, avr] extend part-clobbered check to AVR_TINY
>> architecture
>>
>> Sorry for delay. (I was at vacation in Kazakhstan without internet.)
>>
>>
>> 2015-05-08 8:32 GMT+03:00 Sivanupandi, Pitchumani
>> <Pitchumani.Sivanupandi@atmel.com>:
>> > Ping!
>> >
>> >> -----Original Message-----
>> >> From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches-
>> >> owner@gcc.gnu.org] On Behalf Of Sivanupandi, Pitchumani
>> >> Sent: Tuesday, April 21, 2015 8:21 PM
>> >> To: Georg-Johann Lay; Denis Chertykov
>> >> Cc: GCC Patches
>> >> Subject: [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));  }
>> >>
>>
>> I think it's ok.
>
> Could you please commit? I do not have commit access.
>
> (--patch--)
> 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));  }
> (--patch--)
>
> Regards,
> Pitchumani
>
> gcc/ChangeLog
> 2015-05-11  Pitchumani Sivanupandi  <pitchumani.s@atmel.com>
>
>     * config/avr/avr.c (avr_hard_regno_call_part_clobbered): Use
>         LAST_CALLEE_SAVED_REG instead of hard-coded register number.
>         (Last callee saved reg is different for AVR_TINY architecture)
>

Committed.

Denis.


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