aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <andrew_pinski@playstation.sony.com>2008-03-21 22:16:49 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2008-03-21 15:16:49 -0700
commit94e9831662a5824b2cc403cba23829ae61616a29 (patch)
tree92fc4bf19a3a6425535a760dbbe3f1f526102995
parent042a12f4e88525f8438f47b149415f0d035c40fc (diff)
downloadgcc-94e9831662a5824b2cc403cba23829ae61616a29.zip
gcc-94e9831662a5824b2cc403cba23829ae61616a29.tar.gz
gcc-94e9831662a5824b2cc403cba23829ae61616a29.tar.bz2
re PR target/27946 (double to long long and back to double stores to the stack)
2008-03-21 Andrew Pinski <andrew_pinski@playstation.sony.com> PR target/27947 * config/rs6000/rs6000.md (floatdidf2): Discouraging fprs and encouraging but not allowing gprs for input; change the input constraint to !f#r. (fix_truncdfdi2): Discouraging fprs and encouraging but not allowing gprs for output; change the output constraint to !f#r. 2008-03-21 Andrew Pinski <andrew_pinski@playstation.sony.com> PR target/27947 * gcc.target/powerpc/ppc64-double-1.c: New testcase. From-SVN: r133438
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/rs6000/rs6000.md6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c11
4 files changed, 29 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3d2ad8f..b26a46a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2008-03-21 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR target/27947
+ * config/rs6000/rs6000.md (floatdidf2): Discouraging fprs and
+ encouraging but not allowing gprs for input;
+ change the input constraint to !f#r.
+ (fix_truncdfdi2): Discouraging fprs and encouraging but not allowing
+ gprs for output;
+ change the output constraint to !f#r.
+
2008-03-21 Uros Bizjak <ubizjak@gmail.com>
PR target/13958
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 777a1ec..cac5fd1 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -6126,7 +6126,7 @@
(define_insn "floatdidf2"
[(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (float:DF (match_operand:DI 1 "gpc_reg_operand" "*f")))]
+ (float:DF (match_operand:DI 1 "gpc_reg_operand" "!f#r")))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS"
"fcfid %0,%1"
[(set_attr "type" "fp")])
@@ -6173,7 +6173,7 @@
"")
(define_insn "fix_truncdfdi2"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=*f")
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=!f#r")
(fix:DI (match_operand:DF 1 "gpc_reg_operand" "f")))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS"
"fctidz %0,%1"
@@ -6202,7 +6202,7 @@
;; from double rounding.
(define_insn_and_split "floatdisf2_internal1"
[(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (float:SF (match_operand:DI 1 "gpc_reg_operand" "*f")))
+ (float:SF (match_operand:DI 1 "gpc_reg_operand" "!f#r")))
(clobber (match_scratch:DF 2 "=f"))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS"
"#"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ad3e1ab..9b650a5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-21 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR target/27947
+ * gcc.target/powerpc/ppc64-double-1.c: New testcase.
+
2008-03-21 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/32972
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c b/gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c
new file mode 100644
index 0000000..6672b10
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c
@@ -0,0 +1,11 @@
+// { dg-do compile }
+// { dg-options "-O2 -mpowerpc64" }
+// { dg-final { scan-assembler-not "stfd" } }
+
+// The register allocator should have allocated the temporary long long value in a floating point register.
+
+double
+d2ll2d (double d)
+{
+ return (double)(long long)d;
+}