Commit 0a8c1e23 by Jeff Law Committed by Jeff Law

[RFA] Fix pr67830, another type narrowing problem

	PR tree-optimization/67830
	* match.pd ((bit_and (plus/minus (convert @0) (convert @1)) mask)):
	Explicitly verify the mask has no bits outside the type of
	the innermost operands.

	PR tree-optimization/67830
	* gcc.dg/pr67830.c: New test.

From-SVN: r229267
parent 7e8efecb
2015-10-23 Jeff Law <law@redhat.com>
PR tree-optimization/67830
* match.pd ((bit_and (plus/minus (convert @0) (convert @1)) mask)):
Explicitly verify the mask has no bits outside the type of
the innermost operands.
2015-10-23 Gregor Richards <gregor.richards@uwaterloo.ca>
Szabolcs Nagy <szabolcs.nagy@arm.com>
......@@ -2719,8 +2719,8 @@ along with GCC; see the file COPYING3. If not see
&& types_match (@0, @1)
&& (tree_int_cst_min_precision (@4, TYPE_SIGN (TREE_TYPE (@0)))
<= TYPE_PRECISION (TREE_TYPE (@0)))
&& (TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0))
|| tree_int_cst_sgn (@4) >= 0))
&& (wi::bit_and (@4, wi::mask (TYPE_PRECISION (TREE_TYPE (@0)),
true, TYPE_PRECISION (type))) == 0))
(if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0)))
(with { tree ntype = TREE_TYPE (@0); }
(convert (bit_and (op @0 @1) (convert:ntype @4))))
......
2015-10-23 Jeff Law <law@redhat.com>
PR tree-optimization/67830
* gcc.dg/pr67830.c: New test.
2015-10-23 Jan Hubicka <hubicka@ucw.cz>
* gcc.dg/tree-ssa/operand-equal-2.c: New testcase.
......
/* PR tree-optimization/67830 */
/* { dg-do run } */
/* { dg-options "-O2" } */
int a, b, *g, h;
unsigned char c, d;
int
main ()
{
int f, e = -2;
b = e;
g = &b;
h = c = a + 1;
f = d - h;
*g &= f;
if (b != -2)
__builtin_abort ();
return 0;
}
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