From nobody@FreeBSD.org  Sat May 14 02:28:20 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7465D106566C
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 14 May 2011 02:28:20 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 49EE48FC13
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 14 May 2011 02:28:20 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p4E2SJrF069209
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 14 May 2011 02:28:19 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id p4E2SJKB069208;
	Sat, 14 May 2011 02:28:19 GMT
	(envelope-from nobody)
Message-Id: <201105140228.p4E2SJKB069208@red.freebsd.org>
Date: Sat, 14 May 2011 02:28:19 GMT
From: Pedro Giffuni <giffunip@tutopia.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: gcc Bug 28796 - __builtin_nan() and __builtin_unordered() inconsistent
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         157025
>Category:       gnu
>Synopsis:       [patch] gcc(1): gcc Bug 28796 - __builtin_nan() and __builtin_unordered() inconsistent
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pfg
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat May 14 02:30:06 UTC 2011
>Closed-Date:    Thu Jan 05 02:47:18 UTC 2012
>Last-Modified:  Fri Feb  3 21:30:14 UTC 2012
>Originator:     Pedro Giffuni
>Release:        8.2-Release
>Organization:
>Environment:
FreeBSD mogwai.giffuni.net 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Fri Mar 18 15:35:09 UTC 2011     root@mogwai.giffuni.net:/usr/src/sys/amd64/compile/GENERIC  amd64

>Description:
As can be read in the top of Apple's gcc Changelog:
http://opensource.apple.com/source/gcc/gcc-5664/gcc/ChangeLog

The following commit was made:

2006-10-24  Richard Guenther

Radar 5675014
PR middle-end/28796
* builtins.c (fold_builtin_classify): Use HONOR_INFINITIES
and HONOR_NANS instead of MODE_HAS_INFINITIES and MODE_HAS_NANS
for deciding optimizations in consistency with fold-const.c
(fold_builtin_unordered_cmp): Likewise.
_______

Applying this will make our base compiler behave consistently
with -ffinite-math-only and is in accordance to what clang
and newer GCCs do.
>How-To-Repeat:
There is a testcase in gcc bug 28796
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28796

FWIW, This was reported in gnu/153298 too but it was obviated
because the other patches were more important.

>Fix:
Patch attached.

Patch attached with submission follows:

--- gcc/builtins.c.orig	2007-05-19 02:12:19.000000000 +0000
+++ gcc/builtins.c	2011-05-13 20:58:56.000000000 +0000
@@ -8720,7 +8720,7 @@
   switch (builtin_index)
     {
     case BUILT_IN_ISINF:
-      if (!MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
+      if (!HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 	return omit_one_operand (type, integer_zero_node, arg);
 
       if (TREE_CODE (arg) == REAL_CST)
@@ -8736,8 +8736,8 @@
       return NULL_TREE;
 
     case BUILT_IN_FINITE:
-      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg)))
-	  && !MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
+      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg)))
+	  && !HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 	return omit_one_operand (type, integer_zero_node, arg);
 
       if (TREE_CODE (arg) == REAL_CST)
@@ -8750,7 +8750,7 @@
       return NULL_TREE;
 
     case BUILT_IN_ISNAN:
-      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg))))
+      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg))))
 	return omit_one_operand (type, integer_zero_node, arg);
 
       if (TREE_CODE (arg) == REAL_CST)
@@ -8833,13 +8833,13 @@
 
   if (unordered_code == UNORDERED_EXPR)
     {
-      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))))
+      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))))
 	return omit_two_operands (type, integer_zero_node, arg0, arg1);
       return fold_build2 (UNORDERED_EXPR, type, arg0, arg1);
     }
 
-  code = MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
-						      : ordered_code;
+  code = HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
+						   : ordered_code;
   return fold_build1 (TRUTH_NOT_EXPR, type,
 		      fold_build2 (code, type, arg0, arg1));
 }


