diff options
author | Andrew Pinski <andrew_pinski@playstation.sony.com> | 2008-03-21 22:16:49 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2008-03-21 15:16:49 -0700 |
commit | 94e9831662a5824b2cc403cba23829ae61616a29 (patch) | |
tree | 92fc4bf19a3a6425535a760dbbe3f1f526102995 /gcc | |
parent | 042a12f4e88525f8438f47b149415f0d035c40fc (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c | 11 |
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; +} |