aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@superh.com>2002-07-23 11:18:10 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2002-07-23 12:18:10 +0100
commita0dc500c860478e0917fd98ad618ec65482fe395 (patch)
treee7882531616e61e8b0a4d006713325e3afa972db /gcc
parent1e7a2d3fd5f519570dd4ba7c35b790c087543821 (diff)
downloadgcc-a0dc500c860478e0917fd98ad618ec65482fe395.zip
gcc-a0dc500c860478e0917fd98ad618ec65482fe395.tar.gz
gcc-a0dc500c860478e0917fd98ad618ec65482fe395.tar.bz2
calls.c (emit_library_call_value_1): If FUNCTION_ARG_PASS_BY_REFERENCE is true...
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/calls.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c369981..3805919 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/calls.c b/gcc/calls.c
index 6abeace..144d7b1 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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)