(expand_call): Ensure we call force_operand on structure_value_addr.
authorRichard Kenner <kenner@gcc.gnu.org>
Thu, 11 Aug 1994 16:48:40 +0000 (12:48 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 11 Aug 1994 16:48:40 +0000 (12:48 -0400)
From-SVN: r7885

gcc/calls.c

index f035079..38b1033 100644 (file)
@@ -901,15 +901,18 @@ expand_call (exp, target, ignore)
      as if it were an extra parameter.  */
   if (structure_value_addr && struct_value_rtx == 0)
     {
+      /* If structure_value_addr is a REG other than
+        virtual_outgoing_args_rtx, we can use always use it.  If it
+        is not a REG, we must always copy it into a register.
+        If it is virtual_outgoing_args_rtx, we must copy it to another
+        register in some cases.  */
+      rtx temp = (GET_CODE (structure_value_addr) != REG
 #ifdef ACCUMULATE_OUTGOING_ARGS
-      /* If the stack will be adjusted, make sure the structure address
-        does not refer to virtual_outgoing_args_rtx.  */
-      rtx temp = (stack_arg_under_construction
-                 ? copy_addr_to_reg (structure_value_addr)
-                 : force_reg (Pmode, structure_value_addr));
-#else
-      rtx temp = force_reg (Pmode, structure_value_addr);
+                 || (stack_arg_under_construction
+                     && structure_value_addr == virtual_outgoing_args_rtx)
 #endif
+                 ? copy_addr_to_reg (structure_value_addr)
+                 : structure_value_addr);
 
       actparms
        = tree_cons (error_mark_node,