Commit Graph

189031 Commits

Author SHA1 Message Date
Jonathan Wakely
5a5d7c2c80 libstdc++: Add Doxygen comments to contents of <functional>
libstdc++-v3/ChangeLog:

	* include/bits/mofunc_impl.h: Add doxygen comments.
	* include/std/functional: Likewise.
2021-10-21 22:24:53 +01:00
Jonathan Wakely
6667d5feb9 libstdc++: Suppress Doxygen docs for more implementation details
libstdc++-v3/ChangeLog:

	* include/bits/alloc_traits.h: Suppress doxygen documentation.
	* include/bits/allocated_ptr.h: Likewise.
	* include/bits/enable_special_members.h: Likewise.
	* include/bits/hashtable.h: Likewise.
	* include/bits/hashtable_policy.h: Likewise.
	* include/bits/uses_allocator.h: Likewise.
	* include/bits/node_handle.h: Document node handles and suppress
	documentation for protected members.
	* include/std/any: Suppress documentation for implementation
	details.
2021-10-21 22:23:00 +01:00
Jonathan Wakely
e6d1003543 libcody: Avoid double-free
If the listen call fails then 'goto fail' will jump to that label and
use freeaddrinfo again. Set the pointer to null to prevent that.

libcody/ChangeLog:

	* netserver.cc (ListenInet6): Set pointer to null after
	deallocation.
2021-10-21 22:23:00 +01:00
H.J. Lu
1373066a46 x86: Document -fcf-protection requires i686 or newer
PR target/98667
	* doc/invoke.texi: Document -fcf-protection requires i686 or
	new.
2021-10-21 12:09:25 -07:00
Uros Bizjak
6aceeb3fb6 testsuite: Adjust pr22076.c to avoid compile-time optimization [PR102840]
2021-10-21  Uroš Bizjak  <ubizjak@gmail.com>

	PR testsuite/102840

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr22076.c: Adjust to avoid compile time optimization.
2021-10-21 20:57:38 +02:00
Patrick Palka
5f7976f65b libstdc++: missing constexpr for __[nm]iter_base [PR102358]
PR libstdc++/102358

libstdc++-v3/ChangeLog:

	* include/bits/stl_iterator.h (__niter_base): Make constexpr
	for C++20.
	(__miter_base): Likewise.
	* testsuite/25_algorithms/move/constexpr.cc: New test.
2021-10-21 12:13:35 -04:00
Eric Botcazou
9262ae450d Fix again PR middle-end/102764
gcc/
	PR middle-end/102764
	* cfgexpand.c (expand_gimple_basic_block): Robustify latest change.
2021-10-21 17:59:04 +02:00
Patrick Palka
48154969d4 libstdc++: Implement P2432R1 changes for views::istream
libstdc++-v3/ChangeLog:

	* include/std/ranges (istream_view): Replace this function
	template with an alias template as per P2432R1.
	(wistream_view): Define as per P2432R1.
	(views::_Istream, views::istream): Likewise.
	* testsuite/std/ranges/istream_view.cc (test07): New test.
2021-10-21 11:55:19 -04:00
Patrick Palka
9626e44713 libstdc++: Implement P1739R4 changes to views::take/drop/counted
This implements P1739R4 along with the resolution for LWG 3407 which
corrects the paper's wording.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_util.h (views::_Drop): Forward declare.
	(subrange): Befriend views::_Drop.
	(subrange::_S_store_size): Declare constexpr instead of just
	const, remove obsolete comment.
	* include/std/ranges (views::__detail::__is_empty_view): Define.
	(views::__detail::__is_basic_string_view): Likewise.
	(views::__detail::__is_subrange): Likewise.
	(views::__detail::__is_iota_view): Likewise.
	(views::__detail::__can_take_view): Rename template parm _Tp to _Dp.
	(views::_Take): Rename template parm _Tp to _Dp, make it non-deducible
	and fix it to range_difference_t<_Range>.  Implement P1739R4 and
	LWG 3407 changes.
	(views::__detail::__can_drop_view): Rename template parm _Tp to _Dp.
	(views::_Drop): As with views::_Take.
	(views::_Counted): Implement P1739R4 changes.
	* include/std/span (__detail::__is_std_span): Rename to ...
	(__detail::__is_span): ... this and turn it into a variable
	template.
	(__detail::__is_std_array): Turn it into a variable template.
	(span::span): Adjust uses of __is_std_span and __is_std_array
	accordingly.
	* testsuite/std/ranges/adaptors/p1739.cc: New test.
