This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH PR34114/1]More multiple_of_p cases.
On Fri, Jul 29, 2016 at 4:50 PM, Jeff Law <firstname.lastname@example.org> wrote:
> On 07/29/2016 09:35 AM, Bin Cheng wrote:
>> This is prerequisite patch for fixing PR34114 which reveals a weakness of
>> GCC in analyzing niter for loop with NE_EXPR exit condition. For such
>> loops, we quite often need to check if delta (final - start) of loop range
>> is multiple of IV's step. This patch proves multiple_of_p (top, bottom) for
>> more cases:
>> 1) Handle (X + 4294967293) as (X - 3) if the expression is of unsigned
>> int type. At the moment it's not recognized because (4294967293 % 3 != 0)
>> 2) Handle top var if it's defined as:
>> top = (X & ~(bottom - 1) ; bottom is power of 2
>> 3) Handle top var if it's defined as:
>> Y = X % bottom
>> top = X - Y
>> Bootstrap and test on x86_64 and AArch64 along with next patch. Is it OK?
>> 2016-07-27 Bin Cheng <email@example.com>
>> * fold-const.c (multiple_of_p): Improve MULT_EXPR, PLUS_EXPR,
>> PLUS_EXPR case. Handle SSA_NAME case.
> Note that it would seem that this is an ideal kind of behaviorial change to
> test in the new unit testing framework. See the code inside the #if
> CHECKING_P at the bottom of fold-const.c.
> Essentially you can build up the appropriate tree nodes and pass them to
> multiple_of_p, then test the result -- without having to find/create C code
> that will trigger your code.
> I'm not requiring it for this change, but I might start for this kind of
> change in the future :-) In the mean time, consider adding the tests, you
> may find that they're a great way to verify behavior of these low level
> folders and similar routines.
Thanks very much for pointing me to this, I will study it and try to
add test for this patch.