Commit graph

195499 commits

Author SHA1 Message Date
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
François Dumont
42630dc056 libstdc++: Remove useless gdb printer registrations
libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py: Remove ptinter registration for non-existing
	types std::__debug::unique_ptr, std::__debug::stack, std::__debug::queue,
	std::__debug::priority_queue.
2022-09-22 06:22:59 +02:00
GCC Administrator
f85847bd40 Daily bump. 2022-09-22 00:19:09 +00:00
Jonathan Wakely
5814816641 libstdc++: Fix accidental duplicate test [PR91456]
It looks like I committed the testcase for std::function twice, instead
of one for std::function and one for std::is_invocable_r. This replaces
the is_invocable_r one with the example from the PR.

libstdc++-v3/ChangeLog:

	PR libstdc++/91456
	* testsuite/20_util/function/91456.cc: Add comment with PR
	number.
	* testsuite/20_util/is_invocable/91456.cc: Likewise. Replace
	std::function checks with std::is_invocable_r checks.
2022-09-21 15:01:37 +01:00
Jonathan Wakely
16fe325a43 libstdc++: Remove main() from some compile-only tests
libstdc++-v3/ChangeLog:

	* testsuite/17_intro/headers/c++1998/all_attributes.cc: Remove
	unnecessary main function.
	* testsuite/17_intro/headers/c++2011/all_attributes.cc:
	Likewise.
	* testsuite/17_intro/headers/c++2014/all_attributes.cc:
	Likewise.
	* testsuite/17_intro/headers/c++2017/all_attributes.cc:
	Likewise.
	* testsuite/17_intro/headers/c++2020/all_attributes.cc:
	Likewise.
2022-09-21 15:01:28 +01:00
Jonathan Wakely
980aa91e9c libstdc++: Update <memory> synopsis test for C++11 and later
libstdc++-v3/ChangeLog:

	* testsuite/20_util/headers/memory/synopsis.cc: Add declarations
	from C++11 and later.
2022-09-21 15:01:28 +01:00
Aldy Hernandez
dc829c7613 [PR106967] Set known NANs to undefined for flag_finite_math_only.
Explicit NANs in the IL can be treated as undefined for
flag_finite_math_only.  This causes all the right things to happen wrt
threading, folding, etc.  It also saves us special casing throughout.

	PR tree-optimization/106967

gcc/ChangeLog:

	* value-range.cc (frange::set): Set known NANs to undefined for
	flag_finite_math_only.
2022-09-21 13:33:40 +02:00
Aldy Hernandez
324fa420b6 Clear unused flags in frange for undefined ranges.
gcc/ChangeLog:

	* value-range.cc (frange::combine_zeros): Call set_undefined.
	(frange::intersect_nans): Same.
	(frange::intersect): Same.
	(frange::verify_range): Undefined ranges do not have a type.
	* value-range.h (frange::set_undefined): Clear NAN flags and type.
2022-09-21 13:27:19 +02:00
Richard Biener
41b5edaa5c tree-optimization/106984 - tsan and COND_EXPR GIMPLE
The following adjusts a missed spot in TSAN for the RHS COND_EXPR
GIMPLE IL rework.

	PR tree-optimization/106984
	* tsan.cc (instrument_builtin_call): Build the COND_EXPR condition in
	a separate statement.

	* gcc.dg/tsan/pr106984.c: New testcase.
2022-09-21 11:32:29 +02:00
Francois-Xavier Coudert
519196a27c Fortran: handle RADIX kind in IEEE_SET_ROUNDING_MODE
Make sure that calling IEEE_SET_ROUNDING_MODE with RADIX=10 does not
affect the binary rounding mode.

2022-09-21  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>

libgfortran/

	* ieee/ieee_arithmetic.F90 (IEEE_SET_ROUNDING_MODE): Handle
	RADIX argument better.

gcc/testsuite/

	* gfortran.dg/ieee/rounding_3.f90: New test.
2022-09-21 11:15:21 +02:00
Kyrylo Tkachov
dd9e5f4db2 aarch64: Rewrite -march=native to -mcpu if no other -mcpu or -mtune is given
We have received requests to improve the out-of-the box experience and
performance of AArch64 GCC users, particularly those porting software from other
architectures. This has many aspects. One such aspect are apps built natively
with an -march=native used as a tuning flag in the Makefile.
On AArch64 this selects the right architecture features on GNU+Linux for the
host system but tunes for the "generic" CPU target.
This patch makes GCC also tune for the host CPU, as well as selecting its
architecture. That is, it translates -march=native into -mcpu=native.
This maintains the documentation that it "causes the compiler to pick the
architecture of the host system" since -mcpu=native does that, but it also
gives a better performance experience for the user.

If the user explicitly asked for a particular CPU tuning through -mcpu or
-mtune then we don't do this rewriting so that the user option is honoured.

This would have been a one-line patch if it wasn't for --with-tune
configure-time arguments. When GCC is configured with --with-tune=<CORE> the
OPTION_DEFAULT_SPECS will insert an -mtune=<CORE> in the options if no other
-mcpu or -mtune options were given. This will spook the aforementioned desired
rewriting of -march=native into -mcpu=native, though I'd argue that we want to
do the rewrite even then. Therefore, this patch moves some specs in aarch64.h
around and refactors the --with-tune rewriting into CONFIG_TUNE_SPEC so that
the materialization of the implicit -mtune=<CORE> does not happen if -march=native
is used.

Bootstrapped and tested on aarch64-none-linux-gnu and checked with the output
of -### from the driver that the option rewriting works as expected on
aarch64-linux-gnu.

gcc/ChangeLog:

	* config/aarch64/aarch64.h (HAVE_LOCAL_CPU_DETECT,
	EXTRA_SPEC_FUNCTIONS, MCPU_MTUNE_NATIVE_SPECS): Move definitions up before
	OPTION_DEFAULT_SPECS.
	(MCPU_MTUNE_NATIVE_SPECS): Pass "cpu" to
	local_cpu_detect when rewriting -march=native and no -mcpu or -mtune
	is given.
	(CONFIG_TUNE_SPEC): Define.
	(OPTION_DEFAULT_SPECS): Use CONFIG_TUNE_SPEC for "tune".
2022-09-21 10:10:21 +01:00
Aldy Hernandez
d2278da1c3 [PR106967] frange: revamp relational operators for NANs.
Since NANs can be inserted by other passes even for -ffinite-math-only,
we can't depend on the flag to determine if a NAN is a possiblity.
Instead, we must explicitly check for them.

In the case of -ffinite-math-only, paths leading up to a NAN are
undefined and can be considered unreachable.  I have audited all the
relational code and made sure we're handling the known NAN case before
anything else, setting undefined when appropriate.

In the process, I revamped all the relational code handling NANs to
correctly notice paths that are unreachable.

The basic structure for ordered relational operators (except != of
course) is this:

	If either operand is a known NAN, return FALSE.

	The true side of a relop when one operand is a NAN is
	unreachable.

	On the false side of a relop when one operand is a NAN, we
	know nothing about the other operand.

Regstrapped on x86-64 and ppc64le Linux.
lapack testing on x86-64 with and without -ffinite-math-only.

	PR tree-optimization/106967

gcc/ChangeLog:

	* range-op-float.cc (foperator_equal::fold_range): Adjust for NAN.
	(foperator_equal::op1_range): Same.
	(foperator_not_equal::fold_range): Same.
	(foperator_not_equal::op1_range): Same.
	(foperator_lt::fold_range): Same.
	(foperator_lt::op1_range): Same.
	(foperator_lt::op2_range): Same.
	(foperator_le::fold_range): Same.
	(foperator_le::op1_range): Same.
	(foperator_le::op2_range): Same.
	(foperator_gt::fold_range): Same.
	(foperator_gt::op1_range): Same.
	(foperator_gt::op2_range): Same.
	(foperator_ge::fold_range): Same.
	(foperator_ge::op1_range): Same.
	(foperator_ge::op2_range): Same.
	(foperator_unordered::op1_range): Same.
	(foperator_ordered::fold_range): Same.
	(foperator_ordered::op1_range): Same.
	(build_le): Assert that we don't have a NAN.
	(build_lt): Same.
	(build_gt): Same.
	(build_ge): Same.

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/pr106967.c: New test.
2022-09-21 11:06:57 +02:00
Francois-Xavier Coudert
ce8aed75a3 Fortran: add symbols in version map for IEEE_GET_MODES and IEEE_SET_MODES
The symbols were forgotten in the patch that added IEEE_GET_MODES
and IEEE_SET_MODES.

2022-09-21  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>

libgfortran/

	* gfortran.map: Add symbols for IEEE_GET_MODES
	and IEEE_SET_MODES.
2022-09-21 10:04:22 +02:00
liuhongt
eddbb81f12 Don't check can_vec_perm_const_p for nonlinear iv_init when it's constant.
When init_expr is INTEGER_CST or REAL_CST, can_vec_perm_const_p is not
necessary since there's no real vec_perm needed, but
vec_gen_perm_mask_checked will gcc_assert (can_vec_perm_const_p). So
it's better to use vec_gen_perm_mask_any in
vect_create_nonlinear_iv_init.

gcc/ChangeLog:

	PR tree-optimization/106963
	* tree-vect-loop.cc (vect_create_nonlinear_iv_init): Use
	vec_gen_perm_mask_any instead of vec_gen_perm_mask_check.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr106963.c: New test.
2022-09-21 15:47:40 +08:00
Jonathan Wakely
9c23fe08c1 libstdc++: Remove trailing whitespace in documentation sources
libstdc++-v3/ChangeLog:

	* doc/xml/manual/documentation_hacking.xml: Remove trailing
	whitespace.
	* doc/xml/manual/policy_data_structures.xml: Likewise.
2022-09-21 08:44:22 +01:00
Jonathan Wakely
cb29396e67 libstdc++: Add _Exit to <stdlib.h> for freestanding
When I added std::_Exit to the freestanding declarations in <cstdlib> I
should also have added it to <stdlib.h>.

libstdc++-v3/ChangeLog:

	* include/c_compatibility/stdlib.h [!_GLIBCXX_HOSTED]: Add
	using-declaration for _Exit.
2022-09-21 08:44:21 +01:00
Jonathan Wakely
d784c5cfe6 libstdc++: Qualify std::abort() in test
This test includes <cstdlib> so should use std::abort not ::abort.

libstdc++-v3/ChangeLog:

	* testsuite/18_support/uncaught_exception/14026.cc: Qualify
	call to std::abort.
2022-09-21 08:44:21 +01:00
Jonathan Wakely
26cb69f8b4 libstdc++: Add <initializer_list> to ranges_base.h header
The header should be included explicitly to use std::initializer_list.
With the upcoming changes to make <ranges> available for freestanding
this becomes an error, because <initializer_list> is no longer provided
by any of the other headers involved here.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_base.h: Include <initializer_list>.
2022-09-21 08:42:00 +01:00
GCC Administrator
5e4f5c25d6 Daily bump. 2022-09-21 00:19:14 +00:00
Tobias Burnus
59f6dea963 Fortran: F2018 type(*),dimension(*) with scalars [PR104143]
Assumed-size dummy arguments accept arrays and array elements as actual
arguments. There are also a few exceptions when real scalars are permitted.
Since F2018, this includes scalar arguments to assumed-type dummies; while
type(*) was added in TS29113, this change is only in F2018 itself.

	PR fortran/104143

gcc/fortran/ChangeLog:

	* interface.cc (compare_parameter): Permit scalar args to
	'type(*), dimension(*)'.

gcc/testsuite/ChangeLog:

	* gfortran.dg/c-interop/c407b-2.f90: Remove dg-error.
	* gfortran.dg/assumed_type_16.f90: New test.
	* gfortran.dg/assumed_type_17.f90: New test.
2022-09-20 23:06:19 +02:00
Harald Anlauf
5976fbf9d5 Fortran: error recovery on invalid ARRAY argument to FINDLOC [PR106986]
gcc/fortran/ChangeLog:

	PR fortran/106986
	* simplify.cc (gfc_simplify_findloc): Do not try to simplify
	intrinsic FINDLOC when the ARRAY argument has a NULL shape.

gcc/testsuite/ChangeLog:

	PR fortran/106986
	* gfortran.dg/pr106986.f90: New test.
2022-09-20 22:41:48 +02:00
Harald Anlauf
8dbb15bc2d Fortran: NULL pointer dereference in invalid simplification [PR106985]
gcc/fortran/ChangeLog:

	PR fortran/106985
	* expr.cc (gfc_simplify_expr): Avoid NULL pointer dereference.

gcc/testsuite/ChangeLog:

	PR fortran/106985
	* gfortran.dg/pr106985.f90: New test.
2022-09-20 22:23:43 +02:00
Patrick Palka
c77f556741 c++: xtreme-header modules tests cleanups
This adds some recently implemented C++20/23 library headers to the
xtreme-header tests as appropriate.  Also, it looks like we can safely
re-add <execution> and remove the NO_ASSOCIATED_LAMBDA workaround.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/xtreme-header-2.h: Include <execution>.
	* g++.dg/modules/xtreme-header-6.h: Include implemented
	C++20 library headers.
	* g++.dg/modules/xtreme-header.h: Likewise.  Remove
	NO_ASSOCIATED_LAMBDA workaround.  Include implemented C++23
	library headers.
2022-09-20 16:13:48 -04:00
Patrick Palka
4fac53d652 c++: modules and non-dependent auto deduction
The modules streaming code seems to rely on the invariant that a
TEMPLATE_DECL and its DECL_TEMPLATE_RESULT have the same TREE_TYPE.
But for a non-dependent VAR_DECL with deduced type, the two TREE_TYPEs
end up diverging: cp_finish_decl deduces the type of the initializer
ahead of time and updates the TREE_TYPE of the VAR_DECL, but neglects to
update the corresponding TEMPLATE_DECL as well, which leads to a
"conflicting global module declaration" error for each of the
__phase_alignment decls in the below testcase (and for the xtreme-header
tests if we try including <barrier>).

This patch makes cp_finish_decl update the TREE_TYPE of the corresponding
TEMPLATE_DECL so that the invariant is maintained.

gcc/cp/ChangeLog:

	* decl.cc (cp_finish_decl): After updating the deduced type of a
	VAR_DECL, also update the corresponding TEMPLATE_DECL if there
	is one.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/auto-3.h: New test.
	* g++.dg/modules/auto-3_a.H: New test.
	* g++.dg/modules/auto-3_b.C: New test.
2022-09-20 16:08:14 -04:00
José Rui Faustino de Sousa
be60aa5b60 Fortran: Fix function attributes [PR100132]
gcc/fortran/ChangeLog:

	PR fortran/100132
	* trans-types.cc (create_fn_spec): Fix function attributes when
	passing polymorphic pointers.

gcc/testsuite/ChangeLog:

	PR fortran/100132
	* gfortran.dg/PR100132.f90: New test.
2022-09-20 20:27:20 +02:00
Aldy Hernandez
2438b6a4c8 frange::maybe_isnan() should return FALSE for undefined ranges.
Undefined ranges have undefined NAN bits.  We can't depend on them,
as they may contain garbage.  This patch returns false from
maybe_isnan() for undefined ranges (the empty set).

gcc/ChangeLog:

	* value-range.h (frange::maybe_isnan): Return false for
	undefined ranges.
2022-09-20 20:21:09 +02:00
Aldy Hernandez
10d6109fe1 frange::set_nonnegative should not contain -NAN.
A specifically nonnegative range should not contain -NAN, otherwise
signbit_p() would return false, because we'd be unsure of the sign.

	PR 68097/tree-optimization

gcc/ChangeLog:

	* value-range.cc (frange::set_nonnegative): Set +NAN.
	(range_tests_signed_zeros): New test.
	* value-range.h (frange::update_nan): New overload to set NAN sign.
2022-09-20 19:33:32 +02:00
Martin Liska
d812e8cb2a fortran: add link to ISO_VARYING_STRING module [PR106636]
PR fortran/106636

gcc/fortran/ChangeLog:

	* gfortran.texi: Add back link to ISO_VARYING_STRING.
2022-09-20 17:23:46 +02:00
Richard Sandiford
6bf5a704d3 aarch64: Fix GTY markup for arm_sve.h [PR106491]
It turns out that GTY(()) markers in definitions like:

  GTY(()) tree scalar_types[NUM_VECTOR_TYPES];

are not effective and are silently ignored.  The GTY(()) has
to come after an extern or static.

The externs associated with the SVE ACLE GTY variables are in
aarch64-sve-builtins.h.  This file is not in tm_include_list because
we don't want every target-facing file to include it.  It therefore
isn't in the list of GC header files either.

In this case that's a blessing in disguise, since the variables
belong to a namespace and gengtype doesn't understand namespaces.
I think the fix is instead to add an extra extern before each
variable declaration, similarly to varasm.cc and vtable-verify.cc.
(This works due to a "using namespace" at the end of the file.)

gcc/
	PR target/106491
	* config/aarch64/aarch64-sve-builtins.cc (scalar_types)
	(acle_vector_types, acle_svpattern, acle_svprfop): Add GTY
	markup to (new) extern declarations instead of to the main
	definition.
2022-09-20 15:27:47 +01:00
Richard Sandiford
1005c89431 vect: Fix SLP layout handling of masked loads [PR106794]
PR106794 shows that I'd forgotten about masked loads when
doing the SLP layout changes.  These loads can't currently
be permuted independently of their mask input, so during
construction they never get a load permutation.

(If we did support permuting masked loads in future, the mask
would need to be in the right order for the load, rather than in
the order implied by the result of the permutation.  Since masked
loads can't be partly or fully scalarised in the way that normal
permuted loads can be, there's probably no benefit to fusing the
permutation and the load.  Permutation after the fact is probably
good enough.)

gcc/
	PR tree-optimization/106794
	PR tree-optimization/106914
	* tree-vect-slp.cc (vect_optimize_slp_pass::internal_node_cost):
	Only consider loads that already have a permutation.
	(vect_optimize_slp_pass::start_choosing_layouts): Assert that
	loads with permutations are leaf nodes.  Prevent any kind of grouped
	access from changing layout if it doesn't have a load permutation.

gcc/testsuite/
	* gcc.dg/vect/pr106914.c: New test.
	* g++.dg/vect/pr106794.cc: Likewise.
2022-09-20 15:27:47 +01:00
Richard Sandiford
4a773bf2f0 vect: Fix missed gather load opportunity
While writing a testcase for PR106794, I noticed that we failed
to vectorise the testcase in the patch for SVE.  The code that
recognises gather loads tries to optimise the point at which
the offset is calculated, to avoid unnecessary extensions or
truncations:

	  /* Don't include the conversion if the target is happy with
	     the current offset type.  */

But breaking only makes sense if we're at an SSA_NAME (which could
then be vectorised).  We shouldn't break on a conversion embedded
in a generic expression.

gcc/
	* tree-vect-data-refs.cc (vect_check_gather_scatter): Restrict
	early-out optimisation to SSA_NAMEs.

gcc/testsuite/
	* gcc.dg/vect/vect-gather-5.c: New test.
2022-09-20 15:27:46 +01:00
Aldy Hernandez
3e41e69ab2 [PR106970] New test for PR that has already been fixed.
PR tree-optimization/106970

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/pr106970.c: New test.
2022-09-20 16:26:35 +02:00
Patrick Palka
84b2ab97e4 c++: stream PACK_EXPANSION_EXTRA_ARGS [PR106761]
It looks like after the libstdc++ commit r13-2158-g02f6b405f0e9dc
some xtreme-header-* tests are failing with "conflicting global module
declaration" errors ultimately because we're neglecting to stream
PACK_EXPANSION_EXTRA_ARGS, which leads to wrong equivalences of
different partial instantiations of _TupleConstraints::__constructible.

	PR c++/106761

gcc/cp/ChangeLog:

	* module.cc (trees_out::type_node) <case TYPE_PACK_EXPANSION>:
	Stream PACK_EXPANSION_EXTRA_ARGS.
	(trees_in::tree_node) <case TYPE_PACK_EXPANSION>: Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/pr106761.h: New test.
	* g++.dg/modules/pr106761_a.H: New test.
	* g++.dg/modules/pr106761_b.C: New test.
2022-09-20 10:19:30 -04:00
Martin Liska
a8bb495a56 replace "the the" typos
gcc/ada/ChangeLog:

	* exp_ch6.adb: Replace "the the" with "the".
	* sem_ch6.adb: Likewise.
	* sem_disp.ads: Likewise.

gcc/ChangeLog:

	* ctfc.cc (ctf_add_string): Replace "the the" with "the".
	* doc/md.texi: Likewise.
	* gimple-range-infer.cc (non_null_loadstore): Likewise.

