1
Fork 0
forked from gcc/gcc
TEST repository for https://forge.sourceware.org/ experimenting.
  • C++ 30.8%
  • C 30.2%
  • Ada 14.3%
  • D 6.1%
  • Go 5.6%
  • Other 12.5%
Find a file
Martin Jambor 8d7dc3ed28
ipa-cp: Only create all-context nodes for local cgraph nodes (PR125207)
IPA-CP contains special logic to create specially marked clones with
constants that come from all callees (that are constant in all
contexts).  In the past that was the only case in which the heuristics
tried to assess the effect of multiple constants at once (that is no
longer true since GCC 16) and they are also useful when we realize we
can refine them still further in the case of recursive calls (such as
in testsuite/gcc.dg/ipa/pr93707.c) turn to carry more constants after
the initial "all-context" clone is created.

Unfortunately, the code creating the clones simply redirects all
incoming call graph edges which may include those which were indirect
in the phase of the algorithm which gathered IPA-CP lattices and the
arguments in these calls might contain different values than all
initially known ones, leading to miscompilations like the one in
PR125207.

Since GCC 16 already feeds the heuristics with all known constants
that are passed along with the constant the evaluation was initiated
for, the all-context nodes are really only necessary for the recursive
refinement cases described above.  It seems appropriate to only create
them when they are what they are called, when there can be no indirect
or unknown calls to them, i.e. when they are local.  This has the nice
effect of simplifying decide_whether_version_node somewhat.

There is some testsuite fallout.  First, IPA-CP will now no longer
clone a non-static function to only remove a (non-constant) parameter.
This likely only makes sense with tiny values of param
ipa-cp-eval-threshold or very small functions which are likely going
to be inlined anyway.  But gcc.dg/vla-1.c expected that to happen so I
made the function to be cloned static.

The testcase libgomp.c/ipcp-cb-spec1.c stopped working for the same
reason (the outlined task body has its address taken) but looking into
the dumps the test does not seem to test what it is supposed to, the
test function was completely eliminated before IPA.  I have therefore
changed it to really propagate constants.

gcc/ChangeLog:

2026-06-02  Martin Jambor  <mjambor@suse.cz>

	PR ipa/125207
	* ipa-cp.cc (decide_about_value): Add detailed dumping about skipping
	a value when there are no edges for it.  Make dumping about skipping
	because of growth limit violation consistent with other cases.
	(decide_whether_version_node): Only create all-context nodes for local
	nodes, remove the logic doing it in other cases, allow cloning for
	single constant lattices for non-local nodes.  Adjust dumping.

gcc/testsuite/ChangeLog:

2026-06-02  Martin Jambor  <mjambor@suse.cz>

	PR ipa/125207
	* gcc.dg/ipa/pr125207.c: New test.
	* gcc.dg/vla-1.c (f1): Make function f1 static.

libgomp/ChangeLog:

2026-06-03  Martin Jambor  <mjambor@suse.cz>

	PR ipa/125207
	* testsuite/libgomp.c/ipcp-cb-spec1.c (test): Rework.
