Commit Graph

215660 Commits

Author SHA1 Message Date
Tobias Burnus
884637b636 libgomp/plugin/plugin-gcn.c: async-queue init - fix function-return type and fail fatally
libgomp/ChangeLog:

	* plugin/plugin-gcn.c (GOMP_OFFLOAD_openacc_async_construct): In
	case of an error, call GOMP_PLUGIN_fatal not ..._error; use NULL
	not false in return.
2024-11-18 14:58:21 +01:00
Jennifer Schmitz
944471eaee testsuite: Move test pr117093.c into gcc.target/aarch64.
The test file pr117093.c failed on platforms other than aarch64, because
it uses arm_neon.h. We moved it into gcc.target/aarch64.

The patch was bootstrapped and tested on aarch64-linux-gnu and
x86_64-linux-gnu, no regression.
Committed as obvious.

Signed-off-by: Jennifer Schmitz <jschmitz@nvidia.com>

gcc/testsuite/
	PR tree-optimization/117093
	* gcc.dg/tree-ssa/pr117093.c: Move to gcc.target/aarch64.
	* gcc.target/aarch64/pr117093.c: New test.
2024-11-18 13:17:19 +01:00
Robin Dapp
52a392b8b7 RISC-V: Add VLS modes to strided loads.
This patch adds VLS modes to the strided load expanders.

gcc/ChangeLog:

	* config/riscv/autovec.md: Add VLS modes.
	* config/riscv/vector-iterators.md: Ditto.
	* config/riscv/vector.md: Ditto.
2024-11-18 11:49:25 +01:00
Robin Dapp
b89273a049 RISC-V: Add else operand to masked loads [PR115336].
This patch adds else operands to masked loads.  Currently the default
else operand predicate just accepts "undefined" (i.e. SCRATCH) values.

	PR middle-end/115336
	PR middle-end/116059

gcc/ChangeLog:

	* config/riscv/autovec.md: Add else operand.
	* config/riscv/predicates.md (maskload_else_operand): New
	predicate.
	* config/riscv/riscv-v.cc (get_else_operand): Remove static.
	(expand_load_store): Use get_else_operand and adjust index.
	(expand_gather_scatter): Ditto.
	(expand_lanes_load_store): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/pr115336.c: New test.
	* gcc.target/riscv/rvv/autovec/pr116059.c: New test.
2024-11-18 11:48:42 +01:00
Robin Dapp
ebf3077241 i386: Add zero maskload else operand.
gcc/ChangeLog:

	* config/i386/sse.md (maskload<mode><sseintvecmodelower>):
	Call maskload<mode>..._1.
	(maskload<mode><sseintvecmodelower>_1): Rename.
2024-11-18 11:48:42 +01:00
Robin Dapp
4a39addb49 gcn: Add else operand to masked loads.
This patch adds an undefined else operand to the masked loads.

gcc/ChangeLog:

	* config/gcn/predicates.md (maskload_else_operand): New
	predicate.
	* config/gcn/gcn-valu.md: Use new predicate.
2024-11-18 11:48:42 +01:00
Robin Dapp
a166a6ccdc aarch64: Add masked-load else operands.
This adds zero else operands to masked loads and their intrinsics.
I needed to adjust more than initially thought because we rely on
combine for several instructions and a change in a "base" pattern
needs to propagate to all those.

gcc/ChangeLog:

	* config/aarch64/aarch64-sve-builtins-base.cc: Add else
	handling.
	* config/aarch64/aarch64-sve-builtins.cc (function_expander::use_contiguous_load_insn):
	Ditto.
	* config/aarch64/aarch64-sve-builtins.h: Add else operand to
	contiguous load.
	* config/aarch64/aarch64-sve.md (@aarch64_load<SVE_PRED_LOAD:pred_load>
	_<ANY_EXTEND:optab><SVE_HSDI:mode><SVE_PARTIAL_I:mode>):
	Split and add else operand.
	(@aarch64_load_<ANY_EXTEND:optab><SVE_HSDI:mode><SVE_PARTIAL_I:mode>):
	Ditto.
	(*aarch64_load_<ANY_EXTEND:optab>_mov<SVE_HSDI:mode><SVE_PARTIAL_I:mode>):
	Ditto.
	* config/aarch64/aarch64-sve2.md: Ditto.
	* config/aarch64/iterators.md: Remove unused iterators.
	* config/aarch64/predicates.md (aarch64_maskload_else_operand):
	Add zero else operand.
2024-11-18 11:48:42 +01:00
Robin Dapp
634ae740f5 vect: Add maskload else value support.
This patch adds an else operand to vectorized masked load calls.
The current implementation adds else-value arguments to the respective
target-querying functions that is used to supply the vectorizer with the
proper else value.

We query the target for its supported else operand and uses that for the
maskload call.  If necessary, i.e. if the mode has padding bits and if
the else operand is nonzero, a VEC_COND enforcing a zero else value is
emitted.

