Commit graph

195538 commits

Author SHA1 Message Date
Aldy Hernandez
ab0f70a630 frange: Make the setter taking trees a wrapper.
The frange setter does all its work in trees.  This incurs a penalty
for the real_value variants because they must wrap their arguments
into a tree and pass it to the tree setter, which will then do the
opposite.  This is leftovers from the irange setter.

Even though the we still need constructors taking trees so we can
interact with the tree world, there's no sense penalizing the rest of
the implementation.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-range.cc (frange::set): Swap setters such that the one
	accepting REAL_VALUE_TYPE does all the work.
2022-09-23 14:58:53 +02:00
Jonathan Wakely
4ceb5bc42d libstdc++: Enable constexpr std::bitset for debug mode
We already disable all debug mode checks for C++11 and later, so we can
easily make everything constexpr. This fixes the FAIL results for the
new tests when using -D_GLIBCXX_DEBUG.

Also fix some other tests failing with non-default test flags.

libstdc++-v3/ChangeLog:

	* include/debug/bitset (__debug::bitset): Add constexpr to all
	member functions.
	(operator&, operator|, operator^): Add inline and constexpr.
	(operator>>, operator<<): Add inline.
	* testsuite/20_util/bitset/access/constexpr.cc: Only check using
	constexpr std::string for the cxx11 ABI.
	* testsuite/20_util/bitset/cons/constexpr_c++23.cc: Likewise.
	* testsuite/20_util/headers/bitset/synopsis.cc: Check constexpr
	for C++23.
2022-09-23 12:53:51 +01:00
Jonathan Wakely
ffb03fa128 libstdc++: Optimize std::bitset<N>::to_string
This makes to_string approximately twice as fast at any optimization
level. Instead of iterating through every bit, jump straight to the next
bit that is set, by using _Find_first and _Find_next.

libstdc++-v3/ChangeLog:

	* include/std/bitset (bitset::_M_copy_to_string): Find set bits
	instead of iterating over individual bits.
2022-09-23 12:53:51 +01:00
Kyrylo Tkachov
14d4b4fb12 aarch64: Add Arm Neoverse V2 support
This patch adds -mcpu/-mtune support for the Arm Neoverse V2 core.
This updates the internal references to "demeter", but leaves "demeter" as an
accepted value to -mcpu/-mtune as it appears in the released GCC 12 series.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/ChangeLog:

	* config/aarch64/aarch64-cores.def (neoverse-v2): New entry.
	(demeter): Update tunings to neoversev2.
	* config/aarch64/aarch64-tune.md: Regenerate.
	* config/aarch64/aarch64.cc (demeter_addrcost_table): Rename to
	neoversev2_addrcost_table.
	(demeter_regmove_cost): Rename to neoversev2_addrcost_table.
	(demeter_advsimd_vector_cost): Rename to neoversev2_advsimd_vector_cost.
	(demeter_sve_vector_cost): Rename to neoversev2_sve_vector_cost.
	(demeter_scalar_issue_info): Rename to neoversev2_scalar_issue_info.
	(demeter_advsimd_issue_info): Rename to neoversev2_advsimd_issue_info.
	(demeter_sve_issue_info): Rename to neoversev2_sve_issue_info.
	(demeter_vec_issue_info): Rename to neoversev2_vec_issue_info.
	Update references to above.
	(demeter_vector_cost): Rename to neoversev2_vector_cost.
	(demeter_tunings): Rename to neoversev2_tunings.
	(aarch64_vec_op_count::rename_cycles_per_iter): Use
	neoversev2_sve_issue_info instead of demeter_sve_issue_info.
	* doc/invoke.texi (AArch64 Options): Document neoverse-v2.
2022-09-23 12:12:29 +01:00
Paul-Antoine Arras
d10308ff61 MAINTAINERS: Add myself to Write After Approval
ChangeLog:

	* MAINTAINERS (Write After Approval): Add myself.
2022-09-23 10:34:10 +00:00
Tamar Christina
50324a0d39 testsuite: make check-functions-body dump expected and seen cases on failure.
Often times when a check_function_body check fails it can be quite hard to
figure out why as no additional information is provided.

This changes it so that on failures it prints out the regex expression it's
using and the text it's comparing against to the verbose log.

This makes it much easier to figure out why a test has failed.

gcc/testsuite/ChangeLog:

	* lib/scanasm.exp (check_function_body): Add debug output to verbose log
	on failure.
2022-09-23 10:56:30 +01:00
Aldy Hernandez
b7fd7fb501 frange: drop endpoints to min/max representable numbers for -ffinite-math-only.
Similarly to how we drop NANs to UNDEFINED when -ffinite-math-only, I
think we can drop the numbers outside of the min/max representable
numbers to the representable number.

This means the endpoings to VR_VARYING for -ffinite-math-only can now
be the min/max representable, instead of -INF and +INF.

Saturating in the setter means that the upcoming implementation for
binary operators no longer have to worry about doing the right
thing for -ffinite-math-only.  If the range goes outside the limits,
it'll get chopped down.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* range-op-float.cc (build_le): Use vrp_val_*.
	(build_lt): Same.
	(build_ge): Same.
	(build_gt): Same.
	* value-range.cc (frange::set): Chop ranges outside of the
	representable numbers for -ffinite-math-only.
	(frange::normalize_kind): Use vrp_val*.
	(frange::verify_range): Same.
	(frange::set_nonnegative): Same.
	(range_tests_floats): Remove tests that depend on -INF and +INF.
	* value-range.h (real_max_representable): Add prototype.
	(real_min_representable): Same.
	(vrp_val_max): Set max representable number for
	-ffinite-math-only.
	(vrp_val_min): Same but for min.
	(frange::set_varying): Use vrp_val*.
2022-09-23 10:52:21 +02:00
Aldy Hernandez
76dbbfe62c Add debug functions for REAL_VALUE_TYPE.
We currently have no way of dumping REAL_VALUE_TYPEs when debugging.

Tested on a gdb session examining the real value 10.0:

(gdb) p min
$9 = {cl = 1, decimal = 0, sign = 0, signalling = 0, canonical = 0, uexp = 4, sig = {0, 0, 11529215046068469760}}
(gdb) p debug (min)
0x0.ap+4

gcc/ChangeLog:

	* real.cc (debug): New.
2022-09-23 10:52:20 +02:00
Aldy Hernandez
0706262498 frange: dump hex values when dumping FP numbers.
It has been suggested that if we start bumping numbers by an ULP when
calculating open ranges (for example the numbers less than 3.0) that
dumping these will become increasingly harder to read, and instead we
should opt for the hex representation.  I still find the floating
point representation easier to read for most numbers, but perhaps we
could have both?

With this patch this is the representation for [15.0, 20.0]:

     [frange] float [1.5e+1 (0x0.fp+4), 2.0e+1 (0x0.ap+5)]

Would you find this useful, or should we stick to the hex
representation only?

Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-range-pretty-print.cc (vrange_printer::print_real_value): New.
	(vrange_printer::visit): Call print_real_value.
	* value-range-pretty-print.h: New print_real_value.
2022-09-23 10:52:20 +02:00
Martin Liska
6516257285 opts: fix --help=common with '\t' description
Fixes -flto-compression option:

-  -flto-compression-level=<number>	Use z Use zlib/zstd compression level <number> for IL.
+  -flto-compression-level=<0,19> Use zlib/zstd compression level <number> for IL.

gcc/ChangeLog:

	* common.opt: Update -flto-compression-level documentation.
	* opts.cc (print_filtered_help): Do not append range to an
	  option that uses \t syntax.
2022-09-23 09:56:10 +02:00
Jakub Jelinek
a0de11d0d2 testsuite: Fix up pr106922.C test
On Thu, Sep 22, 2022 at 01:10:08PM +0200, Richard Biener via Gcc-patches wrote:
>       * g++.dg/tree-ssa/pr106922.C: Adjust.

> --- a/gcc/testsuite/g++.dg/tree-ssa/pr106922.C
> +++ b/gcc/testsuite/g++.dg/tree-ssa/pr106922.C
> @@ -87,5 +87,4 @@ void testfunctionfoo() {
>    }
>  }
>
> -// { dg-final { scan-tree-dump-times "Found fully redundant value" 4 "pre" { xfail { ! lp64 } } } }
> -// { dg-final { scan-tree-dump-not "m_initialized" "cddce3" { xfail { ! lp64 } } } }
> +// { dg-final { scan-tree-dump-not "m_initialized" "dce3" } }

I've noticed
+UNRESOLVED: g++.dg/tree-ssa/pr106922.C  -std=gnu++20  scan-tree-dump-not dce3 "m_initialized"
+UNRESOLVED: g++.dg/tree-ssa/pr106922.C  -std=gnu++2b  scan-tree-dump-not dce3 "m_initialized"
with this change, both on x86_64 and i686.
The dump is still cddce3, additionally as the last reference to the pre
dump is gone, not sure it is worth creating that dump.

With the following patch, there aren't FAILs nor UNRESOLVED tests with
GXX_TESTSUITE_STDS=98,11,14,17,20,2b make check-g++ RUNTESTFLAGS="--target_board=unix\{-m32,-m64\} dg.exp='pr106922.C'"

2022-09-23  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/106922
	* g++.dg/tree-ssa/pr106922.C: Scan in cddce3 dump rather than
	dce3.  Remove -fdump-tree-pre-details from dg-options.
2022-09-23 09:47:32 +02:00
Jakub Jelinek
2ec6489d7a attribs: Improve diagnostics
When looking at the attribs code, I've noticed weird diagnostics
like
int a __attribute__((section ("foo", "bar")));
a.c:1:1: error: wrong number of arguments specified for ‘section’ attribute
    1 | int a __attribute__((section ("foo", "bar")));
      | ^~~
a.c:1:1: note: expected between 1 and 1, found 2
As roughly 50% of attributes that accept any arguments have
spec->min_length == spec->max_length, I think it is worth it to have
separate wording for such common case and just write simpler
a.c:1:1: note: expected 1, found 2

2022-09-23  Jakub Jelinek  <jakub@redhat.com>

	* attribs.cc (decl_attributes): Improve diagnostics, instead of
	saying expected between 1 and 1, found 2 just say expected 1, found 2.
2022-09-23 09:10:16 +02:00
Hu, Lin1
a282f086ef i386: Optimize code generation of __mm256_zextsi128_si256(__mm_set1_epi8(-1))
gcc/ChangeLog:

	PR target/94962
	* config/i386/constraints.md (BH): New define_constraint.
	* config/i386/i386.cc (standard_sse_constant_p): Add return
	3/4 when operand matches new predicate.
	(standard_sse_constant_opcode): Add new alternative branch to
	return "vpcmpeqd".
	* config/i386/predicates.md
	(vector_all_ones_zero_extend_half_operand): New define_predicate.
	(vector_all_ones_zero_extend_quarter_operand): Ditto.
	* config/i386/sse.md: Add constraint to insn "mov<mode>_internal".

gcc/testsuite/ChangeLog:

	PR target/94962
	* gcc.target/i386/avx256-unaligned-load-1.c: Modify test.
	* gcc.target/i386/avx256-unaligned-store-1.c: Ditto.
	* gcc.target/i386/avx256-unaligned-store-2.c: Ditto.
	* gcc.target/i386/avx256-unaligned-store-3.c: Ditto.
	* gcc.target/i386/pr94962-1.c: New test.
	* gcc.target/i386/pr94962-2.c: Ditto.
	* gcc.target/i386/pr94962-3.c: Ditto.
	* gcc.target/i386/pr94962-4.c: Ditto.
2022-09-23 13:28:12 +08:00
Marek Polacek
8b449dcd84 c++: ICE-on-invalid with designated initializer [PR106983]
We ICE in the code added in r12-7117: type_build_dtor_call gets
the error_mark_node because the type of 'prev' wasn't declared.

	PR c++/106983

gcc/cp/ChangeLog:

	* typeck2.cc (split_nonconstant_init_1): Check TYPE_P.

gcc/testsuite/ChangeLog:

	* g++.dg/other/error36.C: New test.
2022-09-22 20:23:59 -04:00
GCC Administrator
279c671509 Daily bump. 2022-09-23 00:18:01 +00:00
Thomas Neumann
94ccaf62c3 Avoid depending on destructor order
In some scenarios (e.g., when mixing gcc and clang code), it can
happen that frames are deregistered after the lookup structure
has already been destroyed. That in itself would be fine, but
it triggers an assert in __deregister_frame_info_bases that
expects to find the frame.

To avoid that, we now remember that the btree as already been
destroyed and disable the assert in that case.

libgcc/ChangeLog:

	* unwind-dw2-fde.c: (release_register_frames) Remember
	when the btree has been destroyed.
	(__deregister_frame_info_bases) Disable the assert when
	shutting down.
2022-09-23 00:57:55 +02:00
Joseph Myers
32524808fa Update gcc fr.po
* fr.po: Update.
2022-09-22 21:56:52 +00:00
Andrew MacLeod
5608e41091 Convert CFN_BUILT_IN_PARITY to range-ops.
Also, as the last builtin remaining, also remove the builtin infrastrucure
routines from fold_using_range.

	* gimple-range-fold.cc (range_of_range_op): Handle no operands.
	(range_of_call): Do not check for builtins.
	(fold_using_range::range_of_builtin_call): Delete.
	(fold_using_range::range_of_builtin_int_call): Delete.
	* gimple-range-fold.h: Adjust prototypes.
	* gimple-range-op.cc (class cfn_parity): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:30 -04:00
Andrew MacLeod
e7f035f66a Convert CFN_BUILT_IN_GOACC_DIM_* to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case
	for CFN_GOACC_DIM_*.
	* gimple-range-op.cc (class cfn_goacc_dim): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:30 -04:00
Andrew MacLeod
c750e675cb Convert CFN_BUILT_IN_STRLEN to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case
	for CFN_BUILT_IN_STRLEN.
	* gimple-range-op.cc (class cfn_strlen): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
b6f670ff70 Convert CFN_BUILT_IN_UBSAN_CHECK_* to range-ops.
* gimple-range-fold.cc (range_of_builtin_ubsan_call): Delete.
	(range_of_builtin_int_call): Remove cases for
	CFN_BUILT_IN_UBSAN_CHECK.
	* gimple-range-op.cc (class cfn_ubsan): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
f7e62b0930 Convert CFN_BUILT_IN_CLRSB to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case
	for CFN_BUILT_IN_CLRSB.
	* gimple-range-op.cc (class cfn_clrsb): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
55738d8d96 Convert CFN_CTZ builtins to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case
	for CFN_CTZ.
	* gimple-range-op.cc (class cfn_ctz): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
ae1669a986 Convert CFN_CLZ builtins to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case
	for CFN_CLZ.
	* gimple-range-op.cc (class cfn_clz): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
5f730c6501 Convert CFN_BUILT_FFS and CFN_POPCOUNT to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case
	for CFN_FFS and CFN_POPCOUNT.
	* gimple-range-op.cc (class cfn_pocount): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
2f5da730f1 Convert CFN_BUILT_IN_TOUPPER and TOLOWER to range-ops.
* gimple-range-fold.cc (get_letter_range): Move to new class.
	(range_of_builtin_int_call): Remove case for CFN_BUILT_IN_TOUPPER
	and CFN_BUILT_IN_TOLOWER.
	* gimple-range-op.cc (class cfn_toupper_tolower): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
eb82b9f68e Convert CFN_BUILT_IN_SIGNBIT to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case
	for CFN_BUILT_IN_SIGNBIT.
	* gimple-range-op.cc (class cfn_signbit): New.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
b40b303587 Add range-ops support for builtin functions.
Convert CFN_BUILT_IN_CONSTANT_P as first POC.

	* gimple-range-fold.cc
	(fold_using_range::range_of_builtin_int_call): Remove case for
	CFN_BUILT_IN_CONSTANT_P.
	* gimple-range-op.cc (gimple_range_op_handler::supported_p):
	Check if a call also creates a range-op object.
	(gimple_range_op_handler): Also check builtin calls.
	(class cfn_constant_float_p): New.  Float CFN_BUILT_IN_CONSTANT_P.
	(class cfn_constant_p): New.  Integral CFN_BUILT_IN_CONSTANT_P.
	(gimple_range_op_handler::maybe_builtin_call): Set arguments and
	handler for supported built-in calls.
	* gimple-range-op.h (maybe_builtin_call): New prototype.
2022-09-22 14:48:29 -04:00
Andrew MacLeod
2f92f685da Always check the return value of fold_range.
The fold_range routine in range-ops returns FALSE if the operation
fails.  There are a few places which assume the operation was
successful.  Fix those.

	* gimple-range-fold.cc (range_of_range_op): Set result to
	VARYING if the call to fold_range fails.
	* tree-data-ref.cc (compute_distributive_range): Ditto.
	* tree-vrp.cc (range_fold_binary_expr): Ditto.
	(range_fold_unary_expr): Ditto.
	* value-query.cc (range_query::get_tree_range): Ditto.
2022-09-22 14:48:28 -04:00
Andrew MacLeod
be2a25adbd Add missing float fold_range prototype for floats.
Unary operations require op2 to be the range of the type of the LHS.
This is so the type for the LHS can be properly set.

	* range-op-float.cc (range_operator_float::fold_range): New base
	  method for "int = float op int".
	* range-op.cc (range_op_handler::fold_range): New case.
	* range-op.h: Update prototypes.
2022-09-22 14:48:28 -04:00
Andrew MacLeod
a7a6649f4e Fix calc_op1 for undefined op2_range.
Unary operations pass the type of operand 1 into op1_range.  If that
range is undefined, the routine blindly picks the type of operand 2,
which in the case of a unary op, does not exist and traps.

	* gimple-range-op.cc (gimple_range_op_handler::calc_op1): Use
	  operand 1 for second range if there is no operand 2.
2022-09-22 14:48:28 -04:00
Andrew MacLeod
51ce06385b Create gimple_range_op_handler in a new source file.
Range-ops is meant to be IL independent.  Some gimple processing has
be placed in range-ops, and some is located in gori.  Split it all into
a file and isolate it in a new class gimple_range_op_handler.

	* Makefile.in (OBJS): Add gimple-range-op.o.
	* gimple-range-edge.cc (gimple_outgoing_range_stmt_p): Use
	gimple_range_op_handler.
	* gimple-range-fold.cc (gimple_range_base_of_assignment): Move
	to a method in gimple_range_op_handler.
	(gimple_range_operand1): Ditto.
	(gimple_range_operand2): Ditto.
	(fold_using_range::fold_stmt): Use gimple_range_op_handler.
	(fold_using_range::range_of_range_op): Ditto.
	(fold_using_range::relation_fold_and_or): Ditto.
	(fur_source::register_outgoing_edges): Ditto.
	(gimple_range_ssa_names): Relocate to gimple-range-op.cc.
	* gimple-range-fold.h: Adjust prototypes.
	* gimple-range-gori.cc (gimple_range_calc_op1): Move
	to a method in gimple_range_op_handler.
	(gimple_range_calc_op2): Ditto.
	(gori_compute::compute_operand_range): Use
	gimple_range_op_handler.
	(gori_compute::compute_logical_operands): Ditto.
	(compute_operand1_range): Ditto.
	(gori_compute::compute_operand2_range): Ditto.
	(gori_compute::compute_operand1_and_operand2_range): Ditto.
	* gimple-range-gori.h: Adjust protoypes.
	* gimple-range-op.cc: New.  Supply gimple_range_op_handler methods.
	* gimple-range-op.h: New.  Supply gimple_range_op_handler class.
	* gimple-range.cc (gimple_ranger::prefill_name): Use
	gimple_range_op_handler.
	(gimple_ranger::prefill_stmt_dependencies): Ditto.
	* gimple-range.h: Include gimple-range-op.h.
	* range-op.cc (range_op_handler::range_op_handler): Adjust and
	remove gimple * parameter option.
	* range-op.h: Adjust prototypes.
2022-09-22 14:48:12 -04:00
Andrew MacLeod
24c473a14d Adjust range_op_handler to store the handler directly.
Range_op_handler currently stores a tree code and a type.  It defers
checking to see if there is a valid handler until asked.
This change checks at constuctor time and store a pointer to
the handler if there is one.

	* range-op.cc (range_op_handler::set_op_handler): Set new fields.
	(ange_op_handler::range_op_handler): Likewise.
	(range_op_handler::operator bool): Remove.
	(range_op_handler::fold_range): Use appropriate handler.
	(range_op_handler::op1_range): Likewise.
	(range_op_handler::op2_range): Likewise.
	(range_op_handler::lhs_op1_relation): Likewise.
	(range_op_handler::lhs_op2_relation): Likewise.
	(range_op_handler::op1_op2_relation): Likewise.
	* range-op.h (class range_op_handler): Store handler pointers.
	(range_op_handler:: operator bool): Inline.
2022-09-22 14:14:34 -04:00
Andrew MacLeod
3cba5cd6e0 Replace another snippet with a call to gimple_range_ssa_names.
When the original patch was applied, I missed a spot which could
also be rewritten to use gimple_range_ssa_names.

	* tree-ssa-threadbackward.cc
	  (back_threader::find_paths_to_names): Replace sequence with
	  a call to gimple_range_ssa_names.
2022-09-22 14:14:34 -04:00
José Rui Faustino de Sousa
12b537b9b7 Fortran: Fix automatic reallocation inside select rank [PR100103]
gcc/fortran/ChangeLog:

	PR fortran/100103
	* trans-array.cc (gfc_is_reallocatable_lhs): Add select rank
	temporary associate names as possible targets of automatic
	reallocation.

gcc/testsuite/ChangeLog:

	PR fortran/100103
	* gfortran.dg/PR100103.f90: New test.
2022-09-22 18:35:07 +02:00
Harald Anlauf
bc71318a91 Fortran: fix ICE in generate_coarray_sym_init [PR82868]
gcc/fortran/ChangeLog:

	PR fortran/82868
	* trans-decl.cc (generate_coarray_sym_init): Skip symbol
	if attr.associate_var.

gcc/testsuite/ChangeLog:

	PR fortran/82868
	* gfortran.dg/associate_26a.f90: New test.
2022-09-22 18:35:07 +02:00
Jonathan Wakely
3ad3f53bb3 libiberty: Refer to Bugzilla in README
We want bugs reported to Bugzilla, not emailed to gcc-bugs.

libiberty/ChangeLog:

	* README: Replace gcc-bugs email address with Bugzilla URL.
2022-09-22 15:19:14 +01:00
Jonathan Wakely
9194c13909 libstdc++: Implement constexpr std::bitset for C++23 (P2417R2)
Also add _GLIBCXX_HOSTED checks to simplify making <bitset>
freestanding in the near future.

libstdc++-v3/ChangeLog:

	* include/std/bitset (bitset): Add constexpr for C++23. Guard
	members using std::string with _GLIBCXX_HOSTED.
	* include/std/version (__cpp_lib_constexpr_bitset): Define.
	* testsuite/20_util/bitset/access/constexpr.cc: New test.
	* testsuite/20_util/bitset/cons/constexpr_c++23.cc: New test.
	* testsuite/20_util/bitset/count/constexpr.cc: New test.
	* testsuite/20_util/bitset/ext/constexpr.cc: New test.
	* testsuite/20_util/bitset/operations/constexpr_c++23.cc: New test.
	* testsuite/20_util/bitset/version.cc: New test.
2022-09-22 15:18:00 +01:00
Jonathan Wakely
4b4b51445f libstdc++: Rearrange tests for <bitset>
In C++03 std::bitset was in the Container clause, but since C++11 it has
been in the Utilties clause. This moves the tests to the 20_util
directory, where most people probably expect to find them.

Also create 'access', 'observers', and 'io' subdirectories and group
some tests under there, rather than having one directory per function
name, and only a single test in that directory.

libstdc++-v3/ChangeLog:

	* testsuite/23_containers/bitset/18604.cc: Moved to...
	* testsuite/20_util/bitset/18604.cc: ...here.
	* testsuite/23_containers/bitset/45713.cc: Moved to...
	* testsuite/20_util/bitset/45713.cc: ...here.
	* testsuite/23_containers/bitset/to_string/dr396.cc: Moved to...
	* testsuite/20_util/bitset/access/dr396.cc: ...here.
	* testsuite/23_containers/bitset/to_string/1.cc: Moved to...
	* testsuite/20_util/bitset/access/to_string.cc: ...here.
	* testsuite/23_containers/bitset/to_ullong/1.cc: Moved to...
	* testsuite/20_util/bitset/access/to_ullong.cc: ...here.
	* testsuite/23_containers/bitset/to_ulong/1.cc: Moved to...
	* testsuite/20_util/bitset/access/to_ulong.cc: ...here.
	* testsuite/23_containers/bitset/cons/1.cc: Moved to...
	* testsuite/20_util/bitset/cons/1.cc: ...here.
	* testsuite/23_containers/bitset/cons/16020.cc: Moved to...
	* testsuite/20_util/bitset/cons/16020.cc: ...here.
	* testsuite/23_containers/bitset/cons/2.cc: Moved to...
	* testsuite/20_util/bitset/cons/2.cc: ...here.
	* testsuite/23_containers/bitset/cons/3.cc: Moved to...
	* testsuite/20_util/bitset/cons/3.cc: ...here.
	* testsuite/23_containers/bitset/cons/38244.cc: Moved to...
	* testsuite/20_util/bitset/cons/38244.cc: ...here.
	* testsuite/23_containers/bitset/cons/50268.cc: Moved to...
	* testsuite/20_util/bitset/cons/50268.cc: ...here.
	* testsuite/23_containers/bitset/cons/6282.cc: Moved to...
	* testsuite/20_util/bitset/cons/6282.cc: ...here.
	* testsuite/23_containers/bitset/cons/constexpr.cc: Moved to...
	* testsuite/20_util/bitset/cons/constexpr.cc: ...here.
	* testsuite/23_containers/bitset/cons/dr1325-1.cc: Moved to...
	* testsuite/20_util/bitset/cons/dr1325-1.cc: ...here.
	* testsuite/23_containers/bitset/cons/dr1325-2.cc: Moved to...
	* testsuite/20_util/bitset/cons/dr1325-2.cc: ...here.
	* testsuite/23_containers/bitset/cons/dr396.cc: Moved to...
	* testsuite/20_util/bitset/cons/dr396.cc: ...here.
	* testsuite/23_containers/bitset/debug/invalidation/1.cc: Moved to...
	* testsuite/20_util/bitset/debug/invalidation/1.cc: ...here.
	* testsuite/23_containers/bitset/ext/15361.cc: Moved to...
	* testsuite/20_util/bitset/ext/15361.cc: ...here.
	* testsuite/23_containers/bitset/hash/1.cc: Moved to...
	* testsuite/20_util/bitset/hash/1.cc: ...here.
	* testsuite/23_containers/bitset/input/1.cc: Moved to...
	* testsuite/20_util/bitset/io/input.cc: ...here.
	* testsuite/23_containers/bitset/count/6124.cc: Moved to...
	* testsuite/20_util/bitset/observers/6124.cc: ...here.
	* testsuite/23_containers/bitset/all/1.cc: Moved to...
	* testsuite/20_util/bitset/observers/all.cc: ...here.
	* testsuite/23_containers/bitset/test/1.cc: Moved to...
	* testsuite/20_util/bitset/observers/test.cc: ...here.
	* testsuite/23_containers/bitset/operations/1.cc: Moved to...
	* testsuite/20_util/bitset/operations/1.cc: ...here.
	* testsuite/23_containers/bitset/operations/13838.cc: Moved to...
	* testsuite/20_util/bitset/operations/13838.cc: ...here.
	* testsuite/23_containers/bitset/operations/2.cc: Moved to...
	* testsuite/20_util/bitset/operations/2.cc: ...here.
	* testsuite/23_containers/bitset/operations/96303.cc: Moved to...
	* testsuite/20_util/bitset/operations/96303.cc: ...here.
	* testsuite/23_containers/bitset/operations/constexpr-2.cc: Moved to...
	* testsuite/20_util/bitset/operations/constexpr-2.cc: ...here.
	* testsuite/23_containers/bitset/operations/constexpr.cc: Moved to...
	* testsuite/20_util/bitset/operations/constexpr.cc: ...here.
	* testsuite/23_containers/bitset/requirements/constexpr_functions.cc: Moved to...
	* testsuite/20_util/bitset/requirements/constexpr_functions.cc: ...here.
	* testsuite/23_containers/bitset/requirements/explicit_instantiation/1.cc: Moved to...
	* testsuite/20_util/bitset/requirements/explicit_instantiation/1.cc: ...here.
	* testsuite/23_containers/bitset/requirements/explicit_instantiation/1_c++0x.cc: Moved to...
	* testsuite/20_util/bitset/requirements/explicit_instantiation/1_c++0x.cc: ...here.
	* testsuite/23_containers/headers/bitset/synopsis.cc: Moved to...
	* testsuite/20_util/headers/bitset/synopsis.cc: ...here.
