180918 Commits

Author SHA1 Message Date
Tobias Burnus
c283a711c8 Fortran: Fix type-decl for PDT / wrong-code pdt_14.f03 issue [PR97652]
Parameterized derived types are handled in a special way and start with 'Pdt'.
If the 'P' is not uppercase, gfc_get_derived_type (which calls
gfc_get_module_backend_decl) does not find the existing declaration and
builds a new type. The middle end then sees those types as being different
and nonalising, creating an endless loop for pdt_14.f03.

gcc/fortran/ChangeLog:

	PR fortran/97652
	* module.c (mio_symbol): Fix symbol name for pdt_type.
2020-11-06 08:26:51 +01:00
Jeff Law
32ee472864 Improve overflow check
Convert
x < (short) ((unsigned short)x + const)
to
x <= SHORT_MAX – const
(and similarly for other integral types) if const is not 0.

gcc/
	PR tree-optimization/97223
	* match.pd (overflow detection and optimization): Handle conversions.

gcc/testsuite/

	* gcc.dg/no-strict-overflow-4.c: Adjust expected output.
2020-11-05 20:46:00 -07:00
Eugene Rozenfeld
6483f05989 Simplify x >> x to 0. This fixes PR96701.
gcc/
	* match.pd (x >> x): New pattern.

gcc/testsuite

	* gcc.dg/self-right-shift.c: New test.
2020-11-05 20:35:45 -07:00
Kito Cheng
56ecdc2f02 RISC-V: Mark non-export symbol static and const in riscv-common.c
gcc/ChangeLog:

	* common/config/riscv/riscv-common.c (riscv_implied_info):
	Add static and const.
	(riscv_subset_list::handle_implied_ext): Add const due to
	riscv_implied_info changed to const.
2020-11-06 11:20:20 +08:00
Kito Cheng
65e82636bc PR target/96307: Fix KASAN option checking.
- Disable kasan if target is unsupported and -fasan-shadow-offset= is not
   given, no matter `--param asan-stack=1` is given or not.

 - Moving KASAN option checking testcase to gcc.dg, those testcase could be
   useful for all other target which not support asan.

 - Verifed on riscv and x86.

gcc/ChangeLog:

	PR target/96307
	* toplev.c (process_options): Remove param_asan_stack checking for kasan
	option checking.

gcc/testsuite/ChangeLog:

	PR target/96307
	* gcc.dg/pr96307.c: New.
	* gcc.target/riscv/pr96260.c: Move this test case from here to ...
	* gcc.dg/pr96260.c: ... here.
	* gcc.target/riscv/pr91441.c: Move this test case from here to ...
	* gcc.dg/pr91441.c: ... here.
	* lib/target-supports.exp (check_effective_target_no_fsanitize_address):
	New proc.
2020-11-06 11:08:52 +08:00
liuhongt
f72af3af8d MAINTAINERS: Add myself for write after approval.
ChangeLog:

2019-03-17  Hongtao Liu  <hongtao.liu@intel.com>

	* MAINTAINERS (Write After Approval): Add myself.
2020-11-06 09:28:29 +08:00
GCC Administrator
0cfd9109e5 Daily bump. 2020-11-06 00:16:34 +00:00
Marek Polacek
44e1f63e20 c++: Add auto_diagnostic_group to check_handlers_1.
This was missing.

gcc/cp/ChangeLog:

	* except.c (check_handlers_1): Add auto_diagnostic_group.
2020-11-05 18:24:19 -05:00
Marek Polacek
e6fd02cc6d c++: Fix decltype(auto) deduction with rvalue ref [PR78209]
Here's a small deficiency in decltype(auto).  [dcl.type.auto.deduct]/5:
If the placeholder-type-specifier is of the form decltype(auto), [...]
the type deduced for T is determined [...] as though E had been the operand
of the decltype.  So:

  int &&i = 0;
  decltype(auto) j = i; // should behave like int &&j = i; error

We deduce j's type in do_auto_deduction via finish_decltype_type which
takes an 'id' argument.  Currently we compute 'id' as false, because
stripped_init is *i (a REFERENCE_REF_P).  But it seems to me we should
rather set 'id' to true here, by looking through the REFERENCE_REF_P,
so that finish_decltype_type DTRT.

gcc/cp/ChangeLog:

	PR c++/78209
	* pt.c (do_auto_deduction): If init is REFERENCE_REF_P, use its
	first operand.

gcc/testsuite/ChangeLog:

	PR c++/78209
	* g++.dg/cpp1y/decltype-auto1.C: New test.
2020-11-05 16:34:22 -05:00
Marek Polacek
1d87302a8e c++: Add -Wexceptions warning option [PR97675]
This PR asks that we add a warning option for an existing (very old)
warning, so that it can be disabled selectively.  clang++ uses
-Wexceptions for this, so I added this new option rather than using
e.g. -Wnoexcept.

gcc/c-family/ChangeLog:

	PR c++/97675
	* c.opt (Wexceptions): New option.

gcc/cp/ChangeLog:

	PR c++/97675
	* except.c (check_handlers_1): Use OPT_Wexceptions for the
	warning.  Use inform for the second part of the warning.

gcc/ChangeLog:

	PR c++/97675
	* doc/invoke.texi: Document -Wexceptions.

gcc/testsuite/ChangeLog:

	PR c++/97675
	* g++.old-deja/g++.eh/catch10.C: Adjust dg-warning.
	* g++.dg/warn/Wexceptions1.C: New test.
	* g++.dg/warn/Wexceptions2.C: New test.
2020-11-05 15:57:22 -05:00
Marek Polacek
5b2003105b c++: Implement -Wvexing-parse [PR25814]
This patch implements the -Wvexing-parse warning to warn about the
sneaky most vexing parse rule in C++: the cases when a declaration
looks like a variable definition, but the C++ language requires it
to be interpreted as a function declaration.  This warning is on by
default (like clang++).  From the docs:

  void f(double a) {
    int i();        // extern int i (void);
    int n(int(a));  // extern int n (int);
  }

  Another example:

  struct S { S(int); };
  void f(double a) {
    S x(int(a));   // extern struct S x (int);
    S y(int());    // extern struct S y (int (*) (void));
    S z();         // extern struct S z (void);
  }

You can find more on this in [dcl.ambig.res].

