On 9/24/2024 12:16 AM, Jeff Law wrote:
> 
> 
> On 9/23/24 2:32 AM, Artemiy Volkov wrote:
>> Implement a match.pd pattern for C1 - X cmp C2, where C1 and C2 are
>> integer constants and X is of a UB-on-overflow type.  The pattern is
>> simplified to X rcmp C1 - C2 by moving X and C2 to the other side of the
>> comparison (with opposite signs).  If C1 - C2 happens to overflow,
>> replace the whole expression with either a constant 0 or a constant 1
>> node, depending on the comparison operator and the sign of the overflow.
>>
>> This transformation allows to occasionally save load-immediate /
>> subtraction instructions, e.g. the following statement:
>>
>> 10 - (int) x <= 9;
>>
>> now compiles to
>>
>> sgt     a0,a0,zero
>>
>> instead of
>>
>> li      a5,10
>> sub     a0,a5,a0
>> slti    a0,a0,10
>>
>> on 32-bit RISC-V.
>>
>> Additional examples can be found in the newly added test file. This
>> patch has been bootstrapped and regtested on aarch64, x86_64, and
>> i386, and additionally regtested on riscv32.  Existing tests were
>> adjusted where necessary.
>>
>> gcc/ChangeLog:
>>
>>     PR tree-optimization/116024
>>          * match.pd: New transformation around integer comparison.
>>
>> gcc/testsuite/ChangeLog:
>>
>>          * gcc.dg/tree-ssa/pr116024.c: New test.
>>          * gcc.dg/pr67089-6.c: Adjust.
> I think Richi is already engaged on the review side, so I'll let him own 
> especially since he knows more about match.pd patterns than I do.
> 
> 
>> +int32_t i1(void)
>> +{
>> +  int32_t l = 2;
>> +  l = 10 - (int32_t)f();
>> +  return l <= 9; // f() > 0
>> +}
> Why the initialization of l = 2?  It's trivially dead and I expect it to 
> be cleaned up early in the optimization pipeline.  It looks like most of 
> the tests in the series have this trivially dead initialization code.

Hi Jeff,

These initializers come from the original reduced testcase in 116024 and 
are completely superfluous - I will remove them before resending the series.

Thanks,
Artemiy

> 
> Jeff
> 
> 
> 
> 

Reply via email to