re PR rtl-optimization/15649 (ICE with __builtin_isgreater and -ffast-math)
authorPaolo Bonzini <bonzini@gnu.org>
Fri, 28 May 2004 16:37:08 +0000 (16:37 +0000)
committerPaolo Bonzini <bonzini@gcc.gnu.org>
Fri, 28 May 2004 16:37:08 +0000 (16:37 +0000)
commitd1a7edafe6a978e8f380a74f1f6d386d871bf417
tree7ddeb479040eb4166d908a90967e3c0027eb6800
parent2966b00e88d24531be8ff24ac6c82d5cf70ae116
re PR rtl-optimization/15649 (ICE with __builtin_isgreater and -ffast-math)

gcc/ChangeLog:
2004-05-27  Paolo Bonzini  <bonzini@gnu.org>
    Roger Sayle  <roger@eyesopen.com>

PR rtl-optimization/15649
Add LTGT_EXPR and improve pretty-printing of unordered
comparisons.
* c-common.c (c_common_truthvalue_conversion):
Handle LTGT_EXPR.
* c-typeck.c (build_binary_op): Likewise.
* dojump.c (do_jump): Likewise.
* expr.c (expand_expr_real_1, do_store_flag): Likewise.
* predict.c (tree_predict_by_opcode): Likewise.
* real.c (real_compare): Likewise.
* tree-cfg.c (verify_expr): Likewise.
* tree-inline.c (estimate_num_insns_1): Likewise.
* tree-pretty-print.c (dump_generic_node): Likewise.
Handle ORDERED_EXPR, UNORDERED_EXPR.
(op_symbol): Print unordered comparisons differently
than ordered ones.
* tree.def (LTGT_EXPR): New '<' tree code.
* doc/c-tree.texi (Expressions): Document floating-point
comparison nodes.

Fold comparisons between floating point values.
* fold-const.c (enum comparison_code): New, from
#define'd constants.  Define compcodes for unordered
comparisons and for invalid transformations.
(invert_tree_comparison): Add "honor_nans" parameter.
(fold_truthop): Revamp to work on floating-point types too.
(comparison_to_compcode): Support unordered comparisons.
Use new enum comparison_code.
(compcode_to_comparison): Likewise.
(combine_compcodes): New function.
(invert_truthvalue): Let invert_tree_comparison decide
whether it is valid to fold the comparison.  Fold ORDERED
and UNORDERED even if flag_unsafe_math_optimizations is off,
and the remaining even if flag_unsafe_math_optimizations
is off but we are under -fno-trapping-math.
(fold_relational_const): Integer modes do not honor NaNs.

gcc/testsuite/ChangeLog:
2004-05-27  Paolo Bonzini  <bonzini@gnu.org>

* gcc.c-torture/compare-fp-1.c, gcc.c-torture/compare-fp-2.c,
gcc.c-torture/compare-fp-3.c, gcc.c-torture/compare-fp-4.c,
gcc.c-torture/compare-fp-3.x, gcc.c-torture/compare-fp-4.x,
gcc.c-torture/pr15649-1.c: New.

Co-Authored-By: Roger Sayle <roger@eyesopen.com>
From-SVN: r82365
21 files changed:
gcc/ChangeLog
gcc/c-common.c
gcc/c-typeck.c
gcc/doc/c-tree.texi
gcc/dojump.c
gcc/expr.c
gcc/fold-const.c
gcc/predict.c
gcc/real.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/compare-fp-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/compare-fp-2.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/compare-fp-3.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/compare-fp-3.x [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/compare-fp-4.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/compare-fp-4.x [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr15649-1.c [new file with mode: 0644]
gcc/tree-cfg.c
gcc/tree-inline.c
gcc/tree-pretty-print.c
gcc/tree.def