re PR rtl-optimization/70478 ([LRA] S/390: Performance regression - superfluous stack...
authorVladimir Makarov <vmakarov@redhat.com>
Tue, 11 Apr 2017 19:39:59 +0000 (19:39 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Tue, 11 Apr 2017 19:39:59 +0000 (19:39 +0000)
2017-04-11  Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/70478
* lra-constraints.c (process_alt_operands): Check memory for
disfavoring memory insn operand.

From-SVN: r246854

gcc/ChangeLog
gcc/lra-constraints.c

index e5b4c75..11304c8 100644 (file)
@@ -1,3 +1,9 @@
+2017-04-11  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/70478
+       * lra-constraints.c (process_alt_operands): Check memory for
+       disfavoring memory insn operand.
+
 2017-04-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/80100
index 82b1ed0..c8bc9b9 100644 (file)
@@ -2722,12 +2722,14 @@ process_alt_operands (int only_alternative)
                    }
                }
 
-             /* When we use memory operand, the insn should read the
-                value from memory and even if we just wrote a value
-                into the memory it is costly in comparison with an
-                insn alternative which does not use memory
-                (e.g. register or immediate operand).  */
-             if (no_regs_p && offmemok)
+             /* When we use an operand requiring memory in given
+                alternative, the insn should write *and* read the
+                value to/from memory it is costly in comparison with
+                an insn alternative which does not use memory
+                (e.g. register or immediate operand).  We exclude
+                memory operand for such case as we can satisfy the
+                memory constraints by reloading address.  */
+             if (no_regs_p && offmemok && !MEM_P (op))
                {
                  if (lra_dump_file != NULL)
                    fprintf