platform/upstream/gcc.git
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.

3 years agolibgomp/100747 - fix permission of configure scripts
Richard Biener [Tue, 25 May 2021 09:11:27 +0000 (11:11 +0200)]
libgomp/100747 - fix permission of configure scripts

Added executable bits.

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

PR libgomp/100747
liboffloadmic/
* configure: Make executable.
* plugin/configure: Likewise.

3 years agoUpdate copyright years in c++tools
Jakub Jelinek [Tue, 25 May 2021 09:11:02 +0000 (11:11 +0200)]
Update copyright years in c++tools

While looking at PR100731, I have noticed the copyright years are 2020-ish
only.  This patch adds it to update-copyright.py and updates those.

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

contrib/
* update-copyright.py: Add c++tools.
c++tools/
* Makefile.in: Update copyright year.
* configure.ac: Likewise.
* resolver.cc: Likewise.
* resolver.h: Likewise.
* server.cc: Likewise.
(print_version): Update copyright notice date.

3 years agomiddle-end/100727 - fix call expansion with WITH_SIZE_EXPR arg
Richard Biener [Tue, 25 May 2021 08:21:41 +0000 (10:21 +0200)]
middle-end/100727 - fix call expansion with WITH_SIZE_EXPR arg

call expansion used the result of get_base_address to switch between
ABIs - with get_base_address now never returning NULL we have to
re-instantiate the check in a more explicit way.  This also adjusts
mark_addressable to skip WITH_SIZE_EXPRs, consistent with how
build_fold_addr_expr handles it.

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

PR middle-end/100727
* calls.c (initialize_argument_information): Explicitely test
for WITH_SIZE_EXPR.
* gimple-expr.c (mark_addressable): Skip outer WITH_SIZE_EXPR.

3 years agoopenmp: Fix reduction clause handling on teams distribute simd [PR99928]
Jakub Jelinek [Tue, 25 May 2021 09:07:01 +0000 (11:07 +0200)]
openmp: Fix reduction clause handling on teams distribute simd [PR99928]

When a directive isn't combined with worksharing-loop, it takes much
simpler clause splitting path for reduction, and that one was missing
handling of teams when combined with simd.

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

PR middle-end/99928
gcc/c-family/
* c-omp.c (c_omp_split_clauses): Copy reduction to teams when teams is
combined with simd and not with taskloop or for.
gcc/testsuite/
* c-c++-common/gomp/pr99928-8.c: Remove xfails from omp teams r21 and
r28 checks.
* c-c++-common/gomp/pr99928-9.c: Likewise.
* c-c++-common/gomp/pr99928-10.c: Likewise.
libgomp/
* testsuite/libgomp.c-c++-common/reduction-17.c: New test.

3 years agoFix sphinx-build warning.
Martin Liska [Tue, 25 May 2021 08:37:28 +0000 (10:37 +0200)]
Fix sphinx-build warning.

RemovedInSphinx40Warning: app.add_lexer() API changed; Please give lexer class instead of instance

gcc/ada/ChangeLog:

* doc/share/conf.py: Fix Sphinx 4.0.x error.

3 years agoC-SKY: Add cases for csky fpuv3 instructions.
Geng Qi [Fri, 30 Apr 2021 13:01:31 +0000 (21:01 +0800)]
C-SKY: Add cases for csky fpuv3 instructions.

gcc/testsuite/ChangeLog:

* gcc.target/csky/fpuv3/fpuv3.exp: New.
* gcc.target/csky/fpuv3/fpv3_div.c: New.
* gcc.target/csky/fpuv3/fpv3_fadd.c: New.
* gcc.target/csky/fpuv3/fpv3_fdtos.c: New.
* gcc.target/csky/fpuv3/fpv3_fftoi_rm.c: New.
* gcc.target/csky/fpuv3/fpv3_fftoi_rz.c: New.
* gcc.target/csky/fpuv3/fpv3_fhtos.c: New.
* gcc.target/csky/fpuv3/fpv3_fitof.c: New.
* gcc.target/csky/fpuv3/fpv3_fmov.c: New.
* gcc.target/csky/fpuv3/fpv3_fmovi.c: New.
* gcc.target/csky/fpuv3/fpv3_fmula.c: New.
* gcc.target/csky/fpuv3/fpv3_fmuls.c: New.
* gcc.target/csky/fpuv3/fpv3_fneg.c: New.
* gcc.target/csky/fpuv3/fpv3_fnmula.c: New.
* gcc.target/csky/fpuv3/fpv3_fnmuls.c: New.
* gcc.target/csky/fpuv3/fpv3_fstod.c: New.
* gcc.target/csky/fpuv3/fpv3_fstoh.c: New.
* gcc.target/csky/fpuv3/fpv3_fsub.c: New.
* gcc.target/csky/fpuv3/fpv3_fxtof.c: New.
* gcc.target/csky/fpuv3/fpv3_h.c: New.
* gcc.target/csky/fpuv3/fpv3_hs.c: New.
* gcc.target/csky/fpuv3/fpv3_hsz.c: New.
* gcc.target/csky/fpuv3/fpv3_hz.c: New.
* gcc.target/csky/fpuv3/fpv3_ls.c: New.
* gcc.target/csky/fpuv3/fpv3_lsz.c: New.
* gcc.target/csky/fpuv3/fpv3_lt.c: New.
* gcc.target/csky/fpuv3/fpv3_ltz.c: New.
* gcc.target/csky/fpuv3/fpv3_max.c: New.
* gcc.target/csky/fpuv3/fpv3_min.c: New.
* gcc.target/csky/fpuv3/fpv3_mul.c: New.
* gcc.target/csky/fpuv3/fpv3_mula.c: New.
* gcc.target/csky/fpuv3/fpv3_muls.c: New.
* gcc.target/csky/fpuv3/fpv3_ne.c: New.
* gcc.target/csky/fpuv3/fpv3_nez.c: New.
* gcc.target/csky/fpuv3/fpv3_recip.c: New.
* gcc.target/csky/fpuv3/fpv3_sqrt.c: New.
* gcc.target/csky/fpuv3/fpv3_unordered.c: New.

3 years agofortran/intrinsic.texi: Fix copy'n'paste errors and typos
Tobias Burnus [Tue, 25 May 2021 07:17:07 +0000 (09:17 +0200)]
fortran/intrinsic.texi: Fix copy'n'paste errors and typos

gcc/fortran/ChangeLog:

* intrinsic.texi (GERROR, GETARGS, GETLOG, NORM2, PARITY, RANDOM_INIT,
RANDOM_NUMBER): Fix typos and copy'n'paste errors.

Co-Authored-By: Johannes Nendwich <a08727063@unet.univie.ac.at>
3 years agoC-SKY: Separate FRAME_POINTER_REGNUM into FRAME_POINTER_REGNUM and HARD_FRAME_POINTER...
Geng Qi [Mon, 24 May 2021 12:22:55 +0000 (20:22 +0800)]
C-SKY: Separate FRAME_POINTER_REGNUM into FRAME_POINTER_REGNUM and HARD_FRAME_POINTER_REGNUM.

gcc/ChangeLog:

* config/csky/csky.h (FRAME_POINTER_REGNUM): Use
HARD_FRAME_POINTER_REGNUM and FRAME_POINTER_REGNUM instead of
the signle definition. The signle definition may not work well
at simplify_subreg_regno().
(HARD_FRAME_POINTER_REGNUM): New.
(ELIMINABLE_REGS): Add for HARD_FRAME_POINTER_REGNUM.
* config/csky/csky.c (get_csky_live_regs, csky_can_eliminate,
csky_initial_elimination_offset, csky_expand_prologue,
csky_expand_epilogue): Add for HARD_FRAME_POINTER_REGNUM.

3 years agoC-SKY: Bug fix for bad setting of TARGET_DSP and TARGET_DIV.
Geng Qi [Mon, 24 May 2021 12:22:54 +0000 (20:22 +0800)]
C-SKY: Bug fix for bad setting of TARGET_DSP and TARGET_DIV.

gcc/ChangeLog:

* config/csky/csky.c (csky_option_override):
Init csky_arch_isa_features[] in advance, so TARGET_DSP
and TARGET_DIV can be set well.

3 years agoC-SKY: Delete LO_REGS and HI_REGS, use HILO_REGS instead.
Geng Qi [Mon, 24 May 2021 12:22:53 +0000 (20:22 +0800)]
C-SKY: Delete LO_REGS and HI_REGS, use HILO_REGS instead.

gcc/ChangeLog:

* config/csky/constraints.md ("l", "h"): Delete.
* config/csky/csky.h (reg_class, REG_CLASS_NAMES,
REG_CLASS_CONTENTS):  Delete LO_REGS and HI_REGS.
* config/csky/csky.c (regno_reg_classm,
csky_secondary_reload, csky_register_move_cost):
Use HILO_REGS instead of LO_REGS and HI_REGS.

3 years agoC-SKY: Add fpuv3 instructions and CK860 arch.
Geng Qi [Mon, 24 May 2021 12:22:52 +0000 (20:22 +0800)]
C-SKY: Add fpuv3 instructions and CK860 arch.

gcc/ChangeLog:

* config/csky/constraints.md ("W"): New constriant for mem operand
with base reg, index register.
("Q"): Renamed and modified "csky_valid_fpuv2_mem_operand" to
"csky_valid_mem_constraint_operand" to deal with both "Q" and "W"
constraint.
("Dv"): New constraint for const double value that can be used at
fmovi instruction.
* config/csky/csky-modes.def (HFmode): New mode.
* config/csky/csky-protos.h (csky_valid_fpuv2_mem_operand): Rename
to "csky_valid_mem_constraint_operand" and support new constraint
"W".
(csky_get_movedouble_length): New.
(fpuv3_output_move): New.
(fpuv3_const_double): New.
* config/csky/csky.c (csky_option_override): New arch CK860 with fpv3.
(decompose_csky_address): Refine.
(csky_print_operand): New "CONST_DOUBLE" operand.
(csky_output_move): Support fpv3 instructions.
(csky_get_movedouble_length): New.
(fpuv3_output_move): New.
(fpuv3_const_double): New.
(csky_emit_compare): Cover float comparsion.
(csky_emit_compare_float): Refine.
(csky_vaild_fpuv2_mem_operand): Rename to
"csky_valid_mem_constraint_operand" and support new constraint "W".
(ck860_rtx_costs): New.
(csky_rtx_costs): Add the cost calculation of CK860.
(regno_reg_class): New vregs for fpuv3.
(csky_dbx_regno): Likewise.
(csky_cpu_cpp_builtins): New builtin macro for fpuv3.
(csky_conditional_register_usage): Suporrot fpuv3.
(csky_dwarf_register_span): Suporrot fpuv3.
(csky_init_builtins, csky_mangle_type): Support "__fp16" type.
(ck810_legitimate_index_p): Support fp16.
* config/csky/csky.h (TARGET_TLS): ADD CK860.
(CSKY_VREG_P, CSKY_VREG_LO_P, CSKY_VREG_HI_P): Support fpuv3.
(TARGET_SINGLE_FPU): Support fpuv3.
(TARGET_SUPPORT_FPV3): New.
(FIRST_PSEUDO_REGISTER): Change to 202 to hold the new fpuv3 registers.
(FIXED_REGISTERS, CALL_REALLY_USED_REGISTERS, REGISTER_NAMES,
 REG_CLASS_CONTENTS): Support fpuv3.
* config/csky/csky.md (movsf): Move to cksy_insn_fpu.md and refine.
(csky_movsf_fpv2): Likewise.
(ck801_movsf): Likewise.
(csky_movsf): Likewise.
(movdf): Likewise.
(csky_movdf_fpv2): Likewise.
(ck801_movdf): Likewise.
(csky_movdf): Likewise.
(movsicc): Refine. Use "comparison_operatior" instead of
"ordered_comparison_operatior".
(addsicc): Likewise.
(CSKY_FIRST_VFP3_REGNUM, CSKY_LAST_VFP3_REGNUM): New constant.
(call_value_internal_vh): New.
* config/csky/csky_cores.def (CK860): New arch and cpu.
(fpv3_hf): New.
(fpv3_hsf): New.
(fpv3_sdf): New.
(fpv3): New.
* config/csky/csky_insn_fpu.md: Refactor. Separate all float patterns
into emit-patterns and match-patterns, remain the emit-patterns here,
and move the match-patterns to csky_insn_fpuv2.md or
csky_insn_fpuv3.md.
* config/csky/csky_insn_fpuv2.md: New file for fpuv2 instructions.
* config/csky/csky_insn_fpuv3.md: New file and new patterns for fpuv3
isntructions.
* config/csky/csky_isa.def (fcr): New.
(fpv3_hi): New.
(fpv3_hf): New.
(fpv3_sf): New.
(fpv3_df): New.
(CK860): New definition for ck860.
* config/csky/csky_tables.opt (ck860): New processors ck860,
ck860f. And new arch ck860.
(fpv3_hf): New.
(fpv3_hsf): New.
(fpv3_hdf): New.
(fpv3): New.
* config/csky/predicates.md (csky_float_comparsion_operator): Delete
"geu", "gtu", "leu", "ltu", which will never appear at float comparison.
* config/csky/t-csky-elf: Support 860.
* config/csky/t-csky-linux: Likewise.
* doc/md.texi: Add "Q" and "W" constraints for C-SKY.

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

