Commit 165ba2e9 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 8f56cb51
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.
......
......@@ -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
......
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
......
/* 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" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment