calls.c (emit_library_call_value_1): If FUNCTION_ARG_PASS_BY_REFERENCE is true...
authorJ"orn Rennecke <joern.rennecke@superh.com>
Tue, 23 Jul 2002 11:18:10 +0000 (11:18 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Tue, 23 Jul 2002 11:18:10 +0000 (12:18 +0100)
* calls.c (emit_library_call_value_1): If
FUNCTION_ARG_PASS_BY_REFERENCE is true, pretend this is neither
libcall, const call nor pure call.

From-SVN: r55676

gcc/ChangeLog
gcc/calls.c

index c3699818819a641b3f854f5e8b8f33db79ee9b1f..38059195fdffddd372347146b985dabf55e0d9a8 100644 (file)
@@ -1,3 +1,9 @@
+Tue Jul 23 12:16:58 2002  J"orn Rennecke <joern.rennecke@superh.com>
+
+       * calls.c (emit_library_call_value_1): If
+       FUNCTION_ARG_PASS_BY_REFERENCE is true, pretend this is neither
+       libcall, const call nor pure call.
+
 2002-07-23  Neil Booth  <neil@daikokuya.co.uk>
 
        * config/m88k/m88k.h (SECTION_ASM_OP): Remove.
index 6abeacee02c8664fd745653f8479820ac889ce18..144d7b1188b01b5fbd64f2f5c183597359b9f82c 100644 (file)
@@ -3678,6 +3678,16 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
 #endif
            ;
 
+         /* loop.c won't look at CALL_INSN_FUNCTION_USAGE of const/pure
+            functions, so we have to pretend this isn't such a function.  */
+         if (flags & ECF_LIBCALL_BLOCK)
+           {
+             rtx insns = get_insns ();
+             end_sequence ();
+             emit_insn (insns);
+           }
+         flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
+
          if (GET_MODE (val) == MEM && ! must_copy)
            slot = val;
          else if (must_copy)