2026-07-09 17:32:41 +02:00
.forgejo forge: Add a prototype CODEOWNERS file 2026-06-05 17:58:58 +01:00
.github Minor formatting fix for newly-added file from previous commit 2023-11-01 19:28:56 -04:00
c++tools Daily bump. 2026-06-30 00:16:45 +00:00
config Daily bump. 2026-07-02 00:16:40 +00:00
contrib s390: Remove -m31 support 2026-07-09 09:28:12 +02:00
fixincludes Daily bump. 2026-06-30 00:16:45 +00:00
gcc ipa-cp: Only create all-context nodes for local cgraph nodes (PR125207) 2026-07-09 17:32:41 +02:00
gnattools Daily bump. 2026-06-30 00:16:45 +00:00
gotools Daily bump. 2026-06-30 00:16:45 +00:00
include Daily bump. 2026-07-01 00:16:44 +00:00
INSTALL README: Do not mention CVS. 2014-10-12 15:05:28 +00:00
libada Daily bump. 2026-06-30 00:16:45 +00:00
libatomic Daily bump. 2026-06-30 00:16:45 +00:00
libbacktrace Daily bump. 2026-07-07 00:16:36 +00:00
libcc1 Daily bump. 2026-06-30 00:16:45 +00:00
libcody Daily bump. 2026-05-31 00:16:35 +00:00
libcpp Daily bump. 2026-07-01 00:16:44 +00:00
libdecnumber Daily bump. 2026-05-31 00:16:35 +00:00
libffi Daily bump. 2026-06-18 00:16:35 +00:00
libga68 Daily bump. 2026-05-31 00:16:35 +00:00
libgcc s390: Remove -m31 support 2026-07-09 09:28:12 +02:00
libgcobol Daily bump. 2026-07-01 00:16:44 +00:00
libgfortran Daily bump. 2026-07-09 00:16:52 +00:00
libgm2 s390: Remove -m31 support 2026-07-09 09:28:12 +02:00
libgo libgo: cmd/go: use 'gcloud storage cp' instead of 'gsutil cp' 2026-05-02 16:21:35 -07:00
libgomp ipa-cp: Only create all-context nodes for local cgraph nodes (PR125207) 2026-07-09 17:32:41 +02:00
libgrust Daily bump. 2026-06-30 00:16:45 +00:00
libiberty Daily bump. 2026-07-02 00:16:40 +00:00
libitm s390: Remove -m31 support 2026-07-09 09:28:12 +02:00
libobjc Daily bump. 2026-06-30 00:16:45 +00:00
libphobos Daily bump. 2026-06-30 00:16:45 +00:00
libquadmath Daily bump. 2026-06-30 00:16:45 +00:00
libsanitizer Daily bump. 2026-06-30 00:16:45 +00:00
libssp Daily bump. 2026-07-04 00:16:37 +00:00
libstdc++-v3 s390: Remove -m31 support 2026-07-09 09:28:12 +02:00
libvtv Daily bump. 2026-06-30 00:16:45 +00:00
lto-plugin Daily bump. 2026-06-30 00:16:45 +00:00
maintainer-scripts Daily bump. 2026-04-23 00:16:32 +00:00
zlib Daily bump. 2025-12-30 00:16:33 +00:00
.b4-config Add config file so b4 uses inbox.sourceware.org automatically 2024-07-28 11:13:16 +01:00
.dir-locals.el dir-locals: apply our C settings in C++ also 2024-07-31 20:38:27 +02:00
.editorconfig editorconfig: Add rules for yaml/yml files. 2026-07-07 11:02:11 +01:00
.gitattributes Add *.md diff=md. 2020-01-15 14:29:53 +01:00
.gitignore Rust: Move 'libformat_parser' build into the GCC build directory 2025-08-05 16:36:43 +02:00
ABOUT-NLS intl: New directory; see intl/ChangeLog for details. 2003-07-04 18:18:54 +00:00
ar-lib Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
ChangeLog Daily bump. 2026-07-08 00:16:32 +00:00
ChangeLog.jit Merger of dmalcolm/jit branch from git 2014-11-11 21:55:52 +00:00
ChangeLog.tree-ssa Merge tree-ssa-20020619-branch into mainline. 2004-05-13 02:41:07 -04:00
compile Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
config-ml.in toplevel: Unbreak Ada build [PR123490] 2026-01-10 11:36:25 +01:00
config.guess config.sub, config.guess : Import upstream 2021-01-25. 2021-02-23 17:21:10 +08:00
config.rpath Remove freebsd1 from libtool.m4 macros and config.rpath. 2011-02-13 11:45:53 +00:00
config.sub config.sub: change mode to 755. 2021-12-21 09:10:57 +01:00
configure s390: Remove -m31 support 2026-07-09 09:28:12 +02:00
configure.ac s390: Remove -m31 support 2026-07-09 09:28:12 +02:00
COPYING COPYING, [...]: Sync from upstream sources. 2005-07-14 01:08:13 +00:00
COPYING.LIB Update COPYING.LIB from upstream. Correct last Changelog. 2005-07-14 01:41:54 +00:00
COPYING.RUNTIME Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
COPYING3 COPYING_v3: New file. 2007-07-17 08:37:53 +00:00
COPYING3.LIB COPYING_v3: New file. 2007-07-17 08:37:53 +00:00
depcomp Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
install-sh Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
libtool-ldflags re PR sanitizer/56781 (boostrap-asan failure: fixincl fails to link (missing -lasan)) 2014-04-17 14:23:28 +02:00
libtool.m4 build: Cherry-pick libtool.m4 support for GNU ld *_sol2 emulations 2025-12-29 12:09:35 +01:00
ltgcc.m4 libtool.m4: Update to libtool 2.2.6. 2008-09-26 16:21:02 +00:00
ltmain.sh ltmain.sh: allow more flags at link-time 2024-09-25 19:05:24 +01:00
ltoptions.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
ltsugar.m4 libtool.m4: Update to libtool 2.2.6. 2008-09-26 16:21:02 +00:00
ltversion.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
lt~obsolete.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
MAINTAINERS MAINTAINERS: scripts to generate the file from yaml data 2026-07-07 11:06:47 +01:00
MAINTAINERS.yml MAINTAINERS: scripts to generate the file from yaml data 2026-07-07 11:06:47 +01:00
Makefile.def toplevel: Fix typos in build files 2026-05-30 19:49:31 +05:30
Makefile.in toplevel: Fix typos in build files 2026-05-30 19:49:31 +05:30
Makefile.tpl toplevel: Fix typos in build files 2026-05-30 19:49:31 +05:30
missing Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
mkdep merge with /cvs/src 2000-07-22 04:08:22 -04:00
mkinstalldirs Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
move-if-change Update move-if-change from gnulib 2014-11-16 16:12:44 +00:00
multilib.am Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
README * README: Document use of ranges of years in copyright notices. 2012-07-16 15:01:34 +01:00
SECURITY.txt a68: top-level misc files 2025-11-30 01:52:24 +01:00
symlink-tree bugzilla: remove gcc-bugs@ mailing list address 2026-01-09 11:10:38 +01:00
test-driver Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
ylwrap Update from upstream Automake files. 2014-11-16 14:07:13 +00: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.