Commit Graph

176770 Commits

Author SHA1 Message Date
Richard Biener
7c592aad23 tree-optimization/95268 - fix commoning of clobbers
This fixes handling of clobbers when commoning stores.

2020-05-22  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95268
	* tree-ssa-sink.c (sink_common_stores_to_bb): Handle clobbers
	properly.

	* g++.dg/torture/pr95268.C: New testcase.
2020-05-22 13:08:44 +02:00
Jan Hubicka
1089a367c4 Fix hashing of prestreamed nodes
this patch seems to solve basically all collisions while building cc1.
From:

[WPA] read 3312246 unshared trees
[WPA] read 1144381 mergeable SCCs of average size 4.833785
[WPA] 8843938 tree bodies read in total
[WPA] tree SCC table: size 524287, 197767 elements, collision ratio: 0.506446
[WPA] tree SCC max chain length 43 (size 1)
[WPA] Compared 946614 SCCs, 775077 collisions (0.818789)

to

[WPA] read 3314520 unshared trees
[WPA] read 1144763 mergeable SCCs of average size 4.835021
[WPA] 8849473 tree bodies read in total
[WPA] tree SCC table: size 524287, 200574 elements, collision ratio: 0.486418
[WPA] tree SCC max chain length 2 (size 1)
[WPA] Compared 944189 SCCs, 179 collisions (0.000190)

The problem is that preloaded nodes all have hash code 0 because
cache->nodes.length is not updated while streaming out.

I also added an arbitrary constant to avoid clash with constant of 0 used to
hash NULL pointers and 1 used to hash pointers inside SCC.

	* tree-streamer.c (record_common_node): Fix hash value of pre-streamed
	nodes.
2020-05-22 12:31:34 +02:00
Jan Hubicka
47273df0bc Simplify streaming of SCC components
this patch saves few bytes from SCC streaming.  First we stream end markers
that are fully ignored at stream in.
Second I missed streaming of emtry_len in the previous change so it is
pointlessly streamed for LTO_trees. Moreover entry_len is almost always 1
(always during gcc bootstrap) and thus it makes sense to avoid stremaing it
in majority of cases.

gcc/ChangeLog:

2020-05-21  Jan Hubicka  <hubicka@ucw.cz>

	* lto-streamer-in.c (lto_read_tree): Do not stream end markers.
	(lto_input_scc): Optimize streaming of entry lengths.
	* lto-streamer-out.c (lto_write_tree): Do not stream end markers
	(DFS::DFS): Optimize stremaing of entry lengths
2020-05-22 12:30:14 +02:00
Richard Biener
ab7eca9292 lto/95190 - amend -flto docs for diagnostic option handling
This documents new GCC 10 behavior on diagnostic options and -flto.

2020-05-22  Richard Biener  <rguenther@suse.de>

	PR lto/95190
	* doc/invoke.texi (flto): Document behavior of diagnostic
	options.
2020-05-22 12:28:21 +02:00
Richard Biener
79f0451c67 enfoce SLP_TREE_VECTYPE for invariants
This tries to enforce a set SLP_TREE_VECTYPE in vect_get_constant_vectors
and provides some infrastructure for setting it in the vectorizable_*
functions, amending those.

2020-05-22  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (vect_is_simple_use): New overload.
	(vect_maybe_update_slp_op_vectype): New.
	* tree-vect-stmts.c (vect_is_simple_use): New overload
	accessing operands of SLP vs. non-SLP operation transparently.
	(vect_maybe_update_slp_op_vectype): New function updating
	the possibly shared SLP operands vector type.
	(vectorizable_operation): Be a bit more SLP vs non-SLP agnostic
	using the new vect_is_simple_use overload;  update SLP invariant
	operand nodes vector type.
	(vectorizable_comparison): Likewise.
	(vectorizable_call): Likewise.
	(vectorizable_conversion): Likewise.
	(vectorizable_shift): Likewise.
	(vectorizable_store): Likewise.
	(vectorizable_condition): Likewise.
	(vectorizable_assignment): Likewise.
	* tree-vect-loop.c (vectorizable_reduction): Likewise.
	* tree-vect-slp.c (vect_get_constant_vectors): Enforce
	present SLP_TREE_VECTYPE and check it matches previous
	behavior.
2020-05-22 12:26:27 +02:00
Richard Biener
b6ed2e2bca tree-optimization/95248 - fix oversight in SM rewrite
This fixes a leftover early out in determining the sequence of stores
to materialize.

2020-05-22  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95248
	* tree-ssa-loop-im.c (sm_seq_valid_bb): Remove bogus early out.

	* gcc.dg/torture/pr95248.c: New testcase.
2020-05-22 11:46:40 +02:00
Martin Liska
59b282bca3
Add missing ChangeLog entry. 2020-05-22 09:01:16 +02:00
Richard Biener
f8fb2ea2b1 add ctor/dtor to slp_tree
This adds constructor and destructor to slp_tree factoring common
code.  I've not changed the wrappers to overloaded CTORs since
I hope to use object_allocator<> and am not sure whether that can
be done in any fancy way yet.

2020-05-22  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (_slp_tree::_slp_tree): New.
	(_slp_tree::~_slp_tree): Likewise.
	* tree-vect-slp.c (_slp_tree::_slp_tree): Factor out code
	from allocators.
	(_slp_tree::~_slp_tree): Implement.
	(vect_free_slp_tree): Simplify.
	(vect_create_new_slp_node): Likewise.  Add nops parameter.
	(vect_build_slp_tree_2): Adjust.
	(vect_analyze_slp_instance): Likewise.
2020-05-22 08:51:24 +02:00
Martin Liska
dc7aee01cd
Add gcc/testsuite/go.test/test to ignored locations for gcc_commit.py.
contrib/ChangeLog:

2020-05-22  Martin Liska  <mliska@suse.cz>

	* gcc-changelog/git_commit.py: Add gcc/testsuite/go.test/test
	to ignored locations.
2020-05-22 08:03:03 +02:00
GCC Administrator
af288c7501 Daily bump. 2020-05-22 00:16:16 +00:00
Jason Merrill
c37b1442fd c++: Check constant array bounds later.
We give a better diagnostic for non-constant array bounds in
compute_array_index_type_loc, we don't need to diagnose it in the parser.
But to avoid a regression on parse/varmod1.C we need to actually check
non-dependent expressions in a template.

gcc/cp/ChangeLog:

	* decl.c (compute_array_index_type_loc): Diagnose expressions
	in a template that can't be constant.
	* parser.c (cp_parser_direct_declarator): Don't check
	non-constant array bounds here.

gcc/testsuite/ChangeLog:

	* c-c++-common/gomp/depend-iterator-2.c: Adjust.
	* g++.dg/ext/vla1.C: Adjust.
	* g++.dg/template/array9.C: Adjust.
	* g++.dg/template/error41.C: Adjust.
2020-05-21 18:04:22 -04:00
Jason Merrill
beb019d346 c++: Constant expression parsing and parameters.
The difference between a "potential" constant-expression and a regular
constant-expression is the treatment of parameters; in a constexpr function,
a parameter is potentially constant when evaluating a call to that function,
but it is not constant during parsing of the function.
cp_parser_constant_expression should check the latter rather than the
former.

gcc/cp/ChangeLog:

	* cp-tree.h (is_rvalue_constant_expression): Declare.
	* constexpr.c (is_rvalue_constant_expression): New.
	* parser.c (cp_parser_constant_expression): Use it.
	* decl.c (cp_finish_decl): Try to treat a constexpr initializer in a
	template as constant.
2020-05-21 18:04:22 -04:00
Jason Merrill
4f602147b6 c++: Improve error recovery for =.
In a template we were happily embedding error_mark_node in a MODOP_EXPR,
leading to confusion later.

gcc/cp/ChangeLog:

	* typeck.c (build_x_modify_expr): Handle error_mark_node arguments.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/lambda/lambda-ice30.C: Adjust.
	* g++.dg/cpp0x/lambda/lambda-ice31.C: Adjust.
	* g++.dg/ext/fixed1.C: Adjust.
	* g++.dg/template/crash107.C: Adjust.
	* g++.dg/template/error35.C: Adjust.
	* g++.dg/template/sizeof-template-argument.C: Adjust.
2020-05-21 18:04:22 -04:00
Jason Merrill
f7272c8a03 c++: Improve error-recovery for parms.
If a parameter is erroneous, we currently drop it, leading to "too many
arguments" errors later.  Treating the function as (...) avoids those
errors.

gcc/cp/ChangeLog:

	* decl.c (grokparms): Return NULL_TREE if any parms were erroneous.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/error33.C: Adjust.
2020-05-21 18:04:21 -04:00
Iain Sandoe
f898793b45 coroutines: Partial reversion of r11-437-g5ef067eb14d4.
co_returns are statements, not expressions; they do not need
to be wrapped in an EXPR_STMT.

gcc/cp/ChangeLog:

	* coroutines.cc (finish_co_return_stmt): Revert change to use
	finish_expr_stmt.
2020-05-21 19:55:26 +01:00
Rainer Orth
149c8c7c27 Include memmodel.h in adjust-alignment.c
Commit dfa4fcdba3 broke SPARC bootstrap:

In file included from ./tm_p.h:4,
                 from /vol/gcc/src/hg/master/local/gcc/adjust-alignment.c:28:
/vol/gcc/src/hg/master/local/gcc/config/sparc/sparc-protos.h:45:47: error: use of enum 'memmodel' without previous declaration
 extern void sparc_emit_membar_for_model (enum memmodel, int, int);
                                               ^~~~~~~~

Fixed by including memmodel.h.  Bootstrapped on sparc-sun-solaris2.11
and i386-pc-solaris2.11.

2020-05-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gcc/
	* adjust-alignment.c: Include memmodel.h.