gcc/fortran/ChangeLog:

	* gfortran.texi: Replace "the the" with "the".

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wclass-memaccess.C: Replace "the the" with "the".
	* g++.dg/warn/Wconversion-real-integer2.C: Likewise.
	* gcc.target/powerpc/p9-extract-1.c: Likewise.
	* gcc.target/s390/s390.exp: Likewise.
	* gcc.target/s390/zvector/vec-cmp-2.c: Likewise.
	* gdc.dg/torture/simd_store.d: Likewise.
	* gfortran.dg/actual_array_offset_1.f90: Likewise.
	* gfortran.dg/pdt_15.f03: Likewise.
	* gfortran.dg/pointer_array_8.f90: Likewise.
2022-09-20 15:05:33 +02:00
Jonathan Wakely
5ed0c11ec2 libstdc++: Fix typo in <cstdlib> for freestanding
libstdc++-v3/ChangeLog:

	* include/c_global/cstdlib [!_GLIBCXX_HOSTED] (quick_exit): Fix
	missing space.
2022-09-20 13:21:36 +01:00
Martin Liska
d99821624c fortran: remove 2 dead links [PR106636]
PR fortran/106636

gcc/fortran/ChangeLog:

	* gfortran.texi: Remove 2 dead links.
2022-09-20 14:02:34 +02:00
Martin Liska
63e3cc294d contrib: skip new egrep warning
contrib/ChangeLog:

	* filter-clang-warnings.py: Skip egrep: warning: egrep is
	  obsolescent; using grep -E.
2022-09-20 10:16:47 +02:00
liuhongt
d0c73b6c85 Support 64-bit vectorization for single-precision floating rounding operation.
Here's list the patch supported.
rint/nearbyint/ceil/floor/trunc/lrint/lceil/lfloor/round/lround.

gcc/ChangeLog:

	PR target/106910
	* config/i386/mmx.md (nearbyintv2sf2): New expander.
	(rintv2sf2): Ditto.
	(ceilv2sf2): Ditto.
	(lceilv2sfv2si2): Ditto.
	(floorv2sf2): Ditto.
	(lfloorv2sfv2si2): Ditto.
	(btruncv2sf2): Ditto.
	(lrintv2sfv2si2): Ditto.
	(roundv2sf2): Ditto.
	(lroundv2sfv2si2): Ditto.
	(*mmx_roundv2sf2): New define_insn.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr106910-1.c: New test.
2022-09-20 14:52:48 +08:00
konglin1
3a035f1932 middle-end: handle bitop with an invariant induction.[PR105735]
Enhance final_value_replacement_loop to handle bitop
with an invariant induction.

This patch will enable below optimization:

{
-  long unsigned int bit;
-
-  <bb 2> [local count: 32534376]:
-
-  <bb 3> [local count: 1041207449]:
-  # tmp_10 = PHI <tmp_7(5), tmp_4(D)(2)>
-  # bit_12 = PHI <bit_8(5), 0(2)>
-  tmp_7 = bit2_6(D) & tmp_10;
-  bit_8 = bit_12 + 1;
-  if (bit_8 != 32)
-    goto <bb 5>; [96.97%]
-  else
-    goto <bb 4>; [3.03%]
-
-  <bb 5> [local count: 1009658865]:
-  goto <bb 3>; [100.00%]
-
-  <bb 4> [local count: 32534376]:
-  # tmp_11 = PHI <tmp_7(3)>
-  return tmp_11;
+  tmp_11 = tmp_4 (D) & bit2_6 (D);
+  return tmp_11;

}

gcc/ChangeLog:

	PR middle-end/105735
	* tree-scalar-evolution.cc
	(analyze_and_compute_bitop_with_inv_effect): New function.
	(final_value_replacement_loop): Enhanced to handle bitop
	with inv induction.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr105735-1.c: New test.
	* gcc.target/i386/pr105735-2.c: New test.
2022-09-20 14:09:19 +08:00
Xi Ruoyao
90d3e27f3a
LoongArch: Prepare static PIE support
Static PIE allows us to extend the ASLR to cover static executables and
it's not too difficult to support it.  On GCC side, we just pass a group
of options to the linker, like other ports with static PIE support.

The real implementation of static PIE (rcrt1.o) will be added into Glibc
later.

gcc/ChangeLog:

	* config/loongarch/gnu-user.h (GNU_USER_TARGET_LINK_SPEC): For
	-static-pie, pass -static -pie --no-dynamic-linker -z text to
	the linker, and do not pass --dynamic-linker.
2022-09-20 13:59:30 +08:00