OSDN Git Service

* calls.c (emit_library_call_value_1): If
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Jul 2002 11:18:10 +0000 (11:18 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Jul 2002 11:18:10 +0000 (11:18 +0000)
FUNCTION_ARG_PASS_BY_REFERENCE is true, pretend this is neither
libcall, const call nor pure call.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55676 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/calls.c

index c369981..3805919 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 6abeace..144d7b1 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)