>Release-Note:
>Audit-Trail:

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: gnu/157025: commit references a PR
Date: Wed, 21 Dec 2011 01:58:49 +0000 (UTC)

 Author: pfg
 Date: Wed Dec 21 01:58:35 2011
 New Revision: 228756
 URL: http://svn.freebsd.org/changeset/base/228756
 
 Log:
   Clean an inconsistency with -ffinite-math-only.
   Backported from the gcc-4_3-branch, revision 118001,
   under the GPLv2.
   
   This issue was also fixed in Apple's gcc.
   
   PR:		157025
   Reviewed by:	mm
   Approved by:	jhb (mentor)
   MFC:		2 weeks
 
 Modified:
   head/contrib/gcc/ChangeLog.gcc43
   head/contrib/gcc/builtins.c
 
 Modified: head/contrib/gcc/ChangeLog.gcc43
 ==============================================================================
 --- head/contrib/gcc/ChangeLog.gcc43	Tue Dec 20 22:56:44 2011	(r228755)
 +++ head/contrib/gcc/ChangeLog.gcc43	Wed Dec 21 01:58:35 2011	(r228756)
 @@ -96,6 +96,14 @@
  
  	* doc/invoke.texi: Add entry about geode processor.
      
 +2006-10-24  Richard Guenther  <rguenther@suse.de>
 +
 +	PR middle-end/28796
 +	* builtins.c (fold_builtin_classify): Use HONOR_INFINITIES
 +	and HONOR_NANS instead of MODE_HAS_INFINITIES and MODE_HAS_NANS
 +	for deciding optimizations in consistency with fold-const.c
 +	(fold_builtin_unordered_cmp): Likewise.
 +
  2006-10-22  H.J. Lu  <hongjiu.lu@intel.com> (r117958)
  
  	* config.gcc (i[34567]86-*-*): Add tmmintrin.h to extra_headers.
 
 Modified: head/contrib/gcc/builtins.c
 ==============================================================================
 --- head/contrib/gcc/builtins.c	Tue Dec 20 22:56:44 2011	(r228755)
 +++ head/contrib/gcc/builtins.c	Wed Dec 21 01:58:35 2011	(r228756)
 @@ -8720,7 +8720,7 @@ fold_builtin_classify (tree fndecl, tree
    switch (builtin_index)
      {
      case BUILT_IN_ISINF:
 -      if (!MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8736,8 +8736,8 @@ fold_builtin_classify (tree fndecl, tree
        return NULL_TREE;
  
      case BUILT_IN_FINITE:
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg)))
 -	  && !MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg)))
 +	  && !HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8750,7 +8750,7 @@ fold_builtin_classify (tree fndecl, tree
        return NULL_TREE;
  
      case BUILT_IN_ISNAN:
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8833,13 +8833,13 @@ fold_builtin_unordered_cmp (tree fndecl,
  
    if (unordered_code == UNORDERED_EXPR)
      {
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))))
  	return omit_two_operands (type, integer_zero_node, arg0, arg1);
        return fold_build2 (UNORDERED_EXPR, type, arg0, arg1);
      }
  
 -  code = MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
 -						      : ordered_code;
 +  code = HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
 +						   : ordered_code;
    return fold_build1 (TRUTH_NOT_EXPR, type,
  		      fold_build2 (code, type, arg0, arg1));
  }
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: pfg 
State-Changed-When: Wed Dec 21 02:30:00 UTC 2011 
State-Changed-Why:  
Committed to current in SVN Revision 225756. 


