Commit Graph

209770 Commits

Author SHA1 Message Date
Martin Jambor
1e3312a25a
ICF&SRA: Make ICF and SRA agree on padding
PR 113359 shows that (at least with -fno-strict-aliasing) ICF can
unify two functions which copy an aggregate type of the same size but
then SRA, through its total scalarization, can copy the aggregate by
pieces, skipping paddding, but the padding was not the same in the two
original functions that ICF unified.

This patch enhances SRA with the ability to collect padding
information which then can be compared from within ICF.  Unfortunately
SRA uses OPTION_SET_P when determining its limits, so ICF needs to
switch cfuns at least once to figure it out too.

gcc/ChangeLog:

2024-03-27  Martin Jambor  <mjambor@suse.cz>

	PR ipa/113359
	* ipa-icf-gimple.h (func_checker): New members
	safe_for_total_scalarization_p, m_total_scalarization_limit_known_p
	and m_total_scalarization_limit.
	(func_checker::func_checker): Initialize new member variables.
	* ipa-icf-gimple.cc: Include tree-sra.h.
	(func_checker::func_checker): Initialize new member variables.
	(func_checker::safe_for_total_scalarization_p): New function.
	(func_checker::compare_operand): Use the new function.
	* tree-sra.h (sra_get_max_scalarization_size): Declare.
	(sra_total_scalarization_would_copy_same_data_p): Likewise.
	* tree-sra.cc (prepare_iteration_over_array_elts): New function.
	(class sra_padding_collecting): New.
	(sra_padding_collecting::record_padding): Likewise.
	(scalarizable_type_p): Rename to totally_scalarizable_type_p.  Add
	ability to record padding when requested.
	(totally_scalarize_subtree): Split out gathering information necessary
	to iterate over array elements to prepare_iteration_over_array_elts.
	Fix errornous early exit.
	(analyze_all_variable_accesses): Adjust the call to
	totally_scalarizable_type_p.  Move determining of total scalariation
	size limit...
	(sra_get_max_scalarization_size): ...here.
	(check_ts_and_push_padding_to_vec): New function.
	(sra_total_scalarization_would_copy_same_data_p): Likewise.

gcc/testsuite/ChangeLog:

2024-03-27  Martin Jambor  <mjambor@suse.cz>

	PR ipa/113359
	* gcc.dg/lto/pr113359-1_0.c: New.
	* gcc.dg/lto/pr113359-1_1.c: Likewise.
	* gcc.dg/lto/pr113359-2_0.c: Likewise.
	* gcc.dg/lto/pr113359-2_1.c: Likewise.
	* gcc.dg/lto/pr113359-3_0.c: Likewise.
	* gcc.dg/lto/pr113359-3_1.c: Likewise.
	* gcc.dg/lto/pr113359-4_0.c: Likewise.
	* gcc.dg/lto/pr113359-4_1.c: Likewise.
	* gcc.dg/lto/pr113359-5_0.c: Likewise.
	* gcc.dg/lto/pr113359-5_1.c: Likewise.
2024-04-08 18:54:21 +02:00
Martin Jambor
1162861439
ipa: Compare jump functions in ICF (PR 113907)
In PR 113907 comment #58, Honza found a case where ICF thinks bodies
of functions are equivalent but becaise of difference in aliases in a
memory access, different aggregate jump functions are associated with
supposedly equivalent call statements.  This patch adds a way to
compare jump functions and plugs it into ICF to avoid the issue.

gcc/ChangeLog:

2024-03-20  Martin Jambor  <mjambor@suse.cz>

	PR ipa/113907
	* ipa-prop.h (class ipa_vr): Declare new overload of a member function
	equal_p.
	(ipa_jump_functions_equivalent_p): Declare.
	* ipa-prop.cc (ipa_vr::equal_p): New function.
	(ipa_agg_pass_through_jf_equivalent_p): Likewise.
	(ipa_agg_jump_functions_equivalent_p): Likewise.
	(ipa_jump_functions_equivalent_p): Likewise.
	* ipa-cp.h (values_equal_for_ipcp_p): Declare.
	* ipa-cp.cc (values_equal_for_ipcp_p): Make function public.
	* ipa-icf-gimple.cc: Include alloc-pool.h, symbol-summary.h, sreal.h,
	ipa-cp.h and ipa-prop.h.
	(func_checker::compare_gimple_call): Comapre jump functions.

gcc/testsuite/ChangeLog:

2024-03-20  Martin Jambor  <mjambor@suse.cz>

	PR ipa/113907
	* gcc.dg/lto/pr113907_0.c: New.
	* gcc.dg/lto/pr113907_1.c: Likewise.
	* gcc.dg/lto/pr113907_2.c: Likewise.
2024-04-08 18:54:08 +02:00
Jonathan Wakely
feb6a2d356
libstdc++: Use char for _Utf8_view if char8_t isn't available [PR114519]
Instead of just omitting the definition of __unicode::_Utf8_view when
char8_t is disabled, we can make it use char instead.

libstdc++-v3/ChangeLog:

	PR libstdc++/114519
	* include/bits/unicode.h (_Utf8_view) [!__cpp_char8_t]: Define
	using char instead of char8_t.
	* testsuite/ext/unicode/view.cc: Use u8""sv literals to create
	string views, instead of std::u8string_view.
2024-04-08 17:44:18 +01:00
Jonathan Wakely
cd77e15287
libstdc++: Fix tests that fail with -fno-char8_t
Adjust expected errors or skip tests as UNSUPPORTED if -fno-char8_t is
used in the test flags.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/integer_comparisons/equal_neg.cc: Use
	no-opts selector for errors that depend on -fchar8_t.
	* testsuite/20_util/integer_comparisons/greater_equal_neg.cc:
	Likewise.
	* testsuite/20_util/integer_comparisons/greater_neg.cc:
	Likewise.
	* testsuite/20_util/integer_comparisons/in_range_neg.cc:
	Likewise.
	* testsuite/20_util/integer_comparisons/less_equal_neg.cc:
	Likewise.
	* testsuite/20_util/integer_comparisons/less_neg.cc: Likewise.
	* testsuite/20_util/integer_comparisons/not_equal_neg.cc:
	Likewise.
	* testsuite/21_strings/basic_string/hash/hash_char8_t.cc: Skip
	if -fno-char8_t is used.
	* testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc:
	Likewise.
	* testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc:
	Likewise.
	* testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc:
	Likewise.
	* testsuite/27_io/filesystem/path/factory/u8path-depr.cc: Use
	char for u8 literal if char8_t is not available.
	* testsuite/27_io/headers/iosfwd/synopsis.cc: Check
	__cpp_char8_t.
	* testsuite/29_atomics/atomic_integral/wait_notify.cc: Likewise.
	* testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc:
	Remove check for _GLIBCXX_USE_CHAR8_T.
2024-04-08 17:44:18 +01:00
Jonathan Wakely
87bc20676c
libstdc++: Combine two std::from_chars tests into one
We don't need separate tests for the C++17 and C++20 cases, we can just
have one test that uses __cpp_char8_t to adjust whether it tests char8_t
or not. This means the C++20 one doesn't fail if -fno-char8_t is used.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/from_chars/1_neg.cc: Add char8_t cases,
	using a struct of that name if -fno-char8_t is active.
	* testsuite/20_util/from_chars/1_c++20_neg.cc: Removed.
2024-04-08 17:44:18 +01:00
Richard Sandiford
2c1c2485a4 aarch64: Fix expansion of svsudot [PR114607]
Not sure how this happend, but: svsudot is supposed to be expanded
as USDOT with the operands swapped.  However, a thinko in the
expansion of svsudot meant that the arguments weren't in fact
swapped; the attempted swap was just a no-op.  And the testcases
blithely accepted that.

gcc/
	PR target/114607
	* config/aarch64/aarch64-sve-builtins-base.cc
	(svusdot_impl::expand): Fix botched attempt to swap the operands
	for svsudot.

gcc/testsuite/
	PR target/114607
	* gcc.target/aarch64/sve/acle/asm/sudot_s32.c: New test.
2024-04-08 16:53:32 +01:00
Tatsuyuki Ishi
97069657c4 RISC-V: Implement TLS Descriptors.
This implements TLS Descriptors (TLSDESC) as specified in [1].

The 4-instruction sequence is implemented as a single RTX insn for
simplicity, but this can be revisited later if instruction scheduling or
more flexible RA is desired.

The default remains to be the traditional TLS model, but can be configured
with --with-tls={trad,desc}. The choice can be revisited once toolchain
and libc support ships.

[1]: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/373.

gcc/ChangeLog:

	* config/riscv/riscv.opt: Add -mtls-dialect to configure TLS flavor.
	* config.gcc: Add --with-tls configuration option to change the
	default TLS flavor.
	* config/riscv/riscv.h: Add TARGET_TLSDESC determined from
	-mtls-dialect and with_tls defaults.
	* config/riscv/riscv-opts.h: Define enum riscv_tls_type for the
	two TLS flavors.
	* config/riscv/riscv-protos.h: Define SYMBOL_TLSDESC symbol type.
	* config/riscv/riscv.md: Add instruction sequence for TLSDESC.
	* config/riscv/riscv.cc (riscv_symbol_insns): Add instruction
	sequence length data for TLSDESC.
	(riscv_legitimize_tls_address): Add lowering of TLSDESC.
	* doc/install.texi: Document --with-tls for RISC-V.
	* doc/invoke.texi: Document -mtls-dialect for RISC-V.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/tls_1.x: Add TLSDESC GD test case.
	* gcc.target/riscv/tlsdesc.c: Same as above.
2024-04-08 22:28:05 +08:00
Jakub Jelinek
d5d84487de s390: Fix s390_const_int_pool_entry_p and movdi peephole2 [PR114605]
The following testcase is miscompiled, because we have initially
a movti which loads the 0x3f8000003f800000ULL TImode constant
from constant pool.  Later on we split it into a pair of DImode
loads.  Now, for the first load (why just that?, though not stage4
material) we trigger the peephole2 which uses s390_const_int_pool_entry_p.
That function doesn't check at all the constant pool mode though, sees
the constant pool at that address has a CONST_INT value and just assumes
that is the value to return, which is especially wrong for big-endian,
if it is a DImode load from offset 0, it should be loading 0 rather than
0x3f8000003f800000ULL.
The following patch adds checks if we are extracing a MODE_INT mode,
if the constant pool has MODE_INT mode as well, punts if constant pool
has smaller mode size than the extraction one (then it would be UB),
if it has the same mode as before keeps using what it did before,
if constant pool has a larger mode than the one being extracted, uses
simplify_subreg.  I'd have used avoid_constant_pool_reference
instead which can handle also offsets into the constant pool constants,
but it can't handle UNSPEC_LTREF.

Another thing is that once that is fixed, we ICE when we extract constant
like 0, ior insn predicate require non-0 constant.  So, the patch also
fixes the peephole2 so that if either 32-bit half is zero, it uses a mere
load of the constant into register rather than a pair of such load and ior.

2024-04-08  Jakub Jelinek  <jakub@redhat.com>

	PR target/114605
	* config/s390/s390.cc (s390_const_int_pool_entry_p): Punt
	if mem doesn't have MODE_INT mode, or pool constant doesn't
	have MODE_INT mode, or if pool constant mode is smaller than
	mem mode.  If mem mode is different from pool constant mode,
	try to simplify subreg.  If that doesn't work, punt, if it
	does, use the simplified constant instead of the constant pool
	constant.
	* config/s390/s390.md (movdi from const pool peephole): If
	either low or high 32-bit part is zero, just emit move insn
	instead of move + ior.

	* gcc.dg/pr114605.c: New test.
2024-04-08 16:22:13 +02:00
Swinney, Jonathan
278cad8507 aarch64: Fix vld1/st1_x4 intrinsic test
The test for this intrinsic was failing silently and so it failed to
report the bug reported in 114521. This patch modifes the test to
report the result.

Bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114521

Signed-off-by: Jonathan Swinney <jswinney@amazon.com>

gcc/testsuite/
	* gcc.target/aarch64/advsimd-intrinsics/vld1x4.c: Exit with a nonzero
	code if the test fails.
2024-04-08 14:02:33 +01:00
Jakub Jelinek
080cac15ce ChangeLog: Add by hand ChangeLog entry for PR114361 revert.
This commit has been added to IGNORED_COMMITS, because it contained
bogus explanation of the standardized git revert message.
2024-04-08 14:48:36 +02:00
GCC Administrator
1a96eb0a43 Daily bump. 2024-04-08 12:15:19 +00:00
Jakub Jelinek
b93836d5ca contrib: Add 8057f9aa1f to ignored commits.
This commit unfortunately added explanation to the git revert generated
message, breaking ChangeLog generation.

2024-04-08  Jakub Jelinek  <jakub@redhat.com>

	* gcc-changelog/git_update_version.py: Add
	8057f9aa1f to IGNORED_COMMITS.
2024-04-08 14:12:00 +02:00
Richard Biener
97d5cd8740 tree-optimization/114624 - fix use-after-free in SCCP
We're inspecting the replaced PHI node after releasing it.

	PR tree-optimization/114624
	* tree-scalar-evolution.cc (final_value_replacement_loop):
	Get at the PHI arg location before releasing the PHI node.

	* gcc.dg/torture/pr114624.c: New testcase.
2024-04-08 11:37:25 +02:00
Pan Li
7d051f7d45 RISC-V: Refine the error msg for RVV intrinisc required ext
The RVV intrinisc API has sorts of required extension from both
the march or target attribute.  It will have error message similar
to below:

built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension

However, it is not accurate as we have many additional sub extenstion
besides v extension.  For example, zvbb, zvbk, zvbc ... etc.  This patch
would like to refine the error message with a friendly hint for the
required extension.  For example as below:

vuint64m1_t
__attribute__((target("arch=+v")))
test_1 (vuint64m1_t op_1, vuint64m1_t op_2, size_t vl)
{
  return __riscv_vclmul_vv_u64m1 (op_1, op_2, vl);
}

When compile with march=rv64gc and target arch=+v, we will have error
message as below:

error: built-in function '__riscv_vclmul_vv_u64m1(op_1,  op_2,  vl)'
  requires the 'zvbc' ISA extension

Then the end-user will get the point that the *zvbc* extension is missing
for the intrinisc API easily.

The below tests are passed for this patch.
* The riscv fully regression tests.

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-shapes.cc (build_one): Pass
	required_ext arg when invoke add function.
	(build_th_loadstore): Ditto.
	(struct vcreate_def): Ditto.
	(struct read_vl_def): Ditto.
	(struct vlenb_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc (function_builder::add_function):
	Introduce new arg required_ext to fill in the register func.
	(function_builder::add_unique_function): Ditto.
	(function_builder::add_overloaded_function): Ditto.
	(expand_builtin): Leverage required_extensions_specified to
	check if the required extension is provided.
	* config/riscv/riscv-vector-builtins.h (reqired_ext_to_isa_name): New
	func impl to convert the required_ext enum to the extension name.
	(required_extensions_specified): New func impl to predicate if
	the required extension is well feeded.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: Adjust
	the error message for v extension.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c: Ditto.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-1.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-10.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-2.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-3.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-4.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-5.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-6.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-7.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-8.c: New test.
	* gcc.target/riscv/rvv/base/intrinsic_required_ext-9.c: New test.

Signed-off-by: Pan Li <pan2.li@intel.com>
2024-04-08 16:19:23 +08:00
Iain Sandoe
39cb6b880f Darwin: Sync coverage specs with gcc/gcc.cc.
The specs for coverage ere out of date leading to test fails for
fcondition-coverage cases. Fixed by updating to match the specs
in gcc/gcc.cc.

gcc/ChangeLog:

	* config/darwin.h (LINK_COMMAND_SPEC_A): Update coverage
	specs.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2024-04-08 08:58:03 +01:00
demin.han
aa2ab7b79a RISC-V: Minor fix for max_point
The program points start from 1, so max_point should be equal to
length().

Tested on RV64 and no regression.

gcc/ChangeLog:

	* config/riscv/riscv-vector-costs.cc: Use length()

Signed-off-by: demin.han <demin.han@starfivetech.com>
2024-04-08 14:13:42 +08:00
Pan Li
af3a980743 RISC-V: Allow RVV intrinsic for more function target
In previous, we allowed the target(("arch=+v")) for a function with
rv64gc build.  This patch would like to support more arch options as
below:
* zve32x
* zve32f
* zve64x
* zve64f
* zve64d
* zvfhmin
* zvfh
* zvk*
* zvbb

For example, we have sample code as below.
vfloat32m1_t
__attribute__((target("arch=+zve64f")))
test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl)
{
  return __riscv_vfadd_vv_f32m1 (a, b, vl);
}

It will generate the asm code when build with -O3 -march=rv64gc
test_9:
        vsetvli zero,a0,e32,m1,ta,ma
        vfadd.vv        v8,v8,v9
        ret

Meanwhile, this patch introduces more error handling for the target
attribute.  Take arch=+zve32x with vfloat32m1_t will have error message
"'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension".
And take arch=+zve32f with vfloat16m1_t will have error message
"'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension".

By default, all the RVV types includes the cmdline march will be
registered when include the riscv_vector.h.  And we have sorts of check
during args and return types.

Below test are passed for this patch:
* The riscv fully regression test.

gcc/ChangeLog:

	* config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New
	struct to hold all intrinisc related flags.
	(riscv_pragma_intrinsic_flags_pollute): New func to pollute
	the intrinsic flags and backup original flags.
	(riscv_pragma_intrinsic_flags_restore): New func to restore
	the flags from the backup intrinsic flags.
	(riscv_pragma_intrinsic): Pollute the flags and register all
	possible builtin types and functions, then restore and reinit.
	* config/riscv/riscv-protos.h (reinit_builtins): New func
	decl to reinit after flags pollution.
	(riscv_option_override): New extern func decl.
	* config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null):
	New func to register builtin types if null.
	(DEF_RVV_TYPE): Ditto.
	(DEF_RVV_TUPLE_TYPE): Ditto.
	(reinit_builtins): New func impl to reinit after flags pollution.
	(expand_builtin): Return
	target rtx after error_at.
	* config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate
	func to tell one tree type is integer or not.
	(riscv_vector_float_type_p): New predicate func to tell one tree
	type is float or not.
	(riscv_vector_element_bitsize): New func to get the element bitsize
	of a vector tree type.
	(riscv_vector_required_min_vlen): New func to get the required min vlen
	of a vector tree type.
	(riscv_validate_vector_type): New func to validate the tree type
	is valid on flags.
	(riscv_return_value_is_vector_type_p): Leverage the func
	riscv_validate_vector_type to do the tree type validation.
	(riscv_arguments_is_vector_type_p): Ditto.
	(riscv_override_options_internal): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test
	scenarios and add new error check tests.
	* gcc.target/riscv/rvv/base/pr109479-2.c: Ditto.
	* gcc.target/riscv/rvv/base/pr109479-3.c: Ditto.
	* gcc.target/riscv/rvv/base/pr109479-4.c: Diito.
	* gcc.target/riscv/rvv/base/pr109479-5.c: Diito.
	* gcc.target/riscv/rvv/base/pr109479-6.c: Diito.
	* gcc.target/riscv/rvv/base/user-10.c: Ditto.
	* gcc.target/riscv/rvv/base/user-12.c: Ditto.
	* gcc.target/riscv/rvv/base/user-13.c: Ditto.
	* gcc.target/riscv/rvv/base/user-14.c: Ditto.
	* gcc.target/riscv/rvv/base/user-15.c: Ditto.
	* gcc.target/riscv/rvv/base/user-2.c: Ditto.
	* gcc.target/riscv/rvv/base/user-3.c: Ditto.
	* gcc.target/riscv/rvv/base/user-5.c: Ditto.
	* gcc.target/riscv/rvv/base/user-6.c: Ditto.
	* gcc.target/riscv/rvv/base/user-9.c: Ditto.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test.
	* gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test.

Signed-off-by: Pan Li <pan2.li@intel.com>
2024-04-08 09:29:30 +08:00
Lulu Cheng
8f0ff6b998 LoongArch: Set default alignment for functions jumps and loops [PR112919].
Xi Ruoyao set the alignment rules under LA464 in commit r14-1839,
but the macro ASM_OUTPUT_ALIGN_WITH_NOP was removed in R14-4674,
which affected the alignment rules.

So I set different aligns on LA464 and LA664 again to test the
performance of spec2006, and modify the alignment based on the test
results.

gcc/ChangeLog:

	PR target/112919
	* config/loongarch/loongarch-def.cc (la664_align): Newly defined
	function that sets alignment rules under the LA664 microarchitecture.
	* config/loongarch/loongarch-opts.cc
	(loongarch_target_option_override): If not optimizing for size, set
	the default alignment to what the target wants.
	* config/loongarch/loongarch-tune.h (struct loongarch_align): Add
	new member variables jump and loop.
2024-04-08 08:47:24 +08:00
Gaius Mulley
4e3c825730 PR modula2/114617 gm2 unable to resolve const expressions using relop ICE
This patch allows cc1gm2 to resolve constant expressions which use
relative operators.  Previous to the patch the result of a relop
was stored in a temporary variable set by an if then else quadruple
sequence.  This patch marks a const expression in the quadruples
and then reduces this sequence of quadruples into a single
assignment to an internal constant.

gcc/m2/ChangeLog:

	PR modula2/114617
	* gm2-compiler/M2GenGCC.mod (CodeStatememt): Add quad trace.
	(ResolveConstantExpressions): Add parameter p to FoldIfLess,
	FoldIfGre, FoldIfLessEqu, FoldIfGreEqu, FoldIfEqu, FoldIfNotEqu,
	FoldIfIn and FoldIfNotIn.
	(CodeInline): Add constExpr variable and pass it to GetQuadOtok.
	(CodeReturnValue): Ditto.
	(CodeParam): Ditto.
	(FoldStringLength): Ditto.
	(FoldStringConvertM2nul): Ditto.
	(FoldStringConvertCnul): Ditto.
	(DeclaredOperandsBecomes): Ditto.
	(TypeCheckBecomes): Ditto.
	(PerformFoldBecomes): Ditto.
	(CodeBecomes): Ditto.
	(CheckElementSetTypes): Ditto.
	(CodeBinarySet): Ditto.
	(PerformCodeIfLess): Ditto.
	(PerformCodeIfGre): Ditto.
	(PerformCodeIfLessEqu): Ditto.
	(PerformCodeIfGreEqu): Ditto.
	(PerformCodeIfEqu): Ditto.
	(PerformCodeIfNotEqu): Ditto.
	(IsValidExpressionRelOp): Ditto.
	(PerformCodeIfIn): Ditto.
	(PerformCodeIfNotIn): Ditto.
	(CodeXIndr): Ditto.
	(QuadCondition): New procedure function.
	(IsBooleanRelOpPattern): Ditto.
	(FoldBooleanRelopPattern): Ditto.
	(FoldIfGre): Check for boolean relop constant expression and
	add parameter p.
	(FoldIfLessEqu): Ditto.
	(FoldIfIn): Ditto.
	(FoldIfEqu): Ditto.
	(FoldIfNotIn): Ditto.
	(FoldIfGreEqu): New procedure.
	(FoldIfNotEqu): Ditto.
	* gm2-compiler/M2Optimize.mod (ReduceBranch): Add constExpr
	variable and pass it to GetQuadOtok.
	* gm2-compiler/M2Quads.def (IsBecomes): New procedure function.
	(IsDummy): Ditto.
	(IsQuadConstExpr): Ditto.
	(SetQuadConstExpr): Ditto.
	(GetQuadDest): New procedure.
	(GetQuadOp1): New procedure.
	(GetQuadOp2): New procedure.
	(GetQuadOp3): New procedure.
	(GetQuadOtok): New procedure.
	(GetQuadOTypetok): New procedure.
	(PutQuadOtok): New procedure.
	(IsInConstParameters): New procedure function.
	* gm2-compiler/M2Quads.mod (IsBecomes): New procedure function.
	(IsDummy): Ditto.
	(IsQuadConstExpr): Ditto.
	(SetQuadConstExpr): Ditto.
	(GetQuadDest): New procedure.
	(GetQuadOp1): New procedure.
	(GetQuadOp2): New procedure.
	(GetQuadOp3): New procedure.
	(GetQuadOtok): New procedure.
	(GetQuadOTypetok): New procedure.
	(PutQuadOtok): New procedure.
	(IsInConstParameters): New procedure function.
	(ConstStack): Remove to ...
	(ConstExprStack): ... this.
	(ConstParamStack): New variable and initialize.
	(QuadFrame): New field ConstExpr.
	(GetQuadOtok): Add parameter constExpr and assign.
	(PutQuadOtok): Add constExpr parameter and assign.
	(PutQuadOType): Ditto.
	(GetQuadOTypetok): Ditto.
	(EraseQuad): Assign ConstExpr to FALSE.
	(FoldSubrange): Set ConstExpr to FALSE in BecomesOp.
	(PushInConstParameters): New procedure.
	(PopInConstParameters): New procedure.
	(IsInConstParameters): New procedure function.
	* gm2-compiler/M2SymInit.mod (IssueConditional): Add
	constExpr boolean variable.
	(CheckReadBeforeInitQuad): Ditto.
	(trashParam): Ditto.
	* gm2-compiler/P3Build.bnf (ConstExpression): Call
	PushInConstExpression and PopInConstExpression.
	(ConstSetOrQualidentOrFunction): Call
	PushInConstParameters and PopInConstParameters.
	* gm2-compiler/PCBuild.bnf (ConstExpression): Call
	PushInConstExpression and PopInConstExpression.
	* gm2-compiler/PHBuild.bnf: Ditto
	* gm2-gcc/m2expr.cc (m2expr_BuildCondIfExpression): New
	function.
	* gm2-gcc/m2expr.def (BuildCondIfExpression): New prototype.
	* gm2-gcc/m2expr.h (m2expr_BuildCondIfExpression): New function.

gcc/testsuite/ChangeLog:

	PR modula2/114617
	* gm2/iso/const/pass/iso-const-pass.exp: New test.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2024-04-06 23:45:35 +01:00
Jerry DeLisle
93adf88cc6 libfortran: Fix handling of formatted separators.
PR libfortran/114304
	PR libfortran/105473

libgfortran/ChangeLog:

	* io/list_read.c (eat_separator): Add logic to handle spaces
	preceding a comma or semicolon such that that a 'null' read
	occurs without error at the end of comma or semicolon
	terminated input lines. Add check and error message for ';'.
	(list_formatted_read_scalar): Treat comma as a decimal point
	when specified by the decimal mode on the first item.

gcc/testsuite/ChangeLog:

	* gfortran.dg/pr105473.f90: Modify to verify new error message.
	* gfortran.dg/pr114304.f90: New test.
2024-04-06 06:55:45 -07:00
Iain Buclaw
09992f8b88 d: Merge upstream dmd, druntime b65767825f, phobos 92dc5a4e9.
Synchronizing with the upstream release of v2.108.0.

D front-end changes:

	- Import dmd v2.108.0.

D runtime changes:

	- Import druntime v2.108.0.

Phobos changes:

	- Import phobos v2.108.0.

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd b65767825f.
	* dmd/VERSION: Bump version to v2.108.0.

libphobos/ChangeLog:

	* libdruntime/MERGE: Merge upstream druntime b65767825f.
	* src/MERGE: Merge upstream phobos 92dc5a4e9.
2024-04-06 14:26:37 +02:00
H.J. Lu
06a7e7514a x86: Use explicit shift count in double-precision shifts
Don't use implicit shift count in double-precision shifts in AT&T syntax
since they aren't in Intel SDM.  Keep the 's' modifier for backward
compatibility with inline asm statements.

	PR target/114590
	* config/i386/i386.md (x86_64_shld): Use explicit shift count in
	AT&T syntax.
	(x86_64_shld_ndd): Likewise.
	(x86_shld): Likewise.
	(x86_shld_ndd): Likewise.
	(x86_64_shrd): Likewise.
	(x86_64_shrd_ndd): Likewise.
	(x86_shrd): Likewise.
	(x86_shrd_ndd): Likewise.
2024-04-06 04:55:23 -07:00
Jørgen Kvalsvik
c6892a430a Copy condition->expr map when inlining [PR114599]
When a function is tree-inlined, copy the condition -> expression mapping
from the inlined function into the caller, shifted so uids are not
mixed.  Tree inlining was always problematic under condition coverage -
either through a nullptr dereference (triggered by the test case), or
through quietly mixing caller conditions with the callee conditions.

	PR middle-end/114599

gcc/ChangeLog:

	* tree-inline.cc (add_local_variables): Copy cond_uids mappings.

gcc/testsuite/ChangeLog:

	* gcc.misc-tests/gcov-pr114599.c: New test.
2024-04-06 13:10:29 +02:00
Jørgen Kvalsvik
888bf71972 Remove unecessary and broken MC/DC compile test
The __sigsetjmp test was added as a regression test in an early
iteration of the MC/DC support, as it caused an internal compiler error.
This was triggered by a code path which did not make it through to the
final revision.  Since this test really only worked on systems with
__sigsetjmp, and does not serve a purpose any more it can be removed.

gcc/testsuite/ChangeLog:

	* gcc.misc-tests/gcov-19.c: Remove test.
2024-04-06 13:08:56 +02:00
David Malcolm
4b02dd48f5 analyzer: respect GCC_COLORS in out-of-bounds diagrams [PR114588]
gcc/analyzer/ChangeLog:
	PR analyzer/114588
	* access-diagram.cc (access_diagram_impl::access_diagram_impl):
	Replace hardcoded colors for valid_style and invalid_style with
	calls to text_art::get_style_from_color_cap_name.

gcc/ChangeLog:
	PR analyzer/114588
	* diagnostic-color.cc (color_dict): Add "valid" and "invalid" as
	color capability names.
	* doc/invoke.texi: Document them in description of GCC_COLORS.
	* text-art/style.cc: Include "diagnostic-color.h".
	(text_art::get_style_from_color_cap_name): New.
	* text-art/types.h (get_style_from_color_cap_name): New decl.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-04-05 14:49:53 -04:00
Iain Sandoe
75b49c0e90 testsuite, Darwin: Account for block labels in function body scans.
When we have '-O3 -g' we emit a bunch of LB{B,E} local labels which
were not currently being discarded, leading to some test fails.

Fixed by adding this case to the ignored labels.

gcc/testsuite/ChangeLog:

	* lib/scanasm.exp: Add 'LB*' to the local labels that are
	ignored for Darwin.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2024-04-05 19:10:57 +01:00
Marek Polacek
2b2d3a135a c++: add fixed test [PR91079]
Fixed by r12-2975.

	PR c++/91079
	DR 1881

gcc/testsuite/ChangeLog:

	* g++.dg/ext/is_std_layout5.C: New test.
