aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@gcc.gnu.org>2017-12-08 23:47:44 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2017-12-08 23:47:44 +0000
commit4692a783656f005ff9737dfb296b25ed6d5ff114 (patch)
tree0de658eb07b54957b40ee8134f528d10a59dce9a
parentd5910e08a35c7bd4c2cd862d16e533fa978f3238 (diff)
downloadgcc-4692a783656f005ff9737dfb296b25ed6d5ff114.zip
gcc-4692a783656f005ff9737dfb296b25ed6d5ff114.tar.gz
gcc-4692a783656f005ff9737dfb296b25ed6d5ff114.tar.bz2
[multiple changes]
2017-12-08 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/83317 * lra-constraints.c (process_address_1): Add insn code check. 2017-12-08 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/83317 * gcc.target/i386/pr83317.c: New test. From-SVN: r255517
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/lra-constraints.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr83317.c21
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 35c27be..973fb15 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-12-08 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/83317
+ * lra-constraints.c (process_address_1): Add insn code check.
+
2017-12-08 Michael Matz <matz@suse.de>
Fix PR tree-optimization/83323
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 3758409..a6600ef 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -3222,7 +3222,8 @@ process_address_1 (int nop, bool check_only_p,
/* Do not attempt to decompose arbitrary addresses generated by combine
for asm operands with loose constraints, e.g 'X'. */
else if (MEM_P (op)
- && !(get_constraint_type (cn) == CT_FIXED_FORM
+ && !(INSN_CODE (curr_insn) < 0
+ && get_constraint_type (cn) == CT_FIXED_FORM
&& constraint_satisfied_p (op, cn)))
decompose_mem_address (&ad, op);
else if (GET_CODE (op) == SUBREG
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 79f6d24..cd6c927 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-12-08 Jakub Jelinek <jakub@redhat.com>
+ PR rtl-optimization/83317
+ * gcc.target/i386/pr83317.c: New test.
+
+2017-12-08 Jakub Jelinek <jakub@redhat.com>
+
PR rtl-optimization/81595
* gcc.c-torture/compile/pr81595.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr83317.c b/gcc/testsuite/gcc.target/i386/pr83317.c
new file mode 100644
index 0000000..5ae0b8d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr83317.c
@@ -0,0 +1,21 @@
+/* PR rtl-optimization/83317 */
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+/* { dg-additional-options "-fPIC" { target fpic } } */
+/* { dg-additional-options "-msse2 -mfpmath=sse" { target ia32 } } */
+
+struct S { double a; };
+struct S c;
+int d, e;
+void *buf[64];
+extern int setjmp (void **);
+
+void
+foo ()
+{
+ setjmp (buf);
+ struct S g;
+ if (d)
+ g.a = __builtin_copysign (e, d);
+ c = g;
+}