From dd88c7227940f3586ee66e88754006cedf5302bb Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Fri, 16 Nov 2012 12:40:39 +0100
Subject: [PATCH] re PR tree-optimization/54073 (SciMark Monte Carlo test
 performance has seriously decreased in recent GCC releases)

	PR target/54073
	* config/i386/i386.md (mov<mode>cc): Use comparison_operator
	instead of ordered_comparison_operator resp.
	ix86_fp_comparison_operator predicates.
	* config/i386/i386.c (ix86_expand_fp_movcc): Reject TImode
	or for -m32 DImode comparisons.

From-SVN: r193554
---
 gcc/ChangeLog           | 9 +++++++++
 gcc/config/i386/i386.c  | 5 +++++
 gcc/config/i386/i386.md | 4 ++--
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b0c8ad37079c..ff0ebecd9086 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2012-11-16  Jakub Jelinek  <jakub@redhat.com>
+
+	PR target/54073
+	* config/i386/i386.md (mov<mode>cc): Use comparison_operator
+	instead of ordered_comparison_operator resp.
+	ix86_fp_comparison_operator predicates.
+	* config/i386/i386.c (ix86_expand_fp_movcc): Reject TImode
+	or for -m32 DImode comparisons.
+
 2012-11-16  Jan Hubicka  <jh@suse.cz>
 
 	PR tree-optimization/54717
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index b4e4e72f8fca..03c6675ba143 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -19957,6 +19957,11 @@ ix86_expand_fp_movcc (rtx operands[])
       return true;
     }
 
+  if (GET_MODE (op0) == TImode
+      || (GET_MODE (op0) == DImode
+	  && !TARGET_64BIT))
+    return false;
+
   /* The floating point conditional move instructions don't directly
      support conditions resulting from a signed integer comparison.  */
 
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index f21e5cc47b0a..aa75d6b125eb 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -16121,7 +16121,7 @@
 
 (define_expand "mov<mode>cc"
   [(set (match_operand:SWIM 0 "register_operand")
-	(if_then_else:SWIM (match_operand 1 "ordered_comparison_operator")
+	(if_then_else:SWIM (match_operand 1 "comparison_operator")
 			   (match_operand:SWIM 2 "<general_operand>")
 			   (match_operand:SWIM 3 "<general_operand>")))]
   ""
@@ -16238,7 +16238,7 @@
 (define_expand "mov<mode>cc"
   [(set (match_operand:X87MODEF 0 "register_operand")
 	(if_then_else:X87MODEF
-	  (match_operand 1 "ix86_fp_comparison_operator")
+	  (match_operand 1 "comparison_operator")
 	  (match_operand:X87MODEF 2 "register_operand")
 	  (match_operand:X87MODEF 3 "register_operand")))]
   "(TARGET_80387 && TARGET_CMOVE)
-- 
GitLab