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
This commit is contained in:
parent
a499aac5df
commit
ad6f996c03
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
17
gcc/match.pd
17
gcc/match.pd
@ -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)
|
||||
|
@ -1,3 +1,8 @@
|
||||
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.
|
||||
|
16
gcc/testsuite/gcc.dg/pr63770.c
Normal file
16
gcc/testsuite/gcc.dg/pr63770.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
char a;
|
||||
|
||||
struct S
|
||||
{
|
||||
int f0:9;
|
||||
};
|
||||
|
||||
volatile struct S b;
|
||||
|
||||
int
|
||||
fn1 ()
|
||||
{
|
||||
return (1 & b.f0) < a;
|
||||
}
|
Loading…
Reference in New Issue
Block a user