mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 08:50:26 +08:00
re PR tree-optimization/71563 (Regression in GCC-7.0.0's optimizer.)
PR tree-optimization/71563 * match.pd: Simplify X << Y into X if Y is known to be 0 or out of range value - has low bits known to be zero. * gcc.dg/tree-ssa/pr71563.c: New test. From-SVN: r244050
This commit is contained in:
parent
8f56cb5163
commit
165ba2e9c7
@ -1,3 +1,9 @@
|
||||
2017-01-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/71563
|
||||
* match.pd: Simplify X << Y into X if Y is known to be 0 or
|
||||
out of range value - has low bits known to be zero.
|
||||
|
||||
2017-01-04 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* Makefile.in (aclocal_deps): Update and order as per aclocal.m4.
|
||||
|
15
gcc/match.pd
15
gcc/match.pd
@ -1515,6 +1515,21 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
||||
(if (tem)
|
||||
(shiftrotate @0 { tem; }))))))
|
||||
|
||||
/* Simplify X << Y where Y's low width bits are 0 to X, as only valid
|
||||
Y is 0. Similarly for X >> Y. */
|
||||
#if GIMPLE
|
||||
(for shift (lshift rshift)
|
||||
(simplify
|
||||
(shift @0 SSA_NAME@1)
|
||||
(if (INTEGRAL_TYPE_P (TREE_TYPE (@1)))
|
||||
(with {
|
||||
int width = ceil_log2 (element_precision (TREE_TYPE (@0)));
|
||||
int prec = TYPE_PRECISION (TREE_TYPE (@1));
|
||||
}
|
||||
(if ((get_nonzero_bits (@1) & wi::mask (width, false, prec)) == 0)
|
||||
@0)))))
|
||||
#endif
|
||||
|
||||
/* Rewrite an LROTATE_EXPR by a constant into an
|
||||
RROTATE_EXPR by a new constant. */
|
||||
(simplify
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-01-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/71563
|
||||
* gcc.dg/tree-ssa/pr71563.c: New test.
|
||||
|
||||
2017-01-04 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
PR fortran/78534
|
||||
|
23
gcc/testsuite/gcc.dg/tree-ssa/pr71563.c
Normal file
23
gcc/testsuite/gcc.dg/tree-ssa/pr71563.c
Normal file
@ -0,0 +1,23 @@
|
||||
/* PR tree-optimization/71563 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized" } */
|
||||
|
||||
void link_error (void);
|
||||
|
||||
void
|
||||
foo (int k)
|
||||
{
|
||||
int t = 1 << ((1 / k) << 8);
|
||||
if (t != 1)
|
||||
link_error ();
|
||||
}
|
||||
|
||||
void
|
||||
bar (int k, int l)
|
||||
{
|
||||
int t = l << (k << 8);
|
||||
if (t != l)
|
||||
link_error ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-not "link_error" "optimized" } } */
|
Loading…
x
Reference in New Issue
Block a user