2022-09-22 14:49:51 +01:00
Ian Lance Taylor
f35be1268c cmd/cgo: add and use runtime/cgo.Incomplete instead of //go:notinheap
This ports https://go.dev/cl/421879 to libgo. This is a quick port to
update gofrontend to work with the version of cgo in gc mainline.
A more complete port will follow, changing the gc version of cmd/cgo to
choose an approach based on feature testing the gccgo in use.

Updates golang/go#46731

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/432338
2022-09-22 06:28:19 -07:00
Richard Biener
44dba051d7 tree-optimization/102801 - testcase for uninit diagnostic
The following testcase is fixed in GCC 12+

	PR tree-optimization/102801
gcc/testsuite/
	* g++.dg/warn/Wuninitialized-33.C: New testcase.
2022-09-22 15:19:44 +02:00
Patrick Palka
32d8123cd6 c++ modules: partial variable template specializations [PR106826]
With partial variable template specializations, it looks like we
stream the VAR_DECL (i.e. the DECL_TEMPLATE_RESULT of the corresponding
TEMPLATE_DECL) since process_partial_specialization adds it to the
specializations table, but we end up never streaming the corresponding
TEMPLATE_DECL itself that's reachable only from the primary template's
DECL_TEMPLATE_SPECIALIZATIONS list, which leads to this list being
incomplete on stream-in.

The modules machinery already has special logic for streaming partial
specializations of class templates; this patch attempts to generalize
it to handle those of variable templates as well.

	PR c++/106826

