Find a file
Jakub Jelinek 3f9dfb94ea bitintlower: Fix up handling of SSA_NAME copies in coalescing [PR119722]
The following patch is miscompiled, because during the limited
SSA name coalescing the bitintlower pass does we incorrectly don't
register a conflict.
This is on
  <bb 4> [local count: 1073741824]:
  # b_17 = PHI <b_19(3), 8(2)>
  g.4_13 = g;
  _14 = g.4_13 >> 50;
  _15 = (unsigned int) _14;
  _21 = b_17;
  _16 = (unsigned int) _21;
  s_22 = _15 + _16;
  return s_22;
basic block where in the map->bitint bitmap we track 14, 17 and 19.
The build_bitint_stmt_ssa_conflicts "hook" has special code where
it tracks uses at the final statements of mergeable operations, so
e.g. the
  _16 = (unsigned int) _21;
statement is considered to be use of b_17 because _21 is not in
map->bitmap (or large_huge.m_names), i.e. is mergeable.
The problem is that build_ssa_conflict_graph has special code to handle
SSA_NAME copies and _21 = b_17; is gimple_assign_copy_p.  In such cases
it calls live_track_clear_var on the rhs1.  The problem is that
on the above bb, after we note in the _16 = (unsigned int) _21;
stmt we need b_17 the generic code makes us forget that because
of the copy statement, and then build_bitint_stmt_ssa_conflicts
ignores it completely (because _21 is large/huge bitint and is
not in map->bitint, so assumed to be handled by a later stmt in the
bb, for backwards walk like this before this one).
As the b_17 use is ignored, the coalescing thinks it can put
all of b_17, b_19 and _14 into the same partition, which is wrong,
while we can and should coalesce b_17 and b_19, _14 needs to be a different
temporary because b_17 is set before and used after _14 has been written.

The following patch fixes it by handling gimple_assign_copy_p in two
separate spots, move the generic coalesce handling of it after
build_ssa_conflict_graph (where build_ssa_conflict_graph handling
doesn't fall through to that, it does continue after the call) and
inside of build_ssa_conflict_graph it performs it too, but only if
the lhs is not mergeable large/huge bitint.

2025-04-12  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/119722
	* gimple-lower-bitint.h (build_bitint_stmt_ssa_conflicts): Add
	CLEAR argument.
	* gimple-lower-bitint.cc (build_bitint_stmt_ssa_conflicts): Add
	CLEAR argument.  Call clear on gimple_assign_copy_p rhs1 if lhs
	is large/huge bitint unless lhs is not in names.
	* tree-ssa-coalesce.cc (build_ssa_conflict_graph): Adjust
	build_bitint_stmt_ssa_conflicts caller.  Move gimple_assign_copy_p
	handling to after the build_bitint_stmt_ssa_conflicts call.

	* gcc.dg/torture/bitint-77.c: New test.
2025-04-12 13:13:53 +02:00
.forgejo top-level: Add pull request template for Forgejo 2024-10-23 19:45:09 +01:00
.github
c++tools Update copyright years. 2025-01-02 11:59:57 +01:00
config Daily bump. 2024-11-26 00:19:26 +00:00
contrib Daily bump. 2025-04-12 00:17:42 +00:00
fixincludes Daily bump. 2024-07-12 00:17:52 +00:00
gcc bitintlower: Fix up handling of SSA_NAME copies in coalescing [PR119722] 2025-04-12 13:13:53 +02:00
gnattools Daily bump. 2025-04-02 00:18:25 +00:00
gotools Daily bump. 2024-04-16 00:18:06 +00:00
include Daily bump. 2025-03-30 00:16:46 +00:00
INSTALL
libada Update copyright years. 2025-01-02 11:59:57 +01:00
libatomic Daily bump. 2025-01-11 00:19:49 +00:00
libbacktrace Daily bump. 2025-04-11 00:17:32 +00:00
libcc1 Update copyright years. 2025-01-02 11:59:57 +01:00
libcody Update Copyright year in ChangeLog files 2025-01-02 11:13:18 +01:00
libcpp Daily bump. 2025-04-10 00:18:06 +00:00
libdecnumber Update copyright years. 2025-01-02 11:59:57 +01:00
libffi Daily bump. 2024-10-26 00:19:39 +00:00
libgcc Daily bump. 2025-04-09 00:18:02 +00:00
libgcobol cobol: Eliminate many getenv() calls. [PR119694] 2025-04-11 22:53:15 -04:00
libgfortran Daily bump. 2025-04-10 00:18:06 +00:00
libgm2 Daily bump. 2025-03-29 00:17:59 +00:00
libgo libgo: bump libgo version for GCC 15 release 2025-03-04 11:43:22 -08:00
libgomp Daily bump. 2025-04-11 00:17:32 +00:00
libgrust Daily bump. 2025-04-01 00:19:09 +00:00
libiberty Daily bump. 2025-03-30 00:16:46 +00:00
libitm Daily bump. 2025-01-03 00:17:15 +00:00
libobjc Update copyright years. 2025-01-02 11:59:57 +01:00
libphobos Daily bump. 2025-04-12 00:17:42 +00:00
libquadmath Daily bump. 2025-04-10 00:18:06 +00:00
libsanitizer Daily bump. 2025-01-07 00:18:08 +00:00
libssp Update copyright years. 2025-01-02 11:59:57 +01:00
libstdc++-v3 Daily bump. 2025-04-12 00:17:42 +00:00
libvtv Update copyright years. 2025-01-02 11:59:57 +01:00
lto-plugin Daily bump. 2025-03-07 00:17:19 +00:00
maintainer-scripts Daily bump. 2025-04-08 00:17:33 +00:00
zlib
.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
.gitattributes
.gitignore gccrs: git: Ignore libgrust build folders 2025-03-17 16:35:21 +01:00
ABOUT-NLS
ar-lib
ChangeLog Daily bump. 2025-04-03 00:18:15 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in Remove extra argument from subst macro 2025-03-13 07:26:04 +01:00
config.guess
config.rpath
config.sub
configure config, toplevel, Darwin: Pass -B instead of -L to C++ commands. 2025-04-02 15:04:37 +01:00
configure.ac config, toplevel, Darwin: Pass -B instead of -L to C++ commands. 2025-04-02 15:04:37 +01:00
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
depcomp
install-sh
libtool-ldflags
libtool.m4
ltgcc.m4
ltmain.sh ltmain.sh: allow more flags at link-time 2024-09-25 19:05:24 +01:00
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
MAINTAINERS MAINTAINERS: Update my name 2025-03-31 23:35:29 +01:00
Makefile.def toplevel, libcobol: Add dependency on libquadmath build [PR119244]. 2025-03-25 19:31:10 +00:00
Makefile.in toplevel, libcobol: Add dependency on libquadmath build [PR119244]. 2025-03-25 19:31:10 +00:00
Makefile.tpl toplevel, Makefile: Add missing CXX_FOR_TARGET export [PR88319]. 2025-03-23 20:44:33 +00:00
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
SECURITY.txt Remove Debian from SECURITY.txt 2024-11-19 12:27:33 +01:00
symlink-tree
test-driver
ylwrap

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.