diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2017-04-19 08:05:36 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2017-04-19 08:05:36 +0000 |
commit | a16c8d8b61064dfd2281dd1749b65d633b256334 (patch) | |
tree | 68e54b58e4f052d68cd42f002630869f03876722 | |
parent | 6143c99823d855df4b855dc6ebf697310fa1dc8a (diff) | |
download | gcc-a16c8d8b61064dfd2281dd1749b65d633b256334.zip gcc-a16c8d8b61064dfd2281dd1749b65d633b256334.tar.gz gcc-a16c8d8b61064dfd2281dd1749b65d633b256334.tar.bz2 |
predicates.md (input_operand): Add comment.
* config/sparc/predicates.md (input_operand): Add comment. Return
true for any memory operand when LRA is in progress.
* config/sparc/sparc.c (sparc_expand_move): Minor formatting fix.
Co-Authored-By: Jeff Law <law@redhat.com>
Co-Authored-By: Vladimir Makarov <vmakarov@redhat.com>
From-SVN: r246989
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/sparc/predicates.md | 10 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20170419-1.c | 13 |
5 files changed, 36 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7aa8c03..d52db8a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-04-19 Eric Botcazou <ebotcazou@adacore.com> + Vladimir Makarov <vmakarov@redhat.com> + + * config/sparc/predicates.md (input_operand): Add comment. Return + true for any memory operand when LRA is in progress. + * config/sparc/sparc.c (sparc_expand_move): Minor formatting fix. + 2017-04-18 Jeff Law <law@redhat.com> PR target/74563 diff --git a/gcc/config/sparc/predicates.md b/gcc/config/sparc/predicates.md index 118ed91..951933e 100644 --- a/gcc/config/sparc/predicates.md +++ b/gcc/config/sparc/predicates.md @@ -373,6 +373,7 @@ if (TARGET_ARCH32 && mode == DImode && GET_CODE (op) == CONST_INT) return true; + /* Allow FP constants to be built in integer registers. */ if (mclass == MODE_FLOAT && GET_CODE (op) == CONST_DOUBLE) return true; @@ -388,7 +389,14 @@ /* Check for valid MEM forms. */ if (GET_CODE (op) == MEM) - return memory_address_p (mode, XEXP (op, 0)); + { + /* Except when LRA is precisely working hard to make them valid + and relying entirely on the constraints. */ + if (lra_in_progress) + return true; + + return memory_address_p (mode, XEXP (op, 0)); + } return false; }) diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 16ca444..8277496 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -1911,9 +1911,8 @@ sparc_expand_move (machine_mode mode, rtx *operands) /* We are able to build any SF constant in integer registers with at most 2 instructions. */ && (mode == SFmode - /* And any DF constant in integer registers. */ - || (mode == DFmode - && ! can_create_pseudo_p ()))) + /* And any DF constant in integer registers if needed. */ + || (mode == DFmode && !can_create_pseudo_p ()))) return false; operands[1] = force_const_mem (mode, operands[1]); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 90fdddb..8f2cfff 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-04-19 Eric Botcazou <ebotcazou@adacore.com> + Jeff Law <law@redhat.com> + + * gcc.c-torture/compile/20170419-1.c: New test. + 2017-04-19 Tom de Vries <tom@codesourcery.com> PR testsuite/80221 diff --git a/gcc/testsuite/gcc.c-torture/compile/20170419-1.c b/gcc/testsuite/gcc.c-torture/compile/20170419-1.c new file mode 100644 index 0000000..c16a5ea --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20170419-1.c @@ -0,0 +1,13 @@ +extern int __fpclassifyd (double x); + +double fdim (double x, double y) +{ + int c = __fpclassifyd (x); + if (c == 0) + return (x); + if (__fpclassifyd (y) == 0) + return (y); + if (c == 1) + return (__builtin_huge_val ()); + return x > y ? x - y : 0.0; +} |