gcc/cp/ChangeLog:

	* module.cc (trees_out::decl_value): Use get_template_info in
	the MK_partial case to handle both VAR_DECL and TYPE_DECL.
	(trees_out::key_mergeable): Likewise.
	(trees_in::key_mergeable): Likewise.
	(has_definition): Consider DECL_INITIAL of a partial variable
	template specialization.
	(depset:#️⃣:make_dependency): Handle partial variable template
	specializations too.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/partial-2_a.C: New test.
	* g++.dg/modules/partial-2_b.C: New test.
2022-09-22 08:46:23 -04:00
Martin Liska
26607a63da remove -gz=zlib-gnu option value
The option value is legacy and probably not used at all,
thus ignore it.

gcc/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Simplify to gcc_cv_ld_compress_debug={0,1}
	and gcc_cv_as_compress_debug={0,1}.
	* doc/invoke.texi: Document the removal.
	* gcc.cc (LINK_COMPRESS_DEBUG_SPEC): Simplify and ignore
	  zlib-gnu.
	(ASM_COMPRESS_DEBUG_SPEC): Likewise.

Co-Authored-By: Fangrui Song <i@maskray.me>
2022-09-22 14:39:32 +02:00
David Malcolm
86254629b6 c: fix uninitialized c_expr::m_decimal [PR106830]
I added c_expr::m_decimal in r13-2386-gbedfca647a9e9c1a as part of the
implementation of -Wxor-used-as-pow, but I missed various places where
the field needed to be initialized.

Fixed thusly.

gcc/c-family/ChangeLog:
	PR c/106830
	* c-warn.cc (check_for_xor_used_as_pow): Don't try checking
	values that don't fit in uhwi.

gcc/c/ChangeLog:
	PR c/106830
	* c-parser.cc (c_parser_initelt): Initialize m_decimal.
	(c_parser_cast_expression): Likewise.
	(c_parser_alignof_expression): Likewise.
	(c_parser_postfix_expression_after_paren_type): Likewise.
	(c_parser_postfix_expression_after_primary): Likewise.
	(c_parser_expression): Likewise.
	(c_parser_omp_variable_list): Likewise.
	(c_parser_transaction_expression): Likewise.
	* c-tree.h (c_expr::set_error): Likewise.
	* c-typeck.cc (c_expr_sizeof_expr): Likewise.
	(parser_build_unary_op): Likewise.
	(parser_build_binary_op): Likewise.
	(digest_init): Likewise.
	(pop_init_level): Likewise.
	* gimple-parser.cc (c_parser_gimple_call_internal): Likewise.

gcc/testsuite/ChangeLog:
	PR c/106830
	* gcc.dg/Wxor-used-as-pow-pr106830.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-09-22 08:35:26 -04:00
Richard Biener
9baee6181b tree-optimization/106922 - missed FRE/PRE
The following enhances the store-with-same-value trick in
vn_reference_lookup_3 by not only looking for

  a = val;
  *ptr = val;
  .. = a;

but also

  *ptr = val;
  other = x;
  .. = a;

where the earlier store is more than one hop away.  It does this
by queueing the actual value to compare until after the walk but
as disadvantage only allows a single such skipped store from a
constant value.

Unfortunately we cannot handle defs from non-constants this way
since we're prone to pick up values from the past loop iteration
this way and we have no good way to identify values that are
invariant in the currently iterated cycle.  That's why we keep
the single-hop lookup for those cases.  gcc.dg/tree-ssa/pr87126.c
would be a testcase that's un-XFAILed when we'd handle those
as well.

	PR tree-optimization/106922
	* tree-ssa-sccvn.cc (vn_walk_cb_data::same_val): New member.
	(vn_walk_cb_data::finish): Perform delayed verification of
	a skipped may-alias.
	(vn_reference_lookup_pieces): Likewise.
	(vn_reference_lookup): Likewise.
	(vn_reference_lookup_3): When skipping stores of the same
	value also handle constant stores that are more than a
	single VDEF away by delaying the verification.

	* gcc.dg/tree-ssa/ssa-fre-100.c: New testcase.
	* g++.dg/tree-ssa/pr106922.C: Adjust.
2022-09-22 13:10:15 +02:00
Max Filippov
66d20d8816 xtensa: gcc: enable section anchors support
gcc/
	* config/xtensa/xtensa.cc (TARGET_MAX_ANCHOR_OFFSET): New
	definition.
2022-09-22 03:53:44 -07:00
Max Filippov
0bf60f68ed xtensa: gcc: implement MI thunk generation for call0 ABI
gcc/
	* config/xtensa/xtensa.cc (xtensa_can_output_mi_thunk)
	(xtensa_output_mi_thunk): New functions.
	(TARGET_ASM_CAN_OUTPUT_MI_THUNK)
	(TARGET_ASM_OUTPUT_MI_THUNK): New macro definitions.
	(xtensa_prepare_expand_call): Use fixed register a8 as temporary
	when called with reload_completed set to 1.
2022-09-22 03:53:43 -07:00
Richard Biener
4bdf739f83 tree-optimization/99407 - DSE with data-ref analysis
The following resolves the issue that DSE cannot handle references
with variable offsets well when identifying possible uses of a store.
Instead of just relying on ref_maybe_used_by_stmt_p we use data-ref
analysis, making sure to perform that at most once per stmt.  The
new mode is only exercised by the DSE pass before loop optimization
as specified by a new pass parameter and when expensive optimizations
are enabled, so it's disabled below -O2.

	PR tree-optimization/99407
	* tree-ssa-dse.cc (dse_stmt_to_dr_map): New global.
	(dse_classify_store): Use data-ref analysis to disambiguate more uses.
	(pass_dse::use_dr_analysis_p): New pass parameter.
	(pass_dse::set_pass_param): Implement.
	(pass_dse::execute): Allocate and deallocate dse_stmt_to_dr_map.
	* passes.def: Allow DR analysis for the DSE pass before loop.

	* gcc.dg/vect/tsvc/vect-tsvc-s243.c: Remove XFAIL.
2022-09-22 12:51:52 +02:00
Richard Biener
41c7d2930a Some VN TLC
The following was prompted by review of the patch introducing
equivalences to VN.

	* tree-ssa-sccvn.cc (can_track_predicate_on_edge): New
	function split out from ...
	(vn_nary_op_insert_pieces_predicated): ... here.
2022-09-22 09:10:27 +02:00
liuhongt
cbaa0ed34e Fix typo in floorv2sf2, should be register_operand for op1, not vector_operand.
gcc/ChangeLog:

	PR target/106994
	* config/i386/mmx.md (floorv2sf2): Fix typo, use
	register_operand instead of vector_operand for operands[1].

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr106994.c: New test.
2022-09-22 14:03:33 +08:00