2021-10-21 11:55:16 -04:00
Jonathan Wright
bdc42283bc aarch64: Remove redundant struct type definitions in arm_neon.h
These vector type definitions are an artifact from the initial commit
that added the AArch64 port.

gcc/ChangeLog:

2021-10-15  Jonathan Wright  <jonathan.wright@arm.com>

	* config/aarch64/arm_neon.h (__STRUCTN): Delete function
	macro and all invocations.
2021-10-21 16:53:50 +01:00
Hongyu Wang
2606dfea12 Adjust testcase for 128/256 bit HF vector load/store
The HF vector move have been updated to align with HI vector,
adjust according testcase for _Float16 vector load and store.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-13.c: Adjust scan-assembler for
	xmm/ymm load/store.
2021-10-21 21:45:43 +08:00
Andrew MacLeod
9cb114fd55 Split --param=evrp-mode into evrp-mode and ranger-debug.
With Ranger being used in more than EVRP, the debug output should no longer
be tied up with the EVRP mode flag.

	* doc/invoke.texi (ranger-debug): Document.
	* flag-types.h (enum ranger_debug): New.
	(enum evrp_mode): Remove debug values.
	* gimple-range-cache.cc (DEBUG_RANGE_CACHE): Use new debug flag.
	* gimple-range-gori.cc (gori_compute::gori_compute): Ditto.
	* gimple-range.cc (gimple_ranger::gimple_ranger): Ditto.
	* gimple-ssa-evrp.c (hybrid_folder::choose_value): Ditto.
	(execute_early_vrp): Use evrp-mode directly.
	* params.opt (enum evrp_mode): Remove debug values.
	(ranger-debug): New.
	(ranger-logical-depth): Relocate to be in alphabetical order.
2021-10-21 09:28:23 -04:00
Andrew MacLeod
bd400db6d3 Add --param=vrp1-mode and --param=vrp2-mode.
Add 2 new params to select between VRP and RANGER to be used for each pass.

	* doc/invoke.texi: (vrp1-mode, vrp2-mode): Document.
	* flag-types.h: (enum vrp_mode): New.
	* params.opt: (vrp1-mode, vrp2-mode): New.
	* tree-vrp.c (vrp_pass_num): New.
	(pass_vrp::pass_vrp): Set pass number.
	(pass_vrp::execute): Choose which VRP mode to execute.
2021-10-21 09:28:23 -04:00
Andrew MacLeod
434ebc1e08 Move ranger only VRP folder to tree-vrp.
Consolidate the RVRP folder into a single "execute_vrp" routine that mimics
the format used by the vrp1 and vrp2 passes.  Relocate into the tree-vrp file.

	* gimple-ssa-evrp.c (class rvrp_folder): Move to tree-vrp.c.
	(execute_early_vrp): For ranger only mode, invoke ranger_vrp.
	* tree-vrp.c (class rvrp_folder): Relocate here.
	(execute_ranger_vrp): New.
	* tree-vrp.h (execute_ranger_vrp): Export.
2021-10-21 09:28:22 -04:00
Martin Liska
b470227661 options: Fix variable tracking option processing.
PR debug/102585
	PR bootstrap/102766

gcc/ChangeLog:

	* opts.c (finish_options): Process flag_var_tracking* options
	here as they can be adjusted by optimize attribute.
	Process also flag_syntax_only and flag_gtoggle.
	* toplev.c (process_options): Remove it here.
	* common.opt: Make debug_nonbind_markers_p as PerFunction
	attribute as it depends on optimization level.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr102585.c: New test.
2021-10-21 15:20:09 +02:00
Martin Jambor
701ee06780
sra: Fix corner case of total scalarization with virtual inheritance (PR 102505)
PR 102505 is a situation where of SRA takes its initial top-level
access size from a get_ref_base_and_extent called on a COMPONENT_REF,
and thus derived frm the FIELD_DECL, which however does not include a
virtual base.  Total scalarization then goes on traversing the type,
which however has virtual base past the non-virtual bits, tricking SRA
to create sub-accesses outside of the supposedly encompassing
accesses, which in turn triggers the verifier within the pass.

The patch below fixes that by failing total scalarization when this
situation is detected.

gcc/ChangeLog:

2021-10-20  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/102505
	* tree-sra.c (totally_scalarize_subtree): Check that the
	encountered field fits within the acces we would like to put it
	in.

gcc/testsuite/ChangeLog:

2021-10-20  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/102505
	* g++.dg/torture/pr102505.C: New test.
2021-10-21 14:55:14 +02:00
Aldy Hernandez
d6a3c0cfb8 Revert the avoid threading circular paths commit.
I've tested this patch on the wrong tree, and picked up the test changes
in a pending patch, without which this patch is no longer obvious.
Plus, it causes a regression in an invalid test I've recommended we remove.

I'm reverting this patch until the dependencies are reviewed.

Sorry for the noise.

gcc/ChangeLog:

	* tree-ssa-threadbackward.c
	(back_threader::maybe_register_path): Remove circular paths check.
2021-10-21 13:18:49 +02:00
Richard Biener
d97fa0d44c Move the initial debug_hooks setting
I just realized that when I moved the langhook call I failed to
move the initial debug_hooks setting whose comment mentions the
langhook as reason.

2021-10-21  Richard Biener  <rguenther@suse.de>

	* toplev.c (process_options): Move the initial debug_hooks
	setting ...
	(toplev::main): ... before the call of the post_options
	langhook.
2021-10-21 12:12:49 +02:00
Richard Biener
8516963942 tree-optimization/102847 - adjust VMAT_INVARIANT load costing
This adds the missing scalar load cost in the prologue.

2021-10-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/102847
	* tree-vect-stmts.c (vect_model_load_cost): Add the scalar
	load cost in the prologue for VMAT_INVARIANT.
2021-10-21 12:10:20 +02:00
Richard Biener
7878981f1d tree-optimization/102847 - properly cost VMAT_INVARIANT loads
The following adds proper costing of VMAT_INVARIANT loads, avoiding
to ask the target about the cost of an unsupported vector load cost
which we won't emit anyway.

2021-10-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/102847
	* tree-vect-stmts.c (vect_model_load_cost): Explicitely
	handle VMAT_INVARIANT as a splat in the prologue.
2021-10-21 11:21:18 +02:00
Jakub Jelinek
e633f82fb7 testsuite: Fix up gfortran.dg/gomp/strictly*.f90 testcases
While these testcases are dg-do compile only, I think it is better not to
give users bad examples and avoid unnecessary data races in testcases (unless
it is exactly what we want to test).  Perhaps one day we'll do some analysis
and warn about data races...

2021-10-21  Jakub Jelinek  <jakub@redhat.com>

	* gfortran.dg/gomp/strictly-structured-block-1.f90: Use call do_work
	instead of x = x + 1 in places where the latter could be a data race.
	* gfortran.dg/gomp/strictly-structured-block-2.f90: Likewise.
	* gfortran.dg/gomp/strictly-structured-block-3.f90: Likewise.
2021-10-21 11:17:57 +02:00
Hongyu Wang
c8a889fc0e i386: Fix wrong codegen for V8HF move without TARGET_AVX512F
Since _Float16 type is enabled under sse2 target, returning
V8HFmode vector without AVX512F target would generate wrong
vmovdqa64 instruction. Adjust ix86_get_ssemov to avoid this.

gcc/ChangeLog:
	PR target/102812
	* config/i386/i386.c (ix86_get_ssemov): Adjust HFmode vector
	move to use the same logic as HImode.

gcc/testsuite/ChangeLog:
	PR target/102812
	* gcc.target/i386/pr102812.c: New test.
2021-10-21 16:58:28 +08:00
Richard Biener
f5ef4da3cc Remove restriction of SLP vectorizing internal function calls
We already checked for unsupported internal throwing calls,
general nothrow is not required.

2021-10-21  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_build_slp_tree_1): Remove
	superfluous gimple_call_nothrow_p check.
2021-10-21 10:31:19 +02:00
Jakub Jelinek
40dd9d839e openmp: For default(none) ignore variables created by ubsan_create_data [PR64888]
We weren't ignoring the ubsan variables created by c-ubsan.c before gimplification
(others are added later).  One way to fix this would be to introduce further
UBSAN_ internal functions and lower it later (sanopt pass) like other ifns,
this patch instead recognizes those magic vars by name/name of type and DECL_ARTIFICIAL
and TYPE_ARTIFICIAL.

2021-10-21  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/64888
gcc/c-family/
	* c-omp.c (c_omp_predefined_variable): Return true also for
	ubsan_create_data created artificial variables.
gcc/testsuite/
	* c-c++-common/ubsan/pr64888.c: New test.
2021-10-21 10:27:44 +02:00
Andrew Pinski
113860301f Improve maybe_remove_writeonly_store to do a simple DCE for defining statement
Instead of putting a full blow DCE after execute_fixup_cfg, it makes sense
to try to remove the defining statement for the store that is being removed.
Using simple_dce_from_worklist makes this easier, just mark the ssa_name on
the rhs side of the store (if it was one) in a bitmap and then call
simple_dce_from_worklist at the end.

gcc.dg/pr36902.c needed to be changed such that the static array was no
longer a static array but a global array.  This is because this new dce
will remove the load as it is dead. I also filed PR 102864 for the warning
on dead loads.

gcc/ChangeLog:

	* tree-cfg.c (maybe_remove_writeonly_store): Add dce_ssa_names argument.
	Mark the ssa-name of the rhs as one to be removed.
	(execute_fixup_cfg): Update call to maybe_remove_writeonly_store.
	Call simple_dce_from_worklist at the end to a simple dce.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr36902.c: Move buf to be a non-static variable.
2021-10-21 08:18:58 +00:00
Andrew Pinski
36ec4a3c92 Factor out removal of write only stores from execute_fixup_cfg
To make it easier to fix PR 102703, factoring this code out
to its own function makes it easier to read and less indentions
too.

gcc/ChangeLog:

	* tree-cfg.c (maybe_remove_writeonly_store): New function
	factored out from ...
	(execute_fixup_cfg): Here. Call maybe_remove_writeonly_store.
2021-10-21 08:18:58 +00:00
Andrew Pinski
0a717f1335 Remove outdated comment about execute_fixup_cfg
The comment about execute_fixup_cfg not being able to
run as a standalone pass is not true for a long time
now.  It has been a standalone pass for a while now.

gcc/ChangeLog:

	* tree-cfg.c (execute_fixup_cfg): Remove comment
	about standalone pass.
2021-10-21 08:18:58 +00:00
Andrew Pinski
005ebe1c07 Add dump prints when execute_fixup_cfg removes a write only var store.
While debugging PR 102703, I found it was hard to figure out where
the store was being removed as there was no pass which was outputting
why the store was removed.
This adds to execute_fixup_cfg the output.
Also note most of removals happen when execute_fixup_cfg is called
from the inliner.

gcc/ChangeLog:

	* tree-cfg.c (execute_fixup_cfg): Output when the statement
	is removed when it is a write only var.
2021-10-21 08:18:58 +00:00
Aldy Hernandez
70e72c3a11 Avoid threading circular paths.
The backward threader keeps a hash of visited blocks to avoid crossing
the same block twice.  Interestingly, we haven't been checking it for
the final block out of the path.  This may be inherited from the old
code, as it was simple enough that it didn't matter.  With the
upcoming changes enabling the fully resolving threader, it gets
tripped often enough to cause wrong code to be generated.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* tree-ssa-threadbackward.c (back_threader::maybe_register_path):
	Avoid threading circular paths.
2021-10-21 10:10:45 +02:00
Richard Biener
d438dd2523 testsuite/102861 - adjust gcc.dg/vect/bb-slp-16.c change
This reverts the bogus previous change causing runtime failures
and instead realizes that we now have the loop condition
if-converted and the BB vectorization opportunity realized during
the loop vectorization pass.

2021-10-21  Richard Biener  <rguenther@suse.de>

	PR testsuite/102861
	* gcc.dg/vect/bb-slp-16.c: Revert previous change, scan
	the vect dump instead.
2021-10-21 10:02:31 +02:00
Chung-Lin Tang
2e4659199e openmp: Fortran strictly-structured blocks support
This implements strictly-structured blocks support for Fortran, as specified in
OpenMP 5.2. This now allows using a Fortran BLOCK construct as the body of most
OpenMP constructs, with a "!$omp end ..." ending directive optional for that
form.

gcc/fortran/ChangeLog:

	* decl.c (gfc_match_end): Add COMP_OMP_STRICTLY_STRUCTURED_BLOCK case
	together with COMP_BLOCK.
	* parse.c (parse_omp_structured_block): Change return type to
	'gfc_statement', add handling for strictly-structured block case, adjust
	recursive calls to parse_omp_structured_block.
	(parse_executable): Adjust calls to parse_omp_structured_block.
	* parse.h (enum gfc_compile_state): Add
	COMP_OMP_STRICTLY_STRUCTURED_BLOCK.
	* trans-openmp.c (gfc_trans_omp_workshare): Add EXEC_BLOCK case
	handling.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/cancel-1.f90: Adjust testcase.
	* gfortran.dg/gomp/nesting-3.f90: Adjust testcase.
	* gfortran.dg/gomp/strictly-structured-block-1.f90: New test.
	* gfortran.dg/gomp/strictly-structured-block-2.f90: New test.
	* gfortran.dg/gomp/strictly-structured-block-3.f90: New test.

libgomp/ChangeLog:

	* libgomp.texi (Support of strictly structured blocks in Fortran):
	Adjust to 'Y'.
	* testsuite/libgomp.fortran/task-reduction-16.f90: Adjust testcase.
2021-10-21 14:57:25 +08:00
Sandra Loosemore
1af78e731f Fortran: Fixes and additional tests for shape/ubound/size [PR94070]
This patch reimplements the SHAPE intrinsic to be inlined similarly to
LBOUND and UBOUND, instead of as a library call, to avoid an
unnecessary array copy.  Various bugs are also fixed.

gcc/fortran/
	PR fortran/94070

	* expr.c (gfc_simplify_expr): Handle GFC_ISYM_SHAPE along with
	GFC_ISYM_LBOUND and GFC_ISYM_UBOUND.
	* trans-array.c (gfc_conv_ss_startstride): Likewise.
	(set_loop_bounds): Likewise.
	* trans-intrinsic.c (gfc_trans_intrinsic_bound): Extend to
	handle SHAPE.  Correct logic for zero-size special cases and
	detecting assumed-rank arrays associated with an assumed-size
	argument.
	(gfc_conv_intrinsic_shape): Deleted.
	(gfc_conv_intrinsic_function): Handle GFC_ISYM_SHAPE like
	GFC_ISYM_LBOUND and GFC_ISYM_UBOUND.
	(gfc_add_intrinsic_ss_code): Likewise.
	(gfc_walk_intrinsic_bound): Likewise.

gcc/testsuite/
	PR fortran/94070

	* gfortran.dg/c-interop/shape-bindc.f90: New test.
	* gfortran.dg/c-interop/shape-poly.f90: New test.
	* gfortran.dg/c-interop/size-bindc.f90: New test.
	* gfortran.dg/c-interop/size-poly.f90: New test.
	* gfortran.dg/c-interop/ubound-bindc.f90: New test.
	* gfortran.dg/c-interop/ubound-poly.f90: New test.
2021-10-20 19:23:01 -07:00
Patrick Palka
1556e447c0 libstdc++: Implement LWG 3595 changes to common_iterator
libstdc++-v3/ChangeLog:

	* include/bits/stl_iterator.h (common_iterator::__arrow_proxy):
	Make fully constexpr as per LWG 3595.
	(common_iterator::__postfix_proxy): Likewise.
2021-10-20 21:43:42 -04:00
Patrick Palka
2d3ac60390 libstdc++: Implement LWG 3590-3592 changes to split_view/lazy_split_view
libstdc++-v3/ChangeLog:

	* include/std/ranges (lazy_split_view::base): Add forward_range
	constraint as per LWG 3591.
	(lazy_split_view::begin, lazy_split_view::end): Also check
	simpleness of _Pattern as per LWG 3592.
	(split_view::base): Relax copyable constraint as per LWG 3590.
2021-10-20 21:34:23 -04:00
Patrick Palka
6667274b05 libstdc++: Implement LWG 3535 changes to ranges::join_view
libstdc++-v3/ChangeLog:

	* include/std/ranges (join_view::__iter_cat::_S_iter_cat): Adjust
	criteria for returning bidirectional_iterator_tag as per LWG 3535.
	(join_view::_Iterator::_S_iter_concept): Likewise.
2021-10-20 21:34:21 -04:00
Patrick Palka
a2c2dcc6ca libstdc++: Implement LWG 3481 change to ranges::viewable_range
libstdc++-v3/ChangeLog:

	* include/bits/ranges_base.h (viewable_range): Adjust as per
	LWG 3481.
	* testsuite/std/ranges/adaptors/all.cc (test07): New test.
2021-10-20 21:34:18 -04:00
Jonathan Wakely
0fac85a24f libstdc++: Remove constraints from std::optional monadic ops [PR102863]
The constraints on transform and and_then can cause errors when checking
satisfaction. The constraints that were present in R6 of the paper were
moved for he final F8 revision, and so should have been included in the
implementation.

libstdc++-v3/ChangeLog:

	PR libstdc++/102863
	* include/std/optional (optional::and_then, optional::transform):
	Remove requires-clause.
	* testsuite/20_util/optional/monadic/and_then.cc: Check
	overload resolution doesn't cause errors.
	* testsuite/20_util/optional/monadic/transform.cc: Likewise.
2021-10-21 01:23:22 +01:00
GCC Administrator
674dda6be0 Daily bump. 2021-10-21 00:16:29 +00:00
Jason Merrill
1c69016466 c++: tweak parsing of invalid types
cp_parser_parse_and_diagnose_invalid_type_name is called during declaration
parsing, so it should pass 'true' for the declarator_p argument.  But that
caused a diagnostic regression on template/pr84789.C due to undesired lookup
in dependent scopes.  To fix that, cp_parser_nested_name_specifier_opt needs
to respect the value of check_dependency_p.

This patch avoids a regression from Andrew Sharp's WIP patch for PR70417.

It would make more sense to test only check_dependency_p, not declarator_p,
but removing the declarator_p condition turns out to reveal complicated
interactions of cp_parser_constructor_declarator_p and caching of
nested-name-specifiers and template-ids that I've already spent too much
time trying to sort out.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_parse_and_diagnose_invalid_type_name):
	Pass true for declarator_p.
	(cp_parser_nested_name_specifier_opt): Only look through
	TYPENAME_TYPE if check_dependency_p is false.
2021-10-20 17:40:13 -04:00
Alex Coplan
788483f77d calls.c: Remove some dead code and target hooks
Looking at calls.c:initialize_argument_information, I spotted some dead
code that seems to have been left behind from when MPX support was
removed.

This change removes that code as well as the associated target hooks
(which appear to be unused).

gcc/ChangeLog:

	* calls.c (initialize_argument_information): Remove some dead
	code, remove handling for function_arg returning const_int.
	* doc/tm.texi: Delete documentation for unused target hooks.
	* doc/tm.texi.in: Likewise.
	* target.def (load_bounds_for_arg): Delete.
	(store_bounds_for_arg): Delete.
	(load_returned_bounds): Delete.
	(store_returned_bounds): Delete.
	* targhooks.c (default_load_bounds_for_arg): Delete.
	(default_store_bounds_for_arg): Delete.
	(default_load_returned_bounds): Delete.
	(default_store_returned_bounds): Delete.
	* targhooks.h (default_load_bounds_for_arg): Delete.
	(default_store_bounds_for_arg): Delete.
	(default_load_returned_bounds): Delete.
	(default_store_returned_bounds): Delete.
2021-10-20 21:02:52 +01:00
Jonathan Wakely
4ba4b05315 libstdc++: Add missing test for std::optional::transform(F&&)
The test_copy_elision() function was supposed to ensure that the result
is constructed directly in the std::optional, without early temporary
materialization. But I forgot to write the test.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/optional/monadic/transform.cc: Check that
	an rvalue result is not materialized too soon.
2021-10-20 20:20:18 +01:00
Jonathan Wakely
154c6d430e doc: Fix documentation around 'asm' keyword in C++
The documentation on asm statements suggests asm is always a GNU
extension, but it's been part of ISO C++ since the first standard.

The documentation of -fno-asm is wrong for C++ as it states that it only
affects typeof, but actually it affects typeof and asm (despite asm
being part of ISO C++).

gcc/ChangeLog:

	* doc/extend.texi (Basic Asm): Clarify that asm is not an
	extension in C++.
	* doc/invoke.texi (-fno-asm): Fix description for C++.
2021-10-20 19:42:28 +01:00
Jonathan Wakely
885f9b4ad5 doc: Remove broken link to old.html docs
The target of this link was removed in r12-1061.

gcc/ChangeLog:

	* doc/install.texi: Remove link to old.html
2021-10-20 19:42:22 +01:00
Tamar Christina
3db4440d4c AArch64: Combine cmeq 0 + not into cmtst
This turns a bitwise inverse of an equality comparison with 0 into a compare of
bitwise nonzero (cmtst).

We already have one pattern for cmsts, this adds an additional one which does
not require an additional bitwise and.

i.e.

#include <arm_neon.h>

uint8x8_t bar(int16x8_t abs_row0, int16x8_t row0) {
  uint16x8_t row0_diff =
    vreinterpretq_u16_s16(veorq_s16(abs_row0, vshrq_n_s16(row0, 15)));
  uint8x8_t abs_row0_gt0 =
    vmovn_u16(vcgtq_u16(vreinterpretq_u16_s16(abs_row0), vdupq_n_u16(0)));
  return abs_row0_gt0;
}

now generates:

bar:
        cmtst   v0.8h, v0.8h, v0.8h
        xtn     v0.8b, v0.8h
        ret

instead of:

bar:
        cmeq    v0.8h, v0.8h, #0
        not     v0.16b, v0.16b
        xtn     v0.8b, v0.8h
        ret