2020-05-21 17:02:18 +02:00
H.J. Lu
a74630f320 config/i386/cpuid.h: Use hexadecimal in comments
Since Intel SDM uses hexadecimal, use hexadecimal in comments.

	PR target/95260
	* config/i386/cpuid.h: Use hexadecimal in comments.
2020-05-21 07:19:27 -07:00
Matthias Kretz
bc7a4f2f9e libstdc++: Enable simple invocation of runtest in testsuite
2020-05-21  Matthias Kretz  <kretz@kde.org>

	* testsuite/Makefile.am: Remove dup target_triplet and set tool,
	allowing runtest to work without arguments.
	* testsuite/Makefile.in: Regenerate.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
2020-05-21 14:16:19 +01:00
Patrick Palka
f65a3299a5 c++: template instantiation during fold_for_warn [PR94038]
Unfortunately, the previous fix to PR94038 is fragile.  When the
argument to fold_for_warn is a bare CALL_EXPR, then all is well: the
result of maybe_constant_value from fold_for_warn (with
uid_sensitive=true) is reused via the cv_cache in the subsequent call to
maybe_constant_value from cp_fold (with uid_sensitive=false), so we
avoid instantiating bar<int>.

But when the argument to fold_for_warn is more complex, e.g. an
INDIRECT_REF of a CALL_EXPR, as in the testcase below (due to bar<int>()
returning const int& which we need to decay to int) then from
fold_for_warn we call maybe_constant_value on the INDIRECT_REF, and from
cp_fold we call it on the CALL_EXPR, so there is no reuse via the
cv_cache and we therefore end up instantiating bar<int>.

So for a more robust solution to this general issue of warning flags
affecting code generation, it seems that we need a way to globally avoid
template instantiation during constexpr evaluation whenever we're
performing warning-dependent folding.

To that end, this patch replaces the flag constexpr_ctx::uid_sensitive
with a global flag uid_sensitive_constexpr_evaluation_p, and enables it
during fold_for_warn using an RAII helper.

The patch also adds a counter that keeps track of the number of times
uid_sensitive_constexpr_evaluation_p is called and returned true, and we
use this to determine whether the result of constexpr evaluation
was restricted by the flag.  This lets us safely update the cv_cache and
fold_cache from fold_for_warn in the most common case where the flag
did not restrict constexpr evaluation.

gcc/cp/ChangeLog:

	PR c++/94038
	* constexpr.c (constexpr_ctx::uid_sensitive): Remove field.
	(uid_sensitive_constexpr_evaluation_value): Define.
	(uid_sensitive_constexpr_evaluation_true_counter): Define.
	(uid_sensitive_constexpr_evaluation_p): Define.
	(uid_sensitive_constexpr_evaluation_sentinel): Define its
	constructor.
	(uid_sensitive_constexpr_evaluation_checker): Define its
	constructor and its evaluation_restricted_p method.
	(get_fundef_copy): Remove 'ctx' parameter.  Use u_s_c_e_p
	instead of constexpr_ctx::uid_sensitive.
	(cxx_eval_call_expression): Use u_s_c_e_p instead, and test it
	last.  Adjust call to get_fundef_copy.
	(instantiate_cx_fn_r): Test u_s_c_e_p so that we increment the
	counter if necessary.
	(cxx_eval_outermost_constant_expr): Remove 'uid_sensitive'
	parameter.  Adjust function body accordingly.
	(maybe_constant_value): Remove 'uid_sensitive' parameter and
	adjust function body accordingly.  Set up a
	uid_sensitive_constexpr_evaluation_checker, and use it to
	conditionally update the cv_cache.
	* cp-gimplify.c (cp_fold): Set up a
	uid_sensitive_constexpr_evaluation_checker, and use it to
	conditionally update the fold_cache.
	* cp-tree.h (maybe_constant_value): Update declaration.
	(struct uid_sensitive_constexpr_evaluation_sentinel): Define.
	(struct sensitive_constexpr_evaluation_checker): Define.
	* expr.c (fold_for_warn): Set up a
	uid_sensitive_constexpr_evaluation_sentinel before calling
	the folding subroutines.  Drop all but the first argument to
	maybe_constant_value.

gcc/testsuite/ChangeLog:

	PR c++/94038
	* g++.dg/warn/pr94038-2.C: New test.
2020-05-21 09:03:43 -04:00
H.J. Lu
5855bdfa06 libgcc: Move FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16
Move FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16 to avoid
changing libgcc ABI.

gcc/

	PR target/95212
	* config/i386/i386-builtins.c (processor_features): Move
	F_AVX512VP2INTERSECT after F_AVX512BF16.
	(isa_names_table): Likewise.

libgcc/

	PR target/95212
	* config/i386/cpuinfo.h (processor_features): Move
	FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16.
2020-05-21 05:33:11 -07:00
Martin Liska
2f20c7040f
Fix a test-case warning.
PR target/95229
	* g++.target/i386/pr95229.C: Fix
	error: unnamed type with no linkage used
	to declare variable ‘<unnamed class> e’ with linkage
	with -std=gnu++98.
