Commit Graph

168538 Commits

Author SHA1 Message Date
H.J. Lu
6e9fffcf83 i386: Emulate MMX punpcklXX/punpckhXX with SSE punpcklXX
Emulate MMX punpcklXX/punpckhXX with SSE punpcklXX.  For MMX punpckhXX,
move bits 64:127 to bits 0:63 in SSE register.  Only SSE register source
operand is allowed.

	PR target/89021
	* config/i386/i386-expand.c (ix86_split_mmx_punpck): New function.
	* config/i386/i386-protos.h (ix86_split_mmx_punpck): New
	prototype.
	* config/i386/mmx.m (mmx_punpckhbw): Changed to
	define_insn_and_split to support SSE emulation.
	(mmx_punpcklbw): Likewise.
	(mmx_punpckhwd): Likewise.
	(mmx_punpcklwd): Likewise.
	(mmx_punpckhdq): Likewise.
	(mmx_punpckldq): Likewise.

From-SVN: r271216
2019-05-15 08:05:07 -07:00
H.J. Lu
b74ebb2a36 i386: Emulate MMX packsswb/packssdw/packuswb with SSE2
Emulate MMX packsswb/packssdw/packuswb with SSE packsswb/packssdw/packuswb
plus moving bits 64:95 to bits 32:63 in SSE register.  Only SSE register
source operand is allowed.

	PR target/89021
	* config/i386/i386-expand.c (ix86_move_vector_high_sse_to_mmx):
	New function.
	(ix86_split_mmx_pack): Likewise.
	* config/i386/i386-protos.h (ix86_move_vector_high_sse_to_mmx):
	New prototype.
	(ix86_split_mmx_pack): Likewise.
	* config/i386/i386.md (mmx_isa): New.
	(enabled): Also check mmx_isa.
	* config/i386/mmx.md (any_s_truncate): New code iterator.
	(s_trunsuffix): New code attr.
	(mmx_packsswb): Removed.
	(mmx_packssdw): Likewise.
	(mmx_packuswb): Likewise.
	(mmx_pack<s_trunsuffix>swb): New define_insn_and_split to emulate
	MMX packsswb/packuswb with SSE2.
	(mmx_packssdw): Likewise.
	* config/i386/predicates.md (register_mmxmem_operand): New.

Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>

From-SVN: r271215
2019-05-15 08:04:08 -07:00
H.J. Lu
dfa61b9ed0 i386: Allow MMX register modes in SSE registers
In 64-bit mode, SSE2 can be used to emulate MMX instructions without
3DNOW.  We can use SSE2 to support MMX register modes.

	PR target/89021
	* config/i386/i386-c.c (ix86_target_macros_internal): Define
	__MMX_WITH_SSE__ for TARGET_MMX_WITH_SSE.
	* config/i386/i386.c (ix86_set_reg_reg_cost): Add support for
	TARGET_MMX_WITH_SSE with VALID_MMX_REG_MODE.
	(ix86_vector_mode_supported_p): Likewise.
	* config/i386/i386.h (TARGET_MMX_WITH_SSE): New.

From-SVN: r271213
2019-05-15 08:02:54 -07:00
Iain Sandoe
2e97dfdd54 lto-plugin, removed unused variable
2019-05-15  Iain Sandoe  <iain@sandoe.co.uk>

	* lto-plugin.c (cleanup_handler): Remove unused var.

From-SVN: r271212
2019-05-15 14:10:27 +00:00
Paolo Carlini
d509bb8cbe call.c (perform_overload_resolution, [...]): Use OVL_P; remove redundant TEMPLATE_DECL checks.
2019-05-15  Paolo Carlini  <paolo.carlini@oracle.com>

	* call.c (perform_overload_resolution, build_new_method_call_1):
	Use OVL_P; remove redundant TEMPLATE_DECL checks.
	* decl.c (grokfndecl): Likewise.
	* mangle.c (write_expression): Likewise.
	* parser.c (cp_parser_template_id): Likewise.
	* pt.c (resolve_overloaded_unification, type_dependent_expression_p):
	Likewise.
	* search.c (build_baselink): Likewise.
	* tree.c (is_overloaded_fn, dependent_name, maybe_get_fns): Likewise.

From-SVN: r271211
2019-05-15 13:46:29 +00:00
Martin Liska
86e3947eea Check for overflow in tree-switch-conversion (PR middle-end/90478).
2019-05-15  Martin Liska  <mliska@suse.cz>

	PR middle-end/90478
	* tree-switch-conversion.c (jump_table_cluster::can_be_handled):
	Check for overflow.
2019-05-15  Martin Liska  <mliska@suse.cz>

	PR middle-end/90478
	* gcc.dg/tree-ssa/pr90478-2.c: New test.
	* gcc.dg/tree-ssa/pr90478.c: New test.

From-SVN: r271210
2019-05-15 12:58:53 +00:00
Richard Biener
2092f134b7 tree-into-ssa.c (pass_build_ssa::execute): Run update_address_taken before going into SSA.
2019-05-15  Richard Biener  <rguenther@suse.de>

	* tree-into-ssa.c (pass_build_ssa::execute): Run
	update_address_taken before going into SSA.

From-SVN: r271209
2019-05-15 12:57:32 +00:00
Richard Biener
186dabf292 gimple-parser.c (c_parser_gimple_postfix_expression): Handle __BIT_FIELD_REF.
2019-05-15  Richard Biener  <rguenther@suse.de>

	c/
	* gimple-parser.c (c_parser_gimple_postfix_expression): Handle
	__BIT_FIELD_REF.

	* tree-pretty-print.c (dump_generic_node): Dump BIT_FIELD_REF
	as __BIT_FIELD_REF with type with -gimple.

	* gcc.dg/gimplefe-40.c: Amend.

From-SVN: r271208
2019-05-15 12:51:58 +00:00
Vladislav Ivanishin
fb4b60c68e tree-ssa-uninit: clean up is_value_included_in
2019-05-15  Vladislav Ivanishin  <vlad@ispras.ru>

	* tree-ssa-uninit.c (is_value_included_in): Remove is_unsigned and merge
	semantically equivalent branches (left over after prior refactorings).

From-SVN: r271207
2019-05-15 15:40:04 +03:00
Richard Biener
6b94351209 re PR tree-optimization/90474 (ICE: verify_gimple failed (error: DECL_GIMPLE_REG_P set on a variable with address taken; error: invalid address operand in MEM_REF))
2019-05-15  Richard Biener  <rguenther@suse.de>

	PR c/90474
	* c-common.c (c_common_mark_addressable_vec): Also mark
	a COMPOUND_LITERAL_EXPR_DECL addressable similar to
	c_mark_addressable.

From-SVN: r271206
2019-05-15 12:14:01 +00:00
Iain Sandoe
c221c627cb darwin, testsuite, powerpc - handle tests for new processors.
If we build Darwin with a modern assembler, then it might well
recognise insns that cannot be used on current Darwin systems.

The patch augments the tests for feature support for VSX,
power8 and power9 to exclude Darwin even if the assembler can
handle the instructions.

2019-05-15  Iain Sandoe  <iain@sandoe.co.uk>

	* lib/target-supports.exp 
	(check_effective_target_powerpc_p8vector_ok): No support for Darwin.
	(check_effective_target_powerpc_p9vector_ok): Likewise.
	(check_effective_target_powerpc_float128_sw_ok): Likewise.
	(check_effective_target_powerpc_float128_hw_ok): Likewise.
	(check_effective_target_powerpc_vsx_ok): Likewise.
	* gcc.target/powerpc/bfp/bfp.exp: Don't try to run this for Darwin.
	* gcc.target/powerpc/dfp/dfp.exp: Likewise.

From-SVN: r271205
2019-05-15 11:47:04 +00:00
Richard Biener
595ffc073b re PR tree-optimization/88828 (Inefficient update of the first element of vector registers)
2019-05-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/88828
	* tree-ssa-forwprop.c (simplify_vector_constructor): Fix
	bogus check.

From-SVN: r271204
2019-05-15 09:59:37 +00:00
Richard Biener
905549856d gimple-parser.c (c_parser_gimple_statement): Remove questionable auto-promotion to VIEW_CONVERT_EXPR.
2019-05-14  Richard Biener  <rguenther@suse.de>

	* gimple-parser.c (c_parser_gimple_statement): Remove
	questionable auto-promotion to VIEW_CONVERT_EXPR.
	(c_parser_gimple_typespec): Split out from __MEM parsing.
	(c_parser_gimple_postfix_expression): Handle __VIEW_CONVERT.
	* tree-pretty-print.c (dump_generic_node): Dump VIEW_CONVERT_EXPR
	as __VIEW_CONVERT with -gimple.

	* gcc.dg/gimplefe-40.c: New testcase.

From-SVN: r271203
2019-05-15 09:18:15 +00:00
Iain Sandoe
c101cff86e lto-plugin - support -save-temps, -v, --version.
This patch makes the lto-plugin follow the same approach
to save-temps as collect2. 

-save-temps causes the temp file to be named meaningfully,
and for the relevant input files to be saved in CWD.

-v, —version causes the save actions to be output to stderr.

one can get this to happen by just putting -save-temps, -v on
the regular link line or (for compatibility with the way the
 -debug flag works) by appending -plugin-opt=-save-temps, etc.

lto-plugin/

2019-05-15  Iain Sandoe  <iain@sandoe.co.uk>

	* lto-plugin.c (exec_lto_wrapper): Make the wrapper
	arguments filename more user-friendly.
	(file_exists, maybe_unlink): New.
	(cleanup_handler): Use maybe unlink to handle the
	case when temps should be saved.
	(process_option): Look for -v, —-version, -save-temps.
	(onload): Record the linker output file name.
	Check for -v, —-version, -save-temps in the GCC collect
	options environment.

From-SVN: r271202
2019-05-15 09:12:21 +00:00
Iain Sandoe
debe1ba019 add missing Changelog for last commit.
From-SVN: r271201
2019-05-15 07:16:02 +00:00
Iain Sandoe
49ba885c75 darwin, testsuite, ppc FIX PR87600
The test fails on PPC Darwin because we emit 
__POWERPC__ instead of __powerpc__ fixed by allowing
for both.

2019-05-15  Iain Sandoe  <iain@sandoe.co.uk>

	* gcc.dg/pr87600.h: Add __POWERPC__ as an alternate test
	for PowerPC platforms.

From-SVN: r271200
2019-05-15 07:15:22 +00:00
Iain Sandoe
92bde79946 darwin, testsuite, laste piece to fix PR82920
These ae test adjustments to the scan assembler strings
mostly just to catch missing __USER_LABEL_PREFIX__s  on
symbols.

2019-05-15  Iain Sandoe  <iain@sandoe.co.uk>

	PR target/82920
	* g++.dg/cet-notrack-1.C: Adjust scan assembler for Darwin.
	* gcc.target/i386/cet-notrack-5a.c: Likewise.
	* gcc.target/i386/cet-notrack-5b.c: Likewise.
	* gcc.target/i386/cet-notrack-6b.c: Likewise.
	* gcc.target/i386/cet-notrack-icf-1.c: Likewise.
	* gcc.target/i386/cet-notrack-icf-2.c: Likewise.
	* gcc.target/i386/cet-notrack-icf-3.c: Likewise.
	* gcc.target/i386/cet-notrack-icf-4.c: Likewise.
	* gcc.target/i386/cet-sjlj-3.c: Likewise.
	* gcc.target/i386/cet-sjlj-5.c: Likewise.

From-SVN: r271199
2019-05-15 07:10:04 +00:00
GCC Administrator
c838e45558 Daily bump.
From-SVN: r271197
2019-05-15 00:16:16 +00:00
Marek Polacek
9177a01650 re PR c++/68918 (spurious "invalid use of incomplete type" in trailing return type)
PR c++/68918
	* g++.dg/cpp0x/decltype71.C: New test.

From-SVN: r271193
2019-05-14 21:19:01 +00:00
Marek Polacek
1d7dcb0ed2 re PR c++/70156 (incorrect "incomplete type" error initializing a static const data member)
PR c++/70156
	* g++.dg/init/static5.C: New test.

From-SVN: r271192
2019-05-14 21:10:58 +00:00
Iain Sandoe
c76ea1b8bf darwin, testsuite, fix more PR 82920
Darwin doesn't support mx32, and some tests were
failing because it was trying to do them.  When we
disable this it turns out that quite a few tests
requiring mx32 support were not guarded.

gcc/

2019-05-14  Iain Sandoe  <iain@sandoe.co.uk>

	PR target/82920
	* config/i386/darwin.h (CC1_SPEC): Report -mx32 as an error for
	Darwin.

gcc/testsuite/

2019-05-14  Iain Sandoe  <iain@sandoe.co.uk>

	PR target/82920
	* gcc.target/i386/cet-sjlj-6b.c: Require effective target x32.
	* gcc.target/i386/pr52146.c: Likewise.
	* gcc.target/i386/pr52698.c: Likewise.
	* gcc.target/i386/pr52857-1.c: Likewise.
	* gcc.target/i386/pr52857-2.c: Likewise.
	* gcc.target/i386/pr52876.c: Likewise.
	* gcc.target/i386/pr53698.c: Likewise.
	* gcc.target/i386/pr54157.c: Likewise.
	* gcc.target/i386/pr55049-1.c: Likewise.
	* gcc.target/i386/pr55093.c: Likewise.
	* gcc.target/i386/pr55116-1.c: Likewise.
	* gcc.target/i386/pr55116-2.c: Likewise.
	* gcc.target/i386/pr55597.c: Likewise.
	* gcc.target/i386/pr59929.c: Likewise.
	* gcc.target/i386/pr66470.c: Likewise.

From-SVN: r271190
2019-05-14 20:36:18 +00:00
Jonathan Wakely
ff8b2a0acb Fix NullablePointer test utility
* testsuite/util/testsuite_allocator.h (NullablePointer::operator bool):
	Fix return value.

From-SVN: r271189
2019-05-14 21:01:28 +01:00
Segher Boessenkool
b4d12b5eb6 rs6000: Make eh_set_lr_<mode> a define_insn_and_split
* config/rs6000/rs6000.md (eh_set_lr_<mode>): Merge with following
	define_split to become a define_insn_and_split.

From-SVN: r271185
2019-05-14 19:34:00 +02:00
Segher Boessenkool
a3d59ce910 rs6000: New enum epilogue_type
We currently call rs6000_emit_epilogue with a boolean parameter saying
if this is for a sibcall.  We also need to create epilogues for
eh_return.  This isn't yet indicated directly: instead, we get an
eh_return epilogue if crtl->calls_eh_return and this is not a sibcall.

This patch changes things so there is a three-way enum argument.

What is called "normal" now can still actually be "eh_return".  The
rs6000_emit_epilogue function still uses an "int sibcall" variable
internally.


	* config/rs6000/rs6000-protos.h (rs6000_emit_epilogue): Change
	arguments.
	* config/rs6000/rs6000.c (rs6000_emit_epilogue): Change arguments.
	* config/rs6000/rs6000.md (epilogue_type): New define_enum.
	(sibcall_epilogue): Adjust.
	(epilogue): Adjust.

From-SVN: r271184
2019-05-14 19:33:10 +02:00
Rainer Orth
ccd1242eec Remove obsolete Solaris 10 support
libstdc++-v3:
	* config/os/solaris/solaris2.10: Move to ...
	* config/os/solaris: ... this.
	* configure.host (os_include_dir): Adapt.
	(abi_baseline_pair): Remove Solaris 10 handling.
	* config/abi/post/i386-solaris2.10: Remove.
	* config/abi/post/sparc-solaris2.10: Remove.
	* config/abi/post/i386-solaris2.11: Rename to ...
	* config/abi/post/i386-solaris: ... this.
	* config/abi/post/sparc-solaris2.11: Rename to ...
	* config/abi/post/sparc-solaris: ... this.

	* libsupc++/new_opa.cc [_GLIBCXX_HAVE_MEMALIGN] [__sun]: Remove
	workaround.

	* testsuite/ext/enc_filebuf/char/13598.cc: Remove *-*-solaris2.10
	xfail.

	libsanitizer:
	* configure.ac (have_dl_iterate_phdr): Remove *-*-solaris2.10*
	handling.
	* configure: Regenerate.

	libgcc:
	* config.host: Simplify various *-*-solaris2.1[0-9]* to
	*-*-solaris2*.
	* configure.ac: Likewise.
	* configure: Regenerate.

	* config/i386/sol2-unwind.h (x86_fallback_frame_state): Remove
	Solaris 10 and Solaris 11 < snv_125 handling.

	libbacktrace:
	* configure.ac (have_dl_iterate_phdr): Remove *-*-solaris2.10*
	handling.
	* configure: Regenerate.

	gcc/testsuite:
	* gcc.dg/atomic/c11-atomic-exec-4.c: Simplify triplet to
	*-*-solaris2*.
	* gcc.dg/atomic/c11-atomic-exec-5.c: Likewise.
	* gcc.dg/c99-math-double-1.c: Likewise.
	* gcc.dg/c99-math-float-1.c: Likewise.
	* gcc.dg/c99-math-long-double-1.c: Likewise.
	* gcc.misc-tests/linkage.exp: Simplify triplet to
	x86_64-*-solaris2*.

	* gcc.target/i386/mcount_pic.c: Remove *-*-solaris2.10* && !gld
	xfail.
	* gcc.target/i386/pr63620.c: Likewise.

	* lib/target-supports.exp (check_sse_os_support_available): Remove
	Solaris 9/x86 workaround.

	gcc:
	* config.gcc: Move *-*-solaris2.10* from obsolete configurations
	to unsupported ones.
	Simplify x86_64-*-solaris2.1[0-9]* to x86_64-*-solaris2*.
	* config.host: Likewise.
	* config/i386/sol2.h (ASM_COMMENT_START): Remove.
	* config/sparc/driver-sparc.c (host_detect_local_cpu) [__sun__ &&
	__svr4__]: Remove "brand" fallback.
	[!KSTAT_DATA_STRING]: Remove.
	* configure.ac (gcc_cv_ld_hidden): Simplify *-*-solaris2.1[0-9]*
	to *-*-solaris2*.
	(comdat_group): Likewise.
	(set_have_as_tls): Likewise.
	(gcc_cv_target_dl_iterate_phdr): Likewise.
	(gcc_cv_as_shf_merge): Remove Solaris 10/x86 workaround.
	(gcc_cv_ld_aligned_shf_merge): Remove Solaris 10/SPARC workaround.
	* configure: Regenerate.
	* doc/install.texi: Simplify Solaris target triplets.
	(Specific, i?86-*-solaris2*): Remove Solaris 10 references.
	(Specific, *-*-solaris2*): Document Solaris 10 removal.
	Remove Solaris 10 references.
	Remove obsolete Solaris bug reference.
	(Specific, sparc-sun-solaris2.10): Remove.

From-SVN: r271183
2019-05-14 17:17:23 +00:00
Jonathan Wakely
956a62aaa2 Add __raw_visit and __raw_idx_visit, use INVOKE<R>
This change simplifies visitation for variants, by using INVOKE<R> for
the visit<R> form, and explicitly specifying the tag types for raw
visitation, instead of inferring them from the return types of the
lambda functions used as visitors.

	* include/std/variant (__visit_with_index): Remove typedef.
	(__deduce_visit_result): New tag type.
	(__raw_visit, __raw_idx_visit): New helper functions for "raw"
	visitation of possibly-valueless variants, forwarding to __do_visit
	with the relevant tag type.
	(_Variant_storage<false, _Types...>::_M_reset_impl): Use __raw_visit
	and make lambda return void.
	(__variant_construct): Likewise.
	(_Copy_assign_base::operator=, _Move_assign_base::operator=): Use
	__raw_idx_visit and make lambda return void.
	(_Multi_array::__untag_result): Add metafunction to check the function
	pointer type for a tag type that dictates the kind of visitation.
	(_Multi_array<_Ret(*)(_Visitor, _Variants...), __first, __rest...>):
	Use decltype(auto) instead of tagged function pointer type.
	(__gen_vtable_impl): Remove bool non-type parameter and unused
	_Variant_tuple parameter.
	(__gen_vtable_impl::__visit_invoke_impl): Remove.
	(__gen_vtable_impl::__do_visit_invoke): Remove.
	(__gen_vtable_impl::__do_visit_invoke_r): Remove.
	(__gen_vtable_impl::__visit_invoke): Use if-constexpr and __invoke_r
	for the visit<R> case, rather than dispatching to separate functions.
	(_VARIANT_RELATION_FUNCTION_TEMPLATE): Use __raw_idx_visit and make
	lambda return void.
	(variant::swap): Likewise.
	(__do_visit): Replace two non-type template parameters with a single
	type parameter, so that the caller must specify the visitor's return
	type (or one of the tag types).
	(visit): Deduce a return type from the visitor and use the
	__deduce_visit_result tag to enforce that all overloads return the
	same type.
	(visit<R>): Call __do_visit<R> with explicit result type.
	(__variant_hash_call_base_impl::operator()): Use __raw_visit and make
	lambda return void.

From-SVN: r271182
2019-05-14 17:46:07 +01:00
Uros Bizjak
00f0898d2f i386.md (any_div): New code iterator.
* config/i386/i386.md (any_div): New code iterator.
	(paired_mod): New code attribute.
	(sgnprefix): Handle DIV and UDIV RTXes.
	(u): Ditto.
	(<u>divmod<mode>4): Macroize expander from divmod<mode>4
	and udivmod<mode>4 patterns using any_div code iterator.
	(divmod splitters): Macroize splitters using any_div code iterator.
	(*udivmodsi4_pow2_zext_1): Use exactl_log2 in insn condition.
	(*udivmodsi4_pow2_zext_2): Ditto.
	(*<u>divmod<mode>4_noext): Macroize insn from *divmod<mode>4_noext
	and *udivmod<mode>4_noext patterns using any_div code iterator.
	(*<u>divmod<mode>4_noext_zext_1): Macroize insn from
	*divmod<mode>4_noext_zext_1 and *udivmod<mode>4_noext_zext_1
	patterns using any_div code iterator.
	(*<u>divmod<mode>4_noext_zext_2): Macroize insn from
	*divmod<mode>4_noext_zext_2 and *udivmod<mode>4_noext_zext_2
	patterns using any_div code iterator.
	(<u>divmodhiqi3): Macroize insn from divmodhiqi3 and
	udivmodhiqi3 patterns using any_extend code iterator.

From-SVN: r271179
2019-05-14 18:18:06 +02:00
Nina Dinka Ranns
a73d2fa852 nonesuch is insufficiently useless (lwg2996)
2019-05-14  Nina Dinka Ranns  <dinka.ranns@gmail.com>

	nonesuch is insufficiently useless (lwg2996)
	* include/std/type_traits (struct __nonesuch): Added private base
	class to make __nonesuch not an aggregate and removed deleted default
	constructor.
	* include/bits/stl_pair.h (struct __nonesuch_no_braces): Removed.
	(operator=(const pair&)): Use __nonesuch instead of
	__nonesuch_no_braces.
	(operator=(pair&&)): Likewise
	* include/std/tuple (operator=(const tuple&)): Use __nonesuch instead
	of __nonesuch_no_braces.
	(operator=(tuple&&)): Likewise
	* include/experimental/type_traits (struct nonesuch): Added private
	base class to make nonesuch not an aggregate and removed deleted
	default constructor.
	* testsuite/20_util/nonesuch/nonesuch.cc: New.
	* testsuite/experimental/type_traits/nonesuch.cc: New.

From-SVN: r271175
2019-05-14 16:48:27 +01:00
Jonathan Wakely
330b17474c Use INVOKE<R> in std::function, std::bind and std::packaged_task
As well as simpifying the code by removing duplication, this means that
we only need to touch std::__invoke_r if we need to implement changes to
INVOKE<R>, such as those in P0932R0.

	* include/bits/std_function.h (_Simple_type_wrapper): Remove.
	(_Function_handler): Remove partial specializations for void return
	types and pointers to member.
	(_Function_handler::_M_manager): Adapt to removal of
	_Simple_type_wrapper.
	(_Function_handler::_M_invoke): Use __invoke_r instead of __invoke.
	* include/std/functional (_Bind_result::__enable_if_void)
	(_Bind_result::__disable_if_void): Remove sfinae helpers.
	(_Bind_result::__call): Use __invoke_r and remove overloads for void
	return types.
	* include/std/future (__future_base::_Task_state::_M_run)
	(__future_base::_Task_state::_M_run_delayed): Use __invoke_r and
	change return type of lambda expressions.

From-SVN: r271174
2019-05-14 16:25:08 +01:00
Jonathan Wakely
78c2855df6 Define std::__invoke_r for INVOKE<R>
* include/bits/invoke.h (__invoke_r): Define new function implementing
	the INVOKE<R> pseudo-function.
	* testsuite/20_util/function_objects/invoke/1.cc: Add more tests.
	* testsuite/20_util/function_objects/invoke/2.cc: New test.

From-SVN: r271173
2019-05-14 16:25:01 +01:00
Ian Lance Taylor
1ac09ef2c6 libgo: reduce overhead for memory/block/mutex profiling
Revise the gccgo version of memory/block/mutex profiling to reduce
    runtime overhead. The main change is to collect raw stack traces while
    the profile is on line, then post-process the stacks just prior to the
    point where we are ready to use the final product. Memory profiling
    (at a very low sampling rate) is enabled by default, and the overhead
    of the symbolization / DWARF-reading from backtrace_full was slowing
    things down relative to the main Go runtime.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/171497

From-SVN: r271172
2019-05-14 14:59:42 +00:00
Jonathan Wakely
ce9f305e44 Add __is_nothrow_convertible to fix std::is_nothrow_invocable_r
The definition of is_nothrow_invocable in terms of is_convertible and
is_nothrow_constructible is incorrect, because a type could have an
explicit constructor that means is_nothrow_constructible is true, but
implicit conversions could use a different constructor that is
potentially-throwing.