Responsible-Changed-From-To: freebsd-bugs->pfg 
Responsible-Changed-By: pfg 
Responsible-Changed-When: Wed Dec 21 02:30:00 UTC 2011 
Responsible-Changed-Why:  
I am taking care of it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=157025 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: gnu/157025: commit references a PR
Date: Thu,  5 Jan 2012 02:36:56 +0000 (UTC)

 Author: pfg
 Date: Thu Jan  5 02:36:37 2012
 New Revision: 229554
 URL: http://svn.freebsd.org/changeset/base/229554
 
 Log:
   MFC:	r228756
   
   Clean an inconsistency with -ffinite-math-only.
   Backported from the gcc-4_3-branch, revision (118001)
   under the GPLv2.
   This issue was also fixed in Apple's gcc.
   
   PR:		157025
   Reviewed by:	mm
   Approved by:	jhb (mentor)
 
 Modified:
   stable/9/contrib/gcc/ChangeLog.gcc43
   stable/9/contrib/gcc/builtins.c
 Directory Properties:
   stable/9/contrib/gcc/   (props changed)
 
 Modified: stable/9/contrib/gcc/ChangeLog.gcc43
 ==============================================================================
 --- stable/9/contrib/gcc/ChangeLog.gcc43	Thu Jan  5 02:16:55 2012	(r229553)
 +++ stable/9/contrib/gcc/ChangeLog.gcc43	Thu Jan  5 02:36:37 2012	(r229554)
 @@ -96,6 +96,14 @@
  
  	* doc/invoke.texi: Add entry about geode processor.
      
 +2006-10-24  Richard Guenther  <rguenther@suse.de>
 +
 +	PR middle-end/28796
 +	* builtins.c (fold_builtin_classify): Use HONOR_INFINITIES
 +	and HONOR_NANS instead of MODE_HAS_INFINITIES and MODE_HAS_NANS
 +	for deciding optimizations in consistency with fold-const.c
 +	(fold_builtin_unordered_cmp): Likewise.
 +
  2006-10-22  H.J. Lu  <hongjiu.lu@intel.com> (r117958)
  
  	* config.gcc (i[34567]86-*-*): Add tmmintrin.h to extra_headers.
 
 Modified: stable/9/contrib/gcc/builtins.c
 ==============================================================================
 --- stable/9/contrib/gcc/builtins.c	Thu Jan  5 02:16:55 2012	(r229553)
 +++ stable/9/contrib/gcc/builtins.c	Thu Jan  5 02:36:37 2012	(r229554)
 @@ -8720,7 +8720,7 @@ fold_builtin_classify (tree fndecl, tree
    switch (builtin_index)
      {
      case BUILT_IN_ISINF:
 -      if (!MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8736,8 +8736,8 @@ fold_builtin_classify (tree fndecl, tree
        return NULL_TREE;
  
      case BUILT_IN_FINITE:
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg)))
 -	  && !MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg)))
 +	  && !HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8750,7 +8750,7 @@ fold_builtin_classify (tree fndecl, tree
        return NULL_TREE;
  
      case BUILT_IN_ISNAN:
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8833,13 +8833,13 @@ fold_builtin_unordered_cmp (tree fndecl,
  
    if (unordered_code == UNORDERED_EXPR)
      {
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))))
  	return omit_two_operands (type, integer_zero_node, arg0, arg1);
        return fold_build2 (UNORDERED_EXPR, type, arg0, arg1);
      }
  
 -  code = MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
 -						      : ordered_code;
 +  code = HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
 +						   : ordered_code;
    return fold_build1 (TRUTH_NOT_EXPR, type,
  		      fold_build2 (code, type, arg0, arg1));
  }
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: pfg 
State-Changed-When: Thu Jan 5 02:46:31 UTC 2012 
State-Changed-Why:  
Committed and MFC'd/9. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=157025 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: gnu/157025: commit references a PR
Date: Fri,  3 Feb 2012 21:26:35 +0000 (UTC)

 Author: pfg
 Date: Fri Feb  3 21:26:25 2012
 New Revision: 230959
 URL: http://svn.freebsd.org/changeset/base/230959
 
 Log:
   MFC:	r228756
   
   Clean an inconsistency with -ffinite-math-only.
   Backported from the gcc-4_3-branch, revision (118001)
   under the GPLv2.
   This issue was also fixed in Apple's gcc.
   
   PR:		157025
   Reviewed by:	mm
   Approved by:	jhb (mentor)
 
 Modified:
   stable/8/contrib/gcc/ChangeLog.gcc43
   stable/8/contrib/gcc/builtins.c
 Directory Properties:
   stable/8/contrib/gcc/   (props changed)
 
 Modified: stable/8/contrib/gcc/ChangeLog.gcc43
 ==============================================================================
 --- stable/8/contrib/gcc/ChangeLog.gcc43	Fri Feb  3 21:24:28 2012	(r230958)
 +++ stable/8/contrib/gcc/ChangeLog.gcc43	Fri Feb  3 21:26:25 2012	(r230959)
 @@ -96,6 +96,14 @@
  
  	* doc/invoke.texi: Add entry about geode processor.
      
 +2006-10-24  Richard Guenther  <rguenther@suse.de>
 +
 +	PR middle-end/28796
 +	* builtins.c (fold_builtin_classify): Use HONOR_INFINITIES
 +	and HONOR_NANS instead of MODE_HAS_INFINITIES and MODE_HAS_NANS
 +	for deciding optimizations in consistency with fold-const.c
 +	(fold_builtin_unordered_cmp): Likewise.
 +
  2006-10-22  H.J. Lu  <hongjiu.lu@intel.com> (r117958)
  
  	* config.gcc (i[34567]86-*-*): Add tmmintrin.h to extra_headers.
 
 Modified: stable/8/contrib/gcc/builtins.c
 ==============================================================================
 --- stable/8/contrib/gcc/builtins.c	Fri Feb  3 21:24:28 2012	(r230958)
 +++ stable/8/contrib/gcc/builtins.c	Fri Feb  3 21:26:25 2012	(r230959)
 @@ -8720,7 +8720,7 @@ fold_builtin_classify (tree fndecl, tree
    switch (builtin_index)
      {
      case BUILT_IN_ISINF:
 -      if (!MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8736,8 +8736,8 @@ fold_builtin_classify (tree fndecl, tree
        return NULL_TREE;
  
      case BUILT_IN_FINITE:
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg)))
 -	  && !MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg)))
 +	  && !HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8750,7 +8750,7 @@ fold_builtin_classify (tree fndecl, tree
        return NULL_TREE;
  
      case BUILT_IN_ISNAN:
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg))))
  	return omit_one_operand (type, integer_zero_node, arg);
  
        if (TREE_CODE (arg) == REAL_CST)
 @@ -8833,13 +8833,13 @@ fold_builtin_unordered_cmp (tree fndecl,
  
    if (unordered_code == UNORDERED_EXPR)
      {
 -      if (!MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))))
 +      if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))))
  	return omit_two_operands (type, integer_zero_node, arg0, arg1);
        return fold_build2 (UNORDERED_EXPR, type, arg0, arg1);
      }
  
 -  code = MODE_HAS_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
 -						      : ordered_code;
 +  code = HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))) ? unordered_code
 +						   : ordered_code;
    return fold_build1 (TRUTH_NOT_EXPR, type,
  		      fold_build2 (code, type, arg0, arg1));
  }
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
>Unformatted:
