middle-end: PR tree-optimization/21137: STRIP_NOPS avoids missed optimization.
authorRoger Sayle <roger@nextmovesoftware.com>
Tue, 25 Aug 2020 09:50:48 +0000 (10:50 +0100)
committerRoger Sayle <roger@nextmovesoftware.com>
Tue, 25 Aug 2020 09:52:06 +0000 (10:52 +0100)
commita0b4e42af26a85da2698e573ac8e32fa0a5709d6
tree596101b46ace339575d90d008a761964e7e71e1e
parent68e605c93d57c17f07edd50f7e1c80f9216befd2
middle-end: PR tree-optimization/21137: STRIP_NOPS avoids missed optimization.

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.

2020-08-25  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
PR tree-optimization/21137
* 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.
gcc/fold-const.c
gcc/testsuite/gcc.dg/pr21137.c [new file with mode: 0644]