diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2004-05-28 16:37:08 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2004-05-28 16:37:08 +0000 |
commit | d1a7edafe6a978e8f380a74f1f6d386d871bf417 (patch) | |
tree | 7ddeb479040eb4166d908a90967e3c0027eb6800 /gcc/tree-pretty-print.c | |
parent | 2966b00e88d24531be8ff24ac6c82d5cf70ae116 (diff) | |
download | gcc-d1a7edafe6a978e8f380a74f1f6d386d871bf417.zip gcc-d1a7edafe6a978e8f380a74f1f6d386d871bf417.tar.gz gcc-d1a7edafe6a978e8f380a74f1f6d386d871bf417.tar.bz2 |
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
Diffstat (limited to 'gcc/tree-pretty-print.c')
-rw-r--r-- | gcc/tree-pretty-print.c | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index e4c6b07..ce1f750 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -905,6 +905,9 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, case UNGT_EXPR: case UNGE_EXPR: case UNEQ_EXPR: + case LTGT_EXPR: + case ORDERED_EXPR: + case UNORDERED_EXPR: { const char *op = op_symbol (node); op0 = TREE_OPERAND (node, 0); @@ -999,14 +1002,6 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, pp_character (buffer, '>'); break; - case UNORDERED_EXPR: - NIY; - break; - - case ORDERED_EXPR: - NIY; - break; - case IN_EXPR: NIY; break; @@ -1681,6 +1676,14 @@ op_prio (tree op) case NE_EXPR: return 9; + case UNLT_EXPR: + case UNLE_EXPR: + case UNGT_EXPR: + case UNGE_EXPR: + case UNEQ_EXPR: + case LTGT_EXPR: + case ORDERED_EXPR: + case UNORDERED_EXPR: case LT_EXPR: case LE_EXPR: case GT_EXPR: @@ -1786,28 +1789,41 @@ op_symbol (tree op) case BIT_AND_EXPR: return "&"; + case ORDERED_EXPR: + return "ord"; + case UNORDERED_EXPR: + return "unord"; + case EQ_EXPR: - case UNEQ_EXPR: return "=="; + case UNEQ_EXPR: + return "u=="; case NE_EXPR: return "!="; case LT_EXPR: - case UNLT_EXPR: return "<"; + case UNLT_EXPR: + return "u<"; case LE_EXPR: - case UNLE_EXPR: return "<="; + case UNLE_EXPR: + return "u<="; case GT_EXPR: - case UNGT_EXPR: return ">"; + case UNGT_EXPR: + return "u>"; case GE_EXPR: - case UNGE_EXPR: return ">="; + case UNGE_EXPR: + return "u>="; + + case LTGT_EXPR: + return "<>"; case LSHIFT_EXPR: return "<<"; |