aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2017-04-19 08:05:36 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2017-04-19 08:05:36 +0000
commita16c8d8b61064dfd2281dd1749b65d633b256334 (patch)
tree68e54b58e4f052d68cd42f002630869f03876722
parent6143c99823d855df4b855dc6ebf697310fa1dc8a (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/sparc/predicates.md10
-rw-r--r--gcc/config/sparc/sparc.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20170419-1.c13
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;
+}