From d2552d01a2650b925a62a837f4ac23aa28394233 Mon Sep 17 00:00:00 2001 From: aoliva Date: Mon, 14 May 2001 05:11:38 +0000 Subject: [PATCH] * rtl.texi (CALL_INSN_FUNCTION_USAGE): Note that (and when) it may contain MEMs. Remove useless distinction about clobbering registers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42060 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/rtl.texi | 25 +++++++++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6929b4..b5937f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-05-14 Alexandre Oliva + + * rtl.texi (CALL_INSN_FUNCTION_USAGE): Note that (and when) it may + contain MEMs. Remove useless distinction about clobbering + registers. + 2001-05-13 Geoff Keating * config/rs6000/rs6000.h (EXCEPTION_SECTION): Move to... diff --git a/gcc/rtl.texi b/gcc/rtl.texi index 6c256b4..026172c 100644 --- a/gcc/rtl.texi +++ b/gcc/rtl.texi @@ -2530,12 +2530,25 @@ unpredictably. accessed in the same way and in addition contain a field @code{CALL_INSN_FUNCTION_USAGE}, which contains a list (chain of @code{expr_list} expressions) containing @code{use} and @code{clobber} -expressions that denote hard registers used or clobbered by the called -function. A register specified in a @code{clobber} in this list is -modified @emph{after} the execution of the @code{call_insn}, while a -register in a @code{clobber} in the body of the @code{call_insn} is -clobbered before the insn completes execution. @code{clobber} -expressions in this list augment registers specified in +expressions that denote hard registers and @code{MEM}s used or +clobbered by the called function. + +A @code{MEM} generally points to a stack slots in which arguments passed +to the libcall by reference (@pxref{Register Arguments, +FUNCTION_ARG_PASS_BY_REFERENCE}) are stored. If the argument is +caller-copied (@pxref{Register Arguments, FUNCTION_ARG_CALLEE_COPIES}), +the stack slot will be mentioned in @code{CLOBBER} and @code{USE} +entries; if it's callee-copied, only a @code{USE} will appear, and the +@code{MEM} may point to addresses that are not stack slots. These +@code{MEM}s are used only in libcalls, because, unlike regular function +calls, @code{CONST_CALL}s (which libcalls generally are, @pxref{Flags, +CONST_CALL_P}) aren't assumed to read and write all memory, so flow +would consider the stores dead and remove them. Note that, since a +libcall must never return values in memory (@pxref{Aggregate Return, +RETURN_IN_MEMORY}), there will never be a @code{CLOBBER} for a memory +address holding a return value. + +@code{CLOBBER}ed registers in this list augment registers specified in @code{CALL_USED_REGISTERS} (@pxref{Register Basics}). @findex code_label -- 2.7.4