platform/upstream/gcc.git
3 years agoRange invariant global values are also always current.
Andrew MacLeod [Thu, 27 May 2021 15:19:10 +0000 (11:19 -0400)]
Range invariant global values are also always current.

when a range evolves to the point where it becomes a constant, it is
marked as invariant.  Rather than marking it as always_current in the
timestamp, give it the correct timestamp and just never flag it as stale.
This will allow other names which use this value to become stale and be
recomputed using the newly invariant value.

gcc/
PR tree-optimization/100774
* gimple-range-cache.cc (ranger_cache::get_non_stale_global_range):
Constant values are also not stale.
(ranger_cache::set_global_range): Range invariant values should also
have the correct timestamp.

gcc/testsuite
PR tree-optimization/100774
* g++.dg/pr100774.C: New.

3 years agoDaily bump.
GCC Administrator [Tue, 1 Jun 2021 00:16:37 +0000 (00:16 +0000)]
Daily bump.

3 years agoPR testsuite/100749 - gcc.dg/pch/valid-1.c fails after r12-949
Indu Bhagat [Mon, 31 May 2021 16:19:38 +0000 (09:19 -0700)]
PR testsuite/100749 - gcc.dg/pch/valid-1.c fails after r12-949

Fix failing pch testcases. Use xstrdup to retain a reliable copy of the debug
format str containing the names (df_set_names is a static string var).

2021-05-31  Indu Bhagat  <indu.bhagat@oracle.com>

gcc/c-family/
PR testsuite/100749
* c-pch.c (c_common_valid_pch): Use xstrdup for debug format set names.

3 years agoMAINTAINERS: Add myself for write after approval
Indu Bhagat [Mon, 31 May 2021 15:37:06 +0000 (08:37 -0700)]
MAINTAINERS: Add myself for write after approval

ChangeLog:

2021-05-31  Indu Bhagat  <indu.bhagat@oracle.com>

* MAINTAINERS (Write After Approval): Add myself.

3 years agogfortran.dg/gomp/depend-iterator-{1,2}.f90: Use dg-do compile
Tobias Burnus [Mon, 31 May 2021 14:38:05 +0000 (16:38 +0200)]
gfortran.dg/gomp/depend-iterator-{1,2}.f90: Use dg-do compile

'dg-do run' is pointless -1 due to dg-error. And it won't work except
by chance for gomp tests; as -2 only has depend(out:), a 'dg-do compile'
is sufficient.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/depend-iterator-1.f90: Use dg-do compile.
* gfortran.dg/gomp/depend-iterator-2.f90: Use dg-do compile.

3 years agoLTO: stream properly FUNCTION_DECL_DECL_TYPE.
Martin Liska [Mon, 24 May 2021 09:18:21 +0000 (11:18 +0200)]
LTO: stream properly FUNCTION_DECL_DECL_TYPE.

gcc/lto/ChangeLog:

* lto-common.c (compare_tree_sccs_1): Compare
FUNCTION_DECL_DECL_TYPE.

gcc/ChangeLog:

* tree-streamer-in.c (unpack_ts_function_decl_value_fields):
Unpack FUNCTION_DECL_DECL_TYPE.
* tree-streamer-out.c (pack_ts_function_decl_value_fields):
Stream FUNCTION_DECL_DECL_TYPE instead of
DECL_IS_OPERATOR_NEW_P.
* tree.h (set_function_decl_type): Use FUNCTION_DECL_DECL_TYPE
macro.
(DECL_IS_OPERATOR_NEW_P): Likewise.
(DECL_IS_OPERATOR_DELETE_P): Likewise.
(DECL_LAMBDA_FUNCTION_P): Likewise.

3 years agoc++/88601 - [C/C++] __builtin_shufflevector support
Richard Biener [Fri, 21 May 2021 09:33:30 +0000 (11:33 +0200)]
c++/88601 - [C/C++] __builtin_shufflevector support

