This is the mail archive of the 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 PR34114/1]More multiple_of_p cases.

On Fri, Jul 29, 2016 at 4:50 PM, Jeff Law <> wrote:
> On 07/29/2016 09:35 AM, Bin Cheng wrote:
>> Hi,
>> 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?
>> Thanks,
>> bin
>> 2016-07-27  Bin Cheng  <>
>>         * fold-const.c (multiple_of_p): Improve MULT_EXPR, PLUS_EXPR,
>>         PLUS_EXPR case.  Handle SSA_NAME case.
> OK.
> 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.
Hi Jeff,
Thanks very much for pointing me to this, I will study it and try to
add test for this patch.

> Jeff

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