2024-04-05 13:40:55 -04:00
Alex Coplan
e7d015b250 aarch64: Fix whitespace in aarch64-ldp-fusion.cc:alias_walker
I spotted this whitespace error during the review of
https://gcc.gnu.org/pipermail/gcc-patches/2024-April/648846.html

gcc/ChangeLog:

	* config/aarch64/aarch64-ldp-fusion.cc (struct alias_walker):
	Fix double space after const qualifier on valid ().
2024-04-05 17:53:47 +01:00
Martin Jambor
8cd0d29270
ipa: Force args obtined through pass-through maps to the expected type (PR 113964)
Interactions of IPA-CP and IPA-SRA on the same data is a rather big
source of issues, I'm afraid.  PR 113964 is a situation where IPA-CP
propagates an unsigned short in a union parameter into a function
which itself calls a different function which has a same union
parameter and both these union parameters are split with IPA-SRA.  The
leaf function however uses a signed short member of the union.

In the calling function, we get the unsigned constant as the
replacement for the union and it is then passed in the call without
any type compatibility checks.  Apparently on riscv64 it matters
whether the parameter is signed or unsigned short and so the leaf
function can see different values.

Fixed by using useless_type_conversion_p at the appropriate place and
if it fails, use force_value_to type as elsewhere in similar
situations.

gcc/ChangeLog:

2024-04-04  Martin Jambor  <mjambor@suse.cz>

	PR ipa/113964
	* ipa-param-manipulation.cc (ipa_param_adjustments::modify_call):
	Force values obtined through pass-through maps to the expected
	split type.

gcc/testsuite/ChangeLog:

2024-04-04  Patrick O'Neill  <patrick@rivosinc.com>
	    Martin Jambor  <mjambor@suse.cz>

	PR ipa/113964
	* gcc.dg/ipa/pr114247.c: New test.
2024-04-05 18:18:58 +02:00
Mark Wielaard
0c22f67526 Regenerate common.opt.urls
The new support for gcov modified condition/decision coverage
introduced two new flags for gcc, -Wcoverage-too-many-conditions and
-fcondition-coverage. But didn't regenerate the gcc/common.opt.urls.

Fixes: 08a5233180 ("Add condition coverage (MC/DC)")

gcc/ChangeLog:

	* common.opt.urls: Regenerate.
2024-04-05 17:22:16 +02:00
Richard Sandiford
67cbb1c638 aarch64: Fix bogus cnot optimisation [PR114603]
aarch64-sve.md had a pattern that combined:

	cmpeq	pb.T, pa/z, zc.T, #0
	mov	zd.T, pb/z, #1

into:

	cnot	zd.T, pa/m, zc.T

But this is only valid if pa.T is a ptrue.  In other cases, the
original would set inactive elements of zd.T to 0, whereas the
combined form would copy elements from zc.T.

gcc/
	PR target/114603
	* config/aarch64/aarch64-sve.md (@aarch64_pred_cnot<mode>): Replace
	with...
	(@aarch64_ptrue_cnot<mode>): ...this, requiring operand 1 to be
	a ptrue.
	(*cnot<mode>): Require operand 1 to be a ptrue.
	* config/aarch64/aarch64-sve-builtins-base.cc (svcnot_impl::expand):
	Use aarch64_ptrue_cnot<mode> for _x operations that are predicated
	with a ptrue.  Represent other _x operations as fully-defined _m
	operations.

gcc/testsuite/
	PR target/114603
	* gcc.target/aarch64/sve/acle/general/cnot_1.c: New test.
2024-04-05 14:47:15 +01:00
Marek Polacek
e4d074321b c-family: remove dead #undef
The #undef was added in r0-90320-g100d537d7a7b5c but it never did
anything.

gcc/c-family/ChangeLog:

	* c-warn.cc (warn_about_parentheses): Remove an #undef.
2024-04-05 09:11:46 -04:00
Marek Polacek
8c9063825c c++: constexpr error with fn redecl in local scope [PR111132]
We evaluate constexpr functions on the original, pre-genericization bodies.
That means that the function body we're evaluating will not have gone
through cp_genericize_r's "Map block scope extern declarations to visible
declarations with the same name and type in outer scopes if any".  Here:

  constexpr bool bar() { return true; } // #1
  constexpr bool foo() {
    constexpr bool bar(void); // #2
    return bar();
  }

it means that we:
1) register_constexpr_fundef (#1)
2) cp_genericize (#1)
   nothing interesting happens
3) register_constexpr_fundef (foo)
   does copy_fn, so we have two copies of the BIND_EXPR
4) cp_genericize (foo)
   this remaps #2 to #1, but only on one copy of the BIND_EXPR
5) retrieve_constexpr_fundef (foo)
   we find it, no problem