gcc/ChangeLog:

	* optabs-query.cc (supports_vec_convert_optab_p): Return icode.
	(get_supported_else_val): Return supported else value for
	optab's operand at index.
	(supports_vec_gather_load_p): Add else argument.
	(supports_vec_scatter_store_p): Ditto.
	* optabs-query.h (supports_vec_gather_load_p): Ditto.
	(get_supported_else_val): Ditto.
	* optabs-tree.cc (target_supports_mask_load_store_p): Ditto.
	(can_vec_mask_load_store_p): Ditto.
	(target_supports_len_load_store_p): Ditto.
	(get_len_load_store_mode): Ditto.
	* optabs-tree.h (target_supports_mask_load_store_p): Ditto.
	(can_vec_mask_load_store_p): Ditto.
	* tree-vect-data-refs.cc (vect_lanes_optab_supported_p): Ditto.
	(vect_gather_scatter_fn_p): Ditto.
	(vect_check_gather_scatter): Ditto.
	(vect_load_lanes_supported): Ditto.
	* tree-vect-patterns.cc (vect_recog_gather_scatter_pattern):
	Ditto.
	* tree-vect-slp.cc (vect_get_operand_map): Adjust indices for
	else operand.
	(vect_slp_analyze_node_operations): Skip undefined else operand.
	* tree-vect-stmts.cc (exist_non_indexing_operands_for_use_p):
	Add else operand handling.
	(vect_get_vec_defs_for_operand): Handle undefined else operand.
	(check_load_store_for_partial_vectors): Add else argument.
	(vect_truncate_gather_scatter_offset): Ditto.
	(vect_use_strided_gather_scatters_p): Ditto.
	(get_group_load_store_type): Ditto.
	(get_load_store_type): Ditto.
	(vect_get_mask_load_else): Ditto.
	(vect_get_else_val_from_tree): Ditto.
	(vect_build_one_gather_load_call): Add zero else operand.
	(vectorizable_load): Use else operand.
	* tree-vectorizer.h (vect_gather_scatter_fn_p): Add else
	argument.
	(vect_load_lanes_supported): Ditto.
	(vect_get_mask_load_else): Ditto.
	(vect_get_else_val_from_tree): Ditto.
2024-11-18 11:48:42 +01:00
Robin Dapp
6b6bd53619 tree-ifcvt: Add zero maskload else value.
When predicating a load we implicitly assume that the else value is
zero.  This matters in case the loaded value is padded (like e.g.
a Bool) and we must ensure that the padding bytes are zero on targets
that don't implicitly zero inactive elements.

A former version of this patch still had this handling in ifcvt but
the latest version defers it to the vectorizer.

gcc/ChangeLog:

	* tree-if-conv.cc (predicate_load_or_store): Add zero else
	operand and comment.
2024-11-18 11:48:41 +01:00
Robin Dapp
8f68d9cb78 ifn: Add else-operand handling.
This patch adds else-operand handling to the internal functions.

gcc/ChangeLog:

	* internal-fn.cc (add_mask_and_len_args): Rename...
	(add_mask_else_and_len_args): ...to this and add else handling.
	(expand_partial_load_optab_fn): Use adjusted function.
	(expand_partial_store_optab_fn): Ditto.
	(expand_scatter_store_optab_fn): Ditto.
	(expand_gather_load_optab_fn): Ditto.
	(internal_fn_len_index): Add else handling.
	(internal_fn_else_index): Ditto.
	(internal_fn_mask_index): Ditto.
	(get_supported_else_vals): New function.
	(supported_else_val_p): New function.
	(internal_gather_scatter_fn_supported_p): Add else operand.
	* internal-fn.h (internal_gather_scatter_fn_supported_p): Define
	else constants.
	(MASK_LOAD_ELSE_ZERO): Ditto.
	(MASK_LOAD_ELSE_M1): Ditto.
	(MASK_LOAD_ELSE_UNDEFINED): Ditto.
	(get_supported_else_vals): Declare.
	(supported_else_val_p): Ditto.
2024-11-18 11:48:41 +01:00
Robin Dapp
5214ddb464 docs: Document maskload else operand and behavior.
This patch amends the documentation for masked loads (maskload,
vec_mask_load_lanes, and mask_gather_load as well as their len
counterparts) with an else operand.

gcc/ChangeLog:

	* doc/md.texi: Document masked load else operand.
2024-11-18 11:48:41 +01:00
Tobias Burnus
e7e3d1838f libgomp/plugin/plugin-nvptx.c: Change false to NULL to fix C23 wrong-return-type error [PR117626]
libgomp/ChangeLog:

	PR libgomp/117626
	* plugin/plugin-nvptx.c (nvptx_open_device): Use 'CUDA_CALL_ERET'
	with 'NULL' as error return instead of 'CUDA_CALL' that returns false.