3 years agocompiler: mark global variables whose address is taken
Ian Lance Taylor [Sun, 23 May 2021 02:19:13 +0000 (19:19 -0700)]
compiler: mark global variables whose address is taken

To implement this, change the backend to use flag bits for variables.

Fixes https://gcc.gnu.org/PR100537

PR go/100537
* go-gcc.cc (class Gcc_backend): Update methods that create
variables to take a flags parameter.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/322129

3 years agolibstdc++: Limit allocation on iterator insertion in Hashtable [PR 96088]
François Dumont [Tue, 25 Aug 2020 19:31:23 +0000 (21:31 +0200)]
libstdc++: Limit allocation on iterator insertion in Hashtable [PR 96088]

When inserting into unordered_multiset or unordered_multimap first instantiate
the node to store and compute the hash code from it to avoid a potential
intermediate key_type instantiation.

When inserting into unordered_set or unordered_map check if invoking the hash
functor with container key_type is noexcept and invoking the same hash functor
with key part of the iterator value_type can throw. In this case create a
temporary key_type instance at Hashtable level and use it to compute the hash
code. This temporary instance is moved to the final storage location if needed.

libstdc++-v3/ChangeLog:

PR libstdc++/96088
* include/bits/hashtable_policy.h (_Select2nd): New.
(_NodeBuilder<>): New.
(_ReuseOrAllocNode<>::operator()): Use variadic template args.
(_AllocNode<>::operator()): Likewise.
* include/bits/hashtable.h
(_Hashtable<>::__node_builder_t): New.
(_Hashtable<>::_M_insert_unique<>(_Kt&&, _Arg&&, const _NodeGenerator&)):
 New.
(_Hashtable<>::_S_forward_key): New.
(_Hashtable<>::_M_insert): Use latter.
(_Hashtable<>::_M_insert(const_iterator, _Arg&&, const _NodeGenerator&, false_type)):
Instantiate node first, compute hash code second.
* testsuite/23_containers/unordered_map/96088.cc: New test.
* testsuite/23_containers/unordered_multimap/96088.cc: New test.
* testsuite/23_containers/unordered_multiset/96088.cc: New test.
* testsuite/23_containers/unordered_set/96088.cc: New test.
* testsuite/util/replacement_memory_operators.h
(counter::_M_increment): New.
(counter::_M_decrement): New.
(counter::reset()): New.

3 years agoFusion patterns for add-logical/logical-add
Aaron Sawdey [Wed, 3 Mar 2021 00:06:37 +0000 (18:06 -0600)]
Fusion patterns for add-logical/logical-add

This patch modifies the function in genfusion.pl for generating
the logical-logical patterns so that it can also generate the
add-logical and logical-add patterns which are very similar.

gcc/ChangeLog:
* config/rs6000/genfusion.pl (gen_logical_addsubf): Refactor to
add generation of logical-add and add-logical fusion pairs.
* config/rs6000/rs6000-cpus.def: Add new fusion to ISA 3.1 mask
and powerpc mask.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Turn on
logical-add and add-logical fusion by default.
* config/rs6000/rs6000.opt: Add -mpower10-fusion-logical-add and
-mpower10-fusion-add-logical options.
* config/rs6000/fusion.md: Regenerate file.

gcc/testsuite/ChangeLog:
* gcc.target/powerpc/fusion-p10-logadd.c: New file.

3 years agoVARYING ranges of different sizes should not be equal.
Aldy Hernandez [Mon, 24 May 2021 17:57:29 +0000 (19:57 +0200)]
VARYING ranges of different sizes should not be equal.

VARYING ranges are just normal ranges that span the entire domain.  Such
ranges have had end-points for a few releases now, and the fact that the
legacy code was still treating all VR_VARYING the same was an oversight.

This patch fixes the oversight to match the multi-range behavior.

gcc/ChangeLog:

* value-range.cc (irange::legacy_equal_p): Check type when
comparing VR_VARYING types.
(range_tests_legacy): Test comparing VARYING ranges of different
sizes.

3 years agolibstdc++: Fix iterator caching inside range adaptors [PR100479]
Patrick Palka [Mon, 24 May 2021 19:24:44 +0000 (15:24 -0400)]
libstdc++: Fix iterator caching inside range adaptors [PR100479]

This fixes two issues with our iterator caching as described in detail
in the PR.  Since we recently added the __non_propagating_cache class
template as part of r12-336 for P2328, this patch just rewrites the
problematic _CachedPosition partial specialization in terms of this
class template.