6) retrieve_constexpr_fundef (#2)
   and here #2 isn't found in constexpr_fundef_table, because
   we're working on the BIND_EXPR copy where #2 wasn't mapped to #1
   so we fail.  We've only registered #1.

It should work to use DECL_LOCAL_DECL_ALIAS (which used to be
extern_decl_map).  We evaluate constexpr functions on pre-cp_fold
bodies to avoid diagnostic problems, but the remapping I'm proposing
should not interfere with diagnostics.

This is not a problem for a global scope redeclaration; there we go
through duplicate_decls which keeps the DECL_UID:
  DECL_UID (olddecl) = olddecl_uid;
and DECL_UID is what constexpr_fundef_hasher::hash uses.

	PR c++/111132

gcc/cp/ChangeLog:

	* constexpr.cc (get_function_named_in_call): Use
	cp_get_fndecl_from_callee.
	* cvt.cc (cp_get_fndecl_from_callee): If there's a
	DECL_LOCAL_DECL_ALIAS, use it.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/constexpr-redeclaration3.C: New test.
	* g++.dg/cpp0x/constexpr-redeclaration4.C: New test.
2024-04-05 09:10:46 -04:00
Jakub Jelinek
a844095e17 vect: Don't clear base_misaligned in update_epilogue_loop_vinfo [PR114566]
The following testcase is miscompiled, because in the vectorized
epilogue the vectorizer assumes it can use aligned loads/stores
(if the base decl gets alignment increased), but it actually doesn't
increase that.
This is because r10-4203-g97c1460367 added the hunk following
patch removes.  The explanation feels reasonable, but actually it
is not true as the testcase proves.
The thing is, we vectorize the main loop with 64-byte vectors
and the corresponding data refs have base_alignment 16 (the
a array has DECL_ALIGN 128) and offset_alignment 32.  Now, because
of the offset_alignment 32 rather than 64, we need to use unaligned
loads/stores in the main loop (and ditto in the first load/store
in vectorized epilogue).  But the second load/store in the vectorized
epilogue uses only 32-byte vectors and because it is a multiple
of offset_alignment, it checks if we could increase alignment of the
a VAR_DECL, the function returns true, sets base_misaligned = true
and says the access is then aligned.
But when update_epilogue_loop_vinfo clears base_misaligned with the
assumption that the var had to have the alignment increased already,
the update of DECL_ALIGN doesn't happen anymore.

Now, I'd think this base_alignment = false was needed before
r10-4030-gd2db7f7901 change was committed where it incorrectly
overwrote DECL_ALIGN even if it was already larger, rather than
just always increasing it.  But with that change in, it doesn't
make sense to me anymore.

Note, the testcase is latent on the trunk, but reproduces on the 13
branch.

2024-04-05  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/114566
	* tree-vect-loop.cc (update_epilogue_loop_vinfo): Don't clear
	base_misaligned.

	* gcc.target/i386/avx512f-pr114566.c: New test.
2024-04-05 14:56:14 +02:00
Christophe Lyon
6f1005649f modula2: Add m2.install-dvi in gcc/m2/Make-lang.in
m2 has a m2.dvi build rule, but lacks the m2.install-dvi one.

2024-04-04  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/m2/
	* Make-lang.in (m2.install-dvi): New rule.
2024-04-05 12:53:29 +00:00
Thomas Schwinge
679f81a32f nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl: Restore 'libgomp.c/reverse-offload-sm30.c' testing
With commit 7520a4992c
"nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl",
we regressed:

    [-PASS:-]{+FAIL:+} libgomp.c/reverse-offload-sm30.c  at line 15 (test for warnings, line )
    [-PASS:-]{+FAIL:+} libgomp.c/reverse-offload-sm30.c (test for excess errors)

	libgomp/
	* testsuite/libgomp.c/reverse-offload-sm30.c: Set 'GCC_COLORS' to the empty string.
2024-04-05 14:11:16 +02:00
Martin Uecker
8057f9aa1f Revert "Fix ICE with -g and -std=c23 related to incomplete types [PR114361]"
This reverts commit 871bb5ad2d  because it
breaks LTO and needs a bit more work. See PR 114574.
2024-04-05 12:17:17 +02:00
Jakub Jelinek
9627cbbadb libatomic: Regenerate configure properly
Seems configure hasn't been regenerated properly after the last
acinclude.m4 change.

2024-04-05  Jakub Jelinek  <jakub@redhat.com>

	* configure: Regenerate.
2024-04-05 12:15:06 +02:00
Richard Biener
9ab8fdfeef middle-end/114599 - fix bitmap allocation for check_ifunc_callee_symtab_nodes
There's no default bitmap obstack during global CTORs, so allocate the
bitmap locally.

	PR middle-end/114599
	PR gcov-profile/114115
	* symtab.cc (ifunc_ref_map): Do not use auto_bitmap.
	(is_caller_ifunc_resolver): Optimize bitmap_bit_p/bitmap_set_bit
	pair.
	(symtab_node::check_ifunc_callee_symtab_nodes): Properly
	allocate ifunc_ref_map here.
2024-04-05 11:13:21 +02:00
Jakub Jelinek
effd947fcc testsuite: Fix up error on gcov1.d
On Fri, Feb 23, 2024 at 12:18:00PM +0100, Jørgen Kvalsvik wrote:
> This is a mostly straight port from the gcov-19.c tests from the C test
> suite. The only notable differences from C to D are that D flips the
> true/false outcomes for loop headers, and the D front end ties loop and
> ternary conditions to slightly different locus.
>
> The test for >64 conditions warning is disabled as it either needs
> support from the testing framework or a something similar to #pragma GCC
> diagnostic push to not cause a test failure from detecting a warning.
>
> gcc/testsuite/ChangeLog:
>
>       * gdc.dg/gcov.exp: New test.
>       * gdc.dg/gcov1.d: New test.

Unfortunately, this doesn't work.
I see
PASS: gdc.dg/gcov1.d   execution test
ERROR: (DejaGnu) proc "run-gcov conditions { --conditions gcov1.d }" does not exist.
The error code is TCL LOOKUP COMMAND run-gcov
The info on the error is:
invalid command name "run-gcov"
    while executing
"::tcl_unknown run-gcov conditions { --conditions gcov1.d }"
    ("uplevel" body line 1)
    invoked from within
"uplevel 1 ::tcl_unknown $args"
ERROR: gdc.dg/gcov1.d  : error executing dg-final: invalid command name "run-gcov"
both on x86_64-linux and i686-linux.
The problem is that the test hasn't been added to a new directory, but
to a directory already covered by a different *.exp file - dg.exp.
Now, usually either one has a test directory like gcc.misc-tests where
there are many *.exp files but each *.exp file globs for its own tests,
or there is one *.exp per directory and covers everything in there.
By having both dg.exp and gcov.exp in the same directory with dg.exp
covering all *.d files in there and gcov gcov*.d in there, the gcov*.d
tests are tested twice, once using the dg.exp driver and once using gcov.exp
driver.  With the latter, they do work properly, with the former they don't
because gcov.exp lib file isn't loaded and so run-gcov isn't available.

The following patch fixes that similarly how g++.dg/modules/modules.exp,
gcc.target/s390/s390.exp or gcc.target/i386/i386.exp deal with that,
by pruning some tests based on glob patterns from the list.

2024-04-05  Jakub Jelinek  <jakub@redhat.com>

	* gdc.dg/dg.exp: Prune gcov*.d from the list of tests to run.
	* gdc.dg/gcov.exp: Update copyright years.
2024-04-05 11:05:01 +02:00
Jakub Jelinek
592536eb3c c++: Fix ICE with weird copy assignment operator [PR114572]
While ctors/dtors don't return anything (undeclared void or this pointer
on arm) and copy assignment operators normally return a reference to *this,
it isn't invalid to return uselessly some class object which might need
destructing, but the OpenMP clause handling code wasn't expecting that.

The following patch fixes that.

