Eric Botcazou 93f8cb4965 Reuse non-gimple_reg variable for inlining
When a call to a function is inlined and takes a parameter whose type is not
gimple_reg, a local variable is created in the caller to hold a copy of the
argument passed in the call with the following comment:

      /* We may produce non-gimple trees by adding NOPs or introduce
         invalid sharing when operand is not really constant.
         It is not big deal to prohibit constant propagation here as
         we will constant propagate in DOM1 pass anyway.  *

Of course the second sentence of the comment does not apply to non-gimple_reg
values, unless they get SRAed later, because we don't do constant propagation
for them.  This for example prevents two identical calls to a pure function
from being merged in the attached Ada testcase.

Therefore the attached patch attempts to reuse a read-only or non-addressable
local DECL of the caller, the hitch being that expand_call_inline needs to be
prevented from creating a CLOBBER for the case where it ends uo being reused.

gcc/
	* tree-inline.c (insert_debug_decl_map): Delete.
	(copy_debug_stmt): Minor tweak.
	(setup_one_parameter): Do not use a variable if the value is either
	a read-only DECL or a non-addressable local variable in the caller.
	In this case, insert the debug-only variable in the map manually.
	(expand_call_inline): Do not generate a CLOBBER for these values.
	* tree-inline.h (debug_map): Minor tweak.
2021-05-04 12:54:13 +02:00
2021-04-02 00:16:26 +00:00
2021-05-04 00:16:53 +00:00
2021-04-28 00:16:36 +00:00
2020-12-15 00:16:35 +00:00
2021-02-03 00:16:23 +00:00
2021-04-01 00:16:39 +00:00
2021-04-17 00:16:25 +00:00
2021-01-04 10:26:59 +01:00
2021-01-16 00:16:29 +00:00
2021-05-04 00:16:53 +00:00
2021-05-04 00:16:53 +00:00
2021-04-07 00:16:39 +00:00
2021-05-04 00:16:53 +00:00
2021-05-04 00:16:53 +00:00
2021-01-06 00:16:55 +00:00
2021-04-30 00:16:37 +00:00
2021-05-03 00:16:25 +00:00
2021-04-12 15:23:16 -07:00
2021-01-06 00:16:55 +00:00
2021-01-16 00:16:29 +00:00
2021-01-06 00:16:55 +00:00
2021-01-06 00:16:55 +00:00
2021-04-22 00:16:32 +00:00
2021-01-06 00:16:55 +00:00
2021-04-18 00:16:21 +00:00
2021-01-06 00:16:55 +00:00
2021-05-03 00:16:25 +00:00
2021-01-06 00:16:55 +00:00
2021-05-04 00:16:53 +00:00
2021-04-21 00:16:23 +00:00
2021-01-06 00:16:55 +00:00
2020-12-02 11:04:01 -07:00
2021-04-29 00:17:01 +00:00
2021-01-05 16:04:14 -07:00
2021-03-12 19:48:13 -05:00
2021-03-12 19:48:13 -05:00

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.
S
Description
Yggdrasil port of the GNU Compiler Collection
Readme 978 MiB
Languages
C++ 33%
C 27.4%
Ada 13%
Go 7.1%
D 7%
Other 12.1%