This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] More thorough checking in reg_fits_class_p
- From: Richard Earnshaw <rearnsha at arm dot com>
- To: Jim MacArthur <jim dot macarthur at arm dot com>, gcc-patches at gcc dot gnu dot org, rdsandiford at googlemail dot com
- Date: Wed, 02 May 2012 14:52:03 +0100
- Subject: Re: [patch] More thorough checking in reg_fits_class_p
- References: <4F994B99.1010606@arm.com> <4F9E9772.8080700@arm.com> <g4ehr5gvnq.fsf@richards-thinkpad.stglab.manchester.uk.ibm.com> <4F9E9DCB.7010206@arm.com> <g462chgu7f.fsf@richards-thinkpad.stglab.manchester.uk.ibm.com> <4F9EA849.8020807@arm.com> <g4y5pdfdsj.fsf@richards-thinkpad.stglab.manchester.uk.ibm.com> <4FA122AE.5040207@arm.com> <g4havyg2l1.fsf@richards-thinkpad.stglab.manchester.uk.ibm.com>
On 02/05/12 14:00, Richard Sandiford wrote:
> Jim MacArthur <jim.macarthur@arm.com> writes:
>> New Changelog text:
>>
>> 2012-05-02 Jim MacArthur<jim.macarthur@arm.com>
>> * recog.c (reg_fits_class_p): Check both regno and regno + offset are
>> hard registers.
>
> Thanks. I still think the final:
>
>> + && HARD_REGISTER_NUM_P (end_hard_regno (regno + offset, mode))
>
> check belongs in in_hard_reg_set_p, since most callers don't (and IMO
> shouldn't need to) check this. The idea behind adding these functions
> was to commonise various bits of code that were doing the same checks
> in slightly different ways. Requiring each caller to check the end
> register would go against that to some extent.
>
If you're going to do that (which is fine, BTW), I think
in_hard_reg_set_p should gcc_assert() that regno is a valid hard reg.
> E.g. the code could be:
>
> end_regno = end_hard_regno (mode, regno);
> if (!HARD_REGISTER_NUM_P (end_regno))
> return false;
>
> while (++regno < end_regno)
> if (!TEST_HARD_REG_BIT (regs, regno))
> return false;
>
> Or alternatively we could change hard-reg-set.h so that HARD_REG_SET
> is big enough to store a bit for FIRST_PSEUDO_REGISTER. I don't mind
> which, but others might.
I'd prefer the test to be explicit. The buffer overrun check might be a
tad more efficient in some cases, but someday someone will manage to
find a way of directly going 2 regs beyond the end...
>
> Looks good otherwise. And for the record, I can't approve this anyway. :-)
>
> Richard
>