For the offset partial specialization, it's safe to propagate the cached
offset on copy/move, but we should still invalidate the cached offset in
the source object on move.

libstdc++-v3/ChangeLog:

PR libstdc++/100479
* include/std/ranges (__detail::__non_propagating_cache): Move
definition up to before that of _CachedPosition.  Make base
class _Optional_base protected instead of private.  Add const
overload for operator*.
(__detail::_CachedPosition): Rewrite the partial specialization
for forward ranges as a derived class of __non_propagating_cache.
Remove the size constraint on the partial specialization for
random access ranges.  Add copy/move/copy-assignment/move-assignment
members to the offset partial specialization for random
access ranges that propagate the cached value but additionally
invalidate it in the source object on move.
* testsuite/std/ranges/adaptors/100479.cc: New test.

3 years agolibstdc++: Qualify functions used in tests
Jonathan Wakely [Mon, 24 May 2021 17:42:09 +0000 (18:42 +0100)]
libstdc++: Qualify functions used in tests

These tests rely on ADL for some functions, probably unintentionally.
The calls only work because the iterator wrappers derive from
std::iterator and so namespace std is an associated namespace.

libstdc++-v3/ChangeLog:

* testsuite/25_algorithms/inplace_merge/constrained.cc: Qualify
call to ranges::next.
* testsuite/25_algorithms/is_sorted/constrained.cc: Likewise.
* testsuite/25_algorithms/is_sorted_until/constrained.cc:
Likewise.
* testsuite/25_algorithms/swap_ranges/1.cc: Qualify call to
swap_ranges.

3 years agoOpenMP/Fortran: Handle polymorphic scalars in data-sharing FIRSTPRIVATE [PR86470]
Tobias Burnus [Mon, 24 May 2021 14:50:51 +0000 (16:50 +0200)]
OpenMP/Fortran: Handle polymorphic scalars in data-sharing FIRSTPRIVATE [PR86470]

gcc/fortran/ChangeLog:

PR fortran/86470
* trans-expr.c (gfc_copy_class_to_class): Add unshare_expr.
* trans-openmp.c (gfc_is_polymorphic_nonptr,
gfc_is_unlimited_polymorphic_nonptr): New.
(gfc_omp_clause_copy_ctor, gfc_omp_clause_dtor): Handle
polymorphic scalars.

libgomp/ChangeLog:

PR fortran/86470
* testsuite/libgomp.fortran/class-firstprivate-1.f90: New test.
* testsuite/libgomp.fortran/class-firstprivate-2.f90: New test.
* testsuite/libgomp.fortran/class-firstprivate-3.f90: New test.

gcc/testsuite/ChangeLog:

PR fortran/86470
* gfortran.dg/gomp/class-firstprivate-1.f90: New test.
* gfortran.dg/gomp/class-firstprivate-2.f90: New test.
* gfortran.dg/gomp/class-firstprivate-3.f90: New test.
* gfortran.dg/gomp/class-firstprivate-4.f90: New test.

3 years agoAArch64: Enable fast shifts on Neoverse N1
Wilco Dijkstra [Mon, 24 May 2021 13:31:37 +0000 (14:31 +0100)]
AArch64: Enable fast shifts on Neoverse N1

Enable the fast shift feature in Neoverse N1 tuning - this means additions with
a shift left by 1-4 are as fast as addition. This improves multiply by constant
expansions, eg. x * 25 is now emitted using shifts rather than a multiply:

add w0, w0, w0, lsl 2
add w0, w0, w0, lsl 2

ChangeLog:
2020-09-11  Wilco Dijkstra  <wdijkstr@arm.com>

* config/aarch64/aarch64.c (neoversen1_tunings):
Enable AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND.

3 years agoAArch64: Cleanup aarch64_classify_symbol
Wilco Dijkstra [Mon, 24 May 2021 13:23:50 +0000 (14:23 +0100)]
AArch64: Cleanup aarch64_classify_symbol

Use a GOT indirection for extern weak symbols instead of a literal - this is
the same as PIC/PIE and mirrors LLVM behaviour.  Ensure PIC/PIE use the same
offset limits for symbols that don't use the GOT.

Passes bootstrap and regress.

ChangeLog:
2021-04-27  Wilco Dijkstra  <wdijkstr@arm.com>

* config/aarch64/aarch64.c (aarch64_classify_symbol): Use GOT for
extern weak symbols.  Limit symbol offsets for non-GOT symbols with
PIC/PIE.