Fix it by adding a C++11 version of C++20's is_nothrow_convertible that
only considers implicit conversions.

	* include/std/type_traits (__is_nt_convertible_helper): Define it
	unconditionally, not only for C++20.
	(__is_nothrow_convertible): Define internal trait for use in C++11.
	(__is_nt_invocable_impl: Fix by using __is_nothrow_convertible.
	(is_invocable_r_v, is_nothrow_invocable_r_v): Add missing parameter.
	* testsuite/20_util/is_nothrow_convertible/value_ext.cc: New test.
	* testsuite/20_util/is_nothrow_convertible/value.cc: Check with type
	that has nothrow explicit conversion but potentially-throwing implicit
	conversion.
	* testsuite/20_util/is_nothrow_invocable/value.cc: Likewise.
	* testsuite/20_util/is_nothrow_invocable/value_ext.cc: Fix helper
	function to only consider implicit conversions.
	* testsuite/20_util/tuple/cons/noexcept_specs.cc: Add comment.

From-SVN: r271171
2019-05-14 15:39:58 +01:00
Richard Biener
1158c5b424 gimple-parser.c (c_parser_gimple_statement): Remove questionable auto-promotion to VIEW_CONVERT_EXPR.
2019-05-14  Richard Biener  <rguenther@suse.de>

	* gimple-parser.c (c_parser_gimple_statement): Remove
	questionable auto-promotion to VIEW_CONVERT_EXPR.
	(c_parser_gimple_typespec): Split out from __MEM parsing.
	(c_parser_gimple_postfix_expression): Handle __VIEW_CONVERT.
	* tree-pretty-print.c (dump_generic_node): Dump VIEW_CONVERT_EXPR
	as __VIEW_CONVERT with -gimple.

	* gcc.dg/gimplefe-40.c: New testcase.

From-SVN: r271170
2019-05-14 13:57:03 +00:00
Jonathan Wakely
22b6a9c1cd Reduce header dependencies in <iterator>
* include/std/iterator: Include <iosfwd> instead of <istream> and
	<ostream>.

From-SVN: r271169
2019-05-14 13:47:39 +01:00
Jonathan Wakely
7198e982e9 Removing unused, non-standard function in _Rb_tree
* include/bits/stl_tree.h (_Rb_tree::erase(const Key*, const Key*)):
	Remove unused, non-standard function.

From-SVN: r271168
2019-05-14 13:19:10 +01:00
Jonathan Wakely
0b3c00ff3c Make std::match_results::_M_resize more useful
As both callers of match_results::_M_resize(unsigned) immediately follow
it with a loop to update the value of each sub_match, that behaviour can
be moved into _M_resize itself. The first caller fills the container
with unmatched subs, which can be done with vector::assign, and the
second caller clears the container to establish a specific state, which
can be provided by a new member function specific to that purpose.

Tangentially, I also noticed that match_results::max_size() doesn't
account for the three special sub_match objects that are always present
in a fully established result state. This patch also fixes that.

	* include/bits/regex.h (match_results::max_size()): Adjust return
	value to account for prefix/suffix/unmatched subs.
	(match_results::_M_resize(unsigned int)): Use _Base_type::assign to
	reset the contained sub matches.
	(match_results::_M_establish_failed_match(_Bi_iter)): Add new member
	function to set result state following a failed match.
	* include/bits/regex.tcc (__regex_algo_impl): Remove loop to set
	sub_match states after _M_resize. Use _M_establish_failed_match.

From-SVN: r271167
2019-05-14 13:19:05 +01:00
Jonathan Wakely
8db7a05fd7 PR libstdc++/69724 avoid temporary in std::thread construction
The std::thread constructor creates (and then moves) an unnecessary
temporary copy of each argument. Optimize it to only make the one copy
that is required.

	PR libstdc++/69724
	* include/std/thread (thread::_State_impl, thread::_S_make_state):
	Replace single _Callable parameter with variadic _Args pack, to
	forward them directly to the tuple of decayed copies.
	* testsuite/30_threads/thread/cons/69724.cc: New test.

From-SVN: r271166
2019-05-14 13:01:15 +01:00
Nina Dinka Ranns
db33efde17 Inconsistency wrt Allocators in basic_string assignment (LWG2579)
2019-05-14  Nina Dinka Ranns  <dinka.ranns@gmail.com>

	Inconsistency wrt Allocators in basic_string assignment (LWG2579)
	* include/bits/basic_string.h: (operator=(const basic_string&):
	Move allocator decision to assign.
	(assign(const basic_string&)): Move allocator decision here.
	* testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
	Add tests.
	* testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
	Add tests.

From-SVN: r271165
2019-05-14 12:48:31 +01:00
Paolo Carlini
4593483f15 Reapply r270597.
2019-05-14  Paolo Carlini  <paolo.carlini@oracle.com>

	PR preprocessor/90382
	* decl.c (grokdeclarator): Fix value assigned to typespec_loc, use
	min_location.
2019-05-14  Paolo Carlini  <paolo.carlini@oracle.com>

	PR preprocessor/90382
	* g++.dg/diagnostic/trailing1.C: New test.

From-SVN: r271164
2019-05-14 11:43:55 +00:00
Martin Liska
19eda56db6 Fix min_location usage in line-map.c (PR preprocessor/90382).
2019-05-14  Martin Liska  <mliska@suse.cz>

	PR preprocessor/90382
	* line-map.c (first_map_in_common_1): Handle ADHOC
	locations.

From-SVN: r271163
2019-05-14 11:41:53 +00:00
Martin Liska
e6fc8353fc Do a refactoring in linemap (PR preprocessor/90382).
2019-05-14  Martin Liska  <mliska@suse.cz>

	PR preprocessor/90382
	* include/line-map.h (get_data_from_adhoc_loc): Add const to
	the first argument.
	(get_location_from_adhoc_loc): Likewise.
	* line-map.c(get_data_from_adhoc_loc):  Add const to
	the first argument.
	(get_location_from_adhoc_loc): Likewise.
	(get_combined_adhoc_loc): Use get_location_from_adhoc_loc
	(or get_data_from_adhoc_loc).
	(get_range_from_adhoc_loc): Likewise.
	(get_pure_location): Likewise.
	(linemap_position_for_loc_and_offset): Likewise.
	(linemap_lookup): Likewise.
	(linemap_ordinary_map_lookup): Likewise.
	(linemap_macro_map_lookup): Likewise.
	(linemap_get_expansion_line): Likewise.
	(linemap_get_expansion_filename): Likewise.
	(linemap_location_in_system_header_p): Likewise.
	(linemap_location_from_macro_expansion_p): Likewise.
	(linemap_macro_loc_to_exp_point): Likewise.
	(linemap_resolve_location): Likewise.
	(linemap_unwind_toward_expansion): Likewise.
	(linemap_unwind_to_first_non_reserved_loc): Likewise.
	(linemap_expand_location): Likewise.
	(linemap_dump_location): Likewise.

From-SVN: r271162
2019-05-14 11:41:40 +00:00
Jonathan Wakely
c688848d6a Fix indentation in testsuite utility header
* testsuite/util/testsuite_allocator.h (memory_resource)
	(default_resource_mgr): Fix indentation.

From-SVN: r271161
2019-05-14 12:17:27 +01:00
Jonathan Wakely
066f9ea279 Add __gnu_test::NullablePointer utility to testsuite
* testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc:
	Use operator-> to access raw pointer member.
	* testsuite/23_containers/vector/59829.cc: Likewise.
	* testsuite/23_containers/vector/bool/80893.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/cxx11.cc: Use NullablePointer.
	* testsuite/util/testsuite_allocator.h (NullablePointer): New utility
	for tests.
	(PointerBase, PointerBase_void): Derive from NullablePointer and use
	its constructors and equality operators. Change converting
	constructors to use operator-> to access private member of the other
	pointer type.
	(PointerBase_void::operator->()): Add, for access to private member.
	(operator-(PointerBase, PointerBase)): Change to hidden friend.
	(operator==(PointerBase, PointerBase)): Remove.
	(operator!=(PointerBase, PointerBase)): Remove.

From-SVN: r271160
2019-05-14 12:17:23 +01:00
Jonathan Wakely
e25f488d60 Fix unique_ptr pretty printer for empty classes
The printer was confused when unique_ptr<T,D>::pointer is an empty
class, or the deleter is not empty. Instead of assuming the tuple has a
single _M_head_impl member manually inspect the tuple base classes to
get the first element.

	* python/libstdcxx/v6/printers.py (UniquePointerPrinter.__init__): Do
	not assume field called _M_head_impl is the first tuple element.
	* testsuite/libstdc++-prettyprinters/compat.cc: Make tuple
	implementation more accurate.
	* testsuite/libstdc++-prettyprinters/cxx11.cc: Check unique_ptr with
	empty pointer type and non-empty deleter.

From-SVN: r271159
2019-05-14 12:17:18 +01:00
Jonathan Wakely
1b18663e0f LWG 2899 - Make is_move_constructible correct for unique_ptr
* include/bits/unique_ptr.h (__uniq_ptr_impl): Add move constructor,
	move assignment operator.
	(__uniq_ptr_impl::release(), __uniq_ptr_impl::reset(pointer)): Add.
	(__uniq_ptr_data): New class template with conditionally deleted
	special members.
	(unique_ptr, unique_ptr<T[], D>): Change type of data member from
	__uniq_ptr_impl<T, D> to __uniq_ptr_data<T, D>. Define move
	constructor and move assignment operator as defaulted.
	(unique_ptr::release(), unique_ptr<T[], D>::release()): Forward to
	__uniq_ptr_impl::release().
	(unique_ptr::reset(pointer), unique_ptr<T[], D>::reset<U>(U)): Forward
	to __uniq_ptr_impl::reset(pointer).
	* python/libstdcxx/v6/printers.py (UniquePointerPrinter.__init__):
	Check for new __uniq_ptr_data type.
	* testsuite/20_util/unique_ptr/dr2899.cc: New test.

From-SVN: r271158
2019-05-14 12:17:11 +01:00
Martin Liska
24c30e1410 Fix a test-case in PR middle-end/90340.
2019-05-14  marxin  <mliska@suse.cz>

	PR middle-end/90340
	* gcc.dg/tree-ssa/pr90340-2.c: Add case-values-threshold
	param.

From-SVN: r271156
2019-05-14 10:00:53 +00:00
Richard Biener
962372f9f8 re PR tree-optimization/88828 (Inefficient update of the first element of vector registers)
2019-05-14  Richard Biener  <rguenther@suse.de>
	H.J. Lu  <hongjiu.lu@intel.com>

	PR tree-optimization/88828
	* tree-ssa-forwprop.c (simplify_vector_constructor): Handle
	permuting in a single non-constant element not extracted
	from a vector.

	* gcc.target/i386/pr88828-1.c: New test.
	* gcc.target/i386/pr88828-1a.c: Likewise.
	* gcc.target/i386/pr88828-1b.c: Likewise.
	* gcc.target/i386/pr88828-1c.c: Likewise.
	* gcc.target/i386/pr88828-4a.c: Likewise.
	* gcc.target/i386/pr88828-4b.c: Likewise.
	* gcc.target/i386/pr88828-5a.c: Likewise.
	* gcc.target/i386/pr88828-5b.c: Likewise.
	* gcc.target/i386/pr88828-7.c: Likewise.
	* gcc.target/i386/pr88828-7a.c: Likewise.
	* gcc.target/i386/pr88828-7b.c: Likewise.
	* gcc.target/i386/pr88828-8.c: Likewise.
	* gcc.target/i386/pr88828-8a.c: Likewise.
	* gcc.target/i386/pr88828-8b.c: Likewise.
	* gcc.target/i386/pr88828-9.c: Likewise.
	* gcc.target/i386/pr88828-9a.c: Likewise.
	* gcc.target/i386/pr88828-9b.c: Likewise.

Co-Authored-By: H.J. Lu <hongjiu.lu@intel.com>

From-SVN: r271153
2019-05-14 09:11:15 +00:00
Przemyslaw Wirkus
a52cf5cf27 2019-05-14 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com\>
gcc/
	* internal-fn.def (SIGNBIT): New.
	* config/aarch64/aarch64-simd.md (signbitv2sf2): New expand
	defined.
	(signbitv4sf2): Likewise.

gcc/testsuite/
	* gcc.target/aarch64/signbitv4sf.c: New test.
	* gcc.target/aarch64/signbitv2sf.c: New test.

From-SVN: r271149
2019-05-14 08:07:56 +00:00
Chenghua Xu
4dbf3a15f1 [MIPS] Skip forward src into next insn when the SRC reg is dead.
PR target/90357
	gcc/
	* config/mips/mips.c (mips_split_move): Skip forward SRC into
	next insn when the SRC reg is dead.

From-SVN: r271146
2019-05-14 01:42:59 +00:00
Bin Cheng
98aaa1a633 gimple-ssa-strength-reduction.c (lookup_cand): Adjust index by 1.
* gimple-ssa-strength-reduction.c (lookup_cand): Adjust index by 1.
	(alloc_cand_and_find_basis): Ditto.
	(backtrace_base_for_ref, create_mul_ssa_cand): Remove if-then-else.
	(create_mul_imm_cand, create_add_ssa_cand): Ditto.
	(create_add_imm_cand, slsr_process_cast): Ditto.
	(slsr_process_copy, replace_mult_candidate): Ditto.
	(replace_rhs_if_not_dup, replace_one_candidate): Ditto.
	(dump_cand_vec, analyze_candidates_and_replace): Skip NULL element.
	(pass_strength_reduction::execute): Init the first NULL element.

From-SVN: r271145
2019-05-14 01:18:53 +00:00