2024-04-05  Jakub Jelinek  <jakub@redhat.com>

	PR c++/114572
	* cp-gimplify.cc (cxx_omp_clause_apply_fn): Call build_cplus_new
	on build_call_a result if it has class type.

	* testsuite/libgomp.c++/pr114572.C: New test.
2024-04-05 09:31:28 +02:00
Christophe Lyon
12b04452b4 go: Add go.install-dvi rule in go/Make-lang.in
go has a go.dvi build rule, but lacks the go.install-dvi one.

2024-04-04  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/go/
	* Make-lang.in (go.install-dvi): New rule.
2024-04-05 07:04:27 +00:00
Hans-Peter Nilsson
4c8b3600c4 testsuite/gcc.target/cris/pr93372-2.c: Handle xpass from combine improvement
After r14-9692-g839bc42772ba7a, a sequence that actually
looks optimal is now emitted, observed at
r14-9788-gb7bd2ec73d66f7.  This caused an XPASS for this
test.  While adjusting the test, better also guard it
against regressions by checking that there are no redundant
move insns.

That's the only test that's improved to the point of
affecting test-patterns.  E.g. pr93372-5.c (which references
pr93372-2.c) is also improved, though it retains a redundant
compare insn.  (PR 93372 was about regressions from the cc0
representation; not further improvement like here, thus it's
not tagged.  Though, I did not double-check whether this
actually *was* a regression from cc0.)

	* gcc.target/cris/pr93372-2.c: Tweak scan-assembler
	checks to cover recent combine improvement.
2024-04-05 03:55:46 +02:00
Hans-Peter Nilsson
3b36e86d6a testsuite/gcc.dg/debug/btf/btf-datasec-1.c: Handle leading-underscore
I noticed my autotester for cris-elf flagging this as a regression.

	* gcc.dg/debug/btf/btf-datasec-1.c: Adjust pattern for targets with
	symbols having a leading underscore.
2024-04-05 03:54:58 +02:00
GCC Administrator
5192e72e7e Daily bump. 2024-04-05 00:16:44 +00:00
Wilco Dijkstra
27b6d081f6 libatomic: Fix build for --disable-gnu-indirect-function [PR113986]
Fix libatomic build to support --disable-gnu-indirect-function on AArch64.
Always build atomic_16.S, add aliases to the __atomic_ functions if !HAVE_IFUNC.
Include auto-config.h in atomic_16.S to avoid having to pass defines via
makefiles.  Fix build if HWCAP_ATOMICS/CPUID are not defined.

libatomic:
	PR target/113986
	* Makefile.in: Regenerated.
	* Makefile.am: Make atomic_16.S not depend on HAVE_IFUNC.
	Remove predefine of HAVE_FEAT_LSE128.
	* acinclude.m4: Remove ARCH_AARCH64_HAVE_LSE128.
	* configure: Regenerated.
	* config/linux/aarch64/atomic_16.S: Add __atomic_ alias if !HAVE_IFUNC.
	* config/linux/aarch64/host-config.h: Correctly handle !HAVE_IFUNC.
	Add defines for HWCAP_ATOMICS and HWCAP_CPUID.
2024-04-04 22:28:58 +01:00
centurion
801e82acd6 c++: alias CTAD and template template parm [PR114377]
To match all the other places that pull a _TEMPLATE_PARM out of a
_DECL (get_template_parm_index, etc.).

This change is too small to be legally significant for copyright.

	PR c++/114377

gcc/cp/ChangeLog:

	* pt.cc (find_template_parameter_info::found): Use TREE_TYPE for
	TEMPLATE_DECL instead of DECL_INITIAL.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/class-deduction-alias19.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2024-04-04 17:18:56 -04:00
Martin Jambor
ca56b43105
ipa: Avoid duplicate replacements in IPA-SRA transformation phase
When the analysis part of IPA-SRA figures out that it would split out
a scalar part of an aggregate which is known by IPA-CP to contain a
known constant, it skips it knowing that the transformation part looks
at IPA-CP aggregate results too and does the right thing (which can
include doing the propagation in GIMPLE because that is the last
moment the parameter exists).

However, when IPA-SRA wants to split out a smaller aggregate out
of an aggregate, which happens to be of the same size as a known
scalar constant at the same offset, the transformation bit fails to
recognize the situation, tries to do both splitting and constant
propagation and in PR 111571 testcase creates a nonsensical call
statement on which the call redirection then ICEs.

Fixed by making sure we don't try to do two replacements of the same
part of the same parameter.

The look-up among replacements requires these are sorted and this
patch just sorts them if they are not already sorted before each new
look-up.  The worst number of sortings that can happen is number of
parameters which are both split and have aggregate constants times
param_ipa_max_agg_items (default 16).  I don't think complicating the
source code to optimize for this unlikely case is worth it but if need
be, it can of course be done.

gcc/ChangeLog:

2024-03-15  Martin Jambor  <mjambor@suse.cz>

	PR ipa/111571
	* ipa-param-manipulation.cc
	(ipa_param_body_adjustments::common_initialization): Avoid creating
	duplicate replacement entries.

gcc/testsuite/ChangeLog:

2024-03-15  Martin Jambor  <mjambor@suse.cz>

	PR ipa/111571
	* gcc.dg/ipa/pr111571.c: New test.
2024-04-04 22:56:48 +02:00
Vladimir N. Makarov
a24476422b [PR114415][scheduler]: Fixing wrong code generation
For the test case, the insn scheduler (working for live range
shrinkage) moves insns modifying stack memory before an insn reserving
the stack memory. Comments in the patch contains more details about
the problem and its solution.

gcc/ChangeLog:

	PR rtl-optimization/114415
	* sched-deps.cc (add_insn_mem_dependence): Add memory check for mem argument.
	(sched_analyze_1): Treat stack pointer modification as memory read.
	(sched_analyze_2, sched_analyze_insn): Add memory guard for processing pending_read_mems.
	* sched-int.h (deps_desc): Add comment to pending_read_mems.

gcc/testsuite/ChangeLog:

	PR rtl-optimization/114415
	* gcc.target/i386/pr114415.c: New test.
2024-04-04 16:07:10 -04:00
Tobias Burnus
7520a4992c nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl
gcc/ChangeLog:

	* config/nvptx/mkoffload.cc (main): Call
	gcc_init_libintl and diagnostic_color_init.
2024-04-04 21:55:29 +02:00