3 years agoarm: Auto-vectorization for MVE: vld4/vst4
Christophe Lyon [Thu, 11 Mar 2021 11:08:49 +0000 (11:08 +0000)]
arm: Auto-vectorization for MVE: vld4/vst4

This patch enables MVE vld4/vst4 instructions for auto-vectorization.
We move the existing expanders from neon.md and enable them for MVE,
calling the respective emitter.

2021-03-12  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/neon.md (vec_load_lanesxi<mode>)
(vec_store_lanexoi<mode>): Move ...
* config/arm/vec-common.md: here.

gcc/testsuite/
* gcc.target/arm/simd/mve-vld4.c: New test, derived from
slp-perm-3.c

3 years agoarm: Auto-vectorization for MVE: vld2/vst2
Christophe Lyon [Mon, 8 Mar 2021 12:23:49 +0000 (12:23 +0000)]
arm: Auto-vectorization for MVE: vld2/vst2

This patch enables MVE vld2/vst2 instructions for auto-vectorization.
We move the existing expanders from neon.md and enable them for MVE,
calling the respective emitter.

2021-03-12  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/neon.md (vec_load_lanesoi<mode>)
(vec_store_lanesoi<mode>): Move ...
* config/arm/vec-common.md: here.

gcc/testsuite/
* gcc.target/arm/simd/mve-vld2.c: New test, derived from
slp-perm-2.c

3 years agoDo not load the thunk symbols.
Wang Liushuai [Mon, 24 May 2021 08:09:29 +0000 (10:09 +0200)]
Do not load the thunk symbols.

gcc/lto/ChangeLog:

* lto-dump.c (get_size): Fix the NPD error about the thunk symbol.

3 years agogcc-changelog: Add note about ChangeLog entries
Martin Liska [Mon, 24 May 2021 07:16:01 +0000 (09:16 +0200)]
gcc-changelog: Add note about ChangeLog entries

contrib/ChangeLog:

* gcc-changelog/git_commit.py: Add note that ChangeLog entries
are added automatically.
* gcc-changelog/test_email.py: Update test.

3 years agoFix ICE when lhs is NULL.
liuhongt [Thu, 20 May 2021 01:59:36 +0000 (09:59 +0800)]
Fix ICE when lhs is NULL.

gcc/ChangeLog:
PR target/100660
* config/i386/i386.c (ix86_gimple_fold_builtin): Replacing
stmt with GIMPLE_NOP when lhs doesn't exist.

gcc/testsuite/ChangeLog:
PR target/100660
* gcc.target/i386/pr100660.c: New test.

3 years agoFix two testcases for ssa names which are more than 1 digit
Andrew Pinski [Sun, 23 May 2021 17:35:40 +0000 (17:35 +0000)]
Fix two testcases for ssa names which are more than 1 digit

phi-opt-10.c and phi-opt-7.c both depend on currently that some ssa name
versions are one digit long which is not always correct. This fixes the
problem by detecting digits rather than just using '.'.

Committed as obvious after a bootstrap/test.

Thanks,
Andrew Pinski

gcc/testsuite/ChangeLog
* gcc.dg/tree-ssa/phi-opt-10.c: Use "\[0-9\]*" instead of '.'
when matching ssa name version.
* gcc.dg/tree-ssa/phi-opt-7.c: Likewise.

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

3 years agoi386: Add push insns for 4-byte vectors [PR100722]
Uros Bizjak [Sun, 23 May 2021 20:14:21 +0000 (22:14 +0200)]
i386: Add push insns for 4-byte vectors [PR100722]

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

gcc/
PR target/100722
* config/i386/mmx.md (*push<VI_32:mode>2_rex64):
New instruction pattern.
(*push<VI_32:mode>2): Ditto.
(push splitter for SSE registers): New splitter.

gcc/testsuite/

PR target/100722
* gcc.target/i386/pr100722.c: New test.

3 years agoFortran: fix passing return value to class(*) dummy argument
Harald Anlauf [Sun, 23 May 2021 18:51:14 +0000 (20:51 +0200)]
Fortran: fix passing return value to class(*) dummy argument

gcc/fortran/ChangeLog:

PR fortran/100551
* trans-expr.c (gfc_conv_procedure_call): Adjust check for
implicit conversion of actual argument to an unlimited polymorphic
procedure argument.

gcc/testsuite/ChangeLog:

PR fortran/100551
* gfortran.dg/pr100551.f90: New test.

3 years agoRevert "Add ChangeLogs for the previous commit."
Martin Liska [Sun, 23 May 2021 12:19:08 +0000 (14:19 +0200)]
Revert "Add ChangeLogs for the previous commit."

This reverts commit 1160d9c1e482ea1dc524c056aa8eeaff6b1a591e.

3 years agoRevert "PR98301 Add missing changelog entries."
Martin Liska [Sun, 23 May 2021 12:08:08 +0000 (14:08 +0200)]
Revert "PR98301 Add missing changelog entries."

This reverts commit c4771b3438a8cd9afcef1762957b763f8df3fa6e.

3 years agofortran/intrinsic.texi: Use proper variable name
Tobias Burnus [Sun, 23 May 2021 09:56:39 +0000 (11:56 +0200)]
fortran/intrinsic.texi: Use proper variable name

gcc/fortran/ChangeLog:

* intrinsic.texi (ATOMIC_ADD, ATOMIC_FETCH_ADD): Use the
proper variable name in the description.

3 years agoAdd ChangeLogs for the previous commit.
Andrew Pinski [Sun, 23 May 2021 08:11:06 +0000 (08:11 +0000)]
Add ChangeLogs for the previous commit.

3 years agoDon't simplify (A & C) != 0 ? D : 0 for pointer types.
Andrew Pinski [Sun, 16 May 2021 17:40:16 +0000 (10:40 -0700)]
Don't simplify (A & C) != 0 ? D : 0 for pointer types.

While rewriting part of PHI-OPT to use match-and-simplify,
I ran into a bug where this pattern in match.pd would hit
and would produce invalid gimple; a shift of a pointer type.

This just disables this simplification for pointer types similarly
to what is already done in PHI-OPT for the generic A ? D : 0 case.

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

Thanks,
Andrew Pinski

2021-5-23  Andrew Pinski  <apinski@marvell.com>

gcc/
* match.pd ((A & C) != 0 ? D : 0): Limit to non pointer types.

gcc/testsuite/
* gcc.dg/gimplefe-45.c: New test.

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

3 years agoPR98301 Add missing changelog entries.
Andre Vehreschild [Sat, 22 May 2021 11:36:31 +0000 (13:36 +0200)]
PR98301 Add missing changelog entries.

3 years agoSteve Kargl <kargl@gcc.gnu.org>
Andre Vehreschild [Sat, 22 May 2021 11:27:42 +0000 (13:27 +0200)]
Steve Kargl  <kargl@gcc.gnu.org>

PR fortran/98301 - random_init() is broken

Correct implementation of random_init() when -fcoarray=lib is given.

gcc/fortran/ChangeLog:

PR fortran/98301
* trans-decl.c (gfc_build_builtin_function_decls): Move decl.
* trans-intrinsic.c (conv_intrinsic_random_init): Use bool for
lib-call of caf_random_init instead of logical (4-byte).
* trans.h: Add tree var for random_init.

libgfortran/ChangeLog:

PR fortran/98301
* caf/libcaf.h (_gfortran_caf_random_init): New function.
* caf/single.c (_gfortran_caf_random_init): New function.
* gfortran.map: Added fndecl.
* intrinsics/random_init.f90: Implement random_init.

3 years ago[OpenACC privatization] Prune uninteresting/varying diagnostics in 'libgomp.oacc...
Thomas Schwinge [Sat, 22 May 2021 08:28:34 +0000 (10:28 +0200)]
[OpenACC privatization] Prune uninteresting/varying diagnostics in 'libgomp.oacc-fortran/privatized-ref-2.f90'

Minor fix-up for my recent commit 11b8286a83289f5b54e813f14ff56d730c3f3185
"[OpenACC privatization] Largely extend diagnostics and corresponding testsuite
coverage [PR90115]".

libgomp/
PR testsuite/90115
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Prune
uninteresting/varying diagnostics.

Reported-by: Sunil K Pandey <skpandey@sc.intel.com>
3 years agoFix rs6000 p10 fusion patterns with old attr type names
Aaron Sawdey [Sat, 22 May 2021 02:59:39 +0000 (21:59 -0500)]
Fix rs6000 p10 fusion patterns with old attr type names

Somehow I managed to check in a version of genfusion.pl this
afternoon that was not updated to the new insn attr type names.
Committing as obvious and to make the code match what was posted
and reviewed.

gcc/
* config/rs6000/genfusion.pl (gen_addadd): Fix incorrect attr types.
* config/rs6000/fusion.md: Regenerate file.

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

3 years agocombine patterns for add-add fusion
Aaron Sawdey [Tue, 26 Jan 2021 03:11:52 +0000 (21:11 -0600)]
combine patterns for add-add fusion

This patch adds a function to genfusion.pl to add a couple
more patterns so combine can do fusion of pairs of add and
vaddudm instructions.

