aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel1@de.ibm.com>2006-08-31 07:43:36 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2006-08-31 07:43:36 +0000
commite4f2cd43ec2076e9a84f611c8a72454e34975e0c (patch)
tree1827db1892808b46722cf8bee2f28098e66535fb
parent99cdbefb972862f1fd6219a990df04ab7cb95503 (diff)
downloadgcc-e4f2cd43ec2076e9a84f611c8a72454e34975e0c.zip
gcc-e4f2cd43ec2076e9a84f611c8a72454e34975e0c.tar.gz
gcc-e4f2cd43ec2076e9a84f611c8a72454e34975e0c.tar.bz2
re PR target/24367 (unrecognizable insn with -fPIC -O2 -funroll-loops)
2006-08-31 Andreas Krebbel <krebbel1@de.ibm.com> PR target/24367 * config/s390/s390.md ("movsi", "movdi" expander): Accept rtxes like r12 + SYMBOLIC_CONST. 2006-08-31 Andreas Krebbel <krebbel1@de.ibm.com> PR target/24367 * gcc.dg/pr24367.c: New testcase. From-SVN: r116599
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/s390/s390.md12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr24367.c17
4 files changed, 38 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 795c0a7..8f1fd34 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-08-31 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ PR target/24367
+ * config/s390/s390.md ("movsi", "movdi" expander): Accept rtxes like
+ r12 + SYMBOLIC_CONST.
+
2006-08-30 Richard Guenther <rguenther@suse.de>
* Makefile.in (see.o): Add $(EXPR_H) dependency.
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index d6443e0..eb734e1 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -907,7 +907,11 @@
""
{
/* Handle symbolic constants. */
- if (TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
+ if (TARGET_64BIT
+ && (SYMBOLIC_CONST (operands[1])
+ || (GET_CODE (operands[1]) == PLUS
+ && XEXP (operands[1], 0) == pic_offset_table_rtx
+ && SYMBOLIC_CONST (XEXP (operands[1], 1)))))
emit_symbolic_move (operands);
})
@@ -1158,7 +1162,11 @@
""
{
/* Handle symbolic constants. */
- if (!TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
+ if (!TARGET_64BIT
+ && (SYMBOLIC_CONST (operands[1])
+ || (GET_CODE (operands[1]) == PLUS
+ && XEXP (operands[1], 0) == pic_offset_table_rtx
+ && SYMBOLIC_CONST (XEXP(operands[1], 1)))))
emit_symbolic_move (operands);
})
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ad0a274..2e6cec9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-31 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ PR target/24367
+ * gcc.dg/pr24367.c: New testcase.
+
2006-08-30 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/arm-mmx-1.c: Skip for -mfloat-abi=softfp.
diff --git a/gcc/testsuite/gcc.dg/pr24367.c b/gcc/testsuite/gcc.dg/pr24367.c
new file mode 100644
index 0000000..6486719
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr24367.c
@@ -0,0 +1,17 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -fPIC -funroll-loops" } */
+
+char *
+test (const char *parent, const char *child)
+{
+ static char rtn_path[1024];
+ char *s = rtn_path;
+ char *s_end = rtn_path + sizeof (rtn_path);
+ const char *s2 = child;
+
+ while (*s != '\0')
+ s++;
+ while ((s < s_end) && (*s2 != '\0'))
+ *s++ = *s2++;
+ return (rtn_path);
+}