expr.c (expand_increment): When enqueing a postincrement for a MEM...
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Fri, 31 Oct 1997 00:40:46 +0000 (00:40 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Fri, 31 Oct 1997 00:40:46 +0000 (00:40 +0000)
* expr.c (expand_increment): When enqueing a postincrement for a MEM,
use copy_to_reg if address is not a general_operand.

From-SVN: r16247

gcc/ChangeLog
gcc/expr.c

index 78f47c3bbfdb61e1cef440b8d5971870b836b8aa..a417d4d8c3101bb452876bb033310cea772bb582 100644 (file)
@@ -1,3 +1,8 @@
+Fri Oct 31 00:34:55 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * expr.c (expand_increment): When enqueing a postincrement for a MEM,
+       use copy_to_reg if address is not a general_operand.
+
 Fri Oct 31 00:16:55 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * profile.c (output_func_start_profiler): Clear flag_inline_functions
index 5cd1b435780ea1460c1b452345cba5abca2ca5af..19a5e1b17358fe7b60474d8602561fb6c76bd7db 100644 (file)
@@ -9847,7 +9847,9 @@ expand_increment (exp, post, ignore)
        }
       if (icode != (int) CODE_FOR_nothing && GET_CODE (op0) == MEM)
        {
-         rtx addr = force_reg (Pmode, XEXP (op0, 0));
+         rtx addr = (general_operand (XEXP (op0, 0), mode)
+                     ? force_reg (Pmode, XEXP (op0, 0))
+                     : copy_to_reg (XEXP (op0, 0)));
          rtx temp, result;
 
          op0 = change_address (op0, VOIDmode, addr);