gcc/ChangeLog:

	* config/aarch64/aarch64-simd.md (*aarch64_cmtst_same_<mode>): New.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/mvn-cmeq0-1.c: New test.
2021-10-20 17:11:52 +01:00
Tamar Christina
52da40ffe2 AArch64: Add pattern xtn+xtn2 to uzp1
This turns truncate operations with a hi/lo pair into a single permute of half
the bit size of the input and just ignoring the top bits (which are truncated
out).

i.e.

void d2 (short * restrict a, int *b, int n)
{
    for (int i = 0; i < n; i++)
      a[i] = b[i];
}

now generates:

.L4:
        ldp     q0, q1, [x3]
        add     x3, x3, 32
        uzp1    v0.8h, v0.8h, v1.8h
        str     q0, [x5], 16
        cmp     x4, x3
        bne     .L4

instead of

.L4:
        ldp     q0, q1, [x3]
        add     x3, x3, 32
        xtn     v0.4h, v0.4s
        xtn2    v0.8h, v1.4s
        str     q0, [x5], 16
        cmp     x4, x3
        bne     .L4

gcc/ChangeLog:

	* config/aarch64/aarch64-simd.md (*aarch64_narrow_trunc<mode>): New.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/narrow_high_combine.c: Update case.
	* gcc.target/aarch64/xtn-combine-1.c: New test.
	* gcc.target/aarch64/xtn-combine-2.c: New test.
	* gcc.target/aarch64/xtn-combine-3.c: New test.
	* gcc.target/aarch64/xtn-combine-4.c: New test.
	* gcc.target/aarch64/xtn-combine-5.c: New test.
	* gcc.target/aarch64/xtn-combine-6.c: New test.
2021-10-20 17:10:25 +01:00
Tamar Christina
ea464fd2d4 AArch64: Add pattern for sshr to cmlt
This optimizes signed right shift by BITSIZE-1 into a cmlt operation which is
more optimal because generally compares have a higher throughput than shifts.

On AArch64 the result of the shift would have been either -1 or 0 which is the
results of the compare.

i.e.

void e (int * restrict a, int *b, int n)
{
    for (int i = 0; i < n; i++)
      b[i] = a[i] >> 31;
}

now generates:

.L4:
        ldr     q0, [x0, x3]
        cmlt    v0.4s, v0.4s, #0
        str     q0, [x1, x3]
        add     x3, x3, 16
        cmp     x4, x3
        bne     .L4

instead of:

.L4:
        ldr     q0, [x0, x3]
        sshr    v0.4s, v0.4s, 31
        str     q0, [x1, x3]
        add     x3, x3, 16
        cmp     x4, x3
        bne     .L4

Thanks,
Tamar

gcc/ChangeLog:

	* config/aarch64/aarch64-simd.md (aarch64_simd_ashr<mode>): Add case cmp
	case.
	* config/aarch64/constraints.md (D1): New.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/shl-combine-2.c: New test.
	* gcc.target/aarch64/shl-combine-3.c: New test.
	* gcc.target/aarch64/shl-combine-4.c: New test.
	* gcc.target/aarch64/shl-combine-5.c: New test.
2021-10-20 17:09:00 +01:00
Tamar Christina
41812e5e35 AArch64: Add combine patterns for narrowing shift of half top bits (shuffle)
When doing a (narrowing) right shift by half the width of the original type then
we are essentially shuffling the top bits from the first number down.

If we have a hi/lo pair we can just use a single shuffle instead of needing two
shifts.

i.e.

typedef short int16_t;
typedef unsigned short uint16_t;

void foo (uint16_t * restrict a, int16_t * restrict d, int n)
{
    for( int i = 0; i < n; i++ )
      d[i] = (a[i] * a[i]) >> 16;
}

now generates:

.L4:
        ldr     q0, [x0, x3]
        umull   v1.4s, v0.4h, v0.4h
        umull2  v0.4s, v0.8h, v0.8h
        uzp2    v0.8h, v1.8h, v0.8h
        str     q0, [x1, x3]
        add     x3, x3, 16
        cmp     x4, x3
        bne     .L4

instead of

.L4:
        ldr     q0, [x0, x3]
        umull   v1.4s, v0.4h, v0.4h
        umull2  v0.4s, v0.8h, v0.8h
        sshr    v1.4s, v1.4s, 16
        sshr    v0.4s, v0.4s, 16
        xtn     v1.4h, v1.4s
        xtn2    v1.8h, v0.4s
        str     q1, [x1, x3]
        add     x3, x3, 16
        cmp     x4, x3
        bne     .L4

Thanks,
Tamar

