From: Vladimir Makarov Date: Fri, 8 Dec 2017 23:47:44 +0000 (+0000) Subject: [multiple changes] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4692a783656f005ff9737dfb296b25ed6d5ff114;p=gcc.git [multiple changes] 2017-12-08 Vladimir Makarov PR rtl-optimization/83317 * lra-constraints.c (process_address_1): Add insn code check. 2017-12-08 Jakub Jelinek PR rtl-optimization/83317 * gcc.target/i386/pr83317.c: New test. From-SVN: r255517 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 35c27beeeb5..973fb15be93 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-12-08 Vladimir Makarov + + PR rtl-optimization/83317 + * lra-constraints.c (process_address_1): Add insn code check. + 2017-12-08 Michael Matz Fix PR tree-optimization/83323 diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 3758409bb9c..a6600ef992c 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 79f6d24b8c3..cd6c927138b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-12-08 Jakub Jelinek + + PR rtl-optimization/83317 + * gcc.target/i386/pr83317.c: New test. + 2017-12-08 Jakub Jelinek PR rtl-optimization/81595 diff --git a/gcc/testsuite/gcc.target/i386/pr83317.c b/gcc/testsuite/gcc.target/i386/pr83317.c new file mode 100644 index 00000000000..5ae0b8d4c59 --- /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; +}