2024-11-18 11:06:58 +01:00
Andrew Pinski
45a3277149 match: Fix the max<a,b>==0 pattern for pointers [PR117646]
For pointers I forgot that BIT_IOR_EXPR is not valid so when
I added the pattern to convert `max<a,b> != 0` (r15-5356), GCC
would start to ICEing saying pointer types were not valid for
BIT_IOR_EXPR.
This fixes the problem by casting to the unsigned type of the
inner type. There was another way of fixing this to handling it
as `a == 0 & b == 0` but both match and reassoication (for pointers)
will then convert it back into the form I am creating here so
let's just use that form instead.

Bootstrapped and tested on x86_64-linux-gnu.

	PR tree-optimization/117646

gcc/ChangeLog:

	* match.pd (`max<a,b>==0`): Add casts to `unsigned type`.

gcc/testsuite/ChangeLog:

	* gcc.dg/torture/minmaxneeqptr-1.c: New test.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-11-18 00:50:26 -08:00
Jonathan Wakely
dffc37dead
libstdc++: Fix invalid casts in unordered container merge functions
François pointed out that static_cast<__node_ptr>(&_M_before_begin) is
invalid, because _M_before_begin is only a node-base not a node.

Refactor the new merge overloads to only cast when we know we have a
valid node.

He also pointed out some optimizations to allow reusing hash codes that
might be cached in the node. The _M_src_hash_code function already has
the right logic to decide when a cached hash code can be reused by a
different _Hashtable object.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable.h (_Hashtable::_M_src_hash_code):
	Improve comments.
	(_Hashtable::_M_merge_unique(_Hashtable&)): Use pointer_traits
	to get before-begin pointer. Only use static_cast on valid
	nodes, not the before-begin pointer. Reuse a hash code cached in
	the node when possible.
	(_Hashtable::_M_merge_multi(_Hashtable&)): Likewise.

Reviewed-by: François Dumont <fdumont@gcc.gnu.org>
2024-11-18 08:22:27 +00:00
Jason Merrill
7b8b96a327 libcpp: add .c++-header-unit target
The dependency output for header unit modules is based on the absolute
pathname of the header file, but that's not something that a makefile can
portably refer to.  This patch adds a .c++-header-unit target based on the
header name relative to an element of the include path.

libcpp/ChangeLog:

	* internal.h (_cpp_get_file_dir): Declare.
	* files.cc (_cpp_get_file_dir): New fn.
	* mkdeps.cc (make_write): Use it.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/dep-4.H: New test.
2024-11-18 09:18:17 +01:00
Andrew Pinski
0dc389f21b testsuite: Fix pr101145inf*.c testcases [PR117494]
Instead of doing a dg-run with a specific target check for linux.
Use signal as the effective-target since this requires the use
of ALARM signal to do the testing.
Also use check_vect in the main and renames main to main1 to make sure
we don't use the registers.

Tested on x86_64-linux-gnu.

	PR testsuite/117494
gcc/testsuite/ChangeLog:

	* gcc.dg/vect/pr101145inf.c: Remove dg-do and replace
	with dg-require-effective-target of signal.
	* gcc.dg/vect/pr101145inf_1.c: Likewise.
	* gcc.dg/vect/pr101145inf.inc: Rename main to main1
	and mark as noinline.
	Include tree-vect.h. Have main call check_vect and main1.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-11-17 23:44:41 -08:00
Gerald Pfeifer
83e86397b0 libstdc++: Update reference to Angelika Langer's article
libstdc++-v3:
	* doc/xml/manual/allocator.xml: Update reference to Angelika
	Langer's article.
	* doc/html/manual/memory.html: Regenerate.
2024-11-18 08:33:49 +01:00
Jeff Law
beec291225 Improve ext-dce's ability to eliminate more extensions
I was looking at a regression in ext-dce's behavior just before Cauldron.
Essentially a bugfix in ext-dce ended up causing us to fail to eliminate some
useless extensions.

When we have a SUBREG object with SUBREG_PROMOTED_VAR* flags set, we generally
have to be more conservative in how we process bit group liveness, making bits
live that wouldn't obviously be live otherwise.

That's not always necessary though. For example, if we're storing a promoted
subreg into memory, we may not care about those extra live bits on this
instance of the subreg object (remember subregs are not shared!).  Essentially
if the mode of the memory reference is not wider than the mode of the inner
REG, then we can clear the promoted state which in turn may allow more
extension elimination.

So at the start of ext-dce we do a simple pass over the IL and remove promoted
subreg state when it's obviously safe to do so (memory stores when the modes
allow it).  That prevents extra bits from being live and ultimately allows us
to remove more useless extensions.

The testcase is in theory generic, but many targets won't have an opportunity
to optimize this case.  So rather then build out a large inclusion/exclusion
list, I've just made the test risc-v specific.

Bootstrapped and regression tested on aarch64, riscv64, s390x, etc in my tester.

gcc/
	* ext-dce.cc (maybe_clear_subreg_promoted_p): New function.
	(ext_dce_execute): Call it.

gcc/testsuite
	* gcc.target/riscv/ext-dce-1.c: New test.