This adds support for the clang __builtin_shufflevector extension to
the C and C++ frontends.  The builtin is lowered to VEC_PERM_EXPR.
Because VEC_PERM_EXPR does not support different sized vector inputs
or result or the special permute index of -1 (don't-care)
c_build_shufflevector applies lowering by widening inputs and output
to the widest vector, replacing -1 by a defined index and
subsetting the final vector if we produced a wider result than
desired.

Code generation thus can be sub-optimal, followup patches will
aim to fix that by recovering from part of the missing features
during RTL expansion and by relaxing the constraints of the GIMPLE
IL with regard to VEC_PERM_EXPR.

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

PR c++/88601
gcc/c-family/
* c-common.c: Include tree-vector-builder.h and
vec-perm-indices.h.
(c_common_reswords): Add __builtin_shufflevector.
(c_build_shufflevector): New funtion.
* c-common.h (enum rid): Add RID_BUILTIN_SHUFFLEVECTOR.
(c_build_shufflevector): Declare.

gcc/c/
* c-decl.c (names_builtin_p): Handle RID_BUILTIN_SHUFFLEVECTOR.
* c-parser.c (c_parser_postfix_expression): Likewise.

gcc/cp/
* cp-objcp-common.c (names_builtin_p): Handle
RID_BUILTIN_SHUFFLEVECTOR.
* cp-tree.h (build_x_shufflevector): Declare.
* parser.c (cp_parser_postfix_expression): Handle
RID_BUILTIN_SHUFFLEVECTOR.
* pt.c (tsubst_copy_and_build): Handle IFN_SHUFFLEVECTOR.
* typeck.c (build_x_shufflevector): Build either a lowered
VEC_PERM_EXPR or an unlowered shufflevector via a temporary
internal function IFN_SHUFFLEVECTOR.

gcc/
* internal-fn.c (expand_SHUFFLEVECTOR): Define.
* internal-fn.def (SHUFFLEVECTOR): New.
* internal-fn.h (expand_SHUFFLEVECTOR): Declare.
* doc/extend.texi: Document __builtin_shufflevector.

gcc/testsuite/
* c-c++-common/builtin-shufflevector-2.c: New testcase.
* c-c++-common/torture/builtin-shufflevector-1.c: Likewise.
* g++.dg/ext/builtin-shufflevector-1.C: Likewise.
* g++.dg/ext/builtin-shufflevector-2.C: Likewise.

3 years agors6000: MMA test case ICEs using -O3 [PR99842]
Peter Bergner [Mon, 31 May 2021 03:45:55 +0000 (22:45 -0500)]
rs6000: MMA test case ICEs using -O3 [PR99842]

The mma_assemble_input_operand predicate does not accept reg+reg indexed
addresses which can lead to ICEs.  The lxv and lxvp instructions have
indexed forms (lxvx and lxvpx), so the simple solution is to just allow
indexed addresses in the predicate.

2021-05-30  Peter Bergner  <bergner@linux.ibm.com>

gcc/
PR target/99842
* config/rs6000/predicates.md(mma_assemble_input_operand): Allow
indexed form addresses.

gcc/testsuite/
PR target/99842
* g++.target/powerpc/pr99842.C: New.

3 years agoDaily bump.
GCC Administrator [Mon, 31 May 2021 00:16:25 +0000 (00:16 +0000)]
Daily bump.

3 years agolibstdc++: Remove "Intel Compilers" bibliography entry
Gerald Pfeifer [Sun, 30 May 2021 22:27:17 +0000 (00:27 +0200)]
libstdc++: Remove "Intel Compilers" bibliography entry

The original link redirects to a very generic page that advertises
lots of tools and other things, just not this.

libstdc++-v3/ChangeLog:

2021-05-31  Gerald Pfeifer  <gerald@pfeifer.com>

* doc/xml/manual/abi.xml: Remove dead reference to "Intel
Compilers for Linux: Compatibility with GNU Compilers" article.
* doc/html/manual/abi.html: Regenerate.

3 years agoFortran: Fix typo in documentation of BOZ
Gerald Pfeifer [Sun, 30 May 2021 13:27:53 +0000 (15:27 +0200)]
Fortran: Fix typo in documentation of BOZ

gcc/fortran/ChangeLog:

2021-05-30  Gerald Pfeifer  <gerald@pfeifer.com>

* gfortran.texi (BOZ literal constants): Fix typo.

3 years agoDaily bump.
GCC Administrator [Sun, 30 May 2021 00:16:26 +0000 (00:16 +0000)]
Daily bump.

3 years agodiagnostics: Fix sporadic test failure
Bernd Edlinger [Fri, 28 May 2021 12:26:02 +0000 (14:26 +0200)]
diagnostics: Fix sporadic test failure

it turns out to be reproducible this way:

COLUMNS=80 make check-gcc-c RUNTESTFLAGS="plugin.exp=diagnostic*"

Running /home/ed/gnu/gcc-trunk/gcc/testsuite/gcc.dg/plugin/plugin.exp ...
FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c
 -fplugin=./diagnostic_plugin_test_tree_expression_range.so  1 blank line(s) in output
FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c
 -fplugin=./diagnostic_plugin_test_tree_expression_range.so  expected multiline pattern lines 550-551 not found: "                            __builtin_types_compatible_p \(long, int\) \+ f \(i\)\);.*\n                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\^~~~~~~\n"
FAIL: gcc.dg/plugin/diagnostic-test-expressions-1.c
 -fplugin=./diagnostic_plugin_test_tree_expression_range.so (test for excess errors)

a lot more errors happen with COLUMNS=20.

2021-05-29  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* gcc.dg/plugin/diagnostic_plugin_show_trees.c (plugin_init): Fix caret_max_with.
* gcc.dg/plugin/diagnostic_plugin_test_inlining.c
(plugin_init): Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_paths.c (plugin_init): Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_string_literals.c
(plugin_init): Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c
(plugin_init): Likewise.

3 years ago[committed][PR bootstrap/100730] Fix warnings in H8 target files
Jeff Law [Sat, 29 May 2021 15:37:30 +0000 (09:37 -0600)]
[committed][PR bootstrap/100730] Fix warnings in H8 target files

gcc/

* config/h8300/h8300.c (h8300_emit_stack_adjustment): Drop unused
parameter.  Call callers fixed.
(push): Likewise.
(output_plussi): Add FALLTHRU markers.
(h8300_shift_needs_scratch_p): Add gcc_unreachable marker.

3 years agosim: leverage gnulib
Mike Frysinger [Sat, 1 May 2021 22:05:49 +0000 (18:05 -0400)]
sim: leverage gnulib

We use getline, so leverage gnulib to provide fallback implementation.

ChangeLog:

* configure.ac: Add gnulib to configdirs for sim.
* configure: Regenerate.

3 years agoopenmp: Add shared to parallel for linear on parallel master taskloop simd [PR99928]
Jakub Jelinek [Sat, 29 May 2021 08:05:38 +0000 (10:05 +0200)]
openmp: Add shared to parallel for linear on parallel master taskloop simd [PR99928]

I forgot to add default(none) and defaultmap(none) wherever possible on the
testcases to make sure none of the required clauses are added implicitly (because
in that case it doesn't work with these none arguments of those default* clauses
or works differently with other default* settings.

And that revealed we didn't add shared on parallel for linear clause
on parallel master taskloop simd, so this patch fixes that too.

2021-05-29  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/99928
* gimplify.c (gimplify_scan_omp_clauses): For taskloop simd
combined with parallel, make sure to add shared clause to
parallel for explicit linear clause.

* c-c++-common/gomp/pr99928-1.c: Add default(none) to constructs
combined with parallel, teams or taskloop and defaultmap(none)
to constructs combined with target.
* c-c++-common/gomp/pr99928-2.c: Likewise.
* c-c++-common/gomp/pr99928-3.c: Likewise.
* c-c++-common/gomp/pr99928-4.c: Likewise.
* c-c++-common/gomp/pr99928-5.c: Likewise.
* c-c++-common/gomp/pr99928-6.c: Likewise.
* c-c++-common/gomp/pr99928-7.c: Likewise.
* c-c++-common/gomp/pr99928-8.c: Likewise.
* c-c++-common/gomp/pr99928-9.c: Likewise.
* c-c++-common/gomp/pr99928-10.c: Likewise.
* c-c++-common/gomp/pr99928-13.c: Likewise.
* c-c++-common/gomp/pr99928-14.c: Likewise.

3 years agoFix i686 bootstrap by temporarily disabling exporting of global ranges.
Aldy Hernandez [Fri, 28 May 2021 20:17:51 +0000 (22:17 +0200)]
Fix i686 bootstrap by temporarily disabling exporting of global ranges.

The patch converting evrp to the get_range_query(fun) API broke i686
bootstrap (commit 57bf37515).  The problem seems to be in a subsequent
pass that has more up-to-date global ranges.  I won't be able to look at
this until next week, so I am reverting the problematic bit of the
patch-- the exporting of global ranges once evrp finishes.  The use of
the new API remains.

Reverting the behavior shouldn't be a problem as we never used to export
global ranges from ranger.  This was new behavior in the patchset.

Tested on x86-64 Linux with a bootstrap and regtest, and on x86-32 with
only a bootstrap and the configure flags from the PR:

--enable-clocale=gnu --with-system-zlib --with-demangler-in-ld --with-fpmath=sse --enable-languages=c,c++ --enable-cet i686-linux --enable-bootstrap --with-fpmath=sse --disable-libcc1 --disable-libcilkrts --disable-libsanitizer

gcc/ChangeLog:

PR tree-optimization/100787
* gimple-ssa-evrp.c: Disable exporting of global ranges.

gcc/testsuite/ChangeLog:

* gcc.dg/Wstringop-overflow-55.c:
* gcc.dg/pr80776-1.c:

3 years agoDaily bump.
GCC Administrator [Sat, 29 May 2021 00:16:29 +0000 (00:16 +0000)]
Daily bump.

3 years agotree-iterator: C++11 range-for and tree_stmt_iterator
Jason Merrill [Sat, 3 Apr 2021 02:20:43 +0000 (22:20 -0400)]
tree-iterator: C++11 range-for and tree_stmt_iterator

Like my recent patch to add ovl_range and lkp_range in the C++ front end,
this patch adds the tsi_range adaptor for using C++11 range-based 'for' with
a STATEMENT_LIST, e.g.

  for (tree stmt : tsi_range (stmt_list)) { ... }

This also involves adding some operators to tree_stmt_iterator that are
needed for range-for iterators, and should also be useful in code that uses
the iterators directly.

The patch updates the suitable loops in the C++ front end, but does not
touch any loops elsewhere in the compiler.

gcc/ChangeLog:

* tree-iterator.h (struct tree_stmt_iterator): Add operator++,
operator--, operator*, operator==, and operator!=.
(class tsi_range): New.

gcc/cp/ChangeLog:

* constexpr.c (build_data_member_initialization): Use tsi_range.
(build_constexpr_constructor_member_initializers): Likewise.
(constexpr_fn_retval, cxx_eval_statement_list): Likewise.
(potential_constant_expression_1): Likewise.
* coroutines.cc (await_statement_expander): Likewise.
(await_statement_walker): Likewise.
* module.cc (trees_out::core_vals): Likewise.
* pt.c (tsubst_expr): Likewise.
* semantics.c (set_cleanup_locs): Likewise.

3 years agotree-optimization/100778 - avoid cross-BB vectorization of trapping op
Richard Biener [Fri, 28 May 2021 12:26:06 +0000 (14:26 +0200)]
tree-optimization/100778 - avoid cross-BB vectorization of trapping op

This avoids vectorizing a possibly trapping operation when lanes
are handled in different BBs.  I spotted this when working on the
originally reported issue in PR100778.

2021-05-28  Richard Biener  <rguenther@suse.de>

PR tree-optimization/100778
* tree-vect-slp.c (vect_build_slp_tree_1): Prevent possibly
trapping ops in different BBs.

* gcc.dg/vect/bb-slp-pr100778-1.c: New testcase.

3 years agoc++: 'this' adjustment for devirtualized call
Jason Merrill [Fri, 28 May 2021 03:54:52 +0000 (23:54 -0400)]
c++: 'this' adjustment for devirtualized call

My patch for 95719 made us do a better job of finding the actual virtual
function we want to call, but didn't update the 'this' pointer adjustment to
match.

PR c++/100797
PR c++/95719

gcc/cp/ChangeLog:

* call.c (build_over_call): Adjust base_binfo in
resolves_to_fixed_type_p case.

gcc/testsuite/ChangeLog:

* g++.dg/inherit/virtual15.C: New test.

3 years agoipa/100791 - copy fntype when processing __builtin_va_arg_pack
Richard Biener [Fri, 28 May 2021 11:31:35 +0000 (13:31 +0200)]
ipa/100791 - copy fntype when processing __builtin_va_arg_pack

This missing copying exposed a type mismatch in the IL.

2021-05-28  Richard Biener  <rguenther@suse.de>

PR ipa/100791
* tree-inline.c (copy_bb): When processing __builtin_va_arg_pack
copy fntype from original call.

* gcc.dg/pr100791.c: New testcase.

3 years agoc/100803 - diagnose invalid GIMPLE condition
Richard Biener [Fri, 28 May 2021 11:05:39 +0000 (13:05 +0200)]
c/100803 - diagnose invalid GIMPLE condition

another easy fix for GIMPLE FE parser robustness.

2021-05-28  Richard Biener   <rguenther@suse.de>

PR c/100803
gcc/c/
* gimple-parser.c (c_parser_gimple_paren_condition): Diagnose
invalid if conditions.

gcc/testsuite/
* gcc.dg/gimplefe-error-11.c: New testcase.

3 years agoDOC: Update __gcov_dump documentation.
Martin Liska [Fri, 28 May 2021 11:35:33 +0000 (13:35 +0200)]
DOC: Update __gcov_dump documentation.

PR gcov-profile/100751

gcc/ChangeLog:

* doc/gcov.texi: Revert partially a hunk that was wrong.

3 years agoC-SKY: Define HAVE_sync_compare_and_swap*.
Cooper Qu [Fri, 28 May 2021 09:02:05 +0000 (17:02 +0800)]
C-SKY: Define HAVE_sync_compare_and_swap*.

The SYNC operations are implemented as library functions, not
NSN patterns.  As a result, the HAVE defines for the patterns are
not defined.  We need to define them to generate the corresponding
__GCC_HAVE_SYNC_COMPARE_AND_SWAP_* and __GCC_ATOMIC_*_LOCK_FREE
defines.

gcc/
* config/csky/csky-linux-elf.h (HAVE_sync_compare_and_swapqi):
Defined.
(HAVE_sync_compare_and_swaphi): Likewise.
(HAVE_sync_compare_and_swapsi): Likewise.

3 years agoopenmp: Fix up handling of reduction clause on constructs combined with target [PR99928]
Jakub Jelinek [Fri, 28 May 2021 09:26:48 +0000 (11:26 +0200)]
openmp: Fix up handling of reduction clause on constructs combined with target [PR99928]

The reduction clause should be copied as map (tofrom: ) to combined target if
present, but as we need different handling of array sections between map and reduction,
doing that during gimplification would be harder.

So, this patch adds them during splitting, and similarly to firstprivate adds them
with a new flag that they should be just ignored/removed if an explicit map clause
of the same list item is present.

The exact rules are to be decided in https://github.com/OpenMP/spec/issues/2766
so this patch just implements something that is IMHO reasonable and exact detailed
testcases for the cornercases will follow once it is clarified.

2021-05-28  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/99928
gcc/
* tree.h (OMP_CLAUSE_MAP_IMPLICIT): Define.
gcc/c-family/
* c-omp.c (c_omp_split_clauses): For reduction clause if combined with
target add a map tofrom clause with OMP_CLAUSE_MAP_IMPLICIT.
gcc/c/
* c-typeck.c (handle_omp_array_sections): Copy OMP_CLAUSE_MAP_IMPLICIT.
(c_finish_omp_clauses): Move not just OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT
marked clauses last, but also OMP_CLAUSE_MAP_IMPLICIT.  Add
map_firstprivate_head bitmap, set it for GOMP_MAP_FIRSTPRIVATE_POINTER
maps and silently remove OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT if it is
present too.  For OMP_CLAUSE_MAP_IMPLICIT silently remove the clause
if present in map_head, map_field_head or map_firstprivate_head
bitmaps.
gcc/cp/
* semantics.c (handle_omp_array_sections): Copy
OMP_CLAUSE_MAP_IMPLICIT.
(finish_omp_clauses): Move not just OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT
marked clauses last, but also OMP_CLAUSE_MAP_IMPLICIT.  Add
map_firstprivate_head bitmap, set it for GOMP_MAP_FIRSTPRIVATE_POINTER
maps and silently remove OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT if it is
present too.  For OMP_CLAUSE_MAP_IMPLICIT silently remove the clause
if present in map_head, map_field_head or map_firstprivate_head
bitmaps.
gcc/testsuite/
* c-c++-common/gomp/pr99928-8.c: Remove all xfails.
* c-c++-common/gomp/pr99928-9.c: Likewise.
* c-c++-common/gomp/pr99928-10.c: Likewise.
* c-c++-common/gomp/pr99928-16.c: New test.

3 years agoOpenMP: Add iterator support to Fortran's depend; add affinity clause
Tobias Burnus [Fri, 28 May 2021 08:01:19 +0000 (10:01 +0200)]
OpenMP: Add iterator support to Fortran's depend; add affinity clause

gcc/c-family/ChangeLog:

* c-pragma.h (enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_AFFINITY.

gcc/c/ChangeLog:

* c-parser.c (c_parser_omp_clause_affinity): New.
(c_parser_omp_clause_name, c_parser_omp_variable_list,
c_parser_omp_all_clauses, OMP_TASK_CLAUSE_MASK): Handle affinity clause.
* c-typeck.c (handle_omp_array_sections_1, handle_omp_array_sections,
c_finish_omp_clauses): Likewise.

gcc/cp/ChangeLog:

* parser.c (cp_parser_omp_clause_affinity): New.
(cp_parser_omp_clause_name, cp_parser_omp_var_list_no_open,
cp_parser_omp_all_clauses, OMP_TASK_CLAUSE_MASK): Handle affinity
clause.
* semantics.c (handle_omp_array_sections_1, handle_omp_array_sections,
finish_omp_clauses): Likewise.

gcc/fortran/ChangeLog:

* dump-parse-tree.c (show_iterator): New.
(show_omp_namelist): Handle iterators.
(show_omp_clauses): Handle affinity.
* gfortran.h (gfc_free_omp_namelist): New union with 'udr' and new 'ns'.
* match.c (gfc_free_omp_namelist): Add are to choose union element.
* openmp.c (gfc_free_omp_clauses, gfc_match_omp_detach,
gfc_match_omp_clause_reduction, gfc_match_omp_flush): Update
call to gfc_free_omp_namelist.
(gfc_match_omp_variable_list): Likewise; permit preceeding whitespace.
(enum omp_mask1): Add OMP_CLAUSE_AFFINITY.
(gfc_match_iterator): New.
(gfc_match_omp_clauses): Use it; update call to gfc_free_omp_namelist.
(OMP_TASK_CLAUSES): Add OMP_CLAUSE_AFFINITY.
(gfc_match_omp_taskwait): Match depend clause.
(resolve_omp_clauses): Handle affinity; update for udr/union change.
(gfc_resolve_omp_directive): Resolve clauses of taskwait.
* st.c (gfc_free_statement): Update gfc_free_omp_namelist call.
* trans-openmp.c (gfc_trans_omp_array_reduction_or_udr): Likewise
(handle_iterator): New.
(gfc_trans_omp_clauses): Handle iterators for depend/affinity clause.
(gfc_trans_omp_taskwait): Handle depend clause.
(gfc_trans_omp_directive): Update call.

gcc/ChangeLog:

* gimplify.c (gimplify_omp_affinity): New.
(gimplify_scan_omp_clauses): Call it; remove affinity clause afterwards.
* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_AFFINITY.
* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_AFFINITY.
* tree.c (omp_clause_num_ops, omp_clause_code_name): Add clause.
(walk_tree_1): Handle OMP_CLAUSE_AFFINITY.

libgomp/ChangeLog:

* testsuite/libgomp.fortran/depend-iterator-2.f90: New test.

gcc/testsuite/ChangeLog:

* c-c++-common/gomp/affinity-1.c: New test.
* c-c++-common/gomp/affinity-2.c: New test.
* c-c++-common/gomp/affinity-3.c: New test.
* c-c++-common/gomp/affinity-4.c: New test.
* c-c++-common/gomp/affinity-5.c: New test.
* c-c++-common/gomp/affinity-6.c: New test.
* c-c++-common/gomp/affinity-7.c: New test.
* gfortran.dg/gomp/affinity-clause-1.f90: New test.
* gfortran.dg/gomp/affinity-clause-2.f90: New test.
* gfortran.dg/gomp/affinity-clause-3.f90: New test.
* gfortran.dg/gomp/affinity-clause-4.f90: New test.
* gfortran.dg/gomp/affinity-clause-5.f90: New test.
* gfortran.dg/gomp/affinity-clause-6.f90: New test.
* gfortran.dg/gomp/depend-iterator-1.f90: New test.
* gfortran.dg/gomp/depend-iterator-2.f90: New test.
* gfortran.dg/gomp/depend-iterator-3.f90: New test.
* gfortran.dg/gomp/taskwait.f90: New test.

3 years agoRecognize popcount also when a double width operation is needed.
Joern Rennecke [Fri, 28 May 2021 08:34:07 +0000 (09:34 +0100)]
Recognize popcount also when a double width operation is needed.

2021-05-28  Joern Rennecke  <joern.rennecke@riscy-ip.com>
gcc/
* match.pd <popcount & / + pattern matching>:
When generating popcount directly fails, try doing it in two halves.
gcc/testsuite/
* gcc.dg/tree-ssa/popcount4ll.c: Remove lp64 condition.
Adjust scanning pattern for !lp64.
* gcc.dg/tree-ssa/popcount5ll.c: Likewise.
* gcc.dg/tree-ssa/popcount4l.c: Adjust scanning pattern
for ! int32plus.

Co-Authored-By: Richard Biener <rguenther@suse.de>
3 years agoGenerate gimple-match.c and generic-match.c earlier
Bernd Edlinger [Fri, 28 May 2021 04:27:27 +0000 (06:27 +0200)]
Generate gimple-match.c and generic-match.c earlier

I was wondering, why gimple-match.c and generic-match.c
are not built early but always last, which slows down parallel
makes significantly.

The reason seems to be that generated_files does not
mention gimple-match.c and generic-match.c.

This comment in Makefile.in says it all:

"In order for parallel make to really start compiling the expensive
objects from $(OBJS) as early as possible, build all their
prerequisites strictly before all objects."

So this patch adds gimple-match.c and generic-match.c to generated_files.

2021-05-28  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* Makefile.in (generated_files): Add gimple-match.c and
generic-match.c

3 years agoFix match_dup bug of define_cond_exec.
Joern Rennecke [Fri, 28 May 2021 06:46:28 +0000 (07:46 +0100)]
Fix match_dup bug of define_cond_exec.

2021-05-28  Joern Rennecke  <joern.rennecke@embecosm.com>

gcc/
* gensupport.c (alter_predicate_for_insn): Handle MATCH_DUP.

3 years agoFix bug in the define_subst handling that made match_scratch unusable for multi-alter...
Joern Rennecke [Fri, 28 May 2021 06:29:53 +0000 (07:29 +0100)]
Fix bug in the define_subst handling that made match_scratch unusable for multi-alternative patterns.

2021-05-28  Joern Rennecke  <joern.rennecke@embecosm.com>

gcc/
* gensupport.c (alter_constraints): Add MATCH_SCRATCH case.

3 years agoforwprop: Enhance vec perm fed by CTOR and CTOR/CST [PR99398]
Kewen Lin [Fri, 28 May 2021 06:11:45 +0000 (01:11 -0500)]
forwprop: Enhance vec perm fed by CTOR and CTOR/CST [PR99398]

VEC_PERM_EXPR requires the number of MASK elements must be the
same with the number of elements in operands V0 and V1.  In
some cases, like with Power altivec built-in function vec_perm,
VIEW_CONVERT_EXPR has to be used to guarantee this requirement,
but it can prevent some simplifications which don't consider
this well.

For the cases that the permutated operands of vector
permutation are from two same type CTOR and CTOR, or one CTOR
and one VECTOR CST, this patch is to enhance forwprop to look
through intermediate VIEW_CONVERT_EXPR and further simplify
them if possible.

Bootstrapped/regtested on powerpc64le-linux-gnu P9,
powerpc64-linux-gnu P8, x86_64-redhat-linux and
aarch64-linux-gnu.

gcc/ChangeLog:

PR tree-optimization/99398
* tree-ssa-forwprop.c (simplify_permutation): Optimize some cases
where the fed operands are CTOR/CST and propagated through
VIEW_CONVERT_EXPR.  Call vec_perm_indices::new_shrunk_vector.
* vec-perm-indices.c (vec_perm_indices::new_shrunk_vector): New
function.
* vec-perm-indices.h (vec_perm_indices::new_shrunk_vector): New
declare.

gcc/testsuite/ChangeLog:

PR tree-optimization/99398
* gcc.target/powerpc/vec-perm-ctor-run.c: New test.
* gcc.target/powerpc/vec-perm-ctor.c: New test.
* gcc.target/powerpc/vec-perm-ctor.h: New test.

3 years agoDaily bump.
GCC Administrator [Fri, 28 May 2021 00:16:38 +0000 (00:16 +0000)]
Daily bump.

3 years agogccgo.texi: remove HTML quoting
Ian Lance Taylor [Thu, 27 May 2021 22:32:28 +0000 (15:32 -0700)]
gccgo.texi: remove HTML quoting

* gccgo.texi (Function Names): Don't HTML quote ampersand.

3 years agoc++: Output less irrelevant info for function template decl [PR100716]
Matthias Kretz [Thu, 27 May 2021 15:25:37 +0000 (17:25 +0200)]
c++: Output less irrelevant info for function template decl [PR100716]

Ensure dump_template_decl for function templates never prints template
parameters after the function name (it did with -fno-pretty-templates)
and skip output of irrelevant & confusing "[with T = T]" in
dump_substitution.

gcc/cp/ChangeLog:

PR c++/100716
* error.c (dump_template_bindings): Include code to print
"[with" and ']', conditional on whether anything is printed at
all. This is tied to whether a semicolon is needed to separate
multiple template parameters. If the template argument repeats
the template parameter (T = T), then skip the parameter.
(dump_substitution): Moved code to print "[with" and ']' to
dump_template_bindings.
(dump_function_decl): Partial revert of PR50828, which masked
TFF_TEMPLATE_NAME for all of dump_function_decl. Now
TFF_TEMPLATE_NAME is masked for the scope of the function and
only carries through to dump_function_name.
(dump_function_name): Avoid calling dump_template_parms if
TFF_TEMPLATE_NAME is set.

gcc/testsuite/ChangeLog:

PR c++/100716
* g++.dg/diagnostic/pr100716.C: New test.
* g++.dg/diagnostic/pr100716-1.C: Same test with
-fno-pretty-templates.

3 years agoc++: Add missing scope in typedef diagnostic [PR100763]
Matthias Kretz [Thu, 27 May 2021 15:30:34 +0000 (17:30 +0200)]
c++: Add missing scope in typedef diagnostic [PR100763]

dump_type on 'const std::string' should not print 'const string' unless
TFF_UNQUALIFIED_NAME is requested.

gcc/cp/ChangeLog:

PR c++/100763
* error.c: Call dump_scope when printing a typedef.

3 years agolibgomp: Add openacc_{cuda,cublas,cudart} effective targets and use them in openacc...
Jakub Jelinek [Thu, 27 May 2021 20:44:36 +0000 (22:44 +0200)]
libgomp: Add openacc_{cuda,cublas,cudart} effective targets and use them in openacc testsuite

When gcc is configured for nvptx offloading with --without-cuda-driver
and full CUDA isn't installed, many libgomp.oacc-*/* tests fail,
some of them because cuda.h header can't be found, others because
the tests can't be linked against -lcuda, -lcudart or -lcublas.
I usually only have akmod-nvidia and xorg-x11-drv-nvidia-cuda rpms
installed, so libcuda.so.1 can be dlopened and the offloading works,
but linking against those libraries isn't possible nor are the
headers around (for the plugin itself there is the fallback
libgomp/plugin/cuda/cuda.h).

The following patch adds 3 new effective targets and uses them in tests that
needs those.

2021-05-27  Jakub Jelinek  <jakub@redhat.com>

* testsuite/lib/libgomp.exp (check_effective_target_openacc_cuda,
check_effective_target_openacc_cublas,
check_effective_target_openacc_cudart): New.
* testsuite/libgomp.oacc-fortran/host_data-4.f90: Require effective
target openacc_cublas.
* testsuite/libgomp.oacc-fortran/host_data-2.f90: Likewise.
* testsuite/libgomp.oacc-fortran/host_data-3.f: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-91.c: Require effective
target openacc_cuda.
* testsuite/libgomp.oacc-c-c++-common/lib-70.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-90.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-75.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-69.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-74.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-81.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-72.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/pr87835.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-82.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-73.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-83.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-78.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-76.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-84.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-79.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/host_data-1.c: Require effective
targets openacc_cublas and openacc_cudart.
* testsuite/libgomp.oacc-c-c++-common/context-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/context-2.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/context-3.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/context-4.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/acc_get_property-nvptx.c:
Require effective target openacc_cudart.
* testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c: Add -DUSE_CUDA_H
for effective target openacc_cuda and add && defined USE_CUDA_H to
preprocessor conditionals.  Guard -lcuda also on openacc_cuda
effective target.

3 years agoi386: Remove unneeded binary operand fixup from expanders.
Uros Bizjak [Thu, 27 May 2021 20:23:52 +0000 (22:23 +0200)]
i386: Remove unneeded binary operand fixup from expanders.

There is no need to call ix86_fixup_binary_operands when there are
only one or no memory operands allowed.

2021-05-27  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
* config/i386/mmx.md (addv2sf3): Do not call
ix86_fixup_binary_operands_no_copy.
(subv2sf3): Ditto.
(mulv2sf3): Ditto.
(<smaxmin:code>v2sf3): Ditto.
(<plusminus:insn><MMXMODEI:mode>3): Ditto.
(<plusminus:insn><VI_32:mode>3): Remove expander.
(<plusminus:insn><VI_32:mode>3): Rename from
"*<plusminus:insn><VI_32:mode>3".
(mulv4hi): Do not call ix86_fixup_binary_operands_no_copy.
(mulv2hi3): Remove expander.
(mulv2hi3): Rename from *mulv2hi3.
(<s>mulv2hi3_highpart): Remove expander.
(<s>mulv2hi3_highpart): Rename from *<s>mulv2hi3_highpart.
(<smaxmin:code><MMXMODE14:mode>3): Rename from
"*mmx_<smaxmin:code><MMXMODE14:mode>3".
(<smaxmin:code><SMAXMIN_MMXMODEI:mode>3): Remove expander.
(SMAXMIN_MMXMODEI): Remove mode iterator.
(<smaxmin:code>v4hi3): New expander.
(<smaxmin:code>v4qi3): Rename from *<smaxmin:code>v4qi3.
(<smaxmin:code>v2hi3): Rename from *<smaxmin:code>v2hi3.
(<smaxmin:code><SMAXMIN_VI_32:mode>3): Remove expander.
(SMAXMIN_VI_32): Remove mode iterator.
(<umaxmin:code><MMXMODE24:mode>3): Rename from
"*mmx_<umaxmin:code><MMXMODE24:mode>3".
(<umaxmin:code><UMAXMIN_MMXMODEI:mode>3): Remove expander.
(UMAXMIN_MMXMODEI): Remove mode iterator.
(<umaxmin:code>v8qi3): New expander.
(<umaxmin:code>v4qi3): Rename from *<umaxmin:code>v4qi3.
(<umaxmin:code>v2hi3): Rename from *<umaxmin:code>v2hi3.
(<umaxmin:code><SMAXMIN_VI_32:mode>3): Remove expander.
(UMAXMIN_VI_32): Remove mode iterator.
(<any_shift:insn>v2hi3): Remove expander.
(<any_shift:insn>v2hi3): Rename from *<any_shift:insn>v2hi3.
(<any_logic:code><MMXMODEI:mode>3): Do not call
ix86_fixup_binary_operands_no_copy.
(<any_logic:code><VI_32:mode>3): Remove expander.
(<any_logic:code><VI_32:mode>3): Rename from
"*<any_logic:code><VI_32:mode>3".
(uavg<mode>3_ceil): Do not call ix86_fixup_binary_operands_no_copy.
* config/i386/sse.md (div<VF2:mode>3): Do not call
ix86_fixup_binary_operands_no_copy.
(div<VF1:mode>3): Ditto.
(<maxmin:code><VI8_AVX2_AVX512F:mode>3): Ditto.
(smulhrsv4hi3): Ditto.
(smulhrsv2hi3): Ditto.

3 years agoPR other/100463 - many errors using GTY and hash_map
Martin Sebor [Thu, 27 May 2021 19:37:43 +0000 (13:37 -0600)]
PR other/100463 - many errors using GTY and hash_map

gcc/ChangeLog:
* ggc.h (gt_ggc_mx): Add overloads for all integers.
(gt_pch_nx):  Same.
* hash-map.h (class hash_map): Add pch_nx_helper overloads for all
integers.
(hash_map::operator==): New function.

3 years agoc++: parameter pack inside static_assert [PR99893]
Patrick Palka [Thu, 27 May 2021 18:25:33 +0000 (14:25 -0400)]
c++: parameter pack inside static_assert [PR99893]

Here, we're not finding the parameter pack inside the static_assert because
STATIC_ASSERT trees are tcc_exceptional, and we weren't explicitly walking
them in cp_walk_subtrees.

PR c++/99893

gcc/cp/ChangeLog:

* tree.c (cp_walk_subtrees) <case STATIC_ASSERT>: New case.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/static_assert17.C: New test.

3 years agoc++: argument pack with expansion [PR86355]
Jason Merrill [Wed, 26 May 2021 21:38:42 +0000 (17:38 -0400)]
c++: argument pack with expansion [PR86355]

This testcase revealed that we were using PACK_EXPANSION_EXTRA_ARGS a lot
more than necessary; use_pack_expansion_extra_args_p meant to use it in the
case of corresponding arguments in different argument packs differing in
whether they are pack expansions, but it was mistakenly also returning true
for the case of a single argument pack containing both expansion and
non-expansion elements.

Surprisingly, just disabling that didn't lead to any regressions in the
testsuite; it seems other changes have prevented us getting to this point
for code that used to exercise it.  So this patch limits the check to
arguments in the same position in the packs, and asserts that we never
actually see a mismatch.

PR c++/86355

gcc/cp/ChangeLog:

* pt.c (use_pack_expansion_extra_args_p): Don't compare
args from the same argument pack.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/alias-decl-variadic2.C: New test.

3 years agoc++: Relax rule for non-type arguments in partial specs [CWG1315]
Patrick Palka [Thu, 27 May 2021 16:36:39 +0000 (12:36 -0400)]
c++: Relax rule for non-type arguments in partial specs [CWG1315]

This implements the wording changes of CWG 1315, which permits non-type
template arguments in a partial specialization to use template
parameters more freely.  Delightfully, it seems the only change needed
is to remove a single check from process_partial_specialization (amidst
a bunch of whitespace changes).

But that change alone revealed a latent problem with for_each_template_parm:
it ends up looking into some non-deduced contexts even when
include_nondeduced_p is false.  This causes us to silently accept some
partial specializations within the testsuite that contain non-deducible
non-type template parameters (and that were previously rejected due to
the rule that CWG 1315 relaxed).  For now this patch makes a minimal
amount of changes to for_each_template_parm_r so that we continue to
reject existing ill-formed partial specializations within the testsuite.
I opened PR c++/100779 to track this issue.

DR 1315
PR c++/67593
PR c++/96555

gcc/cp/ChangeLog:

* pt.c (process_partial_specialization): Don't error on a
non-simple non-type template argument that involves template
parameters.
(for_each_template_parm_r): Don't walk TRAIT_EXPR, PLUS_EXPR,
MULT_EXPR, or SCOPE_REF when include_nondeduced_p is false.

gcc/testsuite/ChangeLog:

* g++.dg/template/partial16.C: New test.
* g++.dg/template/partial17.C: New test.
* g++.dg/template/partial18.C: New test.
* g++.dg/template/partial19.C: New test.
* g++.dg/cpp0x/pr68724.C: Adjust expected diagnostic for
ill-formed partial specialization.
* g++.dg/cpp0x/variadic38.C: Likewise.
* g++.dg/cpp1z/pr81016.C: Likewise.
* g++.dg/template/partial5.C: Likewise.
* g++.old-deja/g++.pt/spec21.C: Likewise.

3 years agoi386: Add XOP comparisons for 4- and 8-byte vectors [PR100637]
Uros Bizjak [Thu, 27 May 2021 12:46:45 +0000 (14:46 +0200)]
i386: Add XOP comparisons for 4- and 8-byte vectors [PR100637]

2021-05-27  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100637
* config/i386/i386-expand.c (ix86_expand_int_sse_cmp):
For TARGET_XOP bypass SSE comparisons for all supported vector modes.
* config/i386/mmx.md (*xop_maskcmp<MMXMODEI:mode>3): New insn pattern.
(*xop_maskcmp<VI_32:mode>3): Ditto.
(*xop_maskcmp_uns<MMXMODEI:mode>3): Ditto.
(*xop_maskcmp_uns<VI_32:mode>3): Ditto.

3 years agoFortran: Fix erroneous "pointer argument is not associated" runtime error
Harald Anlauf [Thu, 27 May 2021 11:58:26 +0000 (13:58 +0200)]
Fortran: Fix erroneous "pointer argument is not associated" runtime error

For CLASS arrays we need to use the CLASS data attributes to determine
which runtime check to generate.

gcc/fortran/ChangeLog:

PR fortran/100602
* trans-intrinsic.c (gfc_conv_intrinsic_size): Use CLASS data
attributes for CLASS arrays for generation of runtime error.

gcc/testsuite/ChangeLog:

PR fortran/100602
* gfortran.dg/pointer_check_14.f90: New test.

3 years agoPR fortran/100656 - prevent ICE in gfc_conv_expr_present
Harald Anlauf [Thu, 27 May 2021 11:55:11 +0000 (13:55 +0200)]
PR fortran/100656 - prevent ICE in gfc_conv_expr_present

gcc/fortran/ChangeLog:

PR fortran/100656
* trans-array.c (gfc_conv_ss_startstride): Do not call check for
presence of a dummy argument when a symbol actually refers to a
non-dummy.

gcc/testsuite/ChangeLog:

PR fortran/100656
* gfortran.dg/bounds_check_22.f90: New test.

3 years agoarm: Remove use of opts_set in arm_configure_build_target [PR100767]
Richard Earnshaw [Thu, 27 May 2021 09:25:37 +0000 (10:25 +0100)]
arm: Remove use of opts_set in arm_configure_build_target [PR100767]

The variable global_options_set is a reflection of which options have
been explicitly set from the command line in the structure
global_options.  But it doesn't describe the contents of a
cl_target_option.  cl_target_option is a set of options to apply and
once configured should represent a viable set of options without
needing to know which were explicitly set by the user.

Unfortunately arm_configure_build_target was incorrectly conflating
the two.  Fortunately, however, we do not really need to know this
since the various override_options functions should have sanitized the
target_options values before constructing a cl_target_option
structure.  It is safe, therefore, to simply drop this parameter to
arm_configure_build_target and rely on checking that various string
parameters are non-null before dereferencing them.

gcc:

PR target/100767
* config/arm/arm.c (arm_configure_build_target): Remove parameter
opts_set, directly check opts parameters for being non-null.
(arm_option_restore): Update call to arm_configure_build_target.
(arm_option_override): Likewise.
(arm_can_inline_p): Likewise.
(arm_valid_target_attribute_tree): Likewise.
* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
* config/arm/arm-protos.h (arm_configure_build_target): Adjust
prototype.

3 years agoUse get_range_query in simplify_conversion_using_ranges.
Aldy Hernandez [Thu, 27 May 2021 08:43:11 +0000 (10:43 +0200)]
Use get_range_query in simplify_conversion_using_ranges.

Before the fix to the ranger dependency chain yesterday (commit
7f0cfeb1) I thought an ICE I was seeing was due to my get_range_query
patchet.  This was not the case, but this small change crept in while I
was debugging the failure.

I'm reverting the change as was approved.

Tested on x86-64 Linux.

gcc/ChangeLog:

* vr-values.c (simplify_conversion_using_ranges): Use
get_range_query instead of get_global_range_query.

3 years agoMove global range code to value-query.cc.
Aldy Hernandez [Wed, 26 May 2021 06:25:36 +0000 (08:25 +0200)]
Move global range code to value-query.cc.

This patch moves all the global range code from gimple-range.cc into
value-query.cc.  It also moves get_range_info and get_ptr_nonnull from
tree-ssanames.c into their only uses, and removes external access to them.

gcc/ChangeLog:

* gimple-range.cc (get_range_global): Move to value-query.cc.
(gimple_range_global): Same.
(get_global_range_query): Same.
(global_range_query::range_of_expr): Same.
* gimple-range.h (class global_range_query): Move to
value-query.h.
(gimple_range_global): Same.
* tree-ssanames.c (get_range_info): Move to value-query.cc.
(get_ptr_nonnull): Same.
* tree-ssanames.h (get_range_info): Remove.
(get_ptr_nonnull): Remove.
* value-query.cc (get_ssa_name_range_info): Move from
tree-ssanames.c.
(get_ssa_name_ptr_info_nonnull): Same.
(get_range_global): Move from gimple-range.cc.
(gimple_range_global): Same.
(get_global_range_query): Same.
(global_range_query::range_of_expr): Same.
* value-query.h (class global_range_query): Move from
gimple-range.h.
(gimple_range_global): Same.

3 years agoTweak Wstringop-overflow-55.c test.
Aldy Hernandez [Thu, 27 May 2021 07:32:42 +0000 (09:32 +0200)]
Tweak Wstringop-overflow-55.c test.

On x86-32 warn_ptrdiff_anti_range_add() and warn_int_anti_range()
degrade to the same function so ICF is folding the latter into a call
into the former.  This is causing no warnings to be emitted for
warn_int_anti_range.

Fixed by passing -fno-ipa-icf.

gcc/testsuite/ChangeLog:

* gcc.dg/Wstringop-overflow-55.c: Pass -fno-ipa-icf.

3 years agoi386: Add uavg_ceil patterns for 4-byte vectors [PR100637]
Uros Bizjak [Thu, 27 May 2021 07:22:01 +0000 (09:22 +0200)]
i386: Add uavg_ceil patterns for 4-byte vectors [PR100637]

2021-05-27  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100637
* config/i386/mmx.md (uavgv4qi3_ceil): New insn pattern.
(uavgv2hi3_ceil): Ditto.

gcc/testsuite/

PR target/100637
* gcc.target/i386/pr100637-3b.c (avgu): New test.
* gcc.target/i386/pr100637-3w.c (avgu): Ditto.

3 years agoDaily bump.
GCC Administrator [Thu, 27 May 2021 00:16:53 +0000 (00:16 +0000)]
Daily bump.

3 years agoSmall tweak to documentation of scalar_storage_order
Eric Botcazou [Wed, 26 May 2021 22:24:20 +0000 (00:24 +0200)]
Small tweak to documentation of scalar_storage_order

gcc/
PR c/100653
* doc/extend.texi (scalar_storage_order): Rephrase slightly.

3 years agoc++: access for hidden friend of nested class template [PR100502]
Patrick Palka [Wed, 26 May 2021 20:02:33 +0000 (16:02 -0400)]
c++: access for hidden friend of nested class template [PR100502]

Here, during ahead of time access checking for the private member
EnumeratorRange<T>::end_reached_ in the hidden friend f, we're triggering
the assert in enforce_access that verifies we're not trying to add a
access check for a dependent decl onto TI_DEFERRED_ACCESS_CHECKS.

The special thing about this class member access expression is that
the overall expression is non-dependent (so finish_class_member_access_expr
doesn't exit early at parse time), and then accessible_p rejects the
access (so we don't exit early from enforce access either, and end up
triggering the assert b/c the member itself is dependent).  I think
we're correct to reject the access because a hidden friend is not a
member function, so [class.access.nest] doesn't apply, and also a hidden
friend of a nested class is not a friend of the enclosing class.

To fix this ICE, this patch disables ahead of time access checking
during the member lookup in finish_class_member_access_expr.  This
avoids potentially pushing an access check for a dependent member onto
TI_DEFERRED_ACCESS_CHECKS, and it's safe because we're going to redo the
same lookup at instantiation time anyway.

PR c++/100502

gcc/cp/ChangeLog:

* typeck.c (finish_class_member_access_expr): Disable ahead
of time access checking during the member lookup.

gcc/testsuite/ChangeLog:

* g++.dg/template/access37.C: New test.
* g++.dg/template/access37a.C: New test.

3 years agolibstdc++: [_GLIBCXX_DEBUG] Enhance rendering of assert message
François Dumont [Sun, 9 May 2021 19:56:15 +0000 (21:56 +0200)]
libstdc++: [_GLIBCXX_DEBUG] Enhance rendering of assert message

Avoid building an intermediate buffer to print to stderr, push directly to stderr.

libstdc++-v3/ChangeLog:

* include/debug/formatter.h
(_Error_formatter::_Parameter::_Named): New.
(_Error_formatter::_Parameter::_Type): Inherit latter.
(_Error_formatter::_Parameter::_M_integer): Likewise.
(_Error_formatter::_Parameter::_M_string): Likewise.
* src/c++11/debug.cc: Include <cstring>.
(_Print_func_t): New.
(print_raw(PrintContext&, const char*, ptrdiff_t)): New.
(print_word): Use '%.*s' format in fprintf to render only expected number of chars.
(pretty_print(PrintContext&, const char*, _Print_func_t)): New.
(print_type): Rename in...
(print_type_info): ...this. Use pretty_print.
(print_address, print_integer): New.
(print_named_name, print_iterator_constness, print_iterator_state): New.
(print_iterator_seq_type): New.
(print_named_field, print_type_field, print_instance_field, print_iterator_field): New.
(print_field): Use latters.
(print_quoted_named_name, print_type_type, print_type, print_instance): New.
(print_string(PrintContext&, const char*, const _Parameter*, size_t)):
Change signature to...
(print_string(PrintContext&, const char*, ptrdiff_t, const _Parameter*, size_t)):
...this and adapt. Remove intermediate buffer to render input string.
(print_string(PrintContext&, const char*, ptrdiff_t)): New.

3 years agoCleanup get_range_info
Aldy Hernandez [Thu, 20 May 2021 10:23:49 +0000 (12:23 +0200)]
Cleanup get_range_info

Now that there is only one user of get_range_info() we can clean this up
to always return a range instead of pairs of wide_ints.

A follow-up patch will inline both get_range_info and get_ptr_nonnull
into its only remaining user.

gcc/ChangeLog:

* tree-ssanames.c (get_range_info): Merge both copies of
get_range_info into one that works with irange.
* tree-ssanames.h (get_range_info): Remove version that works on
wide_ints.

3 years agoConvert remaining passes to get_range_query.
Aldy Hernandez [Wed, 19 May 2021 16:44:08 +0000 (18:44 +0200)]
Convert remaining passes to get_range_query.

This patch converts the remaining users of get_range_info and
get_ptr_nonnull to the get_range_query API.

No effort was made to move passes away from VR_ANTI_RANGE, or any other
use of deprecated methods.  This was a straight up conversion to the new
API, nothing else.

gcc/ChangeLog:

* builtins.c (check_nul_terminated_array): Convert to get_range_query.
(expand_builtin_strnlen): Same.
(determine_block_size): Same.
* fold-const.c (expr_not_equal_to): Same.
* gimple-fold.c (size_must_be_zero_p): Same.
* gimple-match-head.c: Include gimple-range.h.
* gimple-pretty-print.c (dump_ssaname_info): Convert to get_range_query.
* gimple-ssa-warn-restrict.c
(builtin_memref::extend_offset_range): Same.
* graphite-sese-to-poly.c (add_param_constraints): Same.
* internal-fn.c (get_min_precision): Same.
* ipa-fnsummary.c (set_switch_stmt_execution_predicate): Same.
* ipa-prop.c (ipa_compute_jump_functions_for_edge): Same.
* match.pd: Same.
* tree-data-ref.c (split_constant_offset): Same.
(dr_step_indicator): Same.
* tree-dfa.c (get_ref_base_and_extent): Same.
* tree-scalar-evolution.c (iv_can_overflow_p): Same.
* tree-ssa-loop-niter.c (refine_value_range_using_guard): Same.
(determine_value_range): Same.
(record_nonwrapping_iv): Same.
(infer_loop_bounds_from_signedness): Same.
(scev_var_range_cant_overflow): Same.
* tree-ssa-phiopt.c (two_value_replacement): Same.
* tree-ssa-pre.c (insert_into_preds_of_block): Same.
* tree-ssa-reassoc.c (optimize_range_tests_to_bit_test): Same.
* tree-ssa-strlen.c (handle_builtin_stxncpy_strncat): Same.
(get_range): Same.
(dump_strlen_info): Same.
(set_strlen_range): Same.
(maybe_diag_stxncpy_trunc): Same.
(get_len_or_size): Same.
(handle_integral_assign): Same.
* tree-ssa-structalias.c (find_what_p_points_to): Same.
* tree-ssa-uninit.c (find_var_cmp_const): Same.
* tree-switch-conversion.c (bit_test_cluster::emit): Same.
* tree-vect-patterns.c (vect_get_range_info): Same.
(vect_recog_divmod_pattern): Same.
* tree-vrp.c (intersect_range_with_nonzero_bits): Same.
(register_edge_assert_for_2): Same.
(determine_value_range_1): Same.
* tree.c (get_range_pos_neg): Same.
* vr-values.c (vr_values::get_lattice_entry): Same.
(vr_values::update_value_range): Same.
(simplify_conversion_using_ranges): Same.

3 years agoConvert Walloca pass to get_range_query.
Aldy Hernandez [Wed, 19 May 2021 16:27:47 +0000 (18:27 +0200)]
Convert Walloca pass to get_range_query.

This patch converts the Walloca pass to use an on-demand ranger
accesible with get_range_query instead of having to create a ranger and pass
it around.

gcc/ChangeLog:

* gimple-ssa-warn-alloca.c (alloca_call_type): Use
  get_range_query instead of query argument.
(pass_walloca::execute): Enable and disable global ranger.

gcc/testsuite/ChangeLog:

* gcc.dg/Wstringop-overflow-55.c: Adapt for range query changes.
* gcc.dg/pr80776-1.c: Same.

3 years agoConvert evrp pass to get_range_query.
Aldy Hernandez [Tue, 25 May 2021 15:44:51 +0000 (17:44 +0200)]
Convert evrp pass to get_range_query.

gcc/ChangeLog:

* gimple-ssa-evrp.c (rvrp_folder::rvrp_folder): Call
enable_ranger.
(rvrp_folder::~rvrp_folder): Call disable_ranger.
(hybrid_folder::hybrid_folder): Call enable_ranger.
(hybrid_folder::~hybrid_folder): Call disable_ranger.

3 years agoCommon API for accessing global and on-demand ranges.
Aldy Hernandez [Wed, 19 May 2021 16:27:05 +0000 (18:27 +0200)]
Common API for accessing global and on-demand ranges.

This patch provides a generic API for accessing global ranges.  It is
meant to replace get_range_info() and get_ptr_nonnull() with one
common interface.  It uses the same API as the ranger (class
range_query), so there will now be one API for accessing local and
global ranges alike.

Follow-up patches will convert all users of get_range_info and
get_ptr_nonnull to this API.

For get_range_info, instead of:

  if (!POINTER_TYPE_P (TREE_TYPE (name)) && SSA_NAME_RANGE_INFO (name))
    get_range_info (name, vr);

You can now do:

  get_range_query (cfun)->range_of_expr (vr, name, [stmt]);

...as well as any other of the range_query methods (range_on_edge,
range_of_stmt, value_of_expr, value_on_edge, value_on_stmt, etc).

As per the API, range_of_expr will work on constants, SSA names, and
anything we support in irange::supports_type_p().

For pointers, the interface is the same, so instead of:

  else if (POINTER_TYPE_P (TREE_TYPE (name)) && SSA_NAME_PTR_INFO (name))
    {
      if (get_ptr_nonnull (name))
        stuff();
    }

One can do:

  get_range_query (cfun)->range_of_expr (vr, name, [stmt]);
  if (vr.nonzero_p ())
    stuff ();

Along with this interface, we are providing a mechanism by which a
pass can use an on-demand ranger transparently, without having to
change its code.  Of course, this assumes all get_range_info() and
get_ptr_nonnull() users have been converted to the new API, which
follow-up patches will do.

If a pass would prefer to use an on-demand ranger with finer grained
and context aware ranges, all it would have to do is call
enable_ranger() at the beginning of the pass, and disable_ranger() at
the end of the pass.

Note, that to use context aware ranges, any user of range_of_expr()
would need to pass additional context.  For example, the optional
gimple statement (or perhaps use range_on_edge or range_of_stmt).

The observant reader will note that get_range_query is tied to a
struct function, which may not be available in certain contexts, such
as at RTL time, gimple-fold, or some other places where we may or may
not have cfun set.

For cases where we are sure there is no function, you can use
get_global_range_query() instead of get_range_query(fun).  The API is
the same.

For cases where a function may be called with or without a function,
you could use the following idiom:

  range_query *query = cfun ? get_range_query (cfun)
    : get_global_range_query ();

  query->range_of_expr (range, expr, [stmt]);

The default range query obtained by get_range_query() is the global
range query, unless the user has enabled an on-demand ranger with
enable_ranger(), in which case it will use the currently active ranger.
That is, until disable_ranger() is called, at which point, we revert
back to global ranges.

We think this provides a generic way of accessing ranges, both
globally and locally, without having to keep track of types,
SSA_NAME_RANGE_INFO, and SSA_NAME_PTR_INFO.  We also hope this can be
used to transition passes from global to on-demand ranges when
appropriate.

gcc/ChangeLog:

* function.c (allocate_struct_function): Set cfun->x_range_query.
* function.h (struct function): Declare x_range_query.
(get_range_query): New.
(get_global_range_query): New.
* gimple-range-cache.cc (ssa_global_cache::ssa_global_cache):
Remove call to safe_grow_cleared.
* gimple-range.cc (get_range_global): New.
(gimple_range_global): Move from gimple-range.h.
(get_global_range_query): New.
(global_range_query::range_of_expr): New.
(enable_ranger): New.
(disable_ranger): New.
* gimple-range.h (gimple_range_global): Move to gimple-range.cc.
(class global_range_query): New.
(enable_ranger): New.
(disable_ranger): New.
* gimple-ssa-evrp.c (evrp_folder::~evrp_folder): Rename
dump_all_value_ranges to dump.
* tree-vrp.c (vrp_prop::finalize): Same.
* value-query.cc (range_query::dump): New.
* value-query.h (range_query::dump): New.
* vr-values.c (vr_values::dump_all_value_ranges): Rename to...
(vr_values::dump): ...this.
* vr-values.h (class vr_values): Rename dump_all_value_ranges to
dump and make virtual.

3 years agoi386: Autovectorize 4-byte vectors
Uros Bizjak [Wed, 26 May 2021 18:44:49 +0000 (20:44 +0200)]
i386: Autovectorize 4-byte vectors

2021-05-26  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
* config/i386/i386.c (ix86_autovectorize_vector_modes):
Add V4QImode and V16QImode for TARGET_SSE2.
* doc/sourcebuild.texi (Vector-specific attributes):
Add vect64 and vect32 description.

gcc/testsuite/

* lib/target-supports.exp (check_effective_target_vect32): New.
(available_vector_sizes): Append 32 for x86 targets.
* gcc.dg/vect/pr71264.c (dg-final): Xfail scan dump for vect32 targets.
* gcc.dg/vect/slp-28.c (dg-final): Adjust dumps for vect32 targets.
* gcc.dg/vect/slp-3.c (dg-final): Ditto.

* gcc.target/i386/pr100637-3b.c: New test.
* gcc.target/i386/pr100637-3w.c: Ditto.
* gcc.target/i386/pr100637-4b.c: Ditto.
* gcc.target/i386/pr100637-4w.c: Ditto.

3 years agolibstdc++: Change [range.iter.op] functions to function objects [PR 100768]
Jonathan Wakely [Wed, 26 May 2021 16:32:53 +0000 (17:32 +0100)]
libstdc++: Change [range.iter.op] functions to function objects [PR 100768]

The standard specifies std::ranges::distance etc as function templates,
but it also requires them to not be found by ADL, and to suppress ADL
when normal unqualified lookup does find them. That means they need to
be function objects.

libstdc++-v3/ChangeLog:

PR libstdc++/100768
* include/bits/ranges_base.h (advance, distance, next, prev):
Replace function templates with function objects.
* testsuite/24_iterators/headers/iterator/synopsis_c++20.cc:
Adjust for changes to function objects.
* testsuite/std/ranges/adaptors/elements.cc: Add using
declarations for names from namespace ranges.
* testsuite/std/ranges/adaptors/transform.cc: Likewise.
* testsuite/24_iterators/range_operations/100768.cc: New test.

3 years agoFix gcc-bootstrap issue
Bernd Edlinger [Wed, 26 May 2021 16:45:09 +0000 (18:45 +0200)]
Fix gcc-bootstrap issue

... or at least try to.

2021-05-26  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* gimple-range-gori.cc (range_def_chain::register_dependency):
Resize m_def_chain when needed.

3 years agoWarn on type punning that toggles scalar storage order
Eric Botcazou [Wed, 26 May 2021 17:12:05 +0000 (19:12 +0200)]
Warn on type punning that toggles scalar storage order

As documented in the manual, we do not support type punning that toggles
the scalar storage order, so this adds a warning for the case of unions.

gcc/c/
PR c/100653
* c-decl.c (finish_struct): Warn for a union containing an aggregate
field with a differing scalar storage order.
gcc/testsuite/
* gcc.dg/sso-13.c: New test.

3 years agoarm: Auto-vectorization for MVE: vaddv
Christophe Lyon [Fri, 21 May 2021 16:12:58 +0000 (16:12 +0000)]
arm: Auto-vectorization for MVE: vaddv

This patch adds support for the reduc_plus_scal optab with MVE, which
maps to the vaddv instruction.

It moves the reduc_plus_scal_<mode> expander from neon.md to
vec-common.md and adds support for MVE to it.

Since vaddv uses a 32-bits accumulator, we have to truncate it's
result.

For instance:
int32_t test__s8x16 (int8_t *a) {
  int i;
  int8_t result = 0;
  for (i=0; i<16; i++) {
    result += a[i];
  }
  return result;
}
is compiled into:
  vldrb.8 q3, [r0]
  vaddv.s8        r0, q3
  sxtb    r0, r0
  bx      lr

If we used uint8_t instead of int8_t, we still use vaddv.s8        r0, q3,
but truncate with uxtb    r0, r0.

2021-05-25  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/mve.md (mve_vaddvq_<supf><mode>): Prefix with '@'.
* config/arm/neon.md (reduc_plus_scal_<mode>): Move to ..
* config/arm/vec-common.md: .. here. Add support for MVE.

gcc/testsuite/
* gcc.target/arm/simd/mve-vaddv-1.c: New test.

3 years agoRemove useless register keywords
Jakub Jelinek [Wed, 26 May 2021 13:54:17 +0000 (15:54 +0200)]
Remove useless register keywords

This patch removes useless register keywords from several backends and one
spot in the Ada FE.

2021-05-26  Jakub Jelinek  <jakub@redhat.com>

gcc/
* config/epiphany/epiphany.c (epiphany_print_operand_address): Remove
register keywords.
* config/microblaze/microblaze.c (microblaze_legitimize_address,
call_internal1,
microblaze_option_override, print_operand): Likewise.
* config/microblaze/microblaze.md (call_internal_plt,
call_value_intern_plt, call_value_intern): Likewise.
* config/arm/aout.h (ASM_OUTPUT_ALIGN): Likewise.
* config/iq2000/iq2000.md (call_internal1, call_value_internal1,
call_value_multiple_internal1): Likewise.
* config/bfin/bfin.c (symbolic_reference_mentioned_p): Likewise.
gcc/ada/
* init.c (__gnat_error_handler): Remove register keyword.

3 years agoarc: Remove useless register keyword
Jan-Benedict Glaw [Wed, 26 May 2021 13:22:11 +0000 (15:22 +0200)]
arc: Remove useless register keyword

The "register" keyword was removed in C++17, remove them to get the backend
to build again.

gcc/
* config/arc/arc.c (arc_address_cost, arc_print_operand_address,
arc_ccfsm_advance, symbolic_reference_mentioned_p,
arc_raw_symbolic_reference_mentioned_p): Remove register
keyword.

3 years agoc++: constexpr and copy elision within mem init [PR100368]
Patrick Palka [Wed, 26 May 2021 12:37:30 +0000 (08:37 -0400)]
c++: constexpr and copy elision within mem init [PR100368]

In the testcase below, the member initializer b(f()) inside C's default
constructor is encoded as a TARGET_EXPR wrapping the CALL_EXPR f() in
C++17 mode.  During massaging of this constexpr constructor,
build_target_expr_with_type called from bot_manip on this initializer
tries to add an extra copy using B's implicitly deleted copy constructor
rather than just preserving the copy elision.

Since it's wrong to introduce an extra copy when initializing a
temporary from a CALL_EXPR, this patch makes build_target_expr_with_type
avoid calling force_rvalue in this case.  Additionally, bot_manip should
be copying TARGET_EXPRs in a more oblivious manner, so this patch makes
bot_manip use force_target_expr instead of build_target_expr_with_type.
And since bot_manip is now no longer a caller, we can remove the void
initializer handling in build_target_expr_with_type.

PR c++/100368

gcc/cp/ChangeLog:

* tree.c (build_target_expr_with_type): Don't call force_rvalue
on CALL_EXPR initializer.  Simplify now that bot_manip is no
longer a caller.
(bot_manip): Use force_target_expr instead of
build_target_expr_with_type.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1z/elide6.C: New test.

3 years agoc++: Fix reference NTTP binding to noexcept fn [PR97420]
Patrick Palka [Wed, 26 May 2021 12:35:31 +0000 (08:35 -0400)]
c++: Fix reference NTTP binding to noexcept fn [PR97420]

Here, in C++17 mode, convert_nontype_argument_function is rejecting
binding a non-noexcept function reference template parameter to a
noexcept function (encoded as the template argument '*(int (&) (int)) &f').

The first roadblock to making this work is that the argument is wrapped
an an implicit INDIRECT_REF, so we need to unwrap it before calling
strip_fnptr_conv.

The second roadblock is that the NOP_EXPR cast converts from a function
pointer type to a reference type while simultaneously removing the
noexcept qualification, and fnptr_conv_p doesn't consider this cast to
be a function pointer conversion.  This patch fixes this by making
fnptr_conv_p treat REFERENCE_TYPEs and POINTER_TYPEs interchangeably.

Finally, in passing, this patch also simplifies noexcept_conv_p by
removing a bunch of redundant checks already performed by its only
caller fnptr_conv_p.

PR c++/97420

gcc/cp/ChangeLog:

* cvt.c (noexcept_conv_p): Remove redundant checks and simplify.
(fnptr_conv_p): Don't call non_reference.  Use INDIRECT_TYPE_P
instead of TYPE_PTR_P.
* pt.c (convert_nontype_argument_function): Look through
implicit INDIRECT_REFs before calling strip_fnptr_conv.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/noexcept68.C: New test.

3 years agoopenmp: Fix up handling of target constructs in offloaded routines [PR100573]
Jakub Jelinek [Wed, 26 May 2021 09:18:07 +0000 (11:18 +0200)]
openmp: Fix up handling of target constructs in offloaded routines [PR100573]

OpenMP Nesting of Regions restrictions say:
- If a target update, target data, target enter data, or target exit data
construct is encountered during execution of a target region, the behavior is unspecified.
- If a target construct is encountered during execution of a target region and a device
clause in which the ancestor device-modifier appears is not present on the construct, the
behavior is unspecified.
That wording is about the dynamic (runtime) behavior, not about lexical nesting,
so while it is UB if omp target * is encountered in the target region, we need to make
it compile and link (for lexical nesting of target * inside of target we actually
emit a warning).

To make this work, I had to do multiple changes.
One was to mark .omp_data_{sizes,kinds}.* variables when static as "omp declare target".
Another one was to add stub GOMP_target* entrypoints to nvptx and gcn libgomp.a.
The entrypoint functions shouldn't be called or passed in the offload regions,
otherwise
libgomp: cuLaunchKernel error: too many resources requested for launch
was reported; fixed by changing those arguments of calls to GOMP_target_ext
to NULL.
And we didn't mark the entrypoints "omp target entrypoint" when the caller
has been "omp declare target".

2021-05-26  Jakub Jelinek  <jakub@redhat.com>

PR libgomp/100573
gcc/
* omp-low.c: Include omp-offload.h.
(create_omp_child_function): If current_function_decl has
"omp declare target" attribute and is_gimple_omp_offloaded,
remove that attribute from the copy of attribute list and
add "omp target entrypoint" attribute instead.
(lower_omp_target): Mark .omp_data_sizes.* and .omp_data_kinds.*
variables for offloading if in omp_maybe_offloaded_ctx.
* omp-offload.c (pass_omp_target_link::execute): Nullify second
argument to GOMP_target_data_ext in offloaded code.
libgomp/
* config/nvptx/target.c (GOMP_target_ext, GOMP_target_data_ext,
GOMP_target_end_data, GOMP_target_update_ext,
GOMP_target_enter_exit_data): New dummy entrypoints.
* config/gcn/target.c (GOMP_target_ext, GOMP_target_data_ext,
GOMP_target_end_data, GOMP_target_update_ext,
GOMP_target_enter_exit_data): Likewise.
* testsuite/libgomp.c-c++-common/for-3.c (DO_PRAGMA, OMPTEAMS,
OMPFROM, OMPTO): Define.
(main): Remove #pragma omp target teams around all the tests.
* testsuite/libgomp.c-c++-common/target-41.c: New test.
* testsuite/libgomp.c-c++-common/target-42.c: New test.

3 years agoC-SKY: Delete TARGET_CAN_CHANGE_MODE_CLASS, use defualt definition.
Geng Qi [Fri, 30 Apr 2021 13:02:15 +0000 (21:02 +0800)]
C-SKY: Delete TARGET_CAN_CHANGE_MODE_CLASS, use defualt definition.

gcc/ChangeLog:

* config/csky/csky.c (csky_can_change_mode_class): Delete.
For csky, HF/SF mode use the low bits of VREGS.

3 years agoFix C++ libgomp regressions
Eric Botcazou [Wed, 26 May 2021 07:51:36 +0000 (09:51 +0200)]
Fix C++ libgomp regressions

This is only a stopgap fix.

gcc/
* gimplify.c (gimplify_decl_expr): Do not clear TREE_READONLY on a
DECL which is a reference for OMP.

3 years agoDOC: update documentation of __gcov_{dump,reset}
Martin Liska [Tue, 25 May 2021 07:52:01 +0000 (09:52 +0200)]
DOC: update documentation of __gcov_{dump,reset}

gcc/ChangeLog:

PR gcov-profile/100751
* doc/gcov.texi: Document that __gcov_dump can be called just
once and that __gcov_reset resets run-time counters.

3 years agodocs: port old-intall.texi part to install.texi
Martin Liska [Tue, 18 May 2021 09:57:47 +0000 (11:57 +0200)]
docs: port old-intall.texi part to install.texi

gcc/ChangeLog:

* doc/install.texi: Port relevant part from install-old.texi
and re-generate list of CPUs and systems.

3 years agoRemove install-old.texi
Martin Liska [Mon, 17 May 2021 10:57:08 +0000 (12:57 +0200)]
Remove install-old.texi

gcc/ChangeLog:

* Makefile.in: Remove it.
* doc/include/fdl.texi: Update next/previous chapters.
* doc/install.texi: Likewise.
* doc/install-old.texi: Removed.

3 years agoC-SKY: Support fldrd/fstrd for fpuv2 and fldr.64/fstr.64 for fpuv3.
Geng Qi [Wed, 26 May 2021 03:29:19 +0000 (11:29 +0800)]
C-SKY: Support fldrd/fstrd for fpuv2 and fldr.64/fstr.64 for fpuv3.

gcc/ChangeLog:

* config/csky/csky.c (ck810_legitimate_index_p): Support
"base + index" with DF mode.
* config/csky/constraints.md ("Y"): New constraint for memory operands
without index register.
* config/csky/csky_insn_fpuv2.md (fpuv3_movdf): Use "Y" instead of "m"
when mov between memory and general registers, and lower their priority.
* config/csky/csky_insn_fpuv3.md (fpuv2_movdf): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/csky/fldrd_fstrd.c: New.
* gcc.target/csky/fpuv3/fldr64_fstr64.c: New.

3 years agoC-SKY: Delete definition TARGET_PROMOTE_PROTOTYPES, just use the default definition.
Geng Qi [Fri, 30 Apr 2021 13:03:33 +0000 (21:03 +0800)]
C-SKY: Delete definition TARGET_PROMOTE_PROTOTYPES, just use the default definition.

gcc/ChangeLog:

* config/csky/csky.c (TARGET_PROMOTE_PROTOTYPES): Delete.

3 years agoC-SKY: Fix FAIL of gcc.dg/torture/stackalign/builtin-return-2.c.
Geng Qi [Fri, 30 Apr 2021 13:02:37 +0000 (21:02 +0800)]
C-SKY: Fix FAIL of gcc.dg/torture/stackalign/builtin-return-2.c.

gcc/ChangeLog:

* config/csky/csky.md (untyped_call): Emit clobber for return
registers to mark them used.

3 years agoC-SKY: Add instruction "ld.bs".
Geng Qi [Tue, 25 May 2021 10:45:25 +0000 (18:45 +0800)]
C-SKY: Add instruction "ld.bs".

gcc/
* config/csky/csky.md (cskyv2_sextend_ldbs): New.

gcc/testsuite/
* gcc.target/csky/ldbs.c: New.

3 years agoOptimize x < 0 ? ~y : y to (x >> 31) ^ y in match.pd
Andrew Pinski [Sat, 22 May 2021 19:49:50 +0000 (19:49 +0000)]
Optimize x < 0 ? ~y : y to (x >> 31) ^ y in match.pd

This copies the optimization that is done in phiopt for
"x < 0 ? ~y : y to (x >> 31) ^ y" into match.pd. The code
for phiopt is kept around until phiopt uses match.pd (which
I am working towards).

Note the original testcase is now optimized early on and I added a
new testcase to optimize during phiopt.

OK?  Bootstrapped and tested on x86_64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

Differences from v1:
V2: Add check for integeral type to make sure vector types are not done.

gcc:
* match.pd (x < 0 ? ~y : y): New patterns.

gcc/testsuite:
* gcc.dg/tree-ssa/pr96928.c: Update test for slightly different IR.
* gcc.dg/tree-ssa/pr96928-1.c: New testcase.

3 years agoAdd a couple of A?CST1:CST2 match and simplify optimizations
Andrew Pinski [Sun, 16 May 2021 20:07:06 +0000 (13:07 -0700)]
Add a couple of A?CST1:CST2 match and simplify optimizations

Instead of some of the more manual optimizations inside phi-opt,
it would be good idea to do a lot of the heavy lifting inside match
and simplify instead. In the process, this moves the three simple
A?CST1:CST2 (where CST1 or CST2 is zero) simplifications.

OK? Boostrapped and tested on x86_64-linux-gnu with no regressions.

Differences from V1:
* Use bit_xor 1 instead of bit_not to fix the problem with boolean types
which are not 1 bit precision.

Thanks,
Andrew Pinski

gcc:
* match.pd (A?CST1:CST2): Add simplifcations for A?0:+-1, A?+-1:0,
A?POW2:0 and A?0:POW2.

3 years agoDaily bump.
GCC Administrator [Wed, 26 May 2021 00:16:41 +0000 (00:16 +0000)]
Daily bump.

3 years agoRemove the logical stmt cache for now.
Andrew MacLeod [Tue, 25 May 2021 18:59:54 +0000 (14:59 -0400)]
Remove the logical stmt cache for now.

With the depth limiting, we are not currently using the logical stmt cache.

* gimple-range-gori.cc (class logical_stmt_cache): Delete
(logical_stmt_cache::logical_stmt_cache ): Delete.
(logical_stmt_cache::~logical_stmt_cache): Delete.
(logical_stmt_cache::cache_entry::dump): Delete.
(logical_stmt_cache::get_range): Delete.
(logical_stmt_cache::cached_name ): Delete.
(logical_stmt_cache::same_cached_name): Delete.
(logical_stmt_cache::cacheable_p): Delete.
(logical_stmt_cache::slot_diagnostics ): Delete.
(logical_stmt_cache::dump): Delete.
(gori_compute_cache::gori_compute_cache): Delete.
(gori_compute_cache::~gori_compute_cache): Delete.
(gori_compute_cache::compute_operand_range): Delete.
(gori_compute_cache::cache_stmt): Delete.
* gimple-range-gori.h (gori_compute::compute_operand_range): Remove
virtual.
(class gori_compute_cache): Delete.

3 years agoAdjust fur_source internal api to use gori_compute not ranger_cache.
Andrew MacLeod [Tue, 25 May 2021 18:55:04 +0000 (14:55 -0400)]
Adjust fur_source internal api to use gori_compute not ranger_cache.

In order to access the dependencies, the FoldUsingRange source API class
stored a range_cache.. THis is now contained in the base gori_compute class,
so use that now.

* gimple-range.cc (fold_using_range::range_of_range_op): Use m_gori
intead of m_cache.
(fold_using_range::range_of_address): Adjust.
(fold_using_range::range_of_phi): Adjust.
* gimple-range.h (class fur_source): Adjust.
(fur_source::fur_source): Adjust.

3 years agoMake expr_range_in_bb stmt based rather than block based.
Andrew MacLeod [Tue, 25 May 2021 18:49:40 +0000 (14:49 -0400)]
Make expr_range_in_bb stmt based rather than block based.

prerequisite to moving to a range_query model, make it stmt based.

* gimple-range-gori.cc (gori_compute::expr_range_at_stmt): Rename
from expr_range_in_bb and adjust.
(gori_compute::compute_name_range_op): Adjust.
(gori_compute::optimize_logical_operands): Adjust.
(gori_compute::compute_logical_operands_in_chain): Adjust.
(gori_compute::compute_operand1_range): Adjust.
(gori_compute::compute_operand2_range): Adjust.
(ori_compute_cache::cache_stmt): Adjust.
* gimple-range-gori.h (gori_compute): Rename prototype.

3 years agoTweak location of non-null calls. revamp ranger debug output.
Andrew MacLeod [Tue, 25 May 2021 18:41:16 +0000 (14:41 -0400)]
Tweak location of non-null calls. revamp ranger debug output.

range_on_entry shouldnt be checking non-null, but we sometimes should
after calling it.
change the debug output a bit.

* gimple-range.cc (gimple_ranger::range_of_expr): Non-null should be
checked only after range_of_stmt, not range_on_entry.
(gimple_ranger::range_on_entry): Check for non-null in any
predecessor block, if it is not already non-null.
(gimple_ranger::range_on_exit): DOnt check for non-null after
range on entry call.
(gimple_ranger::dump_bb): New.  Split from dump.
(gimple_ranger::dump): Adjust.
* gimple-range.h (class gimple_ranger): Adjust.

3 years agoUnify temporal cache with gori dependencies.
Andrew MacLeod [Tue, 25 May 2021 18:34:06 +0000 (14:34 -0400)]
Unify temporal cache with gori dependencies.

Move the temporal cache to strictly be a timestamp, and query GORI for
the dependencies rather than trying to register and maintain them.

* gimple-range-cache.cc (struct range_timestamp): Delete.
(class temporal_cache): Adjust.
(temporal_cache::get_timestamp): Delete.
(temporal_cache::set_dependency): Delete.
(temporal_cache::temporal_value): Adjust.
(temporal_cache::current_p): Take dependencies as params.
(temporal_cache::set_timestamp): Adjust.
(temporal_cache::set_always_current): Adjust.
(ranger_cache::get_non_stale_global_range): Adjust.
(ranger_cache::register_dependency): Delete.
* gimple-range-cache.h (class range_cache): Adjust.

3 years agoAdd imports and strengthen the export definition in range_def and gori_map.
Andrew MacLeod [Tue, 25 May 2021 18:15:50 +0000 (14:15 -0400)]
Add imports and strengthen the export definition in range_def and gori_map.

All add up to 2 direct dependencies for each ssa-name.
Add gori import/export iterators.

* gimple-range-gori.cc (range_def_chain::range_def_chain): init
bitmap obstack.
(range_def_chain::~range_def_chain): Dispose of obstack rather than
each individual bitmap.
(range_def_chain::set_import): New.
(range_def_chain::get_imports): New.
(range_def_chain::chain_import_p): New.
(range_def_chain::register_dependency): Rename from build_def_chain
and set imports.
(range_def_chain::def_chain_in_bitmap_p): New.
(range_def_chain::add_def_chain_to_bitmap): New.
(range_def_chain::has_def_chain): Just check first depenedence.
(range_def_chain::get_def_chain): Process imports, use generic
register_dependency routine.
(range_def_chain::dump): New.
(gori_map::gori_map): Allocate import list.
(gori_map::~gori_map): Release imports.
(gori_map::exports): Check for past allocated block size.
(gori_map::imports): New.
(gori_map::def_chain_in_export_p): Delete.
(gori_map::is_import_p): New.
(gori_map::maybe_add_gori): Handle imports.
(gori_map::dump): Adjust output, add imports.
(gori_compute::has_edge_range_p): Remove def_chain_in_export call.
(gori_export_iterator::gori_export_iterator): New.
(gori_export_iterator::next): New.
(gori_export_iterator::get_name): New.
* gimple-range-gori.h (range_def_chain): Add imports and direct
dependecies via struct rdc.
(range_def_chain::depend1): New.
(range_def_chain::depend2): New.
(class gori_map): Adjust.
(FOR_EACH_GORI_IMPORT_NAME): New.
(FOR_EACH_GORI_EXPORT_NAME): New.
(class gori_export_iterator): New.

3 years agofully populate the export list from range_cache, not gori_compute.
Andrew MacLeod [Tue, 25 May 2021 17:53:25 +0000 (13:53 -0400)]
fully populate the export list from range_cache, not gori_compute.

Ranger wants to prepopulate all the export blocks so that it has an initial
invariant set of names. GORI consumers shouldn't be penalized for ranger
requirements.  This way any gori client remains lightweight.

* gimple-range-cache.cc (ranger_cache::ranger_cache):  Move initial
export cache filling to here.
* gimple-range-gori.cc (gori_compute::gori_compute) : From Here.

3 years agoChange gori_compute to inherit from gori_map instead of having a gori-map.
Andrew MacLeod [Tue, 25 May 2021 17:45:43 +0000 (13:45 -0400)]
Change gori_compute to inherit from gori_map instead of having a gori-map.

Move the classes to the header file and inherit instead of instantiating.

* gimple-range-gori.cc (range_def_chain): Move to gimple-range-gori.h.
(gori_map): Move to gimple-range-gori.h.
(gori_compute::gori_compute): Adjust.
(gori_compute::~gori_compute): Delete.
(gori_compute::compute_operand_range_switch): Adjust.
(gori_compute::compute_operand_range): Adjust.
(gori_compute::compute_logical_operands): Adjust.
(gori_compute::has_edge_range_p ): Adjust.
(gori_compute::set_range_invariant): Delete.
(gori_compute::dump): Adjust.
(gori_compute::outgoing_edge_range_p): Adjust.
* gimple-range-gori.h (class range_def_chain): Relocate here.
(class gori_map): Relocate here.
(class gori_compute): Inherit from gori_map, and adjust.

3 years agoFix selftest for targets where short and int are the same size.
Aldy Hernandez [Tue, 25 May 2021 06:36:44 +0000 (08:36 +0200)]
Fix selftest for targets where short and int are the same size.

avr-elf seems to use HImode for both integer_type_node and
signed_char_type_node, which is causing the check for different sized
VARYING ranges to fail.

gcc/ChangeLog:

* value-range.cc (range_tests_legacy): Use
build_nonstandard_integer_type instead of int and short.

3 years agoRemove stalled TREE_READONLY flag on automatic variable
Eric Botcazou [Tue, 25 May 2021 16:30:29 +0000 (18:30 +0200)]
Remove stalled TREE_READONLY flag on automatic variable

gcc/
* gimplify.c (gimplify_decl_expr): Clear TREE_READONLY on the DECL
when really creating an initialization statement for it.

3 years agoc++: Avoid -Wunused-value false positives on nullptr passed to ellipsis [PR100666]
Jakub Jelinek [Tue, 25 May 2021 15:24:38 +0000 (17:24 +0200)]
c++: Avoid -Wunused-value false positives on nullptr passed to ellipsis [PR100666]

When passing expressions with decltype(nullptr) type with side-effects to
ellipsis, we pass (void *)0 instead, but for the side-effects evaluate them
on the lhs of a COMPOUND_EXPR.  Unfortunately that means we warn about it
if the expression is a call to nodiscard marked function, even when the
result is really used, just needs to be transformed.

Fixed by adding a warning_sentinel.

2021-05-25  Jakub Jelinek  <jakub@redhat.com>

PR c++/100666
* call.c (convert_arg_to_ellipsis): For expressions with NULLPTR_TYPE
and side-effects, temporarily disable -Wunused-result warning when
building COMPOUND_EXPR.

* g++.dg/cpp1z/nodiscard8.C: New test.
* g++.dg/cpp1z/nodiscard9.C: New test.

3 years agoFix thinko in latest change to setup_one_parameter
Eric Botcazou [Tue, 25 May 2021 14:51:05 +0000 (16:51 +0200)]
Fix thinko in latest change to setup_one_parameter

gcc/
* tree-inline.c (setup_one_parameter): Fix thinko in new condition.

3 years agoc++tools: Include <cstdlib> for exit [PR100731]
Jakub Jelinek [Tue, 25 May 2021 14:44:35 +0000 (16:44 +0200)]
c++tools: Include <cstdlib> for exit [PR100731]

This TU uses exit, but doesn't include <stdlib.h> or <cstdlib> and relies
on some other header to include it indirectly, which apparently doesn't
happen on reporter's host.

The other <c*> headers aren't guarded either and we rely on a compiler
capable of C++11, so maybe we can rely on <cstdlib> being around
unconditionally.

2021-05-25  Jakub Jelinek  <jakub@redhat.com>

PR bootstrap/100731
* server.cc: Include <cstdlib>.

3 years agoRISC-V: Pass -mno-relax to assembler
Kito Cheng [Tue, 25 May 2021 13:26:12 +0000 (21:26 +0800)]
RISC-V: Pass -mno-relax to assembler

gcc/ChangeLog:
* config/riscv/riscv.h (ASM_SPEC): Pass -mno-relax.

3 years agoImprove global state for options.
Martin Liska [Wed, 10 Mar 2021 14:12:31 +0000 (15:12 +0100)]
Improve global state for options.

gcc/c-family/ChangeLog:

PR tree-optimization/92860
PR target/99592
* c-attribs.c (handle_optimize_attribute): Save target node
before calling parse_optimize_options and save it in case
it changes.
* c-pragma.c (handle_pragma_target): Similarly for pragma.
(handle_pragma_pop_options): Likewise here.

gcc/ChangeLog:

PR tree-optimization/92860
PR target/99592
* optc-save-gen.awk: Remove exceptions.

3 years agoAdd no_sanitize_coverage attribute.
Martin Liska [Thu, 20 May 2021 07:32:29 +0000 (09:32 +0200)]
Add no_sanitize_coverage attribute.

gcc/ChangeLog:

* asan.h (sanitize_coverage_p): New function.
* doc/extend.texi: Document it.
* fold-const.c (fold_range_test): Use sanitize_flags_p
instead of flag_sanitize_coverage.
(fold_truth_andor): Likewise.
* sancov.c: Likewise.
* tree-ssa-ifcombine.c (ifcombine_ifandif): Likewise.
* ipa-inline.c (sanitize_attrs_match_for_inline_p): Handle
-fsanitize-coverage when inlining.

gcc/c-family/ChangeLog:

* c-attribs.c (handle_no_sanitize_coverage_attribute): New.

gcc/testsuite/ChangeLog:

* gcc.dg/sancov/attribute.c: New test.

3 years agoC-SKY: Fix copyright of csky-modes.def.
Cooper Qu [Tue, 25 May 2021 12:03:48 +0000 (20:03 +0800)]
C-SKY: Fix copyright of csky-modes.def.

The incorrect copyright comment format causes build error:
builddir/source//gcc/gcc/config/csky/csky-modes.def: In function ‘void create_modes()’:
builddir/source//gcc/gcc/config/csky/csky-modes.def:1:4: error: ‘C’ was not declared in this scope
 ;; C-SKY extra machine modes.
    ^
builddir/source//gcc/gcc/config/csky/csky-modes.def:1:6: error: ‘SKY’ was not declared in this scope
 ;; C-SKY extra machine modes.
      ^
builddir/source//gcc/gcc/config/csky/csky-modes.def:2:16: error: ‘Copyright’ was not declared in this scope
 ;; Copyright (C) 2018-2021 Free Software Foundation, Inc.
                ^
builddir/source//gcc/gcc/config/csky/csky-modes.def:3:4: error: ‘Contributed’ was not declared in this scope
 ;; Contributed by C-SKY Microsystems and Mentor Graphics.
    ^

gcc/ChangeLog:
* config/csky/csky-modes.def : Fix copyright.

3 years agoFix typo and weird syntax in configure script
Eric Botcazou [Tue, 25 May 2021 10:12:08 +0000 (12:12 +0200)]
Fix typo and weird syntax in configure script

c++tools/
* configure.ac (--enable-maintainer-mode): Fix typo and weird syntax.
* configure: Regenerate.

3 years agoC-SKY: Amend copyrights of recently added files.
Cooper Qu [Tue, 25 May 2021 08:56:58 +0000 (16:56 +0800)]
C-SKY: Amend copyrights of recently added files.

gcc/ChangeLog:
* config/csky/csky-modes.def : Amend copyright.
* config/csky/csky_insn_fpuv2.md : Likewise.
* config/csky/csky_insn_fpuv3.md : Likewise.

gcc/testsuite/ChangeLog:
* gcc.target/csky/fpuv3/fpuv3.exp : Amend copyright.