On Fri, 2020-08-21 at 17:55 +0100, Roger Sayle wrote:
> PR tree-optimization/21137 is now an old enhancement request pointing out
> that an optimization I added back in 2006, to optimize "((x>>31)&64) != 0"
> as "x < 0", doesn't fire in the presence of unanticipated type conversions.
> The fix is to call STRIP_NOPS at the appropriate point.
>
> I'd considered moving this transformation to match.pd, but it's a lot of
> complex logic that (I suspect) would be just as ugly in match.pd as it is
> in fold-const.c.
>
> This patch has been tested on x86_64-pc-linux-gnu with a "make bootstrap"
> and "make -k check" with no new failures.
> Ok for mainline?
>
> 2020-08-21 Roger Sayle <ro...@nextmovesoftware.com>
>
> gcc/ChangeLog
> PR tree-optimization/21137
> * gcc/fold-const.c (fold_binary_loc) [NE_EXPR/EQ_EXPR]: Call
> STRIP_NOPS when checking whether to simplify ((x>>C1)&C2) != 0.
>
> gcc/testsuite/ChangeLog
> PR tree-optimization/21137
> * gcc.dg/pr21137.c: New test.
OK
jeff
>