2024-11-17 21:44:50 -07:00
Maciej W. Rozycki
4a8eb5c6d8 Alpha: Remove leftover `;;' for "unaligned_store<mode>"
Remove stray `;;' from the middle of the introductory comment for the
"unaligned_store<mode>" expander, clearly a leftover from a previous
edition.

	gcc/
	* config/alpha/alpha.md (unaligned_store<mode>): Remove stray
	`;;'.
2024-11-18 03:02:59 +00:00
John David Anglin
29c4f6637c hppa: Update install documentation
2024-11-17  John David Anglin  <danglin@gcc.gnu.org>

gcc/ChangeLog:

	PR target/69374
	* doc/install.texi (Specific) <hppa*-hp-hpux11>: Update anchor
	and heading to reflect removal of 32-bit hppa support on HP-UX.
	Trim 32-bit related text.
2024-11-17 20:37:53 -05:00
GCC Administrator
24da863403 Daily bump. 2024-11-18 00:17:28 +00:00
Jason Merrill
db348caef9 c++: regenerate opt urls
This should have been part of r15-5367.  One day I'll remember to do this
before buildbot sends me hate mail.

gcc/c-family/ChangeLog:

	* c.opt.urls: Regenerate.
2024-11-17 20:43:43 +01:00
John David Anglin
8f50a07940 hppa: Remove typedef for bool type
In C23, bool is now a keyword.  So, doing a typedef for it is invalid.

2024-11-17  John David Anglin  <danglin@gcc.gnu.org>

libgcc/ChangeLog:

	PR target/117627
	* config/pa/linux-atomic.c: Remove typedef for bool type.
2024-11-17 14:42:39 -05:00
Florian Weimer
701d8e7e60 c: Implement -Wdeprecated-non-prototype
This warning covers the C23 incompibilities resulting from using
() as parameter lists in function declarations.

The warning name comes from Clang.  The implementation is not
perfect because GCC treats these two declarations as equivalent:

  void f ();
  void f (not_a_type);

This is a bit confusing because they are clearly visually distinct.
However, as of GCC 14, the second form is an error by default, so
treating both the same as far as  -Wdeprecated-non-prototype does
not seem so bad from a user experience view.

gcc/c-family/

	PR c/95445
	* c-opts.cc (c_common_post_options): Initialize
	warn_deprecated_non_prototype.
	* c.opt (Wdeprecated-non-prototype): New option.
	* c.opt.urls: Regenerate.

gcc/c/

	PR c/95445
	* c-decl.cc (start_function): Warn about parameters
	after parameter-less declaration.
	* c-typeck.cc (build_function_call_vec): Pass fntype
	to convert_arguments.
	(convert_arguments): Change argument to fntype and
	compute typelist.  Warn about parameter list mismatches
	on first parameter.

gcc/

	PR c/95445
	* doc/invoke.texi: Document -Wdeprecated-non-prototype.

gcc/testsuite/

	PR c/95445
	* gcc.dg/Wdeprecated-non-prototype-1.c: New test.
	* gcc.dg/Wdeprecated-non-prototype-2.c: New test.
	* gcc.dg/Wdeprecated-non-prototype-3.c: New test.
	* gcc.dg/Wdeprecated-non-prototype-4.c: New test.
2024-11-17 19:42:33 +01:00
Jason Merrill
3e89a4d513 c++: -M and modules again
While experimenting with testing module std I noticed that gcc -M broke on
it; it seems I need to set directives_only even sooner than I did in
r15-4219.

gcc/c-family/ChangeLog:

	* c-ppoutput.cc (preprocess_file): Don't set directives_only here.

gcc/cp/ChangeLog:

	* module.cc (module_preprocess_options): Set directives_only here.
2024-11-17 16:23:21 +01:00
Jason Merrill
dbfbd3aa2c c-family: add -fsearch-include-path
The C++ modules code has a -fmodule-header (or -x c++-{user,system}-header)
option to specify looking up headers to compile to header units on the usual
include paths.  I'd like to have the same functionality for full C++20
modules such as module std, which I proposed to live on the include path at
bits/std.cc.  But this behavior doesn't seem necessarily connected to
modules, so I'm proposing a general C/C++ option to specify the behavior of
looking in the include path for the input files specified on the command
line.

Other ideas for the name of the option are very welcome.

The libcpp change is to allow -fsearch-include-path{,=user} to find files in
the current working directory, like -include.  This can be handy for a quick
compile of both std.cc and a file that imports it, e.g.

g++ -std=c++20 -fmodules -fsearch-include-path bits/std.cc importer.cc

gcc/ChangeLog:

	* doc/cppopts.texi: Document -fsearch-include-path.
	* doc/invoke.texi: Mention it for modules.

gcc/c-family/ChangeLog:

	* c.opt: Add -fsearch-include-path.
	* c-opts.cc (c_common_post_options): Handle it.

gcc/cp/ChangeLog:

	* module.cc (module_preprocess_options): Don't override it.

libcpp/ChangeLog:

	* internal.h (search_path_head): Declare.
	* files.cc (search_path_head): No longer static.
	* init.cc (cpp_read_main_file): Use it.
2024-11-17 16:23:21 +01:00
Jason Merrill
7db55c0ba1 libstdc++: add module std [PR106852]
This patch introduces an installed source form of module std and std.compat.
To help a build system find them, we install a libstdc++.modules.json file
alongside libstdc++.so, which tells the build system where the files are and
any special flags it should use when compiling them (none, in this case).
The format is from a proposal in SG15.  The build system can find this file
with 'gcc -print-file-name=libstdc++.modules.json'.

It seems preferable to use a relative path from this file to the sources so
that moving the installation doesn't break the reference, but I didn't see
any obvious way to compute that without relying on coreutils, perl, or
python, so I wrote a POSIX shell script for it.  The .. canonicalization
bits aren't necessary since I discovered $(abspath), but I guess I might as
well leave them in.

Currently this installs the sources under $(gxx_include_dir)/bits/,
i.e. /usr/include/c++/15/bits.  So with my -fsearch-include-path change,
std.cc can be compiled with g++ -fsearch-include-path bits/std.cc.  Note
that if someone actually tries to #include <bits/std.cc> it will fail with
"error: module control-line cannot be in included file".

Any ideas about a more user-friendly way to express "compile module std" are
welcome.

The sources currently have the extension .cc, like other source files.

std.cc started with m.cencora's implementation in PR114600.  I've made some
adjustments, but more is probably desirable, e.g. of the <algorithm>
handling of namespace ranges, and to remove exports of templates that are
only specialized in a particular header.  I've filled in a bunch of missing
exports, and added some FIXMEs where I noticed bits that are not implemented
yet.

Since bits/stdc++.h also intends to include the whole standard library, I
include it rather than duplicate it.  But stdc++.h comments out <execution>,
due to TBB issues; I include it separately and suppress TBB usage, so module
std won't currently provide parallel execution.

It seemed most convenient for the two files to be monolithic so we don't
need to worry about include paths.  So the C library names that module
std.compat exports in both namespace std and :: are a block of code that is
appended to both files, adjusted based on whether the macro STD_COMPAT is
defined before the block.

In this implementation std.compat imports std; it would also be valid for it
to duplicate everything in std.  I see the libc++ std.compat also imports
std.

As discussed in the PR, module std is supported in C++20 mode even though it
was added in C++23.

Changes to test module std will follow in a separate patch.  In my testing
I've noticed a few compiler bugs that break various testcases, so I don't
expect to enable module std testing by default at first.

	PR libstdc++/106852

libstdc++-v3/ChangeLog:

	* include/bits/version.def: Add __cpp_lib_modules.
	* include/bits/version.h: Regenerate.
	* src/c++23/Makefile.am: Add modules std and std.compat.
	* src/c++23/Makefile.in: Regenerate.
	* src/c++23/std-clib.cc.in: New file.
	* src/c++23/std.cc.in: New file.
	* src/c++23/std.compat.cc.in: New file.
	* src/c++23/libstdc++.modules.json.in: New file.

contrib/ChangeLog:

	* relpath.sh: New file.
2024-11-17 16:23:21 +01:00
Jan Hubicka
bd59f2eeac Mark asm statements as necessary in ipa-fnsummary
I forgot to mark asm statements as necessary in ipa-fnsummary. This should
mask failure of gcc.dg/guality/pr36728-2.c where the patch enabled
cloning which breaks debug info.

gcc/ChangeLog:

	* ipa-fnsummary.cc (find_necessary_statements): ASM statements are
	necessary.
2024-11-17 15:48:29 +01:00
Gerald Pfeifer
696bd86260 libstdc++: Move a gcc.gnu.org link to https
libstdc++-v3:
	* doc/xml/manual/intro.xml: Move a gcc.gnu.org link to https.
	* doc/html/manual/license.html: Regenerate.
2024-11-17 12:36:29 +01:00
Gerald Pfeifer
6d52a568dd libstdc++: Update link to Angelika Langer's book
libstdc++-v3:
	* doc/xml/manual/io.xml: Update link to Angelika Langer's book.
	* doc/html/manual/streambufs.html: Regenerate.
2024-11-17 12:05:36 +01:00
Jan Hubicka
addf022820 ipa-modref bits for unsequenced and reproducible
C attributes reproducible and unsequenced implies that calling function twice
leads to same effect if parameters are otherwise unchanged (function call
itself does not count).  This is bit bit stronger that modref's notion of
nondeterminism that says that same inputs will yield same outputs (function
call itself does count).

This patch makes reproducible/unsequenced imply determinism and cleans up
determinism handling.  By itself it is not useful, since we can not make use of it
unless we know what are the inputs/outputs of the function which I plan to handle
by the "fn spec" attribute.

gcc/ChangeLog:

	* ipa-modref.cc (modref_summary::useful_p): const/pure implies
	determinism.
	(modref_summary_lto::useful_p): Likewise.
	(ignore_nondeterminism_p): Add CALLEE_FNTYPE parameter; check for
	reproducible/unsequenced
	(modref_access_analysis::record_access_p): Use ignore_nondeterminism_p
	when handling volatile accesses.
	(modref_access_analysis::get_access_for_fnspec): Update.
	(modref_access_analysis::process_fnspec): Cleanup handling of NOVOPS.
	(modref_access_analysis::analyze_call): Use ignore_nondeterminism_p
	when handling asm statements.
	(modref_access_analysis::analyze_stmt): Update.
	(propagate_unknown_call): Update.
	(modref_propagate_in_scc): Update.
	(ipa_merge_modref_summary_after_inlining): Update.
2024-11-17 11:54:10 +01:00
Jan Hubicka
aac5c57ee1 Add __builtion_unreachable to vector::size(), vector::capacity()
This patch makes it clear that vector sizes and capacities are not
negative.  With recent change to ipa-fnsummary this should not affect
inlining and improves codegen of some vector manipulation functions.

I tested clang build.  Looking for throw_bad calls there are only 3
called considerably often (bad_allloc, bad_array_new_length and
function_callv).
The patch seems to reduce bad_alloc and bad_array_new_length calls
considerably:

bad_alloc 380->147
bad_array_new_length 832->128

libstdc++-v3/ChangeLog:

	PR tree-optimization/109442
	* include/bits/stl_vector.h: (vector::size(),
	vector::capacity()): Add __builtin_unreachable call to announce
	that size and capacity are non-negative.

gcc/testsuite/ChangeLog:

	PR tree-optimization/109442
	* g++.dg/tree-ssa/pr109442.C: New test.
2024-11-17 01:23:53 +01:00
GCC Administrator
a649efea00 Daily bump. 2024-11-17 00:21:19 +00:00
Jan Hubicka
cc33f880e5 Avoid expicit builtion list in tree-ssa-dce
while working on -fmalloc-dce I noticed that tree-ssa-dce.cc still has an
outdated list of builtions that are known to not read memory that can be
replaced by query to fnspec and modref.

If I get things right, dce does some dead store removal, but only on those
memory object that are non-aliased (automatic variabels with no address taken)
and for all other memory addresses it resorts to
mark_all_reaching_defs_necessary expecting DSE to do the rest.  So we really
want to only check if there are no memory reads at all rather then trying to
understand them by parsing fnspec or modref summary.

I did run testsuite ensuring that all builtins matched previously are
still matched.  There are few testcases where this check fails, due to
type incompatibility.  New code uses gimple_call_builtin while other
just checked callee_decl.

We test things like calling free() without parmeter which I don't think
we want to care about, but there is also testase declaring

void * calloc (long, long)

where builtin declaration expects unsigned long.  I am not sure if this
case should not be allowed by gimple_call_builtin?

Bootstrappe/regtested x86_64-linux. OK?

gcc/ChangeLog:

	* ipa-modref.cc (ipa_modref_callee_reads_no_memory_p): New function.
	* ipa-modref.h (ipa_modref_callee_reads_no_memory_p): Declare
	* tree-ssa-dce.cc (propagate_necessity): Use it.
2024-11-16 23:45:57 +01:00
Jan Hubicka
101f8c73d5 Minor cleanup to cxx_init_decl_processing
gcc/cp/ChangeLog:

	* decl.cc (cxx_build_operator_new): Break out from ...
	(cxx_build_operator_delete): Break out from ...
	(cxx_init_operator_new_delete_decls): Break out from ...
	(cxx_init_decl_processing): ... here.
2024-11-16 23:44:13 +01:00
Georg-Johann Lay
307b11179a AVR: Fix building LibF7 after switching to C23.
Since r15-5327, GNU-C23 is being used as C language default.
libf7.h doesn't assume headers like stdbool.h are present
and defines bool, true and false on its own.

libgcc/config/avr/libf7/
	* libf7.h (bool, true, false): Don't define in C23 or higher.
2024-11-16 22:18:51 +01:00
Andrew Pinski
b085fc9965 match: Optimize max(a,b) == 0 to (a|b) == 0 for unsigned [PR115275]
For unsigned types, you can optimize `max<a,b> == 0` into
`(a|b) == 0` (that is both have to be zero). A similar thing happens for `!= 0`.
This optimization fixes the missed optimization (g++.dg/tree-ssa/pr115275.C)
that was reported exposed by adding phiprop early.

Bootstrapped and tested on x86_64-linux-gnu.

	PR tree-optimization/115275

gcc/ChangeLog:

	* match.pd (umax(a,b) ==/!= 0): New pattern.

gcc/testsuite/ChangeLog:

	* g++.dg/tree-ssa/pr115275.C: New test.
	* gcc.dg/tree-ssa/max_eqne-1.c: New test.
	* gcc.dg/tree-ssa/max_eqne-2.c: New test.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-11-16 11:10:49 -08:00
Eikansh Gupta
5eadc67336 MATCH: Simplify min(a, b) op max(a, b) to a op b [PR109401]
This patch simplify `min(a,b) op max(a,b)` to `a op b`. This optimization
will work for all the binary commutative operations. So, the `op` here can
be one of {plus, mult, bit_and, bit_xor, bit_ior, eq, ne, min, max}.

	PR tree-optimization/109401

gcc/ChangeLog:

	* match.pd (min(a,b) op max(a,b) -> a op b): New pattern.

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/pr109401.c: New test.
	* gcc.dg/tree-ssa/pr109401-1.c: New test.

Signed-off-by: Eikansh Gupta <quic_eikagupt@quicinc.com>
2024-11-16 11:10:49 -08:00
Andrew Pinski
94bea5dd6c libiberity: ANSIfy test-demangle.c
Some of the function definitions used K&R style definitions (but not all).
This just moves them all to be ANSI C

Bootstrapped and tested on x86_64-linux-gnu.

libiberty/ChangeLog:

	* testsuite/test-demangle.c (get_line): Change K&R style
	definition into ANSI C90 definitions.
	(fail): Likewise.
	(main): Likewise.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-11-16 11:10:48 -08:00
Georg-Johann Lay
083892ba18 AVR: target/116781 - Fix ICE due to (clobber (match_dup)) in tablejump.
This patch avoids (clobber (match_dup)) in insn patterns for tablejump.
The machine description now uses a scratch_operand instead which is
possible since the clobbered entity is known in advance:

3-byte PC        : REG_Z
2-byte PC + JMP  : REG_Z
2-byte PC + RJMP : None, hence scratch:HI is used.

The avr-casesi pass and optimization has to be adjusted to the new patterns.

	PR target/116781
gcc/
	* config/avr/avr.md (*tablejump_split, *tablejump): Add
	operand 2 as a "scratch_operand" instead of a match_dup.
	(casesi): Adjust expander operands accordingly.  Use a scratch:HI
	when the jump address is not clobbered.  This is the case for a
	2-byte PC + has no JMP instruction.  In all the other cases, the
	affected operand is REG_Z (reg:HI 30).
	(casesi_<mode>_sequence): Adjust matcher to new anatomy.
	* config/avr/avr-passes.cc (avr_is_casesi_sequence)
	(avr_is_casesi_sequence, avr_optimize_casesi)
	(avr_casei_sequence_check_operands): Adjust to new anatomy.
2024-11-16 19:56:13 +01:00
Georg-Johann Lay
02d7370966 AVR: target/117500 - Use output_operand_lossage in avr_print_operand.
PR target/117500
gcc/
	* config/avr/avr.cc (avr_print_operand) [code = 'i']: Use
	output_operand_lossage on bad operands instead of fatal_insn.
2024-11-16 19:51:46 +01:00
Georg-Johann Lay
bbfba1cc92 AVR: Add an RTL peephole to tweak lower_reg:QI o= cst.
For operations like  X o= CST, regalloc may spill l-reg X to a d-reg:
   D =  X
   D o= CST
   X =  D
where it is better to instead
   D =  CST
   X o= D
This patch adds an according RTL peephole.

gcc/
	* config/avr/avr.md: Add a peephole2 that improves bit operations
	with a lower register and a constant.
2024-11-16 19:49:34 +01:00
Jeff Law
e30bc91e96 [committed] RISC-V testsuite adjustments for c23
Mix of fixes and workarounds by passing in -std=gnu17.  The former is the
preferred approach, but occasionally we have code that's just fugly to fix.

gcc/testsuite/
	* gcc.target/riscv/cmo-32.c: Pass in -std=gnu17.
	* gcc.target/riscv/cmo-64.c: Likewise.
	* gcc.target/riscv/pr98777.c: Likewise.
	* gcc.target/riscv/rvv/vsetvl/pr115214.c: Likewise.
	* gcc.target/riscv/rvv/autovec/pr113469.c: Likewise.
	* gcc.target/riscv/rvv/autovec/pr111391-1.c: Fix prototype for c23.
	* gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c: Likewise.
	* gcc.target/riscv/sum-of-two-s12-const-2.c: Likewise.
	* gcc.target/riscv/target-attr-01.c: Likewise.
	* gcc.target/riscv/target-attr-02.c: Likewise.
	* gcc.target/riscv/target-attr-03.c: Likewise.
	* gcc.target/riscv/target-attr-04.c: Likewise.
	* gcc.target/riscv/target-attr-05.c: Likewise.
	* gcc.target/riscv/target-attr-06.c: Likewise.
	* gcc.target/riscv/target-attr-07.c: Likewise.
	* gcc.target/riscv/target-attr-08.c: Likewise.
	* gcc.target/riscv/target-attr-09.c: Likewise.
	* gcc.target/riscv/target-attr-10.c: Likewise.
	* gcc.target/riscv/target-attr-11.c: Likewise.
	* gcc.target/riscv/target-attr-12.c: Likewise.
	* gcc.target/riscv/target-attr-13.c: Likewise.
	* gcc.target/riscv/target-attr-14.c: Likewise.
	* gcc.target/riscv/target-attr-15.c: Likewise.
	* gcc.target/riscv/target-attr-bad-01.c: Likewise.
	* gcc.target/riscv/target-attr-bad-02.c: Likewise.
	* gcc.target/riscv/target-attr-bad-03.c: Likewise.
	* gcc.target/riscv/target-attr-bad-04.c: Likewise.
	* gcc.target/riscv/target-attr-bad-05.c: Likewise.
	* gcc.target/riscv/target-attr-bad-06.c: Likewise.
	* gcc.target/riscv/target-attr-bad-07.c: Likewise.
	* gcc.target/riscv/target-attr-bad-08.c: Likewise.
	* gcc.target/riscv/target-attr-bad-09.c: Likewise.
	* gcc.target/riscv/target-attr-bad-10.c: Likewise.
2024-11-16 11:37:04 -07:00
Jeff Law
9c18fe5056 [committed] Adjust ARC tests after c23 changes
This test passes different kinds of objects to the underlying function.  So
just pass in -std=gnu17.

gcc/testsuite
	* gcc.target/arc/add_n-combine.c: Pass in -std=gnu17.
2024-11-16 11:26:21 -07:00
Jakub Jelinek
09ef9756f2 libgcc: Fix a warning/error in libgcc2.c [PR117624]
Since the switch to -std=gnu23 by default, float.h (included from
tsystem.h) defines INFINITY macro (to __builtin_inff ()), which now
results in a warning when compiling libgcc2.c which defines it
to something else (and, worse aarch64 compiles it with -Werror and
build fails).
libgcc2.c asserts INFINITY has the expected type which depends on
the macros with which libgcc2.c is being compiled, so guarding
the define with #ifndef INFINITY wouldn't work.
So this patch instead #undefs the macro before defining it.

2024-11-16  Jakub Jelinek  <jakub@redhat.com>

	PR libgcc/117624
	* libgcc2.c (INFINITY): Add #undef before #define.
2024-11-16 17:04:38 +01:00
Paul Thomas
27ff8049bb Fortran: Fix segmentation fault in defined assignment [PR109066]
2024-11-16  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
	PR fortran/109066
	* resolve.cc (generate_component_assignments): If the temporary
	for 'var' is a pointer and 'expr' is neither a constant or
	a variable, change its attribute from pointer to allocatable.
	This avoids assignment to a temporary point that has neither
	been allocated or associated.

gcc/testsuite/
	PR fortran/109066
	* gfortran.dg/defined_assignment_12.f90: New test.
2024-11-16 15:56:38 +00:00
Gerald Pfeifer
4a4bd60fa0 doc: Streamline hppa*-hp-hpux11 installation instructions
A HP/UX linker patch from the GCC 3.3 era and Binutils 2.14
	no longer should require special mention.

	These originally came in via commit c512449722 in April 2004 as
	  * doc/install.texi: Update HP-UX 11 installation procedure.

gcc:
	PR target/69374
	* doc/install.texi (Specific) <hppa*-hp-hpux11>: Remove references
	to HP/UX linker patch from 2004 and Binutils 2.14.
2024-11-16 16:46:50 +01:00
Jeff Law
7c7e630cd0 Fix various sh tests to work with c23
A few SH tests want to create a bool typedef which doesn't work for c23.
Easiest fix which should have no impact on the test behavior would be to just
change the name of the typedef so that doesn't conflict.

One test has a crazy function signature (similar to the PRU test someone just
fixed up).  For that I'm using -std=gnu17.

Pushing to the trunk.

testsuite/
	* gcc.target/sh/pr51244-15.c: Use "mybool" rather than "bool".
	* gcc.target/sh/pr52933-1.c: Similarly.
	* gcc.target/sh/pr54089-1.c: Similarly.
	* gcc.target/sh/pr54089-7.c: Similarly.
	* gcc.target/sh/pr54089-8.c: Similarly.
	* gcc.target/sh/pr54089-9.c: Similarly.
	* gcc.target/sh/pr64366.c: Use -std=gnu17.
2024-11-16 08:42:01 -07:00
Thomas Koenig
bf00f117eb Document that SELECT CASE works for unsigned.
gcc/fortran/ChangeLog:

	* gfortran.texi: Document that SELECT CASE works for UNSIGNED.
2024-11-16 16:40:20 +01:00
Jeff Law
8e2b9c800d [committed] Fix compilation of testglue wrapper after c23 changes
testglue.c (which is used for exit/abort wrappers in the testsuite) isn't c23
compatible.   The testing harness tries to build testglue.c and use it, but
doesn't report a failure if the build fails, instead it's just not used.  As a
result we get all kinds of failures on targets which depend on testglue to
report back simulator status -- like tens of thousands of execution failures.

This patch just adds -std=gnu17 to the command line to build testglue.c.

There's other fallout from the c23 change..  My tester is chewing through
things right now...

Installing on the trunk.

testsuite
	* lib/wrapper.exp (${tool}_maybe_build_wrapper): Pass -std=gnu17 flag
	to build testglue wrapper.
2024-11-16 08:24:20 -07:00