gcc/ChangeLog:

	* config/aarch64/aarch64-simd.md
	(*aarch64_<srn_op>topbits_shuffle<mode>_le): New.
	(*aarch64_topbits_shuffle<mode>_le): New.
	(*aarch64_<srn_op>topbits_shuffle<mode>_be): New.
	(*aarch64_topbits_shuffle<mode>_be): New.
	* config/aarch64/predicates.md
	(aarch64_simd_shift_imm_vec_exact_top): New.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/shrn-combine-10.c: New test.
	* gcc.target/aarch64/shrn-combine-5.c: New test.
	* gcc.target/aarch64/shrn-combine-6.c: New test.
	* gcc.target/aarch64/shrn-combine-7.c: New test.
	* gcc.target/aarch64/shrn-combine-8.c: New test.
	* gcc.target/aarch64/shrn-combine-9.c: New test.
2021-10-20 17:07:54 +01:00
Tamar Christina
e33aef11e1 aarch64: Add combine patterns for right shift and narrow
This adds a simple pattern for combining right shifts and narrows into
shifted narrows.

i.e.

typedef short int16_t;
typedef unsigned short uint16_t;

void foo (uint16_t * restrict a, int16_t * restrict d, int n)
{
    for( int i = 0; i < n; i++ )
      d[i] = (a[i] * a[i]) >> 10;
}

now generates:

.L4:
        ldr     q0, [x0, x3]
        umull   v1.4s, v0.4h, v0.4h
        umull2  v0.4s, v0.8h, v0.8h
        shrn    v1.4h, v1.4s, 10
        shrn2   v1.8h, v0.4s, 10
        str     q1, [x1, x3]
        add     x3, x3, 16
        cmp     x4, x3
        bne     .L4

instead of:

.L4:
        ldr     q0, [x0, x3]
        umull   v1.4s, v0.4h, v0.4h
        umull2  v0.4s, v0.8h, v0.8h
        sshr    v1.4s, v1.4s, 10
        sshr    v0.4s, v0.4s, 10
        xtn     v1.4h, v1.4s
        xtn2    v1.8h, v0.4s
        str     q1, [x1, x3]
        add     x3, x3, 16
        cmp     x4, x3
        bne     .L4

Thanks,
Tamar

gcc/ChangeLog:

	* config/aarch64/aarch64-simd.md (*aarch64_<srn_op>shrn<mode>_vect,
	*aarch64_<srn_op>shrn<mode>2_vect_le,
	*aarch64_<srn_op>shrn<mode>2_vect_be): New.
	* config/aarch64/iterators.md (srn_op): New.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/shrn-combine-1.c: New test.
	* gcc.target/aarch64/shrn-combine-2.c: New test.
	* gcc.target/aarch64/shrn-combine-3.c: New test.
	* gcc.target/aarch64/shrn-combine-4.c: New test.
2021-10-20 17:06:31 +01:00
Chung-Lin Tang
d98626bf45 openmp: in_reduction support for Fortran
This patch implements support for the in_reduction clause for Fortran.
It also includes more completion of the taskgroup construct inside the
Fortran front-end, thus allowing task_reduction to work for task and
target constructs.

gcc/fortran/ChangeLog:

	* openmp.c (gfc_match_omp_clause_reduction): Add 'openmp_target' default
	false parameter. Add 'always,tofrom' map for OMP_LIST_IN_REDUCTION case.
	(gfc_match_omp_clauses): Add 'openmp_target' default false parameter,
	adjust call to gfc_match_omp_clause_reduction.
	(match_omp): Adjust call to gfc_match_omp_clauses
	* trans-openmp.c (gfc_trans_omp_taskgroup): Add call to
	gfc_match_omp_clause, create and return block.

gcc/ChangeLog:

	* omp-low.c (omp_copy_decl_2): For !ctx, use record_vars to add new copy
	as local variable.
	(scan_sharing_clauses): Place copy of OMP_CLAUSE_IN_REDUCTION decl in
	ctx->outer instead of ctx.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/reduction4.f90: Adjust omp target in_reduction' scan
	pattern.

libgomp/ChangeLog:

	* testsuite/libgomp.fortran/target-in-reduction-1.f90: New test.
	* testsuite/libgomp.fortran/target-in-reduction-2.f90: New test.
2021-10-20 23:25:02 +08:00
H.J. Lu
90454a9008 libffi: Update ChangeLog.libffi for libffi 3.4.2
* ChangeLog.libffi: Copied from ChangeLog.old in libffi 3.4.2.
2021-10-20 05:51:33 -07:00