diff options
author | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2017-12-08 23:47:44 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2017-12-08 23:47:44 +0000 |
commit | 4692a783656f005ff9737dfb296b25ed6d5ff114 (patch) | |
tree | 0de658eb07b54957b40ee8134f528d10a59dce9a | |
parent | d5910e08a35c7bd4c2cd862d16e533fa978f3238 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/lra-constraints.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr83317.c | 21 |
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; +} |