re PR tree-optimization/37387 (ICE in extract_range_from_binary_expr, at tree-vrp.c:2145)
2008-09-09 Richard Guenther <rguenther@suse.de> PR tree-optimization/37387 * tree-ssa-ifcombine.c (ifcombine_iforif): Convert the name and bits to a common type. * gcc.c-torture/compile/pr37387.c: New testcase. From-SVN: r140142
This commit is contained in:
parent
18b0679f09
commit
6e548df501
4 changed files with 41 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2008-09-09 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/37387
|
||||
* tree-ssa-ifcombine.c (ifcombine_iforif): Convert the name
|
||||
and bits to a common type.
|
||||
|
||||
2008-09-09 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/v850/v850.md (return): Restore frame size restriction.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2008-09-09 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/37387
|
||||
* gcc.c-torture/compile/pr37387.c: New testcase.
|
||||
|
||||
2008-09-09 Daniel Kraft <d@domob.eu>
|
||||
|
||||
PR fortran/37411
|
||||
|
|
11
gcc/testsuite/gcc.c-torture/compile/pr37387.c
Normal file
11
gcc/testsuite/gcc.c-torture/compile/pr37387.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
typedef long int Int;
|
||||
void FuncMakeConsequencesPres (long *objDefs1)
|
||||
{
|
||||
long a = (long)objDefs1;
|
||||
int c = a & 0x01;
|
||||
int b = 0;
|
||||
if (! ( 13 <= ( c ? 0 : (((int) objDefs1 & 0x02) ? 0 : *objDefs1 ))
|
||||
&& b <= 0))
|
||||
ErrorQuit ();
|
||||
}
|
||||
|
|
@ -440,6 +440,25 @@ ifcombine_iforif (basic_block inner_cond_bb, basic_block outer_cond_bb)
|
|||
else
|
||||
return false;
|
||||
|
||||
/* As we strip non-widening conversions in finding a common
|
||||
name that is tested make sure to end up with an integral
|
||||
type for building the bit operations. */
|
||||
if (TYPE_PRECISION (TREE_TYPE (bits1))
|
||||
>= TYPE_PRECISION (TREE_TYPE (bits2)))
|
||||
{
|
||||
bits1 = fold_convert (unsigned_type_for (TREE_TYPE (bits1)), bits1);
|
||||
name1 = fold_convert (TREE_TYPE (bits1), name1);
|
||||
bits2 = fold_convert (unsigned_type_for (TREE_TYPE (bits2)), bits2);
|
||||
bits2 = fold_convert (TREE_TYPE (bits1), bits2);
|
||||
}
|
||||
else
|
||||
{
|
||||
bits2 = fold_convert (unsigned_type_for (TREE_TYPE (bits2)), bits2);
|
||||
name1 = fold_convert (TREE_TYPE (bits2), name1);
|
||||
bits1 = fold_convert (unsigned_type_for (TREE_TYPE (bits1)), bits1);
|
||||
bits1 = fold_convert (TREE_TYPE (bits2), bits1);
|
||||
}
|
||||
|
||||
/* Do it. */
|
||||
gsi = gsi_for_stmt (inner_cond);
|
||||
t = fold_build2 (BIT_IOR_EXPR, TREE_TYPE (name1), bits1, bits2);
|
||||
|
|
Loading…
Add table
Reference in a new issue