2020-05-21 14:21:31 +02:00
Nathan Sidwell
ea097d141e Remove accidental testcase commit
* c-c++-common/cpp/cmd-1.c: Delete.
	* c-c++-common/cpp/cmd-1.h: Delete.
2020-05-21 05:10:52 -07:00
H.J. Lu
8ebc2f5e05 libgfortran: Use __builtin_cpu_is/__builtin_cpu_supports
* m4/matmul.m4: Don't include <config/i386/cpuinfo.h>.  Use
	__builtin_cpu_is/__builtin_cpu_supports
	* generated/matmul_c10.c: Regenerated.
	* generated/matmul_c16.c: Likewise.
	* generated/matmul_c4.c: Likewise.
	* generated/matmul_c8.c: Likewise.
	* generated/matmul_i1.c: Likewise.
	* generated/matmul_i16.c: Likewise.
	* generated/matmul_i2.c: Likewise.
	* generated/matmul_i4.c: Likewise.
	* generated/matmul_i8.c: Likewise.
	* generated/matmul_r10.c: Likewise.
	* generated/matmul_r16.c: Likewise.
	* generated/matmul_r4.c: Likewise.
	* generated/matmul_r8.c: Likewise.
2020-05-21 03:54:47 -07:00
Martin Liska
9e02b45ffc
Add outline-atomics to target attribute.
* common/config/aarch64/aarch64-common.c (aarch64_handle_option):
	Handle OPT_moutline_atomics.
	* config/aarch64/aarch64.c: Add outline-atomics to
	aarch64_attributes.

	* doc/extend.texi: Document the newly added target attribute.

	* gcc.target/aarch64/target_attr_20.c: New test.
	* gcc.target/aarch64/target_attr_21.c: New test.
2020-05-21 12:46:23 +02:00
Martin Liska
62b5b53e94
Prepare git_update_version.py for real usage.
* gcc-changelog/git_update_version.py: Prepare the script, the
	only missing piece is pushing of the updated branches.
2020-05-21 11:51:32 +02:00
Martin Liska
9722b1399a
Support DR entries for gcc-changelog.
* gcc-changelog/git_commit.py: Support DR entries/
	* gcc-changelog/test_email.py: New test for it.
	* gcc-changelog/test_patches.txt: New patch for it.
2020-05-21 10:23:50 +02:00
Martin Liska
e7c7cdc5f4
mklog: support parsing of DR.
* mklog.py: Support DR parsing.
	* test_mklog.py: New test for DR parsing.
2020-05-21 10:14:56 +02:00
Jonathan Wakely
f094665d46 libstdc++: Avoid constraint recursion with iterator_traits (PR 93983)
Checking whether a filesystem::path constructor argument is an iterator
requires instantiating std::iterator_traits. In C++20 that checks for
satisfaction of std::iterator_traits constraints, which checks if the
type is copyable, which can end up recursing back to the path
constructor. The fix in LWG 3420 is to reorder the cpp17-iterator
concept's constraints to check if the type looks vaguely like an
iterator before checking copyable. That avoids the recursion for types
which definitely aren't iterators, but isn't foolproof.

	PR libstdc++/93983
	* include/bits/iterator_concepts.h (__detail::__cpp17_iterator):
	Reorder constraints to avoid recursion when constructors use
	iterator_traits (LWG 3420).
	* testsuite/24_iterators/customization_points/lwg3420.cc: New test.
2020-05-21 07:32:15 +01:00
GCC Administrator
48c28b17a9 Daily bump. 2020-05-21 00:16:29 +00:00
Jonathan Wakely
0a1baad8eb libstdc++: Use macro for nodiscard attribute
* include/experimental/socket (basic_socket::is_open()
	(basic_socket_acceptor::is_open()): Use _GLIBCXX_NODISCARD macro.
2020-05-21 01:03:27 +01:00
Jonathan Wakely
b780db2ea3 libstdc++: Better requirements checking in Networking TS
Define concepts and traits for checking type requirements.

	* include/experimental/bits/net.h (__endpoint, __protocol)
	(__acceptable_protocol, __inet_protocol): New concepts.
	(__detail::__is_endpoint): Move trait from <experimental/socket>.
	(__is_protocol, __is_acceptable_protocol, __is_inet_protocol): New
	traits.
	(__endpoint, __protocol, __acceptable_protocol): New variable
	templates.
	* include/experimental/socket (__is_endpoint): Move to net.h header.
	(basic_socket, basic_socket_acceptor): Check requirements.
2020-05-21 00:59:55 +01:00
Jonathan Wakely
d9d34449bb libstdc++: Fix net::basic_socket::close(error_code&)
Also add some missing member functions, nodiscard attributes, and
noexcept-specifiers.

	* include/experimental/executor (use_future_t::use_future_t()): Fix
	incorrect noexcept-specifier.
	* include/experimental/internet (basic_resolver_results): Adjust
	whitespace.
	* include/experimental/socket (__basic_socket_impl::release): Add
	member function.
	(basic_socket(io_context&, const endpoint_type&)): Fix argument to
	target constructor.
	(basic_socket::release(), basic_socket::release(error_code&)): Add
	missing member functions.
	(basic_socket::is_open()): Add nodiscard attribute.
	(basic_socket::close(error_code&)): Pass argument to base function.
	(basic_socket_acceptor::release())
	(basic_socket_acceptor::release(error_code&)): Add missing member
	functions.
	(basic_socket_acceptor::is_open()): Add nodiscard attribute.
	(basic_socket_streambuf::error()): Add noexcept.
	(basic_socket_iostream::error()): Likewise.
	* testsuite/experimental/net/socket/basic_socket.cc: New test.
2020-05-21 00:59:55 +01:00
Jonathan Wakely
f26e72d831 libstdc++: Use 'using' for types in Networking TS headers
* include/experimental/buffer: Replace typedefs with
	alias-declarations.
	* include/experimental/executor: Likewise.
	* include/experimental/internet: Likewise.
	* include/experimental/socket: Likewise.
	* include/experimental/timer: Likewise.
2020-05-21 00:59:55 +01:00
Uros Bizjak
7797f5ec58 i386: Do not use commutative operands with (use) RTX [PR95238]
2020-05-21  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95218

	* config/i386/mmx.md (*mmx_<code>v2sf): Do not mark
	operands 1 and 2 commutative.  Manually swap operands.
	(*mmx_nabsv2sf2): Ditto.

	Partially revert:

	* config/i386/i386.md (*<code>tf2_1):
	Mark operands 1 and 2 commutative.
	(*nabstf2_1): Ditto.
	* config/i386/sse.md (*<code><mode>2): Mark operands 1 and 2
	commutative.  Do not swap operands.
	(*nabs<mode>2): Ditto.
2020-05-21 01:53:09 +02:00
Jozef Lawrynowicz
14984ea164 Fix premature omission of ChangeLog entry in ChangeLog file..
* g++.dg/warn/Wconversion-null-2.C: Add explicit declarations for l()
	and g() with int, long, long long and __int20 arguments.
	* g++.dg/warn/Wconversion-null.C: Likewise.
2020-05-20 22:41:42 +01:00
Jozef Lawrynowicz
edd482f310 TESTSUITE: Fix Wconversion-null*.C tests for aarch64 -mabi=ilp32
This fixes regressions for aarch64 with -mabi=ilp32 of the
Wconversion-null*.C tests, introduced by 92ea8e1bcc.

The "g (int)" declaration is required for that target where
sizeof(int) == sizeof(long) == sizeof(void *).

To handle the msp430/-mlarge case, an explicit declaration of
"g (__int20)" is required.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wconversion-null-2.C: Add explicit declarations for l()
	and g() with int, long, long long and __int20 arguments.
	* g++.dg/warn/Wconversion-null.C: Likewise.
2020-05-20 22:29:01 +01:00
Marek Polacek
4b38d56dba c++: C++20 DR 2237, disallow simple-template-id in cdtor.
This patch implements DR 2237 which says that a simple-template-id is
no longer valid as the declarator-id of a constructor or destructor;
see [diff.cpp17.class]#2.  It is not explicitly stated but out-of-line
destructors with a simple-template-id are also meant to be ill-formed
now.  (Out-of-line constructors like that are invalid since DR1435 I
think.)  This change only applies to C++20; it is not a DR against C++17.

I'm not crazy about the diagnostic in constructors but ISTM that
cp_parser_constructor_declarator_p shouldn't print errors.

	DR 2237
	* parser.c (cp_parser_unqualified_id): Reject simple-template-id as
	the declarator-id of a destructor.
	(cp_parser_constructor_declarator_p): Reject simple-template-id as
	the declarator-id of a constructor.

	* g++.dg/DRs/dr2237.C: New test.
	* g++.dg/parse/constructor2.C: Add dg-error for C++20.
	* g++.dg/parse/dtor12.C: Likewise.
	* g++.dg/parse/dtor4.C: Likewise.
	* g++.dg/template/dtor4.C: Adjust dg-error.
	* g++.dg/template/error34.C: Likewise.
	* g++.old-deja/g++.other/inline15.C: Only run for C++17 and lesses.
	* g++.old-deja/g++.pt/ctor2.C: Add dg-error for C++20.
2020-05-20 17:00:06 -04:00
Nathan Sidwell
38a4db21e1 preprocessor: Revert premature change
This part of the cleanup patch turns out to require more pieces to
function correctly.  I must have got confused over which tree I was
testing.  The very first map has a different pointer to the file name,
so doesn't match with a pointer compare. We were relying on that.

	* c-common.c (try_to_locate_new_include_insertion_point): Revert change.
2020-05-20 13:43:11 -07:00
Nathan Sidwell
c22027a00e preprocessor: cleanups in c-common handling
* c-common.c (try_to_locate_new_include_insertion_point): Use
	strcmp to compare filenames.
	* c-lex.c (init_c_lex): Move declaration to initialization.
	* c-opts.c (handle_deferred_opts): Move cpp_get_deps call into
	deferred count loop.
2020-05-20 11:17:52 -07:00
Marek Polacek
2a8565fa11 c++: Implement DR 2289, Uniqueness of structured binding names [PR94553]
DR 2289 clarified that since structured bindings have no C compatibility
implications, they should be unique in their declarative region, see
[basic.scope.declarative]/4.2.

The duplicate_decls hunk is the gist of the patch, but that alone would
not be enough to detect the 'A' case: cp_parser_decomposition_declaration
uses

13968       tree decl2 = start_decl (declarator, &decl_specs, SD_INITIALIZED,
13969                                NULL_TREE, NULL_TREE, &elt_pushed_scope);

to create the 'A' VAR_DECL but in this start_decl's grokdeclarator we
don't do fit_decomposition_lang_decl because the declarator kind is not
cdk_decomp, so then when start_decl calls maybe_push_decl, the decl 'A'
isn't DECL_DECOMPOSITION_P and we don't detect this case.  So I needed a
way to signal to start_decl that it should fit_decomposition_lang_decl.
In this patch, I'm adding SD_DECOMPOSITION flag to say that the variable
is initialized and it should also be marked as DECL_DECOMPOSITION_P.

	DR 2289
	PR c++/94553
	* cp-tree.h (SD_DECOMPOSITION): New flag.
	* decl.c (duplicate_decls): Make sure a structured binding is unique
	in its declarative region.
	(start_decl): If INITIALIZED is SD_DECOMPOSITION, call
	fit_decomposition_lang_decl.
	(grokdeclarator): Compare INITIALIZED directly to SD_* flags.
	* parser.c (cp_parser_decomposition_declaration): Pass SD_DECOMPOSITION
	to start_decl.

	* g++.dg/cpp1z/decomp52.C: New test.
2020-05-20 13:35:09 -04:00
Uros Bizjak
3872a519c8 i386: Fix zero/sign extend expanders [PR95229]
2020-05-20  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95229
	* config/i386/sse.md (<code>v8qiv8hi2): Use
	simplify_gen_subreg instead of simplify_subreg.
	(<code>v8qiv8si2): Ditto.
	(<code>v4qiv4si2): Ditto.
	(<code>v4hiv4si2): Ditto.
	(<code>v8qiv8di2): Ditto.
	(<code>v4qiv4di2): Ditto.
	(<code>v2qiv2di2): Ditto.
	(<code>v4hiv4di2): Ditto.
	(<code>v2hiv2di2): Ditto.
	(<code>v2siv2di2): Ditto.

gcc/testsuite/ChangeLog:
	PR target/95229
	* g++.target/i386/pr95229.C: New test.
2020-05-20 19:00:39 +02:00
Uros Bizjak
2cf6f31527 i386: Fix *pushsi2_rex64 constraints [PR95238]
2020-05-20  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95238
	* config/i386/i386.md (*pushsi2_rex64):
	Use "e" constraint instead of "i".
2020-05-20 18:57:32 +02:00
Martin Liska
2f809e773e
git_email.py: fix duplicate author_lines.
* gcc-changelog/git_commit.py: Add author_tuple
	only if not present in author_lines.
	* gcc-changelog/test_email.py: New test.
	* gcc-changelog/test_patches.txt: Add new patch.
2020-05-20 16:10:33 +02:00
Jan Hubicka
03d90a20a1 Avoid SCC hashing on unmergeable trees
This is new incarantion of patch to identify unmergeable tree at streaming out
time rather than streaming in and to avoid pickling them to sccs with with hash
codes.

Building cc1 plus this patch reduces:

[WPA] read 4452927 SCCs of average size 1.986030
[WPA] 8843646 tree bodies read in total
[WPA] tree SCC table: size 524287, 205158 elements, collision ratio: 0.505204
[WPA] tree SCC max chain length 43 (size 1)
[WPA] Compared 947551 SCCs, 780270 collisions (0.823460)
[WPA] Merged 944038 SCCs
[WPA] Merged 5253521 tree bodies
[WPA] Merged 590027 types
...
[WPA] Size of mmap'd section decls: 99229066 bytes
[WPA] Size of mmap'd section function_body: 18398837 bytes
[WPA] Size of mmap'd section refs: 733678 bytes
[WPA] Size of mmap'd section jmpfuncs: 2965981 bytes
[WPA] Size of mmap'd section pureconst: 170248 bytes
[WPA] Size of mmap'd section profile: 17985 bytes
[WPA] Size of mmap'd section symbol_nodes: 3392736 bytes
[WPA] Size of mmap'd section inline: 2693920 bytes
[WPA] Size of mmap'd section icf: 435557 bytes
[WPA] Size of mmap'd section offload_table: 0 bytes
[WPA] Size of mmap'd section lto: 4320 bytes
[WPA] Size of mmap'd section ipa_sra: 651660 bytes

... to ...

[WPA] read 3312246 unshared trees
[WPA] read 1144381 mergeable SCCs of average size 4.833785
[WPA] 8843938 tree bodies read in total
[WPA] tree SCC table: size 524287, 197767 elements, collision ratio: 0.506446
[WPA] tree SCC max chain length 43 (size 1)
[WPA] Compared 946614 SCCs, 775077 collisions (0.818789)
[WPA] Merged 943798 SCCs
[WPA] Merged 5253336 tree bodies
[WPA] Merged 590105 types
....
[WPA] Size of mmap'd section decls: 81262144 bytes
[WPA] Size of mmap'd section function_body: 14702611 bytes
[WPA] Size of mmap'd section ext_symtab: 0 bytes
[WPA] Size of mmap'd section refs: 733695 bytes
[WPA] Size of mmap'd section jmpfuncs: 2332150 bytes
[WPA] Size of mmap'd section pureconst: 170292 bytes
[WPA] Size of mmap'd section profile: 17986 bytes
[WPA] Size of mmap'd section symbol_nodes: 3393358 bytes
[WPA] Size of mmap'd section inline: 2567939 bytes
[WPA] Size of mmap'd section icf: 435633 bytes
[WPA] Size of mmap'd section lto: 4320 bytes
[WPA] Size of mmap'd section ipa_sra: 651824 bytes

so results in about 22% reduction in global decl stream and 24% reduction on
function bodies stream (which is read mostly by ICF)

Martin, the zstd compression breaks the compression statistics (it works when
GCC is configured for zlib)

At first ltrans I get:

[LTRANS] Size of mmap'd section decls: 3734248 bytes
[LTRANS] Size of mmap'd section function_body: 4895962 bytes

... to ...

[LTRANS] Size of mmap'd section decls: 3479850 bytes
[LTRANS] Size of mmap'd section function_body: 3722935 bytes

So 7% reduction of global stream and 31% reduction of function bodies.

Stream in seems to get about 3% faster and stream out about 5% but it is
close to noise factor of my experiment.  I expect bigger speedups on
Firefox but I did not test it today since my Firefox setup broke again.
GCC is not very good example on the problem with anonymous namespace
types since we do not have so many of them.

Sice of object files in gcc directory is reduced by 11% (because hash
numbers do not compress well I guess).

The patch makes DFS walk to recognize trees that are not merged (anonymous
namespace, local function/variable decls, anonymous types etc).  As discussed
on IRC this is now done during the SCC walk rather than during the hash
computation.  When local tree is discovered we know that SCC components of everything that is on
the stack reffers to it and thus is also local. Moreover we mark trees into hash set in output block
so if we get a cross edge referring to local tree it gets marked too.

Patch also takes care of avoiding SCC wrappers around some trees. In particular
 1) singleton unmergeable SCCs are now streamed inline in global decl stream
    This includes INTEGER_CSTs and IDENTIFIER_NODEs that are shared by different
    code than rest of tree merging.
 2) We use LTO_trees instead of LTO_tree_scc to wrap unmergeable SCC components.
    It is still necessary to mark them because of forward references.  LTO_trees
    has simple header with number of trees and then things are streamed same way
    as for LTO_tree_scc. That is tree headers first followed by pickled references
    so things may point to future.

    Of course it is not necessary for LTO_tree_scc to be single component and
    streamer out may group more components together, but I decided to not snowball
    the patch even more
 3) In local streams when lto_output_tree is called and the topmost SCC components
    turns out to be singleton we stream the tree directly
    instead of LTO_tree_scc, hash code, pickled tree, reference to just stremaed tree.

    LTO_trees is used to wrap all trees needed to represent tree being streamed.
    It would make sense again to use only one LTO_trees rather than one per SCC
    but I think this can be done incrementally.

In general local trees are now recognized by new predicate local_tree_p

Bit subtle is handing of TRANLSATION_UNIT_DECL, INTEGER_CST and
IDENTIFIER_NODE.

TRANSLATION_UNIT_DECL a local tree but references to it does not make
other trees local (because we also understand local decls now).
So I check for it later after localness propagation is done.

INTEGER_CST and IDENTIFIER_NODEs are merged but not via the tree merging
machinery. So it makes sense to stream them as unmergeable trees but we
still need to compute their hashes so SCCs referring them do not get too
large collision chains.  For this reason they are checked just prior
stream out.

lto-bootstrapped/regteted x86_64-linux, OK?

gcc/ChangeLog:

2020-05-19  Jan Hubicka  <hubicka@ucw.cz>

	* lto-streamer-in.c (lto_input_scc): Add SHARED_SCC parameter.
	(lto_input_tree_1): Strenghten sanity check.
	(lto_input_tree): Update call of lto_input_scc.
	* lto-streamer-out.c: Include ipa-utils.h
	(create_output_block): Initialize local_trees if merigng is going
	to happen.
	(destroy_output_block): Destroy local_trees.
	(DFS): Add max_local_entry.
	(local_tree_p): New function.
	(DFS::DFS): Initialize and maintain it.
	(DFS::DFS_write_tree): Decide on streaming format.
	(lto_output_tree): Stream inline singleton SCCs
	* lto-streamer.h (enum LTO_tags): Add LTO_trees.
	(struct output_block): Add local_trees.
	(lto_input_scc): Update prototype.

gcc/lto/ChangeLog:

2020-05-19  Jan Hubicka  <hubicka@ucw.cz>

	* lto-common.c (compare_tree_sccs_1): Sanity check that we never
	read TRANSLATION_UNIT_DECL.
	(process_dref): Break out from ...
	(unify_scc): ... here.
	(process_new_tree): Break out from ...
	(lto_read_decls): ... here; handle streaming of singleton trees.
	(print_lto_report_1): Update statistics.
2020-05-20 15:58:22 +02:00
Mark Eggleston
eb069ae881 Fortran : ProcPtr function results: 'ppr@' in error message PR39695
The value 'ppr@' is set in the name of result symbol, the actual
name of the symbol is in the procedure name symbol pointed
to by the result symbol's namespace (ns). When reporting errors for
symbols that have the proc_pointer attribute check whether the
result attribute is set and set the name accordingly.

2020-05-20  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/

	PR fortran/39695
	* resolve.c (resolve_fl_procedure): Set name depending on
	whether the result attribute is set.  For PROCEDURE/RESULT
	conflict use the name in sym->ns->proc_name->name.
	* symbol.c (gfc_add_type): Add check for function and result
	attributes use sym->ns->proc_name->name if both are set.
	Where the symbol cannot have a type use the name in
	sym->ns->proc_name->name.

2020-05-20  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/39695
	* gfortran.dg/pr39695_1.f90: New test.
	* gfortran.dg/pr39695_2.f90: New test.
	* gfortran.dg/pr39695_3.f90: New test.
	* gfortran.dg/pr39695_4.f90: New test.
2020-05-20 14:28:41 +01:00
Nathan Sidwell
4623a6f2d0 preprocessor: Replace some flags with a single enum
_cpp_find_file has 3 bool arguments, at most one of which is ever set.
Ripe for replacing with a 4-state enum.  Also, this is C++, so
'typedef struct Foo Foo' is unnecessary.

	* internal.h (typedef _cpp_file): Delete, unnecessary in C++.
	(enum _cpp_find_file_kind): New.
	(_cpp_find_file): Use it, not 3 bools.
	* files.c (_cpp_find_file): Use _cpp_find_file_kind enum, not
	bools.
	(cpp_make_system_header): Break overly long line.
	(_cpp_stack_include, _cpp_fake_include)
	(_cpp_do_file_change, _cpp_compare_file_date, _cpp_has_header): Adjust.
	* init.c (cpp_read_main): Adjust _cpp_find_file call.
2020-05-20 06:23:24 -07:00
Patrick Palka
610ae2dbbf c++: spec_hasher and TYPENAME_TYPE resolution [PR95223]
After enabling sanitization of the specialization tables, we are
triggering one of the hash table sanity checks in the below testcase.

The reason is that when looking up the specialization j<int> in the
type_specializations table, the sanity check finds that the existing
entry j<n<t>::m> compares equal to j<int> but hashes differently.

The discrepancy is due to structural_comptypes looking through
TYPENAME_TYPEs (via resolve_typename_type), something which
iterative_hash_template_arg doesn't do.  So the TYPENAME_TYPE n<t>::m is
considered equal to int, but the hashes of these two template arguments
are different.

It seems wrong for the result of a specialization table lookup to depend
on the current scope, so this patch makes structural_comptypes avoid
calling resolve_typename_type when comparing_specializations.

In order for the below testcase to deterministically trigger the
sanitization error without this patch, we also need to fix the location
of the call to hash_table::verify within hash_table::find_with_hash.

gcc/ChangeLog:

	PR c++/95223
	* hash-table.h (hash_table::find_with_hash): Move up the call to
	hash_table::verify.

gcc/cp/ChangeLog:

	PR c++/95223
	* typeck.c (structural_comptypes): Don't perform
	context-dependent resolution of TYPENAME_TYPEs when
	comparing_specializations.

gcc/testsuite/ChangeLog:

	PR c++/95223
	* g++.dg/template/typename23.C: New test.
2020-05-20 09:15:48 -04:00
Martin Liska
053dc901e0
Fill up {,un}compression stats for ZSTD in LTO.
* lto-compress.c (lto_compression_zstd): Fill up
	num_compressed_il_bytes.
	(lto_uncompression_zstd): Likewise for num_uncompressed_il_bytes here.
2020-05-20 14:39:21 +02:00
Srinath Parvathaneni
0b0ad7d0d0 Add missing testsuite/Changelog for PR94595 bug fix. 2020-05-20 13:20:55 +01:00
Richard Biener
b2f26af32b tree-optimization/95219 - improve IV selection for induction
This improves code generation with SSE2 for the testcase by
making sure to only generate a single IV when the group size
is a multiple of the vector size.  It also adjusts the testcase
which was passing before.

2020-05-20  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95219
	* tree-vect-loop.c (vectorizable_induction): Reduce
	group_size before computing the number of required IVs.

	* gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c: Adjust.
2020-05-20 14:09:26 +02:00