re PR tree-optimization/84841 (ICE: tree check: expected ssa_name, have real_cst in rewrite_expr_tree_parallel, at tree-ssa-reassoc.c:4624)
PR tree-optimization/84841 * tree-ssa-reassoc.c (INTEGER_CONST_TYPE): Change to 1 << 4 from 1 << 3. (FLOAT_ONE_CONST_TYPE): Define. (constant_type): Return FLOAT_ONE_CONST_TYPE for -1.0 and 1.0. (sort_by_operand_rank): Put entries with higher constant_type last rather than first to match comments. * gcc.dg/pr84841.c: New test. From-SVN: r258586
This commit is contained in:
parent
828fd2fbe8
commit
7b9be7003d
@ -1,3 +1,13 @@
|
|||||||
|
2018-03-16 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/84841
|
||||||
|
* tree-ssa-reassoc.c (INTEGER_CONST_TYPE): Change to 1 << 4 from
|
||||||
|
1 << 3.
|
||||||
|
(FLOAT_ONE_CONST_TYPE): Define.
|
||||||
|
(constant_type): Return FLOAT_ONE_CONST_TYPE for -1.0 and 1.0.
|
||||||
|
(sort_by_operand_rank): Put entries with higher constant_type last
|
||||||
|
rather than first to match comments.
|
||||||
|
|
||||||
2018-03-15 Sandra Loosemore <sandra@codesourcery.com>
|
2018-03-15 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
|
||||||
* config/nios2/nios2.md (movsi_internal): Fix thinko in
|
* config/nios2/nios2.md (movsi_internal): Fix thinko in
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
2018-03-16 Jakub Jelinek <jakub@redhat.com>
|
2018-03-16 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/84841
|
||||||
|
* gcc.dg/pr84841.c: New test.
|
||||||
|
|
||||||
PR c++/84874
|
PR c++/84874
|
||||||
* g++.dg/cpp2a/desig7.C: New test.
|
* g++.dg/cpp2a/desig7.C: New test.
|
||||||
|
|
||||||
|
9
gcc/testsuite/gcc.dg/pr84841.c
Normal file
9
gcc/testsuite/gcc.dg/pr84841.c
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/* PR tree-optimization/84841 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -fassociative-math -frounding-math -fno-signed-zeros -fno-trapping-math -fno-tree-forwprop" } */
|
||||||
|
|
||||||
|
double
|
||||||
|
foo (double x)
|
||||||
|
{
|
||||||
|
return -x * 0.1 * 0.1;
|
||||||
|
}
|
@ -470,7 +470,8 @@ get_rank (tree e)
|
|||||||
|
|
||||||
/* We want integer ones to end up last no matter what, since they are
|
/* We want integer ones to end up last no matter what, since they are
|
||||||
the ones we can do the most with. */
|
the ones we can do the most with. */
|
||||||
#define INTEGER_CONST_TYPE 1 << 3
|
#define INTEGER_CONST_TYPE 1 << 4
|
||||||
|
#define FLOAT_ONE_CONST_TYPE 1 << 3
|
||||||
#define FLOAT_CONST_TYPE 1 << 2
|
#define FLOAT_CONST_TYPE 1 << 2
|
||||||
#define OTHER_CONST_TYPE 1 << 1
|
#define OTHER_CONST_TYPE 1 << 1
|
||||||
|
|
||||||
@ -482,7 +483,14 @@ constant_type (tree t)
|
|||||||
if (INTEGRAL_TYPE_P (TREE_TYPE (t)))
|
if (INTEGRAL_TYPE_P (TREE_TYPE (t)))
|
||||||
return INTEGER_CONST_TYPE;
|
return INTEGER_CONST_TYPE;
|
||||||
else if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (t)))
|
else if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (t)))
|
||||||
return FLOAT_CONST_TYPE;
|
{
|
||||||
|
/* Sort -1.0 and 1.0 constants last, while in some cases
|
||||||
|
const_binop can't optimize some inexact operations, multiplication
|
||||||
|
by -1.0 or 1.0 can be always merged with others. */
|
||||||
|
if (real_onep (t) || real_minus_onep (t))
|
||||||
|
return FLOAT_ONE_CONST_TYPE;
|
||||||
|
return FLOAT_CONST_TYPE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return OTHER_CONST_TYPE;
|
return OTHER_CONST_TYPE;
|
||||||
}
|
}
|
||||||
@ -504,7 +512,7 @@ sort_by_operand_rank (const void *pa, const void *pb)
|
|||||||
if (oea->rank == 0)
|
if (oea->rank == 0)
|
||||||
{
|
{
|
||||||
if (constant_type (oeb->op) != constant_type (oea->op))
|
if (constant_type (oeb->op) != constant_type (oea->op))
|
||||||
return constant_type (oeb->op) - constant_type (oea->op);
|
return constant_type (oea->op) - constant_type (oeb->op);
|
||||||
else
|
else
|
||||||
/* To make sorting result stable, we use unique IDs to determine
|
/* To make sorting result stable, we use unique IDs to determine
|
||||||
order. */
|
order. */
|
||||||
|
Loading…
Reference in New Issue
Block a user