mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-12 14:04:22 +08:00
tree-ssa-dom.c (record_conditions): Only record "unordered" conditions from floating point comparisons.
* tree-ssa-dom.c (record_conditions): Only record "unordered" conditions from floating point comparisons. From-SVN: r114489
This commit is contained in:
parent
33b881ca3a
commit
14b41b5f66
@ -1,3 +1,8 @@
|
||||
2006-06-08 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* tree-ssa-dom.c (record_conditions): Only record "unordered"
|
||||
conditions from floating point comparisons.
|
||||
|
||||
2006-06-08 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
PR middle-end/27733
|
||||
|
@ -950,36 +950,61 @@ record_conditions (struct edge_info *edge_info, tree cond, tree inverted)
|
||||
{
|
||||
case LT_EXPR:
|
||||
case GT_EXPR:
|
||||
edge_info->max_cond_equivalences = 12;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 12);
|
||||
if (FLOAT_TYPE_P (TREE_TYPE (op0)))
|
||||
{
|
||||
edge_info->max_cond_equivalences = 12;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 12);
|
||||
build_and_record_new_cond (ORDERED_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[8]);
|
||||
build_and_record_new_cond (LTGT_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[10]);
|
||||
}
|
||||
else
|
||||
{
|
||||
edge_info->max_cond_equivalences = 8;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 8);
|
||||
}
|
||||
|
||||
build_and_record_new_cond ((TREE_CODE (cond) == LT_EXPR
|
||||
? LE_EXPR : GE_EXPR),
|
||||
op0, op1, &edge_info->cond_equivalences[4]);
|
||||
build_and_record_new_cond (ORDERED_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[6]);
|
||||
build_and_record_new_cond (NE_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[8]);
|
||||
build_and_record_new_cond (LTGT_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[10]);
|
||||
&edge_info->cond_equivalences[6]);
|
||||
break;
|
||||
|
||||
case GE_EXPR:
|
||||
case LE_EXPR:
|
||||
edge_info->max_cond_equivalences = 6;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 6);
|
||||
build_and_record_new_cond (ORDERED_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[4]);
|
||||
if (FLOAT_TYPE_P (TREE_TYPE (op0)))
|
||||
{
|
||||
edge_info->max_cond_equivalences = 6;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 6);
|
||||
build_and_record_new_cond (ORDERED_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[4]);
|
||||
}
|
||||
else
|
||||
{
|
||||
edge_info->max_cond_equivalences = 4;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 4);
|
||||
}
|
||||
break;
|
||||
|
||||
case EQ_EXPR:
|
||||
edge_info->max_cond_equivalences = 10;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 10);
|
||||
build_and_record_new_cond (ORDERED_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[4]);
|
||||
if (FLOAT_TYPE_P (TREE_TYPE (op0)))
|
||||
{
|
||||
edge_info->max_cond_equivalences = 10;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 10);
|
||||
build_and_record_new_cond (ORDERED_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[8]);
|
||||
}
|
||||
else
|
||||
{
|
||||
edge_info->max_cond_equivalences = 8;
|
||||
edge_info->cond_equivalences = XNEWVEC (tree, 8);
|
||||
}
|
||||
build_and_record_new_cond (LE_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[6]);
|
||||
&edge_info->cond_equivalences[4]);
|
||||
build_and_record_new_cond (GE_EXPR, op0, op1,
|
||||
&edge_info->cond_equivalences[8]);
|
||||
&edge_info->cond_equivalences[6]);
|
||||
break;
|
||||
|
||||
case UNORDERED_EXPR:
|
||||
|
Loading…
Reference in New Issue
Block a user