I spent a fair amount of time on fix-it hints so that GCC can recommend
various ways to resolve such an ambiguity.  Sometimes that's tricky.
E.g., suggesting default-initialization when the class doesn't have
a default constructor would not be optimal.  Suggesting {}-init is also
not trivial because it can use an initializer-list constructor if no
default constructor is available (which ()-init wouldn't do).  And of
course, pre-C++11, we shouldn't be recommending {}-init at all.

I also uncovered a bug in cp_parser_declarator, where we were setting
*parenthesized_p to true despite the comment saying the exact opposite.

gcc/c-family/ChangeLog:

	PR c++/25814
	* c.opt (Wvexing-parse): New option.

gcc/cp/ChangeLog:

	PR c++/25814
	* cp-tree.h (enum cp_tree_index): Add CPTI_EXPLICIT_VOID_LIST.
	(explicit_void_list_node): Define.
	(PARENTHESIZED_LIST_P): New macro.
	(struct cp_declarator): Add function::parens_loc.
	* decl.c (cxx_init_decl_processing): Initialize explicit_void_list_node.
	(grokparms): Also break when explicit_void_list_node.
	* parser.c (make_call_declarator): New location_t parameter.  Use it
	to set declarator->u.function.parens_loc.
	(cp_parser_lambda_declarator_opt): Pass UNKNOWN_LOCATION to
	make_call_declarator.
	(warn_about_ambiguous_parse): New function.
	(cp_parser_init_declarator): Call warn_about_ambiguous_parse.
	(cp_parser_declarator): Set *parenthesized_p to false rather than to
	true.
	(cp_parser_direct_declarator): Create a location for the function's
	parentheses and pass it to make_call_declarator.
	(cp_parser_parameter_declaration_clause): Return explicit_void_list_node
	for (void).
	(cp_parser_parameter_declaration_list): Set PARENTHESIZED_LIST_P
	in the parameters tree.

gcc/ChangeLog:

	PR c++/25814
	* doc/invoke.texi: Document -Wvexing-parse.

gcc/testsuite/ChangeLog:

	PR c++/25814
	* g++.dg/cpp2a/fn-template16.C: Add a dg-warning.
	* g++.dg/cpp2a/fn-template7.C: Likewise.
	* g++.dg/lookup/pr80891-5.C: Likewise.
	* g++.dg/lto/pr79050_0.C: Add extern.
	* g++.dg/lto/pr84805_0.C: Likewise.
	* g++.dg/parse/pr58898.C: Add a dg-warning.
	* g++.dg/template/scope5.C: Likewise.
	* g++.old-deja/g++.brendan/recurse.C: Likewise.
	* g++.old-deja/g++.jason/template4.C: Likewise.
	* g++.old-deja/g++.law/arm4.C: Likewise.
	* g++.old-deja/g++.mike/for2.C: Likewise.
	* g++.old-deja/g++.other/local4.C: Likewise.
	* g++.old-deja/g++.pt/crash3.C: Likewise.
	* g++.dg/warn/Wvexing-parse.C: New test.
	* g++.dg/warn/Wvexing-parse2.C: New test.
	* g++.dg/warn/Wvexing-parse3.C: New test.
	* g++.dg/warn/Wvexing-parse4.C: New test.
	* g++.dg/warn/Wvexing-parse5.C: New test.
	* g++.dg/warn/Wvexing-parse6.C: New test.
	* g++.dg/warn/Wvexing-parse7.C: New test.

libstdc++-v3/ChangeLog:

	PR c++/25814
	* testsuite/20_util/reference_wrapper/lwg2993.cc: Add a dg-warning.
	* testsuite/25_algorithms/generate_n/87982_neg.cc: Likewise.
2020-11-05 15:55:14 -05:00
Andrew MacLeod
22984f3f09 Pass multi-range from range_query::value_* routines
fix range-ops equal/not_equal to not reuse the result range as intermediary.
value_query::value routines should pasa multi-range in as some other rangeop
routines build into this result, so we may need better precision.

	gcc/
	PR tree-optimization/97725
	* range-op.cc (operator_equal::fold_range): Use new tmp value.
	(operator_not_equal::fold_range): Ditto.
	* value-query.cc (range_query::value_of_expr): Use int_range_max
	not a value_range.
	(range_query::value_on_edge): Ditto.
	(range_query::value_of_stmt): Ditto.
	gcc/testsuite/
	* gcc.dg/pr97725.c: New.
2020-11-05 15:26:49 -05:00
Jonathan Wakely
d16d45655d libstdc++: Fix typo in ChangeLog entry 2020-11-05 19:35:34 +00:00
Jonathan Wakely
cdd2d448d8 libstdc++: Fix constraints on std::optional comparisons [PR 96269]
The relational operators for std::optional were using the wrong types
in the declval expressions used to constrain them. Instead of using
const lvalues they were using non-const rvalues, which meant that a type
might satisfy the constraints but then give an error when the function
body was instantiated.

libstdc++-v3/ChangeLog:

	PR libstdc++/96269
	* include/std/optional (operator==, operator!=, operator<)
	(operator>, operator<=, operator>=): Fix types used in
	SFINAE constraints.
	* testsuite/20_util/optional/relops/96269.cc: New test.
2020-11-05 19:09:22 +00:00
Kwok Cheung Yeung
10508db867 openmp: Mark deprecated symbols in OpenMP 5.0
2020-11-05  Ulrich Drepper  <drepper@redhat.com>
	    Kwok Cheung Yeung  <kcy@codesourcery.com>

	libgomp/
	* Makefile.am (%.mod): Add -cpp and -fopenmp to compile flags.
	* Makefile.in: Regenerate.
	* fortran.c: Wrap uses of omp_set_nested and omp_get_nested with
	pragmas to ignore -Wdeprecated-declarations warnings.
	* icv.c: Likewise.
	* omp.h.in (__GOMP_DEPRECATED_5_0): Define.
	Mark omp_lock_hint_* enum values, omp_lock_hint_t, omp_set_nested,
	and omp_get_nested with __GOMP_DEPRECATED_5_0.
	* omp_lib.f90.in: Mark omp_get_nested and omp_set_nested as
	deprecated.
	* testsuite/libgomp.c++/affinity-1.C: Add -Wno-deprecated-declarations
	to test options.
	* testsuite/libgomp.c/affinity-1.c: Likewise.
	* testsuite/libgomp.c/affinity-2.c: Likewise.
	* testsuite/libgomp.c/appendix-a/a.15.1.c: Likewise.
	* testsuite/libgomp.c/lib-1.c: Likewise.
	* testsuite/libgomp.c/nested-1.c: Likewise.
	* testsuite/libgomp.c/nested-2.c: Likewise.
	* testsuite/libgomp.c/nested-3.c: Likewise.
	* testsuite/libgomp.c/pr32362-1.c: Likewise.
	* testsuite/libgomp.c/pr32362-2.c: Likewise.
	* testsuite/libgomp.c/pr32362-3.c: Likewise.
	* testsuite/libgomp.c/pr35549.c: Likewise.
	* testsuite/libgomp.c/pr42942.c: Likewise.
	* testsuite/libgomp.c/pr61200.c: Likewise.
	* testsuite/libgomp.c/sort-1.c: Likewise.
	* testsuite/libgomp.c/target-5.c: Likewise.
	* testsuite/libgomp.c/target-6.c: Likewise.
	* testsuite/libgomp.c/teams-1.c: Likewise.
	* testsuite/libgomp.c/thread-limit-1.c: Likewise.
	* testsuite/libgomp.c/thread-limit-2.c: Likewise.
	* testsuite/libgomp.c/thread-limit-4.c: Likewise.
	* testsuite/libgomp.fortran/affinity1.f90: Likewise.
	* testsuite/libgomp.fortran/lib1.f90: Likewise.
	* testsuite/libgomp.fortran/lib2.f: Likewise.
	* testsuite/libgomp.fortran/nested1.f90: Likewise.
	* testsuite/libgomp.fortran/teams1.f90: Likewise.
2020-11-05 10:32:56 -08:00
Olivier Hainque
7fa1b2c8da Handle use of r18 as a TCB pointer on aarch64-vxworks
Pick an alternate static chain regnum and document that
the port needs to be configured to issue -ffixed-r18 by
default.  The current definition of TARGET_OS_USES_R18 is
not honored by the common part of the back-end.

2020-11-04  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/aarch64/aarch64-vxworks.h (TARGET_OS_USES_R18):
	Remove definition.
	(STATIC_CHAIN_REGNUM): Redefine to 9.
2020-11-05 18:31:28 +00:00
Jonathan Wakely
2f93a2a03a libstdc++: Use non-throwing increment in recursive_directory_iterator [PR 97731]
As described in the PR, the recursive_directory_iterator constructor
calls advance(ec), but ec is a pointer so it calls _Dir::advance(bool).
The intention was to either call advance() or advance(*ec) depending
whether the pointer is null or not.

This fixes the bug and renames the parameter to ecptr to make similar
mistakes less likely in future.

libstdc++-v3/ChangeLog:

	PR libstdc++/97731
	* src/filesystem/dir.cc (recursive_directory_iterator): Call the
	right overload of _Dir::advance.
	* testsuite/experimental/filesystem/iterators/97731.cc: New test.
2020-11-05 18:01:26 +00:00
Jonathan Wakely
710508c7b1 libstdc++: Fix multiple definitions of std::exception_ptr functions [PR 97729]
This fixes some multiple definition errors caused by the changes for
PR libstdc++/90295. The previous solution for inlining the members of
std::exception_ptr but still exporting them from the library was to
suppress the 'inline' keyword on those functions when compiling
libsupc++/eh_ptr.cc, so they get defined in that file. That produces ODR
violations though, because there are now both inline and non-inline
definitions in the library, due to the use of std::exception_ptr in
other files sucg as src/c++11/future.cc.

The new solution is to define all the relevant members as 'inline'
unconditionally, but use __attribute__((used)) to cause definitions to
be emitted in libsupc++/eh_ptr.cc as before. This doesn't quite work
however, because PR c++/67453 means the attribute is ignored on
constructors and destructors. As a workaround, the old solution
(conditionally inline) is still used for those members, but they are
given the always_inline attribute so that they aren't emitted in
src/c++11/future.o as inline definitions.

libstdc++-v3/ChangeLog:

	PR libstdc++/97729
	* include/std/future (__basic_future::_M_get_result): Use
	nullptr for null pointer constant.
	* libsupc++/eh_ptr.cc (operator==, operator!=): Remove
	definitions.
	* libsupc++/exception_ptr.h (_GLIBCXX_EH_PTR_USED): Define
	macro to conditionally add __attribute__((__used__)).
	(operator==, operator!=, exception_ptr::exception_ptr())
	(exception_ptr::exception_ptr(const exception_ptr&))
	(exception_ptr::~exception_ptr())
	(exception_ptr::operator=(const exception_ptr&))
	(exception_ptr::swap(exception_ptr&)): Always define as
	inline. Add macro to be conditionally "used".
2020-11-05 18:01:25 +00:00
Jonathan Wakely
50b840ac5e libstdc++: Export basic_stringbuf constructor [PR 97729]
libstdc++-v3/ChangeLog:

	PR libstdc++/97729
	* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Add exports.
	* src/c++20/sstream-inst.cc (basic_stringbuf): Instantiate
	private constructor taking __xfer_bufptrs.
2020-11-05 18:01:25 +00:00
Olivier Hainque
8f027412f6 Add dg-require-effective-target fpic to gcc.dg test
The test uses -fpic and doesn't query the target support
for that option otherwise, resulting in failure on configurations
not supporting -fpic such as VxWorks for kernel mode.

2020-11-03  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/
	* gcc.dg/sms-12.c: Add dg-require-effective-target fpic.
2020-11-05 17:49:20 +00:00
Olivier Hainque
5773855c3f Move and adjust PROBE_STACK reg definitions for aarch64
The change moves the definitions of PROBE_STACK_FIRST_REG
and PROBE_STACK_SECOND_REG to a more appropriate place for such
items (here, in aarch64.md as suggested by Richard), and adjusts
their value from r9/r10 to r10/r11 to free r9 for a possibly
more general purpose (e.g. as a static chain at least on targets
which have a private use of r18, such as Windows or Vxworks).

2020-11-07  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/aarch64/aarch64.md: Define PROBE_STACK_FIRST_REGNUM
	and PROBE_STACK_SECOND_REGNUM constants, designating r10/r11.
	Replacements for the PROBE_STACK_FIRST/SECOND_REG constants in
	aarch64.c.
	* config/aarch64/aarch64.c (PROBE_STACK_FIRST_REG): Remove.
	(PROBE_STACK_SECOND_REG): Remove.
	(aarch64_emit_probe_stack_range): Adjust to the _REG -> _REGNUM
	suffix update for PROBE_STACK register numbers.
2020-11-05 17:28:58 +00:00
Jan Hubicka
58c9de4654 Add fnspecs for C++ new and delete operators
gcc/ChangeLog:

	* gimple.c (gimple_call_fnspec): Handle C++ new and delete.
	* gimple.h (gimple_call_from_new_or_delete): Constify parameter.

gcc/testsuite/ChangeLog:

	* g++.dg/ipa/devirt-24.C: Update template.
2020-11-05 18:19:07 +01:00
Tamar Christina
9f87fcf303 middle-end: guard slp-11b.c testcase on vec_lanes
They say third time is the charm.. It looks like the testcase
disables the cost model and so AArch64 we end up being able to
do the permute but on x86 we can't.  However when analyzing the
testcase I didn't disable the cost model hence the difference.

So I now guard the testcase on vect_load_lanes as there's not a
"can do any permute" test directive and load lanes is what I will
be fixing up next year so this should catch it.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/slp-11b.c: Guard statements.
2020-11-05 17:02:19 +00:00
Aldy Hernandez
4ef0f1e90f Drop overflow from constants while building ranges in ranger.
Sometimes the overflow flag will leak into the IL.  Drop it while
creating ranges.

There are various places we could plug this.  This patch just plugs things
at get_tree_range which is the entry point for ranges from tree expressions.
It fixes the PR, and probably fixes the ranger entirely, but we may need
to revisit this.

For example, I looked to see if there were other places that created
ranges with TREE_OVERFLOW set, and there are various.  For example,
the following code pattern appears multiple times in vr-values.c:

  else if (is_gimple_min_invariant (op0))
    vr0.set (op0);

This can pick up TREE_OVERFLOW from the IL if present.  However, the
ranger won't see them so we're good.

At some point we should audit all this.  Or perhaps just nuke all
TREE_OVERFLOW's at irange::set.

For now, this will do.

gcc/ChangeLog:

	PR tree-optimization/97721
	* gimple-range.cc (get_tree_range): Drop overflow from constants.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr97721.c: New test.
2020-11-05 17:16:20 +01:00
David Malcolm
f8cc59ef49 diagnostic paths: loosen coupling between path-printing and path_summary
Doing this makes followup work to add HTML path-printing cleaner.

gcc/ChangeLog:
	* tree-diagnostic-path.cc (struct path_summary::event_range): Move
	out of path_summary to...
	(struct event_range): ...here.
	(class path_summary): Convert to...
	(struct path_summary): ...this.
	(path_summary::m_ranges): Drop "private".
	(path_summary::print): Convert to...
	(print_path_summary_as_text): ...this, passing in the path_summary
	explicitly.
	(default_tree_diagnostic_path_printer): Update for above change.
	(selftest::test_empty_path): Likewise.
	(selftest::test_intraprocedural_path): Likewise.
	(selftest::test_interprocedural_path_1): Likewise.
	(selftest::test_interprocedural_path_2): Likewise.
	(selftest::test_recursion): Likewise.
2020-11-05 10:00:17 -05:00
qing zhao
cc32e81cdb i386: Fix PR97715
This change fixes a bug in the i386 backend when adding
-fzero-call-used-regs=all on a target that has no x87
registers.

When there is no x87 registers available, we should not
zero stack registers.

gcc/ChangeLog:

	PR target/97715
	* config/i386/i386.c (zero_all_st_registers): Return
	earlier when the FPU is disabled.

gcc/testsuite/ChangeLog:

	PR target/97715
	* gcc.target/i386/zero-scratch-regs-32.c: New test.
2020-11-05 15:57:46 +01:00
David Malcolm
54cbdb528d analyzer: fix ICE comparing COMPLEX_CSTs [PR97668]
gcc/analyzer/ChangeLog:
	PR analyzer/97668
	* svalue.cc (cmp_cst): Handle COMPLEX_CST.

gcc/testsuite/ChangeLog:
	PR analyzer/97668
	* gcc.dg/analyzer/pr97668.c: New test.
	* gfortran.dg/analyzer/pr97668.f: New test.
2020-11-05 09:54:58 -05:00
Jan Hubicka
ea937e7d87 Fix uninitialized memory use in ipa-modref
* ipa-modref.c (parm_map_for_arg): Initialize parm_offset and
	parm_offset_knonw.
	(read_section): Set writes_errno to false.
2020-11-05 15:25:14 +01:00
Jonathan Wakely
432258be4f libstdc++: Fix new <sstream> constructors
- Add a missing 'explicit' to a basic_stringbuf constructor.
- Set up the get/put area pointers in the constructor from strings using
  different allocator types.
- Remove public basic_stringbuf::__sv_type alias.
- Do not construct temporary basic_string objects with a
  default-constructed allocator.

Also, change which basic_string constructor is used, as a minor
compile-time optimization. Constructing from a basic_string_view
requires more work from the compiler, so just use a pointer and length.

libstdc++-v3/ChangeLog:

	* include/std/sstream (basic_stringbuf(const allocator_type&):
	Add explicit.
	(basic_stringbuf(const basic_string<C,T,SA>&, openmode, const A&)):
	Call _M_stringbuf_init. Construct _M_string from pointer and length
	to avoid constraint checks for string view.
	(basic_stringbuf::view()): Make __sv_type alias local to the
	function.
	(basic_istringstream(const basic_string<C,T,SA>&, openmode, const A&)):
	Pass string to _M_streambuf instead of constructing a temporary
	with the wrong allocator.
	(basic_ostringstream(const basic_string<C,T,SA>&, openmode, const A&)):
	Likewise.
	(basic_stringstream(const basic_string<C,T,SA>&, openmode, const A&)):
	Likewise.
	* src/c++20/sstream-inst.cc: Use string_view and wstring_view
	typedefs in explicit instantiations.
	* testsuite/27_io/basic_istringstream/cons/char/1.cc: Add more
	tests for constructors.
	* testsuite/27_io/basic_ostringstream/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/cons/char/2.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/cons/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc: Likewise.
	* testsuite/27_io/basic_stringstream/cons/char/1.cc: Likewise.
2020-11-05 13:31:32 +00:00
Jonathan Wakely
cbc3f0bcc0 libstdc++: Adjust whitespace in <sstream>
libstdc++-v3/ChangeLog:

	* include/std/sstream: Adjust whitespace.
2020-11-05 13:31:32 +00:00
Richard Biener
403f0dac0c Fix SLP vectorization of stores from boolean vectors
The following fixes SLP vectorization of stores that were
pattern recognized.  Since in SLP vectorization pattern analysis
happens after dataref group analysis we have to adjust the groups
with the pattern stmts.  This has some effects down the pipeline
and exposes cases where we looked at the wrong pattern/non-pattern
stmts.

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

	* tree-vect-data-refs.c (vect_slp_analyze_node_dependences):
	Use the original stmts.
	(vect_slp_analyze_node_alignment): Use the pattern stmt.
	* tree-vect-slp.c (vect_fixup_store_groups_with_patterns):
	New function.
	(vect_slp_analyze_bb_1): Call it.

	* gcc.dg/vect/bb-slp-69.c: New testcase.
2020-11-05 14:13:38 +01:00
Tamar Christina
199988774d middle-end: optimize slp simplify back to back permutes.
This optimizes sequential permutes. i.e. if there are two permutes back to back
this function applies the permute of the parent to the child and removed the
parent.

This relies on the materialization point calculation in optimize SLP.

This allows us to remove useless permutes such as

	ldr     q0, [x0, x3]
	ldr     q2, [x1, x3]
	trn1    v1.4s, v0.4s, v0.4s
	trn2    v0.4s, v0.4s, v0.4s
	trn1    v0.4s, v1.4s, v0.4s
	mov     v1.16b, v3.16b
	fcmla   v1.4s, v0.4s, v2.4s, #0
	fcmla   v1.4s, v0.4s, v2.4s, #90
	str     q1, [x2, x3]

from the sequence the vectorizer puts out and give

	ldr     q0, [x0, x3]
	ldr     q2, [x1, x3]
	mov     v1.16b, v3.16b
	fcmla   v1.4s, v0.4s, v2.4s, #0
	fcmla   v1.4s, v0.4s, v2.4s, #90
	str     q1, [x2, x3]

instead.

gcc/ChangeLog:

	* tree-vect-slp.c (vect_slp_tree_permute_noop_p): New.
	(vect_optimize_slp): Optimize permutes.
	(vectorizable_slp_permutation): Fix typo.
2020-11-05 11:46:35 +00:00
Tamar Christina
7eb6c0ad26 testsuite: disable vect tests that was accidentally enabled on x86
My previous patch accidentally enabled some tests on x86 because my target
selector foo was weak..  This now properly only runs them on AArch64.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/slp-11b.c: Update testcase.
	* gcc.dg/vect/slp-perm-6.c: Update target selector.
2020-11-05 10:14:17 +00:00
Richard Biener
1436ef2a57 debug/97718 - fix abstract origin references after last change
The change to clear the external_die_map slot after creating
the concrete instance DIE broke abstract origin processing which
tried to make sure to have those point to the early abstract instance
and not the concrete instance.  The following restores this by
eventually following the abstract origin link in the concrete instance.

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

	PR debug/97718
	* dwarf2out.c (add_abstract_origin_attribute): Make sure to
	point to the abstract instance.
2020-11-05 10:20:30 +01:00
Tamar Christina
e3587a2d8b middle-end: Store and use the SLP instance kind when aborting load/store lanes
This patch stores the SLP instance kind in the SLP instance so that we can use
it later when detecting load/store lanes support.

This also changes the load/store lane support check to only check if the SLP
kind is a store.  This means that in order for the load/lanes to work all
instances must be of kind store.

gcc/ChangeLog:

	* tree-vect-loop.c (vect_analyze_loop_2): Check kind.
	* tree-vect-slp.c (vect_build_slp_instance): New.
	(enum slp_instance_kind): Move to...
	* tree-vectorizer.h (enum slp_instance_kind): .. Here
	(SLP_INSTANCE_KIND): New.
2020-11-05 09:02:29 +00:00
Kewen Lin
025f434a87 rs6000: Use direct move for char/short vector CTOR [PR96933]
This patch is to make vector CTOR with char/short leverage direct
move instructions when they are available.  With one constructed
test case, it can speed up 145% for char and 190% for short on P9.

Tested SPEC2017 x264_r at -Ofast on P9, it gets 1.61% speedup
(but based on unexpected SLP see PR96789).

Bootstrapped/regtested on powerpc64{,le}-linux-gnu P8 and
powerpc64le-linux-gnu P9.

gcc/ChangeLog:

	PR target/96933
	* config/rs6000/rs6000.c (rs6000_expand_vector_init): Use direct move
	instructions for vector construction with char/short types.
	* config/rs6000/rs6000.md (p8_mtvsrwz_v16qisi2): New define_insn.
	(p8_mtvsrd_v16qidi2): Likewise.

gcc/testsuite/ChangeLog:

	PR target/96933
	* gcc.target/powerpc/pr96933-1.c: New test.
	* gcc.target/powerpc/pr96933-2.c: New test.
	* gcc.target/powerpc/pr96933-3.c: New test.
	* gcc.target/powerpc/pr96933-4.c: New test.
	* gcc.target/powerpc/pr96933.h: New test.
	* gcc.target/powerpc/pr96933-run.h: New test.
2020-11-05 00:28:28 -06:00
GCC Administrator
35c125cb6a Daily bump. 2020-11-05 00:16:36 +00:00
Jonathan Wakely
8f565d255a libstdc++: Fix default mode of new basic_stringstream constructor [PR 97719]
libstdc++-v3/ChangeLog:

	PR libstdc++/97719
	* include/std/sstream (basic_stringstream(string_type&&, openmode)):
	Fix default argument.
	* testsuite/27_io/basic_stringstream/cons/char/97719.cc: New test.
2020-11-04 23:41:02 +00:00
Tamar Christina
4d76079fdf middle-end: Move load/store-lanes check till late.
This moves the code that checks for load/store lanes further in the pipeline and
places it after slp_optimize.  This would allow us to perform optimizations on
the SLP tree and only bail out if we really have a permute.

With this change it allows us to handle permutes such as {1,1,1,1} which should
be handled by a load and replicate.

This change however makes it all or nothing. Either all instances can be handled
or none at all.  This is why some of the test cases have been adjusted.

gcc/ChangeLog:

	* tree-vect-slp.c (vect_analyze_slp_instance): Moved load/store lanes
	check to ...
	* tree-vect-loop.c (vect_analyze_loop_2): ..Here

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/slp-11b.c: Update output scan.
	* gcc.dg/vect/slp-perm-6.c: Likewise.
2020-11-04 22:33:11 +00:00
Ilya Leoshkevich
6682ef4363 IBM Z: Unhardcode NR_C_MODES
gcc/ChangeLog:

2020-11-03  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.c (NR_C_MODES): Unhardcode.
	(s390_alloc_pool): Use size_t for iterating from 0 to
	NR_C_MODES.
	(s390_add_constant): Likewise.
	(s390_find_constant): Likewise.
	(s390_dump_pool): Likewise.
	(s390_free_pool): Likewise.
2020-11-04 22:33:30 +01:00
Ilya Leoshkevich
88ea64e941 IBM Z: Remove unused RRe and RXe mode_attrs
gcc/ChangeLog:

2020-11-03  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.md (RRe): Remove.
	(RXe): Remove.
2020-11-04 22:33:30 +01:00
Ian Lance Taylor
9a02d31baa go: disable -fipa-icf-functions by default in Go frontend
Go programs expect to be able to get reliable backtrace information
with correct file/line information, but -fipa-icf-functions breaks
that because it merges together distinct functions which should have
distinct file/line info.

	* go-lang.c (go_langhook_post_options): Disable
	-fipa-icf-functions if it was not explicitly enabled.
2020-11-04 12:05:22 -08:00
Andrew MacLeod
e86fd6a17c Add Ranger temporal cache
Add a timestamp to supplement the global range cache to detect when a value
may become stale.

	gcc/
	PR tree-optimization/97515
	* gimple-range-cache.h (class ranger_cache): New prototypes plus
	temporal cache pointer.
	* gimple-range-cache.cc (struct range_timestamp): New.
	(class temporal_cache): New.
	(temporal_cache::temporal_cache): New.
	(temporal_cache::~temporal_cache): New.
	(temporal_cache::get_timestamp): New.
	(temporal_cache::set_dependency): New.
	(temporal_cache::temporal_value): New.
	(temporal_cache::current_p): New.
	(temporal_cache::set_timestamp): New.
	(temporal_cache::set_always_current): New.
	(ranger_cache::ranger_cache): Allocate the temporal cache.
	(ranger_cache::~ranger_cache): Free temporal cache.
	(ranger_cache::get_non_stale_global_range): New.
	(ranger_cache::set_global_range): Add a timestamp.
	(ranger_cache::register_dependency): New.  Add timestamp dependency.
	* gimple-range.cc (gimple_ranger::range_of_range_op): Add operand
	dependencies.
	(gimple_ranger::range_of_phi): Ditto.
	(gimple_ranger::range_of_stmt): Check if global range is stale, and
	recalculate if so.
	gcc/testsuite/
	* gcc.dg/pr97515.c: Check listing for folding of entire function.
2020-11-04 13:07:53 -05:00
Jonathan Wakely
9c1125c121 libstdc++: Fix test failure with --disable-linux-futex
As noted in PR 96817 this new test fails if the library is built without
futexes. That's expected of course, but we might as well fail more
obviously than a deadlock that eventually times out.

libstdc++-v3/ChangeLog:

	* testsuite/18_support/96817.cc: Fail fail if the library is
	configured to not use futexes.
2020-11-04 15:30:54 +00:00
Jonathan Wakely
e0af865ab9 libstdc++: Define new C++17 std::search overload for Parallel Mode [PR 94971]
libstdc++-v3/ChangeLog:

	PR libstdc++/94971
	* include/bits/stl_algo.h (search(FIter, FIter, const Searcher):
	Adjust #if condition.
	* include/parallel/algo.h (search(FIter, FIter, const Searcher&):
	Define new overload for C++17.
2020-11-04 13:36:32 +00:00
Tobias Burnus
243492e2c6 targhooks.c: Fix -fzero-call-used-regs 'sorry' typo
gcc/ChangeLog:

	* targhooks.c (default_zero_call_used_regs): Fix flag-name typo
	in sorry.
2020-11-04 14:33:36 +01:00
Jonathan Wakely
3ef33e756a libstdc++: Document istreambuf_iterator base class change [PR 92285]
libstdc++-v3/ChangeLog:

	PR libstdc++/92285
	* doc/xml/manual/evolution.xml: Document change to base class.
	* doc/html/manual/api.html: Regenerate.
2020-11-04 12:46:52 +00:00
Richard Biener
1272573a6b add costing to SLP vectorized PHIs
I forgot to cost vectorized PHIs.  Scalar PHIs are just costed
as scalar_stmt so the following costs vector PHIs as vector_stmt.

2020-11-04  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (vectorizable_phi): Adjust prototype.
	* tree-vect-stmts.c (vect_transform_stmt): Adjust.
	(vect_analyze_stmt): Pass cost_vec to vectorizable_phi.
	* tree-vect-loop.c (vectorizable_phi): Do costing.
2020-11-04 12:41:25 +01:00
Richard Biener
1e9f339d94 tree-optimization/97709 - set abnormal flag when vectorizing live lanes
This properly sets the abnormal flag when vectorizing live lanes
when the original scalar was live across an abnormal edge.

2020-11-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97709
	* tree-vect-loop.c (vectorizable_live_operation): Set
	SSA_NAME_OCCURS_IN_ABNORMAL_PHI when necessary.

	* gcc.dg/vect/bb-slp-pr97709.c: New testcase.
2020-11-04 12:41:14 +01:00
Jakub Jelinek
3e190757fa phiopt: Optimize x ? 1024 : 0 to (int) x << 10 [PR97690]
The following patch generalizes the x ? 1 : 0 -> (int) x optimization
to handle also left shifts by constant.

During x86_64-linux and i686-linux bootstraps + regtests it triggered
in 1514 unique non-LTO -m64 cases (sort -u on log mentioning
filename, function name and shift count) and 1866 -m32 cases.

Unfortunately, the patch regresses (before the tests have been adjusted):
+FAIL: gcc.dg/tree-ssa/ssa-ccp-11.c scan-tree-dump-times optimized "if " 0
+FAIL: gcc.dg/vect/bb-slp-pattern-2.c -flto -ffat-lto-objects  scan-tree-dump-times slp1 "optimized: basic block" 1
+FAIL: gcc.dg/vect/bb-slp-pattern-2.c scan-tree-dump-times slp1 "optimized: basic block" 1
and in both cases it actually results in worse code.

> > We'd need some optimization that would go through all PHI edges and
> > compute if some use of the phi results don't actually compute a constant
> > across all the PHI edges - 1 & 0 and 0 & 1 is always 0.

> PRE should do this, IMHO only optimizing it at -O2 is fine.

> > Similarly, in the slp vectorization test there is:
> >      a[0] = b[0] ? 1 : 7;

> note this, carefully avoiding the already "optimized" b[0] ? 1 : 0 ...

> So the option is to put : 7 in the 2, 4 an 8 case as well.  The testcase
> wasn't added for any real-world case but is artificial I guess for
> COND_EXPR handling of invariants.

> But yeah, for things like SLP it means we eventually have to
> implement reverse transforms for all of this to make the lanes
> matching.  But that's true anyway for things like x + 1 vs. x + 0
> or x / 3 vs. x / 2 or other simplifications we do.

2020-11-04  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/97690
	* tree-ssa-phiopt.c (conditional_replacement): Also optimize
	cond ? pow2p_cst : 0 as ((type) cond) << cst.

	* gcc.dg/tree-ssa/phi-opt-22.c: New test.
	* gcc.dg/tree-ssa/ssa-ccp-11.c: Use -O2 instead of -O1.
	* gcc.dg/vect/bb-slp-pattern-2.c (foo): Use ? 2 : 7, ? 4 : 7 and
	? 8 : 7 instead of ? 2 : 0, ? 4 : 0, ? 8 : 0.
2020-11-04 12:15:28 +01:00