Bug 15649 - [4.0 regression] ICE with __builtin_isgreater and -ffast-math
Summary: [4.0 regression] ICE with __builtin_isgreater and -ffast-math
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: rtl-optimization (show other bugs)
Version: 4.0.0
: P2 critical
Target Milestone: 4.0.0
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2004-05-25 15:25 UTC by Volker Reichelt
Modified: 2004-09-13 14:15 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2004-05-25 15:30:55


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Volker Reichelt 2004-05-25 15:25:42 UTC
Compiling the following testcase (which is from PR4765) with
"gcc -ffast-math" causes an ICE on mainline (i686-pc-linux-gnu):

=======================================================
double foo (double x)
{
    return __builtin_isgreater(x,0.0) ? 0.0 : x;
}
=======================================================

The error message reads:

PR4765.c: In function `foo':
PR4765.c:3: internal compiler error: in fold, at fold-const.c:8156
Please submit a full bug report, [etc.]


Roger, your patch

http://gcc.gnu.org/ml/gcc-cvs/2004-05/msg00694.html

seems to be responsible for the regression. Could you please have a look?
Comment 1 Andrew Pinski 2004-05-25 15:30:55 UTC
Confirmed, this is ovbiously a bug as the compare code is one of the UN*_EXPR.
Comment 2 GCC Commits 2004-05-28 16:37:14 UTC
Subject: Bug 15649

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	bonzini@gcc.gnu.org	2004-05-28 16:37:08

Modified files:
	gcc            : ChangeLog c-common.c c-typeck.c dojump.c expr.c 
	                 fold-const.c predict.c real.c tree-cfg.c 
	                 tree-inline.c tree-pretty-print.c tree.def 
	gcc/doc        : c-tree.texi 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/gcc.c-torture/execute: compare-fp-1.c 
	                                     compare-fp-2.c 
	                                     compare-fp-3.c 
	                                     compare-fp-3.x 
	                                     compare-fp-4.c 
	                                     compare-fp-4.x 
	gcc/testsuite/gcc.dg: pr15649-1.c 

Log message:
	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.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.3772&r2=2.3773
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/c-common.c.diff?cvsroot=gcc&r1=1.501&r2=1.502
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/c-typeck.c.diff?cvsroot=gcc&r1=1.304&r2=1.305
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/dojump.c.diff?cvsroot=gcc&r1=1.16&r2=1.17
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/expr.c.diff?cvsroot=gcc&r1=1.648&r2=1.649
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fold-const.c.diff?cvsroot=gcc&r1=1.382&r2=1.383
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/predict.c.diff?cvsroot=gcc&r1=1.104&r2=1.105
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/real.c.diff?cvsroot=gcc&r1=1.141&r2=1.142
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-cfg.c.diff?cvsroot=gcc&r1=2.4&r2=2.5
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-inline.c.diff?cvsroot=gcc&r1=1.102&r2=1.103
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-pretty-print.c.diff?cvsroot=gcc&r1=2.2&r2=2.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree.def.diff?cvsroot=gcc&r1=1.76&r2=1.77
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/doc/c-tree.texi.diff?cvsroot=gcc&r1=1.54&r2=1.55
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3784&r2=1.3785
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/compare-fp-1.c.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/compare-fp-2.c.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/compare-fp-3.c.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/compare-fp-3.x.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/compare-fp-4.c.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/compare-fp-4.x.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/pr15649-1.c.diff?cvsroot=gcc&r1=NONE&r2=1.1

Comment 3 Andrew Pinski 2004-05-28 16:55:07 UTC
Fixed.