Re-sending my question and re-attaching the patch. Richard, can you please clarify your feedback?
Thanks, Eugene -----Original Message----- From: Gcc-patches <gcc-patches-boun...@gcc.gnu.org> On Behalf Of Eugene Rozenfeld via Gcc-patches Sent: Tuesday, December 15, 2020 2:06 PM To: Richard Biener <richard.guent...@gmail.com> Cc: gcc-patches@gcc.gnu.org Subject: [EXTERNAL] Re: Optimize combination of comparisons to dec+compare Richard, > Do we already handle x < y || x <= CST to x <= y - CST? That is an invalid transformation: e.g., consider x=3, y=4, CST=2. Can you please clarify? Thanks, Eugene -----Original Message----- From: Richard Biener <richard.guent...@gmail.com> Sent: Thursday, December 10, 2020 12:21 AM To: Eugene Rozenfeld <eugene.rozenf...@microsoft.com> Cc: gcc-patches@gcc.gnu.org Subject: Re: Optimize combination of comparisons to dec+compare On Thu, Dec 10, 2020 at 1:52 AM Eugene Rozenfeld via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > This patch adds a pattern for optimizing x < y || x == XXX_MIN to x <= > y-1 if y is an integer with TYPE_OVERFLOW_WRAPS. Do we already handle x < y || x <= CST to x <= y - CST? That is, the XXX_MIN case is just a special-case of generic anti-range testing? For anti-range testing with signed types we pun to unsigned when possible. > This fixes pr96674. > > Tested on x86_64-pc-linux-gnu. > > For this function > > bool f(unsigned a, unsigned b) > { > return (b == 0) | (a < b); > } > > the code without the patch is > > test esi,esi > sete al > cmp esi,edi > seta dl > or eax,edx > ret > > the code with the patch is > > sub esi,0x1 > cmp esi,edi > setae al > ret > > Eugene > > gcc/ > PR tree-optimization/96674 > * match.pd: New pattern x < y || x == XXX_MIN --> x <= y - 1 > > gcc/testsuite > * gcc.dg/pr96674.c: New test. >
0001-Optimize-combination-of-comparisons-to-dec-compare.patch
Description: 0001-Optimize-combination-of-comparisons-to-dec-compare.patch