Commit ad6f996c by Richard Biener Committed by Richard Biener

re PR middle-end/63770 (ICE on valid code at all optimization levels on x86_64-linux-gnu)

2014-11-07  Richard Biener  <rguenther@suse.de>

	PR middle-end/63770
	* match.pd: Guard conflicting GENERIC pattern properly.

	* gcc.dg/pr63770.c: New testcase.

From-SVN: r217214
parent a499aac5
2014-11-07 Richard Biener <rguenther@suse.de>
PR middle-end/63770
* match.pd: Guard conflicting GENERIC pattern properly.
2014-11-07 Richard Biener <rguenther@suse.de>
* match.pd: Add patterns for POINTER_PLUS_EXPR association
and special patterns from tree-ssa-forwprop.c
* fold-const.c (fold_binary_loc): Remove them here.
......@@ -129,14 +129,15 @@ along with GCC; see the file COPYING3. If not see
(bitop (convert @0) (convert? @1))
(if (((TREE_CODE (@1) == INTEGER_CST
&& INTEGRAL_TYPE_P (TREE_TYPE (@0))
&& int_fits_type_p (@1, TREE_TYPE (@0))
/* ??? This transform conflicts with fold-const.c doing
Convert (T)(x & c) into (T)x & (T)c, if c is an integer
constants (if x has signed type, the sign bit cannot be set
in c). This folds extension into the BIT_AND_EXPR.
Restrict it to GIMPLE to avoid endless recursions. */
&& (bitop != BIT_AND_EXPR || GIMPLE))
|| types_compatible_p (TREE_TYPE (@0), TREE_TYPE (@1)))
&& int_fits_type_p (@1, TREE_TYPE (@0)))
|| (GIMPLE && types_compatible_p (TREE_TYPE (@0), TREE_TYPE (@1)))
|| (GENERIC && TREE_TYPE (@0) == TREE_TYPE (@1)))
/* ??? This transform conflicts with fold-const.c doing
Convert (T)(x & c) into (T)x & (T)c, if c is an integer
constants (if x has signed type, the sign bit cannot be set
in c). This folds extension into the BIT_AND_EXPR.
Restrict it to GIMPLE to avoid endless recursions. */
&& (bitop != BIT_AND_EXPR || GIMPLE)
&& (/* That's a good idea if the conversion widens the operand, thus
after hoisting the conversion the operation will be narrower. */
TYPE_PRECISION (TREE_TYPE (@0)) < TYPE_PRECISION (type)
......
2014-11-07 Richard Biener <rguenther@suse.de>
PR middle-end/63770
* gcc.dg/pr63770.c: New testcase.
2014-11-07 Terry Guo <terry.guo@arm.com>
* gcc.target/arm/anddi_notdi-1.c: Match with UAL format.
......
/* { dg-do compile } */
char a;
struct S
{
int f0:9;
};
volatile struct S b;
int
fn1 ()
{
return (1 & b.f0) < a;
}
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