gcc/ChangeLog:

* config/rs6000/genfusion.pl (gen_addadd): New function.
* config/rs6000/fusion.md: Regenerate file.
* config/rs6000/rs6000-cpus.def: Add
OPTION_MASK_P10_FUSION_2ADD to masks.
* config/rs6000/rs6000.c (rs6000_option_override_internal):
Handle default value of OPTION_MASK_P10_FUSION_2ADD.
* config/rs6000/rs6000.opt: Add -mpower10-fusion-2add.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/fusion-p10-addadd.c: New file.

3 years agoTest cases for p10 fusion patterns
Aaron Sawdey [Fri, 11 Dec 2020 19:47:12 +0000 (13:47 -0600)]
Test cases for p10 fusion patterns

This adds some test cases to make sure that the combine patterns for p10
fusion are working.

gcc/testsuite/ChangeLog:
* gcc.target/powerpc/fusion-p10-ldcmpi.c: New file.
* gcc.target/powerpc/fusion-p10-2logical.c: New file.

3 years agoopenmp: Fix up firstprivate+lastprivate clause handling [PR99928]
Jakub Jelinek [Fri, 21 May 2021 19:16:21 +0000 (21:16 +0200)]
openmp: Fix up firstprivate+lastprivate clause handling [PR99928]

The C/C++ clause splitting happens very early during construct parsing,
but only the FEs later on handle possible instantiations, non-static
member handling and array section lowering.
In the OpenMP 5.0/5.1 rules, whether firstprivate is added to combined
target depends on whether it isn't also mentioned in lastprivate or map
clauses, but unfortunately I think such checks are much better done only
when the FEs perform all the above mentioned changes.
So, this patch arranges for the firstprivate clause to be copied or moved
to combined target construct (as before), but sets flags on that clause,
which tell the FE *finish_omp_clauses and the gimplifier it has been added
only conditionally and let the FEs and gimplifier DTRT for these.

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

PR middle-end/99928
gcc/
* tree.h (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET): Define.
* gimplify.c (enum gimplify_omp_var_data): Fix up
GOVD_MAP_HAS_ATTACHMENTS value, add GOVD_FIRSTPRIVATE_IMPLICIT.
(omp_lastprivate_for_combined_outer_constructs): If combined target
has GOVD_FIRSTPRIVATE_IMPLICIT set for the decl, change it to
GOVD_MAP | GOVD_SEEN.
(gimplify_scan_omp_clauses): Set GOVD_FIRSTPRIVATE_IMPLICIT for
firstprivate clauses with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT.
(gimplify_adjust_omp_clauses): For firstprivate clauses with
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT either clear that bit and
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET too, or remove it and
let it be replaced by implicit map clause.
gcc/c-family/
* c-omp.c (c_omp_split_clauses): Set OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT
on firstprivate clause copy going to target construct, and for
target simd set also OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET bit.
gcc/c/
* c-typeck.c (c_finish_omp_clauses): Move firstprivate clauses with
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT to the end of the chain.  Don't error
if a decl is mentioned both in map clause and in such firstprivate
clause unless OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET is also set.
gcc/cp/
* semantics.c (finish_omp_clauses): Move firstprivate clauses with
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT to the end of the chain.  Don't error
if a decl is mentioned both in map clause and in such firstprivate
clause unless OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET is also set.
gcc/testsuite/
* c-c++-common/gomp/pr99928-3.c: Remove all xfails.
* c-c++-common/gomp/pr99928-15.c: New test.

3 years agoopenmp: Fix up handling of implicit lastprivate on outer constructs for implicit...
Jakub Jelinek [Fri, 21 May 2021 19:13:06 +0000 (21:13 +0200)]
openmp: Fix up handling of implicit lastprivate on outer constructs for implicit linear and lastprivate IVs [PR99928]

This patch fixes the handling of lastprivate propagation to outer combined/composite
leaf constructs from implicit linear or lastprivate clauses on simd IVs and adds missing
testsuite coverage for explicit and implicit lastprivate on simd IVs.

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

PR middle-end/99928
* gimplify.c (omp_lastprivate_for_combined_outer_constructs): New
function.
(gimplify_scan_omp_clauses) <case OMP_CLAUSE_LASTPRIVATE>: Use it.
(gimplify_omp_for): Likewise.

* c-c++-common/gomp/pr99928-6.c: Remove all xfails.
* c-c++-common/gomp/pr99928-13.c: New test.
* c-c++-common/gomp/pr99928-14.c: New test.