1. 16 Nov, 2019 6 commits
    • Optionally pick the cheapest loop_vec_info · bcc7e346
      This patch adds a mode in which the vectoriser tries each available
      base vector mode and picks the one with the lowest cost.  The new
      behaviour is selected by autovectorize_vector_modes.
      
      The patch keeps the current behaviour of preferring a VF of
      loop->simdlen over any larger or smaller VF, regardless of costs
      or target preferences.
      
      2019-11-16  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.h (VECT_COMPARE_COSTS): New constant.
      	* target.def (autovectorize_vector_modes): Return a bitmask of flags.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_autovectorize_vector_modes): Update accordingly.
      	* targhooks.c (default_autovectorize_vector_modes): Likewise.
      	* config/aarch64/aarch64.c (aarch64_autovectorize_vector_modes):
      	Likewise.
      	* config/arc/arc.c (arc_autovectorize_vector_modes): Likewise.
      	* config/arm/arm.c (arm_autovectorize_vector_modes): Likewise.
      	* config/i386/i386.c (ix86_autovectorize_vector_modes): Likewise.
      	* config/mips/mips.c (mips_autovectorize_vector_modes): Likewise.
      	* tree-vectorizer.h (_loop_vec_info::vec_outside_cost)
      	(_loop_vec_info::vec_inside_cost): New member variables.
      	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize them.
      	(vect_better_loop_vinfo_p, vect_joust_loop_vinfos): New functions.
      	(vect_analyze_loop): When autovectorize_vector_modes returns
      	VECT_COMPARE_COSTS, try vectorizing the loop with each available
      	vector mode and picking the one with the lowest cost.
      	(vect_estimate_min_profitable_iters): Record the computed costs
      	in the loop_vec_info.
      
      From-SVN: r278336
      Richard Sandiford committed
    • Extend can_duplicate_and_interleave_p to mixed-size vectors · f884cd2f
      This patch makes can_duplicate_and_interleave_p cope with mixtures of
      vector sizes, by using queries based on get_vectype_for_scalar_type
      instead of directly querying GET_MODE_SIZE (vinfo->vector_mode).
      
      int_mode_for_size is now the first check we do for a candidate mode,
      so it seemed better to restrict it to MAX_FIXED_MODE_SIZE.  This avoids
      unnecessary work and avoids trying to create scalar types that the
      target might not support.
      
      2019-11-16  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vectorizer.h (can_duplicate_and_interleave_p): Take an
      	element type rather than an element mode.
      	* tree-vect-slp.c (can_duplicate_and_interleave_p): Likewise.
      	Use get_vectype_for_scalar_type to query the natural types
      	for a given element type rather than basing everything on
      	GET_MODE_SIZE (vinfo->vector_mode).  Limit int_mode_for_size
      	query to MAX_FIXED_MODE_SIZE.
      	(duplicate_and_interleave): Update call accordingly.
      	* tree-vect-loop.c (vectorizable_reduction): Likewise.
      
      From-SVN: r278335
      Richard Sandiford committed
    • Apply maximum nunits for BB SLP · 9b75f56d
      The BB vectoriser picked vector types in the same way as the loop
      vectoriser: it picked a vector mode/size for the region and then
      based all the vector types off that choice.  This meant we could
      end up trying to use vector types that had too many elements for
      the group size.
      
      The main part of this patch is therefore about passing the SLP
      group size down to routines like get_vectype_for_scalar_type and
      ensuring that each vector type in the SLP tree is chosen wrt the
      group size.  That part in itself is pretty easy and mechanical.
      
      The main warts are:
      
      (1) We normally pick a STMT_VINFO_VECTYPE for data references at an
          early stage (vect_analyze_data_refs).  However, nothing in the
          BB vectoriser relied on this, or on the min_vf calculated from it.
          I couldn't see anything other than vect_recog_bool_pattern that
          tried to access the vector type before the SLP tree is built.
      
      (2) It's possible for the same statement to be used in groups of
          different sizes.  Taking the group size into account meant that
          we could try to pick different vector types for the same statement.
      
          This problem should go away with the move to doing everything on
          SLP trees, where presumably we would attach the vector type to the
          SLP node rather than the stmt_vec_info.  Until then, the patch just
          uses a first-come, first-served approach.
      
      (3) A similar problem exists for grouped data references, where
          different statements in the same dataref group could be used
          in SLP nodes that have different group sizes.  The patch copes
          with that by making sure that all vector types in a dataref
          group remain consistent.
      
      The patch means that:
      
          void
          f (int *x, short *y)
          {
            x[0] += y[0];
            x[1] += y[1];
            x[2] += y[2];
            x[3] += y[3];
          }
      
      now produces:
      
              ldr     q0, [x0]
              ldr     d1, [x1]
              saddw   v0.4s, v0.4s, v1.4h
              str     q0, [x0]
              ret
      
      instead of:
      
              ldrsh   w2, [x1]
              ldrsh   w3, [x1, 2]
              fmov    s0, w2
              ldrsh   w2, [x1, 4]
              ldrsh   w1, [x1, 6]
              ins     v0.s[1], w3
              ldr     q1, [x0]
              ins     v0.s[2], w2
              ins     v0.s[3], w1
              add     v0.4s, v0.4s, v1.4s
              str     q0, [x0]
              ret
      
      Unfortunately it also means we start to vectorise
      gcc.target/i386/pr84101.c for -m32.  That seems like a target
      cost issue though; see PR92265 for details.
      
      2019-11-16  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vectorizer.h (vect_get_vector_types_for_stmt): Take an
      	optional maximum nunits.
      	(get_vectype_for_scalar_type): Likewise.  Also declare a form that
      	takes an slp_tree.
      	(get_mask_type_for_scalar_type): Take an optional slp_tree.
      	(vect_get_mask_type_for_stmt): Likewise.
      	* tree-vect-data-refs.c (vect_analyze_data_refs): Don't store
      	the vector type in STMT_VINFO_VECTYPE for BB vectorization.
      	* tree-vect-patterns.c (vect_recog_bool_pattern): Use
      	vect_get_vector_types_for_stmt instead of STMT_VINFO_VECTYPE
      	to get an assumed vector type for data references.
      	* tree-vect-slp.c (vect_update_shared_vectype): New function.
      	(vect_update_all_shared_vectypes): Likewise.
      	(vect_build_slp_tree_1): Pass the group size to
      	vect_get_vector_types_for_stmt.  Use vect_update_shared_vectype
      	for BB vectorization.
      	(vect_build_slp_tree_2): Call vect_update_all_shared_vectypes
      	before building the vectof from scalars.
      	(vect_analyze_slp_instance): Pass the group size to
      	get_vectype_for_scalar_type.
      	(vect_slp_analyze_node_operations_1): Don't recompute the vector
      	types for BB vectorization here; just handle the case in which
      	we deferred the choice for booleans.
      	(vect_get_constant_vectors): Pass the slp_tree to
      	get_vectype_for_scalar_type.
      	* tree-vect-stmts.c (vect_prologue_cost_for_slp_op): Likewise.
      	(vectorizable_call): Likewise.
      	(vectorizable_simd_clone_call): Likewise.
      	(vectorizable_conversion): Likewise.
      	(vectorizable_shift): Likewise.
      	(vectorizable_operation): Likewise.
      	(vectorizable_comparison): Likewise.
      	(vect_is_simple_cond): Take the slp_tree as argument and
      	pass it to get_vectype_for_scalar_type.
      	(vectorizable_condition): Update call accordingly.
      	(get_vectype_for_scalar_type): Take a group_size argument.
      	For BB vectorization, limit the the vector to that number
      	of elements.  Also define an overload that takes an slp_tree.
      	(get_mask_type_for_scalar_type): Add an slp_tree argument and
      	pass it to get_vectype_for_scalar_type.
      	(vect_get_vector_types_for_stmt): Add a group_size argument
      	and pass it to get_vectype_for_scalar_type.  Don't use the
      	cached vector type for BB vectorization if a group size is given.
      	Handle data references in that case.
      	(vect_get_mask_type_for_stmt): Take an slp_tree argument and
      	pass it to get_mask_type_for_scalar_type.
      
      gcc/testsuite/
      	* gcc.dg/vect/bb-slp-4.c: Expect the block to be vectorized
      	with -fno-vect-cost-model.
      	* gcc.dg/vect/bb-slp-bool-1.c: New test.
      	* gcc.target/aarch64/vect_mixed_sizes_14.c: Likewise.
      	* gcc.target/i386/pr84101.c: XFAIL for -m32.
      
      From-SVN: r278334
      Richard Sandiford committed
    • Fix nonspec_time when there is no cached value. · 23ff8c05
      	* ipa-inline.h (do_estimate_edge_time): Add nonspec_time
      	parameter.
      	(estimate_edge_time): Use it.
      	* ipa-inline-analysis.c (do_estimate_edge_time): Add
      	ret_nonspec_time parameter.
      
      From-SVN: r278333
      Jan Hubicka committed
    • Implement the <tuple> part of C++20 p1032 Misc constexpr bits. · 6d1402f0
      2019-11-15  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement the <tuple> part of C++20 p1032 Misc constexpr bits.
      	* include/std/tuple (_Head_base, _Tuple_impl(allocator_arg_t,...)
      	(_M_assign, tuple(allocator_arg_t,...), _Inherited, operator=, _M_swap)
      	(swap, pair(piecewise_construct_t,): Constexpr.
      	* (__uses_alloc0::_Sink::operator=, __uses_alloc_t): Constexpr.
      	* testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc: New test.
      	* testsuite/20_util/tuple/constexpr_swap.cc : New test.
      	* testsuite/20_util/uses_allocator/69293_neg.cc: Extra error for C++20.
      	* testsuite/20_util/uses_allocator/cons_neg.cc: : Extra error for C++20.
      
      From-SVN: r278331
      Edward Smith-Rowland committed
    • Daily bump. · 97e4a5ee
      From-SVN: r278328
      GCC Administrator committed
  2. 15 Nov, 2019 34 commits
    • libstdc++: Fix <stop_token> and improve tests · e73ca078
      	* include/std/stop_token: Reduce header dependencies by including
      	internal headers.
      	(stop_token::swap(stop_token&), swap(stop_token&, stop_token&)):
      	Define.
      	(operator!=(const stop_token&, const stop_token&)): Fix return value.
      	(stop_token::_Stop_cb::_Stop_cb(Cb&&)): Use std::forward instead of
      	(stop_token::_Stop_state_t) [_GLIBCXX_HAS_GTHREADS]: Use lock_guard
      	instead of unique_lock.
      	[!_GLIBCXX_HAS_GTHREADS]: Do not use mutex.
      	(stop_token::stop_token(_Stop_state)): Change parameter to lvalue
      	reference.
      	(stop_source): Remove unnecessary using-declarations for names only
      	used once.
      	(swap(stop_source&, stop_source&)): Define.
      	(stop_callback(const stop_token&, _Cb&&))
      	(stop_callback(stop_token&&, _Cb&&)): Replace lambdas with a named
      	function. Use std::forward instead of std::move. Run callbacks if a
      	stop request has already been made.
      	(stop_source::_M_execute()): Remove.
      	(stop_source::_S_execute(_Stop_cb*)): Define.
      	* include/std/version (__cpp_lib_jthread): Define conditionally.
      	* testsuite/30_threads/stop_token/stop_callback.cc: New test.
      	* testsuite/30_threads/stop_token/stop_source.cc: New test.
      	* testsuite/30_threads/stop_token/stop_token.cc: Enable test for
      	immediate execution of callback.
      
      From-SVN: r278325
      Jonathan Wakely committed
    • Diagnose duplicate C2x standard attributes. · d5fbe5e0
      For each of the attributes currently included in C2x, it has a
      constraint that the attribute shall appear at most once in each
      attribute list (attribute-list being what appear between a single [[
      and ]]).
      
      This patch implements that check.  As the corresponding check in the
      C++ front end (cp_parser_check_std_attribute) makes violations into
      errors, I made them into errors, with the same wording, for C as well.
      
      There is an existing check in the case of the fallthrough attribute,
      with a warning rather than an error, in attribute_fallthrough_p.  That
      is more general, as it also covers __attribute__ ((fallthrough)) and
      the case of [[fallthrough]] [[fallthrough]] (multiple attribute-lists
      in a single attribute-specifier-sequence), which is not a constraint
      violation.  To avoid some [[fallthrough, fallthrough]] being diagnosed
      twice, the check I added avoids adding duplicate attributes to the
      list.
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c:
      	* c-parser.c (c_parser_std_attribute_specifier): Diagnose
      	duplicate standard attributes.
      
      gcc/testsuite:
      	* gcc.dg/c2x-attr-deprecated-4.c, gcc.dg/c2x-attr-fallthrough-4.c,
      	gcc.dg/c2x-attr-maybe_unused-4.c: New tests.
      
      From-SVN: r278324
      Joseph Myers committed
    • typeck.c (cp_truthvalue_conversion): Add tsubst_flags_t parameter and use it in calls... · 2ab340fe
      /cp
      2019-11-15  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* typeck.c (cp_truthvalue_conversion): Add tsubst_flags_t parameter
      	and use it in calls; also pass the location_t of the expression to
      	cp_build_binary_op and c_common_truthvalue_conversion.
      	* rtti.c (build_dynamic_cast_1): Adjust call.
      	* cvt.c (ocp_convert): Likewise.
      	* cp-gimplify.c (cp_fold): Likewise.
      	* cp-tree.h (cp_truthvalue_conversion): Update declaration.
      
      /testsuite
      2019-11-15  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* g++.dg/warn/Walways-true-1.C: Check locations too.
      	* g++.dg/warn/Walways-true-2.C: Likewise.
      	* g++.dg/warn/Walways-true-3.C: Likewise.
      	* g++.dg/warn/Waddress-1.C: Check additional location.
      
      From-SVN: r278320
      Paolo Carlini committed
    • Forgot to change teh date range. · f982d12a
      From-SVN: r278318
      Edward Smith-Rowland committed
    • Implement the default_searcher part of C++20 p1032 Misc constexpr bits. · 12536431
      2019-11-15  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement the default_searcher part of C++20 p1032 Misc constexpr bits.
      	* include/std/functional
      	(default_searcher, default_searcher::operator()): Constexpr.
      	* testsuite/20_util/function_objects/constexpr_searcher.cc: New.
      
      From-SVN: r278317
      Edward Smith-Rowland committed
    • testmain.exp: link against GOLIBS · ae0b0fc6
          
          Patch by Maciej W. Rozycki.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/207458
      
      From-SVN: r278316
      Ian Lance Taylor committed
    • libstdc++: Implement LWG 3149 for std::default_constructible · a31517cb
      The change approved in Belfast did not actually rename the concept from
      std::default_constructible to std::default_initializable, even though
      that was intended. That is expected to be done soon as a separate issue,
      so I'm implementing that now too.
      
      	* include/bits/iterator_concepts.h (weakly_incrementable): Adjust.
      	* include/std/concepts (default_constructible): Rename to
      	default_initializable and require default-list-initialization and
      	default-initialization to be valid (LWG 3149).
      	(semiregular): Adjust to new name.
      	* testsuite/std/concepts/concepts.lang/concept.defaultconstructible/
      	1.cc: Rename directory to concept.defaultinitializable and adjust to
      	new name.
      	* testsuite/std/concepts/concepts.lang/concept.defaultinitializable/
      	lwg3149.cc: New test.
      	* testsuite/util/testsuite_iterators.h (test_range): Adjust.
      
      From-SVN: r278314
      Jonathan Wakely committed
    • libstdc++: Implement LWG 3070 in path::lexically_relative · 01eb211b
      	* src/c++17/fs_path.cc [_GLIBCXX_FILESYSTEM_IS_WINDOWS]
      	(is_disk_designator): New helper function.
      	(path::_Parser::root_path()): Use is_disk_designator.
      	(path::lexically_relative(const path&)): Implement resolution of
      	LWG 3070.
      	* testsuite/27_io/filesystem/path/generation/relative.cc: Check with
      	path components that look like a root-name.
      
      From-SVN: r278313
      Jonathan Wakely committed
    • m68k: add musl support · 838fd641
      Add the dynamic linker name and fix a type name to use the public name
      instead of the glibc internal name.
      
      gcc/ChangeLog:
      
      2019-11-15  Szabolcs Nagy  <szabolcs.nagy@arm.com>
      
      	* config/m68k/linux.h (MUSL_DYNAMIC_LINKER): Define.
      
      libgcc/ChangeLog:
      
      2019-11-15  Szabolcs Nagy  <szabolcs.nagy@arm.com>
      
      	* config/m68k/linux-unwind.h (struct uw_ucontext): Use sigset_t instead
      	of __sigset_t.
      
      From-SVN: r278312
      Szabolcs Nagy committed
    • Support C2x [[maybe_unused]] attribute. · 97cc1187
      This patch adds support for the C2x [[maybe_unused]] attribute, using
      the same handler as for GNU __attribute__ ((unused)).
      
      As with other such attribute support, I think turning certain warnings
      into pedwarns for usage in cases where that is a constraint violation
      can be addressed later as a bug fix, as can the C2x constraint for
      various standard attributes that they do not appear more than once
      inside a single [[]].
      
      However, the warnings that appear in c2x-attr-maybe_unused-1.c (that
      the attribute is ignored on member declarations) need to remain as
      warnings not pedwarns, since C2x does permit the attribute there.  (Or
      they could be silenced, on the basis that GCC doesn't have warnings
      for unused struct and union members so it's completely harmless that
      it's ignoring an attribute that might do something useful with another
      compiler that does have such warnings.)
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c:
      	* c-decl.c (std_attribute_table): Add maybe_unused.
      
      gcc/testsuite:
      	* gcc.dg/c2x-attr-maybe_unused-1.c,
      	gcc.dg/c2x-attr-maybe_unused-2.c,
      	gcc.dg/c2x-attr-maybe_unused-3.c: New tests.
      
      From-SVN: r278310
      Joseph Myers committed
    • MAINTAINERS: Change my email address as maintainer. · a91eb234
      ChangeLog:
      
      2019-11-15  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	* MAINTAINERS: Change my email address as maintainer.
      
      From-SVN: r278309
      Kelvin Nilsen committed
    • microblaze: fix PR65649 · 66f9ccd5
      microblaze-linux-musl build fails without this.
      
      (This is a rebase of an earlier patch posted on bugzilla.)
      
      gcc/ChangeLog:
      
      2019-11-15  Nick Clifton  <nickc@redhat.com>
      	    Szabolcs Nagy  <szabolcs.nagy@arm.com>
      
      	PR target/65649
      	* config/microblaze/microblaze.c (print_operand): Print value as long.
      
      Co-Authored-By: Szabolcs Nagy <szabolcs.nagy@arm.com>
      
      From-SVN: r278308
      Nick Clifton committed
    • ipa-inline.c (edge_badness, [...]): Revert accidental commit. · 03f00a6d
      
      	* ipa-inline.c (edge_badness, inline_small_functions): Revert
      	accidental commit.
      
      From-SVN: r278307
      Jan Hubicka committed
    • [amdgcn] Unfix registers for frame pointer · 969089ff
      Allow the registers used for the frame pointer to be used for other purposes
      if the frame pointer is not being used.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.h (FIXED_REGISTERS): Unfix frame pointer.
      	(CALL_USED_REGISTERS): Make frame pointer callee-saved.
      
      From-SVN: r278306
      Kwok Cheung Yeung committed
    • [amdgcn] Update lower bounds for the number of registers in non-leaf kernels · 87fdbe69
      Reduce the lower limits on the number of registers requested by non-leaf
      kernels to help improve CU occupancy.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (MAX_NORMAL_SGPR_COUNT, MAX_NORMAL_VGPR_COUNT): New.
      	(gcn_conditional_register_usage): Use constants in place of hard-coded
      	values.
      	(gcn_hsa_declare_function_name): Set lower bound for number of
      	SGPRs/VGPRs in non-leaf kernels to MAX_NORMAL_SGPR_COUNT and
      	MAX_NORMAL_VGPR_COUNT.
      
      From-SVN: r278305
      Kwok Cheung Yeung committed
    • ipa: Remove stray declaration · 1ca59cbe
      2019-11-15  Martin Jambor  <mjambor@suse.cz>
      
      	* ipa-utils.h (ipa_remove_useless_jump_functions): Remove stray
      	declaration.
      
      From-SVN: r278303
      Martin Jambor committed
    • [amdgcn] Restrict registers available to non-kernel functions · 342f9464
      Restrict the number of SGPRs and VGPRs available to non-kernel functions
      to improve compute-unit occupancy with multiple threads.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (default_requested_args): New.
      	(gcn_parse_amdgpu_hsa_kernel_attribute): Initialize requested args
      	set with default_requested_args.
      	(gcn_conditional_register_usage): Limit register usage of non-kernel
      	functions.  Reassign fixed registers if a non-standard set of args is
      	requested.
      	* config/gcn/gcn.h (FIXED_REGISTERS): Fix registers according to ABI.
      
      From-SVN: r278301
      Kwok Cheung Yeung committed
    • re PR ipa/92528 (ICE in ipa_get_parm_lattices since r278219) · 1c3c3f45
      2019-11-15  Feng Xue  <fxue@os.amperecomputing.com>
      
              PR ipa/92528
              * ipa-prop.c (update_jump_functions_after_inlining): Invalidate
              aggregate jump function when inlined-to caller has no edge summary.
      
      From-SVN: r278300
      Feng Xue committed
    • [amdgcn] Reinitialize registers for every function · 3ed8f692
      gcn_conditional_register_usage needs to be called for every function
      to set the fixed registers depending on the kernel args currently
      requested.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (gcn_init_cumulative_args): Call reinit_regs.
      
      From-SVN: r278299
      Kwok Cheung Yeung committed
    • Implement P1816R0, class template argument deduction for aggregates. · 9b41ebbc
      Rather than reimplement brace elision here, we call reshape_init and then
      discard the result.  We needed to set CLASSTYPE_NON_AGGREGATE a bit more in
      this patch, since outside a template it's set in check_bases_and_members.
      
      	* pt.c (maybe_aggr_guide, collect_ctor_idx_types): New.
      	(is_spec_or_derived): Split out from do_class_deduction.
      	(build_deduction_guide): Handle aggregate guide.
      	* class.c (finish_struct): Set CLASSTYPE_NON_AGGREGATE in a
      	template.
      	* cp-tree.h (CP_AGGREGATE_TYPE_P): An incomplete class is not an
      	aggregate.
      
      From-SVN: r278298
      Jason Merrill committed
    • [amdgcn] Use first lane of v1 for zero offset · f6e20012
      Use v1 instead of v0 when a zero-valued VGPR is needed.  This frees up
      v0 for other purposes.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (gcn_expand_prologue): Remove initialization and
      	prologue use of v0.
      	(print_operand_address): Use v1 for zero vector offset.
      
      From-SVN: r278297
      Kwok Cheung Yeung committed
    • libstdc++: Fix definition of std::nostopstate object · a0e1dcd4
      Also add <stop_token> header to PCH and Doxygen config.
      
      	* doc/doxygen/user.cfg.in: Add <stop_token>.
      	* include/precompiled/stdc++.h: Likewise.
      	* include/std/stop_token: Fix definition of std::nostopstate.
      	* testsuite/30_threads/headers/stop_token/synopsis.cc: New test.
      	* testsuite/30_threads/headers/thread/types_std_c++20.cc: New test.
      	* testsuite/30_threads/stop_token/stop_source.cc: New test.
      	* testsuite/30_threads/stop_token/stop_token.cc: Remove unnecessary
      	dg-require directives. Remove I/O and inclusion of <iostream>.
      
      From-SVN: r278296
      Jonathan Wakely committed
    • Fix vector/scalar to vector/vector conversion (PR92515) · f31e515f
      r278235 broke conversions of vector/scalar shifts into vector/vector
      shifts on targets that only provide the latter.  We need to record
      whether a conversion is required in that case too.
      
      Also, the old useless_type_conversion_p condition seemed unnecessarily
      strong, since the shift amount can have a different signedness from
      the shifted value and its vector type is never assumed to be identical
      to vectype.  The patch therefore uses tree_nop_conversion_p instead.
      
      2019-11-15  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/92515
      	* tree-vect-stmts.c (vectorizable_shift): Record incompatible op1
      	types when converting a vector/scalar shift into a vector/vector one,
      	using tree_nop_conversion_p instead of useless_type_conversion_p.
      	Move the conversion code to the transform block.
      
      From-SVN: r278295
      Richard Sandiford committed
    • [mid-end][__RTL] Account for column numbers in __RTL functions · 63841daf
      
      The documentation for __RTL tests (see "(gccint) RTL Tests" info node) has the
      following snippet.
      
      ```
       The parser expects the RTL body to be in the format emitted by this
      dumping function:
      
           DEBUG_FUNCTION void
           print_rtx_function (FILE *outfile, function *fn, bool compact);
      
       when "compact" is true.  So you can capture RTL in the correct format
      from the debugger using:
      
           (gdb) print_rtx_function (stderr, cfun, true);
      
       and copy and paste the output into the body of the C function.
      ```
      
      Since r264944 print_rtx_function prints column number information, which the
      __RTL function parsing does not handle.
      
      This patch handles column number information optionally, so pre-existing __RTL
      functions still work, and the above documentation quote still holds.
      
      Note: If people would prefer to require column information I could make a
      slightly neater code and update existing tests.
      I guess this would be OK since the intended use for __RTL functions is in these
      testcases so there is no worry about other existing code.
      
      bootstrapped and regtested on aarch64
      bootstrapped and regtested on x86_64
      
      Ok for trunk?
      
      Cheers,
      Matthew
      
      gcc/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* read-rtl-function.c
      	(function_reader::add_fixup_source_location): Take additional
      	parameter of a column.
      	(function_reader::maybe_read_location): Optionally parse column
      	information and pass to add_fixup_source_location.
      
      gcc/testsuite/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* gcc.dg/rtl/aarch64/rtl-handle-column-numbers.c: New test.
      
      From-SVN: r278294
      Matthew Malcomson committed
    • re PR tree-optimization/92512 (ICE in gimple_op, at gimple.h:2436) · b9f71c51
      2019-11-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/92512
      	* tree-vect-loop.c (check_reduction_path): Fix operand index
      	computability check.  Add check for second use in COND_EXPRs.
      
      	* gcc.dg/torture/pr92512.c: New testcase.
      
      From-SVN: r278293
      Richard Biener committed
    • [rs6000] Use VIEW_CONVERT_EXPR to reinterpret vectors (PR 92515) · b6d53324
      The new tree-cfg.c checking in r278245 tripped on folds of
      ALTIVEC_BUILTIN_VPERM_*, which were using gimple_convert
      rather than VIEW_CONVERT_EXPR to reinterpret the contents
      of a vector as a different type.
      
      2019-11-15  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR target/92515
      	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin): Use
      	VIEW_CONVERT_EXPR to reinterpret vectors as different types.
      
      From-SVN: r278292
      Richard Sandiford committed
    • [amdgcn] Fix handling of VCC_CONDITIONAL_REG · 9ecf84e6
      Classify vcc_lo and vcc_hi into the VCC_CONDITIONAL_REG class,
      and spill them into SGPRs if necessary.
      
      2019-11-15  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn.c (gcn_regno_reg_class): Return VCC_CONDITIONAL_REG
      	register class for VCC_LO and VCC_HI.
      	(gcn_spill_class): Use SGPR_REGS to spill registers in
      	VCC_CONDITIONAL_REG.
      
      From-SVN: r278290
      Kwok Cheung Yeung committed
    • re PR tree-optimization/92324 (ICE in expand_direct_optab_fn, at internal-fn.c:2890) · d03431d0
      2019-11-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/92324
      	* tree-vect-loop.c (vect_create_epilog_for_reduction): Fix
      	singedness of SLP reduction epilouge operations.  Also reduce
      	the vector width for SLP reductions before doing elementwise
      	operations if possible.
      
      	* gcc.dg/vect/pr92324-4.c: New testcase.
      
      From-SVN: r278289
      Richard Biener committed
    • re PR fortran/69654 (ICE in gfc_trans_structure_assign) · 8eea62d8
      2019-11-15  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69654
      	* trans-expr.c (gfc_trans_structure_assign): Move assignment to
      	'cm' after treatment of C pointer types and test that the type
      	has been completely built before it. Add an assert that the
      	backend_decl for each component exists.
      
      2019-11-15  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/69654
      	* gfortran.dg/derived_init_6.f90: New test.
      
      From-SVN: r278287
      Paul Thomas committed
    • libstdc++: Fix changelog whitespace · 381835c8
      From-SVN: r278286
      Jonathan Wakely committed
    • [mid-end][__RTL] Set global epilogue_completed in skip_pass · 62396659
      Set global epilogue_completed when skipping pro_and_epilogue pass
      
      When compiling RTL functions marked to start at a pass after the reload
      pass, `skip_pass` is used to mark the reload pass as having completed
      since many patterns use the `reload_completed` variable to determine
      whether to run or not.
      
      Here we do the same for the `epilogue_completed` variable and the
      pro_and_epilogue pass.
      
      Also include a testcase that relies on the availability of a
      define_split in the aarch64 backend that is conditioned on this
      `epilogue_completed` variable.
      
      regtest done on native aarch64
      regtest done on native x64_86
      
      gcc/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* passes.c (skip_pass): Set epilogue_completed if skipping the
      	pro_and_epilogue pass.
      
      gcc/testsuite/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* gcc.dg/rtl/aarch64/test-epilogue-set.c: New test.
      
      From-SVN: r278285
      Matthew Malcomson committed
    • Add tests for print from offload target. · 8916ba87
      2019-11-15  Andrew Stubbs  <ams@codesourcery.com>
      
      	libgomp/
      	* testsuite/libgomp.c/target-print-1.c: New file.
      	* testsuite/libgomp.fortran/target-print-1.f90: New file.
      	* testsuite/libgomp.oacc-c/print-1.c: New file.
      	* testsuite/libgomp.oacc-fortran/print-1.f90: New file.
      
      From-SVN: r278284
      Andrew Stubbs committed
    • [mid-end][__RTL] Clean state despite invalid __RTL startwith passes · 3739bcc8
      
      Hi there,
      
      When compiling an __RTL function that has an invalid "startwith" pass we
      currently don't run the dfinish cleanup pass. This means we ICE on the next
      function.
      
      This change ensures that all state is cleaned up for the next function
      to run correctly.
      
      As an example, before this change the following code would ICE when compiling
      the function `foo2` because the "peephole2" pass is not run at optimisation
      level -O0.
      
      When compiled with
      ./aarch64-none-linux-gnu-gcc -O0 -S missed-pass-error.c -o test.s
      
      ```
      int __RTL (startwith ("peephole2")) badfoo ()
      {
      (function "badfoo"
        (insn-chain
          (block 2
            (edge-from entry (flags "FALLTHRU"))
            (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
            (cinsn 101 (set (reg:DI x19) (reg:DI x0)))
            (cinsn 10 (use (reg/i:SI x19)))
            (edge-to exit (flags "FALLTHRU"))
          ) ;; block 2
        ) ;; insn-chain
      ) ;; function "foo2"
      }
      
      int __RTL (startwith ("final")) foo2 ()
      {
      (function "foo2"
        (insn-chain
          (block 2
            (edge-from entry (flags "FALLTHRU"))
            (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
            (cinsn 101 (set (reg:DI x19) (reg:DI x0)))
            (cinsn 10 (use (reg/i:SI x19)))
            (edge-to exit (flags "FALLTHRU"))
          ) ;; block 2
        ) ;; insn-chain
      ) ;; function "foo2"
      }
      ```
      
      Now it silently ignores the __RTL function and successfully compiles foo2.
      
      regtest done on aarch64
      regtest done on x86_64
      
      OK for trunk?
      
      gcc/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* passes.c (should_skip_pass_p): Always run "dfinish".
      
      gcc/testsuite/ChangeLog:
      
      2019-11-15  Matthew Malcomson  <matthew.malcomson@arm.com>
      
      	* gcc.dg/rtl/aarch64/missed-pass-error.c: New test.
      
      From-SVN: r278283
      Matthew Malcomson committed
    • ipa-inline.c (inline_small_functions): Move assignment to next before call destroying edge. · 2e98ac86
      2019-11-15  Richard Biener  <rguenther@suse.de>
      
      	* ipa-inline.c (inline_small_functions): Move assignment
      	to next before call destroying edge.
      
      From-SVN: r278282
      Richard Biener committed