re PR tree-optimization/84235 (Miscompilation of floating point code by dom2)
PR tree-optimization/84235 * tree-ssa-scopedtables.c (avail_exprs_stack::simplify_binary_operation): Fir MINUS_EXPR, punt if the subtraction is performed in floating point type where NaNs are honored. For *DIV_EXPR, punt for ALL_FRACT_MODE_Ps where we can't build 1. Formatting fix. * gcc.c-torture/execute/ieee/pr84235.c: New test. From-SVN: r257437
This commit is contained in:
parent
84c71bb8ec
commit
40ff1a2d1d
@ -1,3 +1,12 @@
|
||||
2018-02-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/84235
|
||||
* tree-ssa-scopedtables.c
|
||||
(avail_exprs_stack::simplify_binary_operation): Fir MINUS_EXPR, punt
|
||||
if the subtraction is performed in floating point type where NaNs are
|
||||
honored. For *DIV_EXPR, punt for ALL_FRACT_MODE_Ps where we can't
|
||||
build 1. Formatting fix.
|
||||
|
||||
2018-02-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/84146
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-02-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/84235
|
||||
* gcc.c-torture/execute/ieee/pr84235.c: New test.
|
||||
|
||||
2018-02-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
PR testsuite/84243
|
||||
|
11
gcc/testsuite/gcc.c-torture/execute/ieee/pr84235.c
Normal file
11
gcc/testsuite/gcc.c-torture/execute/ieee/pr84235.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* PR tree-optimization/84235 */
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
double d = 1.0 / 0.0;
|
||||
_Bool b = d == d && (d - d) != (d - d);
|
||||
if (!b)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
@ -182,8 +182,15 @@ avail_exprs_stack::simplify_binary_operation (gimple *stmt,
|
||||
case BIT_AND_EXPR:
|
||||
return gimple_assign_rhs1 (stmt);
|
||||
|
||||
case BIT_XOR_EXPR:
|
||||
case MINUS_EXPR:
|
||||
/* This is unsafe for certain floats even in non-IEEE
|
||||
formats. In IEEE, it is unsafe because it does
|
||||
wrong for NaNs. */
|
||||
if (FLOAT_TYPE_P (result_type)
|
||||
&& HONOR_NANS (result_type))
|
||||
break;
|
||||
/* FALLTHRU */
|
||||
case BIT_XOR_EXPR:
|
||||
case TRUNC_MOD_EXPR:
|
||||
case CEIL_MOD_EXPR:
|
||||
case FLOOR_MOD_EXPR:
|
||||
@ -195,6 +202,9 @@ avail_exprs_stack::simplify_binary_operation (gimple *stmt,
|
||||
case FLOOR_DIV_EXPR:
|
||||
case ROUND_DIV_EXPR:
|
||||
case EXACT_DIV_EXPR:
|
||||
/* Avoid _Fract types where we can't build 1. */
|
||||
if (ALL_FRACT_MODE_P (TYPE_MODE (result_type)))
|
||||
break;
|
||||
return build_one_cst (result_type);
|
||||
|
||||
default:
|
||||
@ -204,8 +214,8 @@ avail_exprs_stack::simplify_binary_operation (gimple *stmt,
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user