Kewen Lin [Fri, 28 May 2021 05:21:00 +0000 (00:21 -0500)]
i386: Update unexpected empty split condition
gcc/ChangeLog:
* config/i386/i386.md (*load_tp_x32_zext, *add_tp_x32_zext,
*tls_dynamic_gnu2_combine_32): Fix empty split condition.
* config/i386/sse.md (*<sse2_avx2>_pmovmskb_lt,
*<sse2_avx2>_pmovmskb_zext_lt, *sse2_pmovmskb_ext_lt,
*<sse4_1_avx2>_pblendvb_lt): Likewise.
Tobias Burnus [Fri, 4 Jun 2021 10:14:14 +0000 (12:14 +0200)]
Fortran/OpenMP: omp loop's BIND clause - fix typo
Missed a 'git add' after fixing this typo pointed out during review.
PR middle-end/99928
gcc/fortran/ChangeLog:
* openmp.c (gfc_match_omp_clauses): Fix typo in error message.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/loop-2.f90: Update for typo fix.
Tobias Burnus [Fri, 4 Jun 2021 10:06:59 +0000 (12:06 +0200)]
Fortran/OpenMP: Add omp loop [PR99928]
PR middle-end/99928
gcc/fortran/ChangeLog:
* dump-parse-tree.c (show_omp_clauses): Handle bind clause.
(show_omp_node): Handle loop directive.
* frontend-passes.c (gfc_code_walker): Likewise.
* gfortran.h (enum gfc_statement): Add
ST_OMP_(END_)(TARGET_)(|PARALLEL_|TEAMS_)LOOP.
(enum gfc_omp_bind_type): New.
(gfc_omp_clauses): Use it.
(enum gfc_exec_op): Add EXEC_OMP_(TARGET_)(|PARALLEL_|TEAMS_)LOOP.
* match.h (gfc_match_omp_loop, gfc_match_omp_parallel_loop,
gfc_match_omp_target_parallel_loop, gfc_match_omp_target_teams_loop,
gfc_match_omp_teams_loop): New.
* openmp.c (enum omp_mask1): Add OMP_CLAUSE_BIND.
(gfc_match_omp_clauses): Handle it.
(OMP_LOOP_CLAUSES, gfc_match_omp_loop, gfc_match_omp_teams_loop,
gfc_match_omp_target_teams_loop, gfc_match_omp_parallel_loop,
gfc_match_omp_target_parallel_loop): New.
(resolve_omp_clauses, resolve_omp_do, omp_code_to_statement,
gfc_resolve_omp_directive): Handle omp loop.
* parse.c (decode_omp_directive case_exec_markers, gfc_ascii_statement,
parse_omp_do, parse_executable): Likewise.
(parse_omp_structured_block): Remove ST_ which use parse_omp_do.
* resolve.c (gfc_resolve_blocks): Add omp loop.
* st.c (gfc_free_statement): Likewise.
* trans-openmp.c (gfc_trans_omp_clauses): Handle bind clause.
(gfc_trans_omp_do, gfc_trans_omp_parallel_do, gfc_trans_omp_distribute,
gfc_trans_omp_teams, gfc_trans_omp_target, gfc_trans_omp_directive):
Handle loop directive.
(gfc_split_omp_clauses): Likewise; fix firstprivate/lastprivate
and (in_)reduction for taskloop.
* trans.c (trans_code): Handle omp loop directive.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/pr99928-3.f90: Add 'default(none)', following
C/C++ version of the patch.
* gfortran.dg/gomp/loop-1.f90: New test.
* gfortran.dg/gomp/loop-2.f90: New test.
* gfortran.dg/gomp/pr99928-1.f90: New test; based on C/C++ test.
* gfortran.dg/gomp/pr99928-11.f90: Likewise.
* gfortran.dg/gomp/pr99928-2.f90: Likewise.
* gfortran.dg/gomp/pr99928-4.f90: Likewise.
* gfortran.dg/gomp/pr99928-5.f90: Likewise.
* gfortran.dg/gomp/pr99928-6.f90: Likewise.
* gfortran.dg/gomp/pr99928-8.f90: Likewise.
* gfortran.dg/goacc/omp.f95: Use 'acc kernels loops' instead
of 'acc loops' to hide unrelated bug for now.
* gfortran.dg/goacc/omp-fixed.f: Likewise
Jakub Jelinek [Fri, 4 Jun 2021 09:20:02 +0000 (11:20 +0200)]
x86: Fix ix86_expand_vector_init for V*TImode [PR100887]
We have vec_initv4tiv2ti and vec_initv2titi patterns which call
ix86_expand_vector_init and assume it works for those modes. For the
case of construction from two half-sized vectors, the code assumes it
will always succeed, but we have only insn patterns with SImode and DImode
element types. QImode and HImode element types are already handled
by performing it with same sized vectors with SImode elements and the
following patch extends that to V*TImode vectors.
2021-06-04 Jakub Jelinek <jakub@redhat.com>
PR target/100887
* config/i386/i386-expand.c (ix86_expand_vector_init): Handle
concatenation from half-sized modes with TImode elements.
* gcc.target/i386/pr100887.c: New test.
Jakub Jelinek [Fri, 4 Jun 2021 09:17:05 +0000 (11:17 +0200)]
c++: Fix up attribute handling in methods in templates [PR100872]
The following testcase FAILs because a dependent (late) attribute is never
tsubsted. While the testcase is OpenMP, I think it is a generic C++ FE problem
that could affect any other dependent attribute.
apply_late_template_attributes documents that it relies on
/* save_template_attributes puts the dependent attributes at the beginning of
the list; find the non-dependent ones. */
The "operator binding" attributes that are sometimes added are added to the
head of DECL_ATTRIBUTES list though and because it doesn't have
ATTR_IS_DEPENDENT set it violates this requirement.
The following patch fixes it by adding that attribute after all
ATTR_IS_DEPENDENT attributes. I'm not 100% sure if DECL_ATTRIBUTES can't be
shared by multiple functions (e.g. the cdtor clones), but the code uses
later remove_attribute which could break that too.
Other option would be to copy_list the ATTR_IS_DEPENDENT portion of the
DECL_ATTRIBUTES list if we need to do this, that would be the same as this
patch but replace that *ap = op_attr; at the end with
*ap = NULL_TREE;
DECL_ATTRIBUTES (cfn) = chainon (copy_list (DECL_ATTRIBUTES (cfn)),
op_attr);
Or perhaps set ATTR_IS_DEPENDENT on the "operator bindings" attribute,
though it would need to be studied what would it try to do with the
attribute during tsubst.
2021-06-04 Jakub Jelinek <jakub@redhat.com>
PR c++/100872
* name-lookup.c (maybe_save_operator_binding): Add op_attr after all
ATTR_IS_DEPENDENT attributes in the DECL_ATTRIBUTES list rather than
to the start.
* g++.dg/gomp/declare-simd-8.C: New test.
Claudiu Zissulescu [Fri, 4 Jun 2021 07:12:32 +0000 (10:12 +0300)]
arc: Don't allow millicode thunks with reduced register set CPUs.
The millicode thunks are not reduced register set safe. Disable them
for CPUs having this option on.
gcc/
2021-06-04 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (arc_override_options): Disable millicode
thunks when RF16 is on.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Haochen Gui [Fri, 4 Jun 2021 06:38:53 +0000 (14:38 +0800)]
rs6000: Disable mode promotion for pseudos
rs6000 has instructions that can do almost everything 32 bit
at least as efficiently as corresponding 64 bit things. The
mode promotion can be defered to when a wide mode is necessary.
So it helps a lot not promote mode for pseudos. SPECint test
shows that the overall performance improvement (by geomean) is
more than 2% with this patch.
testsuite/gcc.target/powerpc/not-promote-mode.c illustrates how
the patch eliminates the redundant extensions and do further
optimization by disabling mode promotion for pseduos.
gcc/ChangeLog
* config/rs6000/rs6000.h (PROMOTE_MODE): Remove.
gcc/testsuite/ChangeLog:
* gcc.target/powerpc/not-promote-mode.c: New.
Haochen Gui [Fri, 4 Jun 2021 03:04:31 +0000 (11:04 +0800)]
rs6000: Expand PROMOTE_MODE marco in rs6000_promote_function_mode
This patch prepares for the patch which disables mode
promotion of pseudos on rs6000.
gcc/ChangeLog:
* config/rs6000/rs6000-call.c (rs6000_promote_function_mode):
Replace PROMOTE_MODE marco with its content.
GCC Administrator [Fri, 4 Jun 2021 00:16:24 +0000 (00:16 +0000)]
Daily bump.
Kewen Lin [Wed, 2 Jun 2021 05:04:54 +0000 (07:04 +0200)]
cris: Update unexpected empty split condition
gcc/ChangeLog:
* config/cris/cris.md (*addi_reload): Fix empty split condition.
Jim Wilson [Thu, 3 Jun 2021 20:50:34 +0000 (13:50 -0700)]
RISC-V: Enable riscv attributes by default for all riscv targets.
These were only enabled for embedded elf originally because that was
the safe option, and linux had no obvious use for them. But now that
we have new extensions coming like V that affect process state and ABIs,
the attributes are expected to be useful for linux, and may be required
by the psABI. clang already emits them for all riscv targets.
gcc/
* config.gcc (riscv*-*-*): If --with-riscv-attribute not used,
turn it on for all riscv targets.
Uros Bizjak [Thu, 3 Jun 2021 18:05:31 +0000 (20:05 +0200)]
i386: Add insert and extract patterns for 4-byte vectors [PR100637]
The patch introduces insert and extract patterns for 4-byte vectors.
It effectively only emits PINSR and PEXTR instructions when available,
otherwise falls back to generic code that emulates these instructions
via inserts, extracts, logic operations and shifts in integer registers.
Please note that generic fallback produces better code than the current
approach of constructing new vector in memory (due to store forwarding stall)
so also enable QImode 8-byte vector inserts only with TARGET_SSE4_1.
2021-06-03 Uroš Bizjak <ubizjak@gmail.com>
gcc/
PR target/100637
* config/i386/i386-expand.c (ix86_expand_vector_set):
Handle V2HI and V4QI modes.
(ix86_expand_vector_extract): Ditto.
* config/i386/mmx.md (*pinsrw): New insn pattern.
(*pinsrb): Ditto.
(*pextrw): Ditto.
(*pextrw_zext): Ditto.
(*pextrb): Ditto.
(*pextrb_zext): Ditto.
(vec_setv2hi): New expander.
(vec_extractv2hihi): Ditto.
(vec_setv4qi): Ditto.
(vec_extractv4qiqi): Ditto.
(vec_setv8qi): Enable only for TARGET_SSE4_1.
(vec_extractv8qiqi): Ditto.
gcc/testsuite/
PR target/100637
* gcc.target/i386/vperm-v2hi.c: New test.
* gcc.target/i386/vperm-v4qi.c: Ditto.
Aaron Sawdey [Thu, 3 Jun 2021 03:54:08 +0000 (22:54 -0500)]
Fix operand order to subf for p10 fusion.
This certainly causes a bootstrap miscompare, and might also be
responsible for PR/100820. The operands to subf were reversed
in the logical-add/sub fusion patterns, and I screwed up my
bootstrap test which is how it ended up getting committed.
gcc/ChangeLog
* config/rs6000/genfusion.pl (gen_logical_addsubf): Fix input
order to subf instruction.
* config/rs6000/fusion.md: Regenerate.
Patrick Palka [Thu, 3 Jun 2021 16:30:29 +0000 (12:30 -0400)]
libstdc++: Avoid hard error in ranges::unique_copy [PR100770]
Here, in the constexpr if condition within ranges::unique_copy, when
input_iterator<_Out> isn't satisfied we must avoid substituting into
iter_value_t<_Out> because the latter isn't necessarily well-formed
then. To that end, this patch factors out the condition into a concept
and uses it throughout.
This patch also makes the definition of our testsuite
output_iterator_wrapper more minimal by setting its value_type, pointer
and reference member types to void. This means our existing tests for
unique_copy already exercise the fix for this bug, so we don't need
to add another test. The only other fallout of this testsuite iterator
change appears in std/ranges/range.cc, where the use of range_value_t
on a test_output_range is now ill-formed.
libstdc++-v3/ChangeLog:
* include/bits/ranges_algo.h (__detail::__can_reread_output):
Factor out this concept from ...
(__unique_copy_fn::operator()): ... here. Use the concept
throughout.
* testsuite/std/ranges/range.cc: Remove now ill-formed use
of range_value_t on an output_range.
* testsuite/util/testsuite_iterators.h (output_iterator_wrapper):
Define value_type, pointer and reference member types to void.
Eric Botcazou [Thu, 3 Jun 2021 15:54:45 +0000 (17:54 +0200)]
Fix issue for nested record types with -fdump-ada-spec
Ada does not support anonymous record declarations nested in other record
declarations so -fdump-ada-spec needs to unnest them, and this contains a
few fixes for this machinery.
gcc/c-family/
* c-ada-spec.c (dump_ada_macros): Minor tweaks.
(dump_ada_decl_name): Likewise.
(dump_anonymous_type_name): Remove parent parameter and adjust.
(dump_sloc): Minor tweak.
(dump_ada_array_type): Remove type parameter and adjust.
(dump_ada_enum_type): Remove parent parameter and adjust.
(dump_ada_node): Adjust calls to above functions.
(dumped_anonymous_types): New global variable.
(dump_nested_types_1): Rename into...
(dump_nested_types): ...this.
(dump_nested_type): Remove parent and dumped_types parameters.
<ARRAY_TYPE>: Replace dumped_types with dumped_anonymous_types.
Adjust calls to dump_anonymous_type_name and dump_ada_array_type.
(dump_ada_specs): Initialize and free dumped_anonymous_types.
Eric Botcazou [Thu, 3 Jun 2021 15:50:44 +0000 (17:50 +0200)]
Fix issue for external subtypes with -fdump-ada-spec
This works around an irregularity of the language whereby subtypes, unlike
types, are not visible through a limited_with clause.
gcc/c-family/
* c-ada-spec.c (pp_ada_tree_identifier): Tidy up.
(dump_ada_node) <POINTER_TYPE>: Deal specially with external subtypes.
Eric Botcazou [Thu, 3 Jun 2021 15:46:15 +0000 (17:46 +0200)]
Fix duplicate name issues in output of -fdump-ada-spec
The namespace rules are different in the C family of languages and
in Ada, and a few adjustments are further needed in -fdump-ada-spec
because of them.
gcc/c-family/
* c-ada-spec.c (dump_ada_enum_type): Dump a prefix for constants.
(htable_t): New typedef.
(overloaded_names): Use it.
(add_name): New function.
(init_overloaded_names): Use add_name to populate the table and add
special cases for sigaction and stat.
(overloaded_name_p): Rename into...
(overloading_index): ...this. Do not initialize overloaded_names table
here. Return the index or zero.
(dump_ada_declaration): Minor tweaks. Do not skip overloaded functions
but add an overloading suffix instead.
(dump_ada_specs): Initialize overloaded_names tables here.
Aldy Hernandez [Wed, 26 May 2021 06:53:07 +0000 (08:53 +0200)]
Replace uses of determine_value_range with range_of_expr.
The expression evaluator changes to the range_query API provide
everything determine_value_range does. This patch replaces all uses
with calls into the range_query API.
gcc/ChangeLog:
* calls.c (get_size_range): Use range_of_expr instead of
determine_value_range.
* tree-affine.c (expr_to_aff_combination): Same.
* tree-data-ref.c (split_constant_offset): Same.
* tree-vrp.c (determine_value_range_1): Remove.
(determine_value_range): Remove.
* tree-vrp.h (determine_value_range): Remove.
Aldy Hernandez [Wed, 26 May 2021 06:40:17 +0000 (08:40 +0200)]
Implement generic expression evaluator for range_query.
Right now, range_of_expr only works with constants, SSA names, and
pointers. Anything else gets returned as VARYING. This patch adds the
capability to deal with arbitrary expressions, inasmuch as these
tree codes are implemented in range-ops.cc.
This will give us the ability to ask for the range of any tree expression,
not just constants and SSA names, with range_of_expr().
This is a more generic implementation of determine_value_range in VRP.
A follow-up patch will remove all uses of it in favor of the
range_query API.
gcc/ChangeLog:
* function-tests.c (test_ranges): Call gimple_range_tests.
* gimple-range-cache.cc (ranger_cache::range_of_expr): Pass stmt
to get_tree_range.
* gimple-range.cc (fur_source::get_operand): Do not call
get_tree_range or gimple_range_global.
get_tree_range.
(get_tree_range): Move to value-query.cc.
Call get_arith_expr_range.
(gimple_ranger::range_of_expr): Add argument to get_tree_range.
Include gimple-range-tests.cc.
* gimple-range.h (fold_range): Add argument.
(get_tree_range): Remove.
* selftest.h (gimple_range_tests): New.
* value-query.cc (global_range_query::range_of_expr): Add
stmt argument.
(range_query::get_tree_range): Move from gimple-range.cc.
* value-query.h (class range_query): Add get_tree_range and
get_arith_expr_range. Make fur_source a friend.
* vr-values.c (vr_values::range_of_expr): Pass stmt to
get_tree_range.
* gimple-range-tests.cc: New file.
Jason Merrill [Thu, 3 Jun 2021 04:10:47 +0000 (00:10 -0400)]
MAINTAINERS: Add DCO version number.
ChangeLog:
* MAINTAINERS: Add DCO version number.
Aldy Hernandez [Tue, 1 Jun 2021 15:48:30 +0000 (17:48 +0200)]
Use known global ranges in export_global_ranges
This patch modifies export_global_ranges to take into account current
global ranges. It also handles enhances said function to export pointer
global ranges as well.
gcc/ChangeLog:
* gimple-range.cc (gimple_ranger::export_global_ranges): Call
update_global_range.
* value-query.cc (update_global_range): New.
* value-query.h (update_global_range): New.
gcc/testsuite/ChangeLog:
* gcc.dg/pr80776-1.c: XFAIL and document the reason why.
David Malcolm [Thu, 3 Jun 2021 14:37:41 +0000 (10:37 -0400)]
analyzer: remove unused prototypes
gcc/analyzer/ChangeLog:
* store.h (store::get_direct_binding): Remove unused decl.
(store::get_default_binding): Likewise.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
David Malcolm [Thu, 3 Jun 2021 14:35:27 +0000 (10:35 -0400)]
analyzer: show types for poisoned_svalue and compound_svalue
gcc/analyzer/ChangeLog:
* svalue.cc (poisoned_svalue::dump_to_pp): Dump type.
(compound_svalue::dump_to_pp): Dump any type.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
David Malcolm [Thu, 3 Jun 2021 14:32:40 +0000 (10:32 -0400)]
diagnostic-show-locus: tweak rejection logic
gcc/ChangeLog:
* diagnostic-show-locus.c (diagnostic_show_locus): Don't reject
printing the same location twice if there are fix-it hints,
multiple locations, or a label.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Patrick Palka [Thu, 3 Jun 2021 13:49:30 +0000 (09:49 -0400)]
libstdc++: Simplify range adaptors' forwarding of bound args [PR100577]
r11-8053 rewrote the range adaptor implementation in conformance with
P2281R1, making partial application act like a SFINAE-friendly perfect
forwarding call wrapper. Making SFINAE-friendliness coexist with
perfect forwarding here requires adding fallback deleted operator()
overloads (as described in e.g. section 5.5 of P0847R6). But
unfortunately, as reported in PR100577, this necessary technique of
using of deleted overloads regresses diagnostics for ill-formed calls to
partially applied range adaptors in GCC.
Although GCC's diagnostics can arguably be improved here by having the
compiler explain why the other candidates weren't viable when overload
resolution selects a deleted candidate, we can also largely work around
this on the library side (and achieve more concise diagnostics than by
a frontend-side improvement alone) if we take advantage of the
observation that not all range adaptors need perfect forwarding call
wrapper semantics, in fact only views::split currently needs it, because
all other range adaptors either take no extra arguments or only
arguments that are expected to be freely/cheaply copyable, e.g. function
objects and integer-like types. (The discussion section in P2281R1 goes
into detail about why views::split is special.)
To that end, this introduces opt-in flags for denoting a range adaptor
as having "simple" extra arguments (in the case of a range adaptor
non-closure) or having a "simple" call operator (in the case of a range
adaptor closure). These flags are then used to conditionally simplify
the operator() for the generic _Partial and _Pipe class templates, down
from needing three overloads thereof (including one defined as deleted)
to just needing a single overload. The end result is that diagnostic
quality is restored for all adaptors except for views::split, and
diagnostics for the adaptors are generally made more concise since
there's only a single _Partial/_Pipe overload to diagnose instead of
three of them.
libstdc++-v3/ChangeLog:
PR libstdc++/100577
* include/std/ranges (_RangeAdaptorClosure): Document
_S_has_simple_call_op mechanism.
(_RangeAdaptor): Document _S_has_simple_extra_args mechanism.
(__closure_has_simple_call_op): New concept.
(__adaptor_has_simple_extra_args): Likewise.
(_Partial<_Adaptor, _Args...>): New partial specialization.
(_Partial<_Adaptor, _Arg>): Likewise.
(_Pipe<_Lhs, _Rhs>): Likewise.
(views::_All::_S_has_simple_call_op): Define to true.
(views::_Filter::_S_has_simple_extra_args): Likewise.
(views::_Transform::_S_has_simple_extra_args): Likewise.
(views::_Take::_S_has_simple_extra_args): Likewise.
(views::_TakeWhile::_S_has_simple_extra_args): Likewise.
(views::_Drop::_S_has_simple_extra_args): Likewise.
(views::_DropWhile::_S_has_simple_extra_args): Likewise.
(views::_Join::_S_has_simple_call_op): Likewise.
(views::_Split): Document why we don't define
_S_has_simple_extra_args to true for this adaptor.
(views::_Common::_S_has_simple_call_op): Define to true.
(views::_Reverse::_S_has_simple_call_op): Likewise.
(views::_Elements::_S_has_simple_call_op): Likewise.
* testsuite/std/ranges/adaptors/100577.cc: New test.
Patrick Palka [Thu, 3 Jun 2021 13:39:13 +0000 (09:39 -0400)]
c++: cv-qualified dependent name of alias tmpl [PR100592]
Here, the dependent template name in the return type of f() resolves to
an alias of int& after substitution, and we end up complaining about
qualifying this reference type with 'const' from cp_build_qualified_type
rather than just silently dropping the qualification as per [dcl.ref]/1.
The problem is ultimately that make_typename_type ignores the
tf_keep_type_decl flag when the dependent name is a template-id. This
in turn causes the TYPE_DECL check within tsubst <case TYPENAME_TYPE>
to fail, and so we end up not passing tf_ignore_bad_quals to
cp_build_qualified_type. This patch fixes this by making
make_typename_type respect the tf_keep_type_decl flag in this situation.
PR c++/100592
gcc/cp/ChangeLog:
* decl.c (make_typename_type): After calling
lookup_template_class, adjust the result to its TYPE_NAME and
then consider the tf_keep_type_decl flag.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/alias-decl-71.C: New test.
Patrick Palka [Thu, 3 Jun 2021 13:37:11 +0000 (09:37 -0400)]
c++: using-enum and access specifiers [PR100862]
When copying the enumerators imported by a class-scope using-enum
declaration, we need to override current_access_specifier so that
finish_member_declaration gives the copies the same access as the
using-enum decl. (A class-scope using-enum is processed late, so
current_access_specifier at this point is otherwise set to the last
access specifier within the class.) To that end, this patch makes
handle_using_decl call set_current_access_from_decl accordingly.
For consistency, this patch makes build_enumerator use
set_current_access_from_decl too.
PR c++/100862
gcc/cp/ChangeLog:
* pt.c (set_current_access_from_decl): Move to ...
* class.c (set_current_access_from_decl): ... here.
(handle_using_decl): Use it to propagate the access of the
using-enum decl to the copy of the imported enumerator.
* cp-tree.h (set_current_access_from_decl): Declare.
* decl.c (build_enumerator): Simplify using make_temp_override
and set_current_access_from_decl.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/using-enum-9.C: New test.
Andre Vieira [Thu, 3 Jun 2021 12:55:24 +0000 (13:55 +0100)]
vect: Use main loop's thresholds and VF to narrow upper_bound of epilogue
This patch uses the knowledge of the conditions to enter an epilogue loop to
help come up with a potentially more restricive upper bound.
gcc/ChangeLog:
* tree-vect-loop.c (vect_transform_loop): Use main loop's various'
thresholds to narrow the upper bound on epilogue iterations.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/sve/part_vect_single_iter_epilog.c: New test.
Christophe Lyon [Thu, 3 Jun 2021 12:06:38 +0000 (12:06 +0000)]
arm: Auto-vectorization for MVE: vabs
This patch adds support for auto-vectorization of absolute value
computation using vabs.
We use a similar pattern to what is used in neon.md and extend the
existing neg<mode>2 expander to match both 'neg' and 'abs'. This
implies renaming the existing abs<mode>2 define_insn in neon.md to
avoid a clash with the new expander with the same name.
2021-06-03 Christophe Lyon <christophe.lyon@linaro.org>
gcc/
* config/arm/mve.md (mve_vabsq_f<mode>): Use 'abs' instead of unspec.
(mve_vabsq_s<mode>): Likewise.
* config/arm/neon.md (abs<mode>2): Rename to neon_abs<mode>2.
* config/arm/unspecs.md (VABSQ_F, VABSQ_S): Delete.
* config/arm/vec-common.md (neg<mode>2): Rename to
<absneg_str><mode>2.
gcc/testsuite/
* gcc.target/arm/simd/mve-vabs.c: New test.
Eric Botcazou [Thu, 3 Jun 2021 11:29:32 +0000 (13:29 +0200)]
Fix miscompilation of predicate on bit-packed array types
This is a regression present on the mainline and 11 branch in the form of a
miscompilation by the new mod/ref IPA pass of code that passes constrained
bit-packed array objets in a call to a subprograms taking unconstrained
bit-packed array parameters, which occurs for predicate on bit-packed array
types for example.
gcc/ada/
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add PAT
local constant and use it throughout. If it is set, use a ref-all
pointer type for the pointer-to-array field of the fat pointer type.
<E_Array_Subtype>: Add PAT local constant and use it throughout.
gcc/testsuite/
* gnat.dg/bit_packed_array6.adb: New test.
* gnat.dg/bit_packed_array6_pkg.ads: New helper.
Claudiu Zissulescu [Thu, 3 Jun 2021 10:44:53 +0000 (13:44 +0300)]
arc: Remove obsolete options
Remove the following obsolete options:
- munalign-prob-threshold
- malign-call
- mmixed-code
The ARC's options are marked as obsolete and ignored for backwards
compatibility.
gcc/
2021-06-03 Claudiu Zissulescu <claziss@synopsys.com>
* common/config/arc/arc-common.c (arc_option_optimization_table):
Remove malign-call.
* config/arc/arc.c (arc_unalign_branch_p): Remove unused function.
* config/arc/arc.h (TARGET_MIXED_CODE): Remove macro.
(INDEX_REG_CLASS): Only refer to GENERAL_REGS.
* config/arc/arc.md (abssi2_mixed): Remove pattern.
* config/arc/arc.opt (munalign-prob-threshold): Mark it obsolete.
(malign-call): Likewise.
(mmixed-code): Likewise.
* doc/invoke.texi (ARC): Update doc.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Martin Liska [Thu, 20 May 2021 08:57:49 +0000 (10:57 +0200)]
Simplify option handling for -fsanitize-coverage
gcc/ChangeLog:
* common.opt: Use proper Enum values.
* opts.c (COVERAGE_SANITIZER_OPT): Remove.
(parse_sanitizer_options): Handle only sanitizer_opts.
(common_handle_option): Just assign value.
gcc/testsuite/ChangeLog:
* gcc.dg/spellcheck-options-23.c: New test.
Eric Botcazou [Thu, 3 Jun 2021 10:39:39 +0000 (12:39 +0200)]
Tame fix for PR ipa/99122
The return part has a major performance impact in Ada where variable-sized
types are first-class citizens, but it turns out that it is not exercized
in the testsuite yet, so back it out for now.
gcc/
PR ipa/99122
* tree-inline.c (inline_forbidden_p): Remove test on return type.
gcc/testsuite/
* gnat.dg/inline22.adb: New test.
Eric Botcazou [Fri, 28 May 2021 17:40:47 +0000 (19:40 +0200)]
Also generate DW_OP_GNU_variable_value at file scope
But only for the reference variant (dw_val_class_die_ref). This is needed
for variable-sized types declared at library level in Ada.
gcc/
* dwarf2out.c (loc_list_from_tree_1) <FUNCTION_DECL>: Also generate
DW_OP_GNU_variable_value referencing an existing DIE at file scope.
(type_byte_size): Inline into...
(add_byte_size_attribute): ...this and call add_scalar_info.
Eric Botcazou [Fri, 28 May 2021 17:31:18 +0000 (19:31 +0200)]
Fix signedness issue in DWARF functions (2)
The compiler can synthesize DWARF functions to describe the location and
size of components in discriminated record types with variant part in Ada,
but in peculiar cases the compiler drops expressions on the floor, for
example in the divide case:
case ROUND_DIV_EXPR:
case TRUNC_DIV_EXPR:
case EXACT_DIV_EXPR:
if (TYPE_UNSIGNED (TREE_TYPE (loc)))
return 0;
op = DW_OP_div;
goto do_binop;
Now sizetype and bitsizetype are unsigned types, which means that any divide
expression in them is dropped.
gcc/
* dwarf2out.c (mem_loc_descriptor) <UDIV>: Fix typo.
(typed_binop_from_tree): New function.
(loc_list_from_tree_1) <EXACT_DIV_EXPR>: For an unsigned type,
turn a divide by a power of 2 into a shift.
<CEIL_DIV_EXPR>: For an unsigned type, use a signed divide if the
size of the mode is lower than DWARF2_ADDR_SIZE; otherwise, do a
typed divide by calling typed_binop_from_tree.
Eric Botcazou [Fri, 28 May 2021 17:18:37 +0000 (19:18 +0200)]
Fix signedness issue in DWARF functions (1)
The compiler can synthesize DWARF functions to describe the location and
size of components in discriminated record types with variant part in Ada,
but a limitation is that most quantities must have DWARF2_ADDR_SIZE or
else be the result of a zero-extension to DWARF2_ADDR_SIZE of a smaller
quantity, as documented in loc_list_from_tree_1:
/* ??? Most of the time we do not take proper care for sign/zero
extending the values properly. Hopefully this won't be a real
problem... */
In Ada discriminants may be either signed or unsigned, so this limitation
is problematic. Therefore the attached patch adds a strict_signedness
field to the loc_descr_context that is passed around in parts of the DWARF
back-end and changes loc_list_from_tree_1 to act upon it being set to true.
It also contains an optimization to avoid emitting useless comparisons.
gcc/
* dwarf2out.c (scompare_loc_descriptor): Fix head comment.
(is_handled_procedure_type): Likewise.
(struct loc_descr_context): Add strict_signedness field.
(resolve_args_picking_1): Deal with DW_OP_[GNU_]deref_type,
DW_OP_[GNU_]convert and DW_OP_[GNU_]reinterpret.
(resolve_args_picking): Minor tweak.
(function_to_dwarf_procedure): Initialize strict_signedness field.
(type_byte_size): Likewise.
(field_byte_offset): Likewise.
(gen_descr_array_type_die): Likewise.
(gen_variant_part): Likewise.
(loc_list_from_tree_1) <CALL_EXPR>: Tidy up and set strict_signedness
to true when a context is present before evaluating the arguments.
<COND_EXPR>: Do not generate a useless comparison with zero.
When dereferencing an address, if strict_signedness is true and the
type is small and signed, use DW_OP_deref_type to do the dereference
and then DW_OP_convert to convert back to the generic type.
Tamar Christina [Thu, 3 Jun 2021 09:26:02 +0000 (10:26 +0100)]
AArch64: Fix failing testcase for native cpu detection
A late change in the patch changed the implemented ID to one that
hasn't been used yet to avoid any ambiguity. Unfortunately the
chosen value of 0xFF matches the value of -1 which is used as an
invalid implementer so the test started failing.
This patch changes it to 0xFE which is the highest usable number.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/cpunative/info_16: Update implementer.
* gcc.target/aarch64/cpunative/info_17: Likewise
Jakub Jelinek [Thu, 3 Jun 2021 08:38:08 +0000 (10:38 +0200)]
openmp: Assorted depend/affinity/iterator related fixes [PR100859]
The depend-iterator-3.C testcases shows various bugs.
1) tsubst_omp_clauses didn't handle OMP_CLAUSE_AFFINITY (should be
handled like OMP_CLAUSE_DEPEND)
2) because locators can be arbitrary lvalue expressions, we need
to allow for C++ array section base (especially when array section
is just an array reference) FIELD_DECLs, handle them as this->member,
but don't need to privatize in any way
3) similarly for this as base
4) depend(inout: this) is invalid, but for different reason than the reported
one, again this is an expression, but not lvalue expression, so that
should be reported
5) the ctor/dtor cloning in the C++ FE (which is using walk_tree with
copy_tree_body_r) didn't handle iterators correctly, walk_tree normally
doesn't walk TREE_PURPOSE of TREE_LIST, and in the iterator case
that TREE_VEC contains also a BLOCK that needs special handling during
copy_tree_body_r
2021-06-03 Jakub Jelinek <jakub@redhat.com>
PR c++/100859
gcc/
* tree-inline.c (copy_tree_body_r): Handle iterators on
OMP_CLAUSE_AFFINITY or OMP_CLAUSE_DEPEND.
gcc/c/
* c-typeck.c (c_finish_omp_clauses): Move OMP_CLAUSE_AFFINITY
after depend only cases.
gcc/cp/
* semantics.c (handle_omp_array_sections_1): For
OMP_CLAUSE_{AFFINITY,DEPEND} handle FIELD_DECL base using
finish_non_static_data_member and allow this as base.
(finish_omp_clauses): Move OMP_CLAUSE_AFFINITY
after depend only cases. Let this be diagnosed by !lvalue_p
case for OMP_CLAUSE_{AFFINITY,DEPEND} and remove useless
assert.
* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_AFFINITY.
gcc/testsuite/
* g++.dg/gomp/depend-iterator-3.C: New test.
* g++.dg/gomp/this-1.C: Don't expect any diagnostics for
this as base expression of depend array section, expect a different
error wording for this as depend locator and add testcases
for affinity clauses.
Kewen Lin [Thu, 3 Jun 2021 02:15:17 +0000 (21:15 -0500)]
arc: Remove define_insn_and_split *bbit_di
define_insn_and_split *bbit_di has unexpected empty split
condition when its insn condition isn't empty. But as
Claudiu pointed out, this pattern looks useless and it's
better to remove it.
gcc/ChangeLog:
* config/arc/arc.md (*bbit_di): Remove.
GCC Administrator [Thu, 3 Jun 2021 00:16:23 +0000 (00:16 +0000)]
Daily bump.
Christoph Muellner [Mon, 10 May 2021 12:39:03 +0000 (14:39 +0200)]
REE: PR rtl-optimization/100264: Handle more PARALLEL SET expressions
Move the check for register targets (i.e. REG_P ()) into the function
get_sub_rtx () and change the restriction of REE to "only one child of
a PARALLEL expression is a SET register expression" (was "only one child of
a PARALLEL expression is a SET expression").
This allows to handle more PARALLEL SET expressions.
gcc/ChangeLog:
PR rtl-optimization/100264
* ree.c (get_sub_rtx): Ignore SET expressions without register
destinations and remove assertion, as it is not valid anymore
with this new behaviour.
(merge_def_and_ext): Eliminate destination check for register
as such SET expressions can't occur anymore.
(combine_reaching_defs): Likewise.
Jakub Jelinek [Wed, 2 Jun 2021 20:09:53 +0000 (22:09 +0200)]
xtensa: Fix 2 warnings during xtensa build [PR100841]
When building gcc targetting xtensa-linux, there are 2 warnings the PR
complains about:
../../gcc/dwarf2cfi.c: In function ‘void init_one_dwarf_reg_size(int, machine_mode, rtx, machine_mode, init_one_dwarf_reg_state*)’:
../../gcc/dwarf2cfi.c:291:12: warning: comparison of integer expressions of different signedness: ‘const unsigned int’ and ‘int’ [-Wsign-compare]
291 | if (rnum >= DWARF_FRAME_REGISTERS)
../../gcc/function.c: In function ‘void gen_call_used_regs_seq(rtx_insn*, unsigned int)’:
../../gcc/function.c:5897:63: warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits]
5897 | if (crtl->uses_only_leaf_regs && LEAF_REG_REMAP (regno) < 0)
which might during bootstrap or when configured with --enable-werror-always
be turned into errors.
The first one is the -Wsign-compare warning, in c-family we do:
2281 /* Do not warn if the signed quantity is an unsuffixed integer
2282 literal (or some static constant expression involving such
2283 literals or a conditional expression involving such literals)
2284 and it is non-negative. */
2285 if (tree_expr_nonnegative_warnv_p (sop, &ovf))
2286 /* OK */;
and so don't warn if that function determines the expression is
non-negative. But xtensa defines DWARF_FRAME_REGISTERS as
(16 + (something ? 0 : 1)) and that isn't handled by
tree_expr_nonnegative_warnv_p, VRP can handle it of course, but that is much
later.
The second chunk rewrites it into a form that tree_expr_nonnegative_warnv_p
can handle, in particular (something ? 16 : 16 + 1), where for COND_EXPRs
that function checks both the 2nd and 3rd operand of the ternary operator
and if both are nonnegative, returns true.
The other warning has been introduced fairly recently; LEAF_REG_REMAP is
currently used by 2 targets only, and is documented to yield -1 if a hard
reg number can't be remapped and the remapped register number otherwise.
That means that the type of the expression should be signed (otherwise -1
could never appear), and on SPARC indeed it is defined as
extern char leaf_reg_remap[];
#define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO])
so unless the host is -funsigned-char by default it works fine.
I guess sparc.[ch] should be fixed to use signed char of leaf_reg_remap,
Eric?
The argument to LEAF_REG_REMAP is often unsigned int though, hard
register numbers are usually not negative, and thus the warning.
I think xtensa doesn't have 2G hard registers and so it is ok to just cast
it to int.
2021-06-02 Jakub Jelinek <jakub@redhat.com>
PR target/100841
* config/xtensa/xtensa.h (LEAF_REG_REMAP): Cast REGNO to int to avoid
-Wtype-limits warnings.
(DWARF_FRAME_REGISTER): Rewrite into ternary operator with addition
in operands to avoid -Wsign-compare warnings.
Pat Haugen [Wed, 2 Jun 2021 20:03:40 +0000 (15:03 -0500)]
Make sure link reg save MEM has frame alias set.
gcc/ChangeLog:
* config/rs6000/rs6000-logue.c (rs6000_emit_prologue): Use
gen_frame_store.
Jason Merrill [Mon, 31 May 2021 16:36:25 +0000 (12:36 -0400)]
c++: missing dtor with -fno-elide-constructors [PR100838]
tf_no_cleanup only applies to the outermost TARGET_EXPR, and we already
clear it for nested calls in build_over_call, but in this case both
constructor calls came from convert_like, so we need to clear it in the
recursive call as well. This revealed that we were adding an extra
ck_rvalue in direct-initialization cases where it was wrong.
PR c++/100838
gcc/cp/ChangeLog:
* call.c (convert_like_internal): Clear tf_no_cleanup when
recursing.
(build_user_type_conversion_1): Only add ck_rvalue if
LOOKUP_ONLYCONVERTING.
gcc/testsuite/ChangeLog:
* g++.dg/init/no-elide2.C: New test.
Jason Merrill [Tue, 1 Jun 2021 13:58:21 +0000 (09:58 -0400)]
MAINTAINERS: Add DCO section
ChangeLog:
* MAINTAINERS: Add DCO section.
Jonathan Wakely [Wed, 2 Jun 2021 11:34:48 +0000 (12:34 +0100)]
libstdc++: Value-initialize objects held by EBO helpers [PR 100863]
The allocator, hash function and equality function should all be
value-initialized by the default constructor of an unordered container.
Do it in the EBO helper, so we don't have to get it right in multiple
places.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
PR libstdc++/100863
PR libstdc++/65816
* include/bits/hashtable_policy.h (_Hashtable_ebo_helper):
Value-initialize subobject.
* testsuite/23_containers/unordered_map/allocator/default_init.cc:
Remove XFAIL.
* testsuite/23_containers/unordered_set/allocator/default_init.cc:
Remove XFAIL.
Jonathan Wakely [Wed, 2 Jun 2021 11:33:38 +0000 (12:33 +0100)]
libstdc++: Fix tests for COW std::string [PR 96088]
The expected number of allocations is different when copying COW
strings.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
PR libstdc++/96088
* testsuite/23_containers/unordered_map/96088.cc: Adjust
expected number of allocations.
* testsuite/23_containers/unordered_set/96088.cc: Likewise.
Claudiu Zissulescu [Wed, 2 Jun 2021 11:31:00 +0000 (14:31 +0300)]
ARC: gcc driver default to hs38_linux
arc700 is legacy and there's no active development for it, so switch to
latest hs38_linux as default
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
gcc/
2021-06-02 Vineet Gupta <vgupta@synopsys.com>
* config/arc/arc.h (TARGET_CPU_DEFAULT): Change to hs38_linux.
Jonathan Wakely [Wed, 2 Jun 2021 11:31:04 +0000 (12:31 +0100)]
libstdc++: Improve punctuation in implementation status docs
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
* doc/xml/manual/status_cxxis29124.xml: Improve punctuation.
* doc/xml/manual/status_cxxtr1.xml: Likewise.
* doc/xml/manual/status_cxxtr24733.xml: Likewise.
* doc/html/*: Regenerate.
Ilya Leoshkevich [Mon, 31 May 2021 19:59:50 +0000 (21:59 +0200)]
IBM Z: Remove match_scratch workaround
Since commit
dd1ef00c45ba ("Fix bug in the define_subst handling that
made match_scratch unusable for multi-alternative patterns.") the
workaround for that bug in *ashrdi3_31<setcc><cconly> is not only no
longer necessary, but actually breaks the build.
Get rid of it by using only one alternative in (match_scratch). It
will be replicated as many times as needed in order to match the
pattern with which (define_subst) is used.
gcc/ChangeLog:
* config/s390/s390.md(*ashrdi3_31<setcc><cconly>): Use a single
constraint.
* config/s390/subst.md(cconly_subst): Use a single constraint
in (match_scratch).
gcc/testsuite/ChangeLog:
* gcc.target/s390/ashr.c: New test.
Tobias Burnus [Wed, 2 Jun 2021 09:48:21 +0000 (11:48 +0200)]
Fortran/OpenMP: Add gfortran.dg/gomp/taskloop-2.f90 [PR99928]
PR middle-end/99928
gcc/testsuite/ChangeLog
* gfortran.dg/gomp/taskloop-2.f90: New.
Jakub Jelinek [Wed, 2 Jun 2021 08:24:56 +0000 (10:24 +0200)]
testsuite: Add -Wno-psabi -w to g++.dg/ext/builtin-shufflevector-1.C
The testcase without this FAILs on i686-linux, where we warn about returning
of a generic vector changing the ABI.
2021-06-02 Jakub Jelinek <jakub@redhat.com>
* g++.dg/ext/builtin-shufflevector-1.C: Add -Wno-psabi -w to
dg-options.
Martin Liska [Tue, 1 Jun 2021 13:26:47 +0000 (15:26 +0200)]
icf: Fix memory leak of a vector.
gcc/ChangeLog:
* ipa-icf.h: Use auto_vec for memory_access_types.
Jeff Law [Wed, 2 Jun 2021 04:56:38 +0000 (00:56 -0400)]
Fix minor bugs in H8 port logical ops. Prepare for more compare/test removal
gcc/
* config/h8300/h8300-protos.h (compute_a_shift_length): Drop unused
argument from prototype.
(output_logical_op): Add rtx_code argument.
(compute_logical_op_length): Likewise.
* config/h8300/h8300.c (h8300_and_costs): Pass additional argument
to compute_a_shift_length.
(output_logical_op); New argument with the rtx code rather than
extracting it from an operand. Handle QImode too.
(compute_logical_op_length): Similary.
(compute_a_shift_length): Drop unused argument.
* config/h8300/h8300.md (logicals): New code iterator.
* config/h8300/logical.md (<code><mode>3 expander): Combine
the "and" expander with the "ior"/"xor" expander.
(bclr<mode>msx): Combine the QI/HI mode patterns.
(<logical><mode>3 insns): Use code iterator rather than match_operator.
Handle QImode as well. Update call to output_logical_op and
compute_logical_op_length to pass in rtx_code
Fix split condition on all define_insn_and_split patterns.
(one_cmpl<mode>2<cczn>): Use <cczn> to support both clobbering
the flags and setting ZN via existing define_subst.
* config/h8300/shiftrotate.md: Drop unused argument from
calls to compute_a_shift_length.
Signed-off-by: Jeff Law <jeffreyalaw@gmail.com>
GCC Administrator [Wed, 2 Jun 2021 00:16:43 +0000 (00:16 +0000)]
Daily bump.
Patrick Palka [Tue, 1 Jun 2021 16:23:49 +0000 (12:23 -0400)]
c++: value-init vs zero-init in expand_aggr_init_1 [PR65816]
In the case of value-initializing an object of class type T,
[dcl.init.general]/8 says:
- if T has either no default constructor ([class.default.ctor]) or
a default constructor that is user-provided or deleted, then the
object is default-initialized;
- otherwise, the object is zero-initialized and ... if T has a
non-trivial default constructor, the object is default-initialized;
But when determining whether to first zero-initialize the object,
expand_aggr_init_1 incorrectly considers the user-providedness of _all_
constructors rather than only that of the _default_ constructors. This
causes us to skip the zero-initialization step when the class type has a
defaulted default constructor alongside a user-defined constructor.
It seems the predicate type_has_non_user_provided_default_constructor
accurately captures the above rule for when to first perform a
zero-initialization during value-initialization, so this patch adjusts
expand_aggr_init_1 to use this predicate instead.
PR c++/65816
gcc/cp/ChangeLog:
* init.c (expand_aggr_init_1): Check
type_has_non_user_provided_default_constructor instead of
type_has_user_provided_constructor.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/constexpr-delegating3.C: New test.
* g++.dg/cpp0x/dc10.C: New test.
* g++.dg/cpp0x/initlist-base4.C: New test.
* g++.dg/cpp2a/constexpr-init22.C: New test.
libstdc++-v3/ChangeLog:
* testsuite/23_containers/deque/allocator/default_init.cc,
testsuite/23_containers/forward_list/allocator/default_init.cc,
testsuite/23_containers/list/allocator/default_init.cc,
testsuite/23_containers/map/allocator/default_init.cc,
testsuite/23_containers/set/allocator/default_init.cc,
testsuite/23_containers/vector/allocator/default_init.cc,
testsuite/23_containers/vector/bool/allocator/default_init.cc:
Remove xfail.
Andrew Pinski [Tue, 1 Jun 2021 01:05:09 +0000 (01:05 +0000)]
Replace conditional_replacement with match and simplify
This is the first of series of patches to simplify phi-opt
to use match and simplify in many cases. This simplification
will more things to optimize.
This is what Richard requested in
https://gcc.gnu.org/pipermail/gcc-patches/2021-May/571197.html
and I think it is the right thing to do too.
OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
gcc/ChangeLog:
PR tree-optimization/25290
* tree-ssa-phiopt.c (match_simplify_replacement):
New function.
(tree_ssa_phiopt_worker): Use match_simplify_replacement.
(two_value_replacement): Change the comment about
conditional_replacement.
(conditional_replacement): Delete.
Andrew Pinski [Mon, 31 May 2021 00:17:22 +0000 (00:17 +0000)]
Fix PR 95481: tail call fails with empty struct types
The problem here is we don't have an assignment type any more
for empty structs as they were removed during gimplifcation.
This adds a special case where the assignment var does not exist
and the return decl is empty typed.
OK? Tested on aarch64-linux-gnu with no regressions.
Thanks,
Andrew Pinski
changes since v1:
v2: Use is_empty_type instead of zero-sized type.
gcc/ChangeLog:
PR tree-optimization/95481
* tree-tailcall.c (find_tail_calls): Handle empty typed
return decls.
gcc/testsuite/ChangeLog:
PR tree-optimization/95481
* gcc.dg/tree-ssa/tailcall-10.c: New test.
* gcc.dg/tree-ssa/tailcall-11.c: New test.
* gcc.dg/tree-ssa/tailcall-12.c: New test.
* gcc.dg/tree-ssa/tailcall-13.c: New test.
* gcc.dg/tree-ssa/tailrecursion-8.c: New test.
Andrew Pinski [Mon, 31 May 2021 12:25:28 +0000 (12:25 +0000)]
Use is_empty_type instead of zero-sized type.
Instead of only removing assignments of zero-sized types,
assignments of all empty types should be removed during gimplification.
This moves to use is_empty_type which will be used in other places too.
OK? Bootstrapped and tested on aarch64-linux-gnu with no regressions.
Thanks,
Andrew Pinski
gcc/ChangeLog:
* gimplify.c (zero_sized_field_decl): Delete
(zero_sized_type): Delete
(gimplify_init_ctor_eval): Use is_empty_type instead
of zero_sized_field_decl.
(gimplify_modify_expr): Use is_empty_type instead of
zero_sized_type.
Jonathan Wakely [Tue, 1 Jun 2021 18:05:03 +0000 (19:05 +0100)]
libstdc++: Fix effective target for new tests [PR 96088]
These tests use <string_view> so must not run for anything older than
C++17.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
* testsuite/23_containers/unordered_map/96088.cc: Change
effective target to c++17.
* testsuite/23_containers/unordered_set/96088.cc: Likewise.
Jonathan Wakely [Tue, 1 Jun 2021 18:01:37 +0000 (19:01 +0100)]
libstdc++: Fix new test for C++98 mode [PR 89728]
The isblank class is not supported until C++11.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
* testsuite/22_locale/ctype/is/string/89728_neg.cc: Only test
isblank for C++11 and later.
Bill Schmidt [Tue, 1 Jun 2021 16:08:53 +0000 (11:08 -0500)]
PR100750: Require ELFv2 ABI for ROP test
2021-06-01 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/testsuite/
PR testsuite/100750
* gcc.target/powerpc/rop-5.c: Require ELFv2 ABI.
Jonathan Wakely [Tue, 1 Jun 2021 15:02:45 +0000 (16:02 +0100)]
libstdc++: Fix return value of std::ranges::advance [PR 100833]
The three-argument form of ranges::advance is supposed to return the
difference between the second argument and the distance the iterator was
advanced. When a non-random-access iterator is not advanced (because it
already equals the sentinel) we were returning 0 rather than n - 0.
libstdc++-v3/ChangeLog:
PR libstdc++/100833
* include/bits/ranges_base.h (ranges::advance(iter, n, sentinel)):
Fix return value for no-op case.
* testsuite/24_iterators/range_operations/advance.cc: Test
return values of three-argument overload.
Jason Merrill [Fri, 28 May 2021 21:05:23 +0000 (17:05 -0400)]
c++: no clobber for C++20 destroying delete [PR91859]
Before C++20 added destroying operator delete, by the time we called
operator delete for a pointer, the object would already be gone. But that
isn't true for destroying delete. Since the optimizers' assumptions about
operator delete are based on either DECL_IS_REPLACEABLE_OPERATOR (which
already is not set) or CALL_FROM_NEW_OR_DELETE_P, let's avoid setting the
latter flag in this case.
PR c++/91859
gcc/ChangeLog:
* tree.h (CALL_FROM_NEW_OR_DELETE_P): Adjust comment.
gcc/cp/ChangeLog:
* call.c (build_op_delete_call): Don't set CALL_FROM_NEW_OR_DELETE_P
for destroying delete.
* init.c (build_delete): Don't clobber before destroying delete.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/destroying-delete5.C: New test.
Jason Merrill [Tue, 27 Apr 2021 21:13:39 +0000 (17:13 -0400)]
c++: -Wdeprecated-copy and #pragma diagnostic [PR94492]
-Wdeprecated-copy was depending only on the state of the warning at the
point where we call the function, making it hard to use #pragma diagnostic
to suppress the warning for a particular implicitly declared function.
But checking whether the warning is enabled at the location of the implicit
declaration turned out to be a bit complicated; option_enabled only tests
whether it was enabled at the start of compilation, the actual test only
existed in the middle of diagnostic_report_diagnostic. So this patch
factors it out and adds a new warning_enabled function to diagnostic.h.
gcc/ChangeLog:
PR c++/94492
* diagnostic.h (warning_enabled_at): Declare.
* diagnostic.c (diagnostic_enabled): Factor out from...
(diagnostic_report_diagnostic): ...here.
(warning_enabled_at): New.
gcc/cp/ChangeLog:
PR c++/94492
* decl2.c (cp_warn_deprecated_use): Check warning_enabled_at.
gcc/testsuite/ChangeLog:
PR c++/94492
* g++.dg/cpp0x/depr-copy4.C: New test.
Aldy Hernandez [Tue, 1 Jun 2021 09:26:02 +0000 (05:26 -0400)]
Revert patch that disabled exporting of global ranges.
Andrew's last set of changes fixes the bootstrap problem on i686 when
global ranges are exported from evrp. The specific patch that fixes the
problem is
715914d3:
Author: Andrew MacLeod <amacleod@redhat.com>
Date: Mon May 31 12:13:50 2021 -0400
Do not calculate new values when evaluating a debug statement.
Add a flag to enable/disable immediately improving poor values found during
cache propagation. Then disable it when processing debug statements.
This patch reverts commit 2364b58 now that exporting of global ranges works.
Tested on x86-64 Linux with default flags, and on i686 with the flags in
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:
* gimple-ssa-evrp.c: Enable exporting of global ranges.
gcc/testsuite/ChangeLog:
* gcc.dg/Wstringop-overflow-55.c: Adjust for global ranges changes.
* gcc.dg/pr80776-1.c: Same.
Martin Liska [Tue, 1 Jun 2021 08:41:04 +0000 (10:41 +0200)]
Fix sanity checking of global_options.
gcc/c-family/ChangeLog:
PR other/100759
* c-attribs.c (handle_optimize_attribute): Limit sanity check
to a situation where we are not in processing of an optimize
pragma.
* c-pragma.c (handle_pragma_pop_options): Restore target
options.
Jonathan Wakely [Tue, 1 Jun 2021 10:00:16 +0000 (11:00 +0100)]
libstdc++: Fix installation of python hooks [PR 99453]
When no shared library is installed, the new code to determine the name
of the -gdb.py file yields an empty string. Use the name of the static
library in that case.
libstdc++-v3/ChangeLog:
PR libstdc++/99453
* python/Makefile.am: Use archive name for printer hook if no
dynamic library name is available.
* python/Makefile.in: Regenerate.
Martin Liska [Tue, 1 Jun 2021 12:17:39 +0000 (14:17 +0200)]
docs: Mention that -fgcse-after-reload is enabled with -O3.
gcc/ChangeLog:
PR other/100826
* doc/invoke.texi: Mention that -fgcse-after-reload
is enabled with -O3.
Tobias Burnus [Tue, 1 Jun 2021 10:46:37 +0000 (12:46 +0200)]
Fortran/OpenMP: Support (parallel) master taskloop (simd) [PR99928]
PR middle-end/99928
gcc/fortran/ChangeLog:
* dump-parse-tree.c (show_omp_node, show_code_node): Handle
(parallel) master taskloop (simd).
* frontend-passes.c (gfc_code_walker): Set in_omp_workshare
to false for parallel master taskloop (simd).
* gfortran.h (enum gfc_statement):
Add ST_OMP_(END_)(PARALLEL_)MASTER_TASKLOOP(_SIMD).
(enum gfc_exec_op): EXEC_OMP_(PARALLEL_)MASTER_TASKLOOP(_SIMD).
* match.h (gfc_match_omp_master_taskloop,
gfc_match_omp_master_taskloop_simd,
gfc_match_omp_parallel_master_taskloop,
gfc_match_omp_parallel_master_taskloop_simd): New prototype.
* openmp.c (gfc_match_omp_parallel_master_taskloop,
gfc_match_omp_parallel_master_taskloop_simd,
gfc_match_omp_master_taskloop,
gfc_match_omp_master_taskloop_simd): New.
(gfc_match_omp_taskloop_simd): Permit 'reduction' clause.
(resolve_omp_clauses): Handle new combined directives; remove
inscan-reduction check to reduce multiple errors; add
task-reduction error for 'taskloop simd'.
(gfc_resolve_omp_parallel_blocks,
resolve_omp_do, omp_code_to_statement,
gfc_resolve_omp_directive): Handle new combined constructs.
* parse.c (decode_omp_directive, next_statement,
gfc_ascii_statement, parse_omp_do, parse_omp_structured_block,
parse_executable): Likewise.
* resolve.c (gfc_resolve_blocks, gfc_resolve_code): Likewise.
* st.c (gfc_free_statement): Likewise.
* trans.c (trans_code): Likewise.
* trans-openmp.c (gfc_split_omp_clauses,
gfc_trans_omp_directive): Likewise.
(gfc_trans_omp_parallel_master): Move after gfc_trans_omp_master_taskloop;
handle parallel master taskloop (simd) as well.
(gfc_trans_omp_taskloop): Take gfc_exec_op as arg.
(gfc_trans_omp_master_taskloop): New.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/reduction5.f90: Remove dg-error; the issue is
now diagnosed with less error output.
* gfortran.dg/gomp/scan-1.f90: Likewise.
* gfortran.dg/gomp/pr99928-3.f90: New test.
* gfortran.dg/gomp/taskloop-1.f90: New test.
liuhongt [Wed, 6 Jan 2021 08:33:27 +0000 (16:33 +0800)]
Extend is_cond_scalar_reduction to handle nop_expr after/before scalar reduction.[PR98365]
gcc/ChangeLog:
PR tree-optimization/98365
* tree-if-conv.c (strip_nop_cond_scalar_reduction): New function.
(is_cond_scalar_reduction): Handle nop_expr in cond scalar reduction.
(convert_scalar_cond_reduction): Ditto.
(predicate_scalar_phi): Ditto.
gcc/testsuite/ChangeLog:
PR tree-optimization/98365
* gcc.target/i386/pr98365.c: New test.
Andrew MacLeod [Mon, 31 May 2021 16:13:50 +0000 (12:13 -0400)]
Do not calculate new values when evaluating a debug statement.
Add a flag to enable/disable immediately improving poor values found during
cache propagation. Then disable it when processing debug statements.
gcc/
PR tree-optimization/100781
* gimple-range-cache.cc (ranger_cache::ranger_cache): Enable new
value calculation by default.
(ranger_cache::enable_new_values): New.
(ranger_cache::disable_new_values): New.
(ranger_cache::push_poor_value): Check if new values are allowed.
* gimple-range-cache.h (class ranger_cache): New member/methods.
* gimple-range.cc (gimple_ranger::range_of_expr): Check for debug
statement, and disable/renable new value calculation.
gcc/testsuite/
PR tree-optimization/100781
* gcc.dg/pr100781.c: New.
Andrew MacLeod [Mon, 31 May 2021 20:41:27 +0000 (16:41 -0400)]
Replace ssa_range_in_bb with entry exit and def range
Split the old functionality of ssa_name_in_bb into the components for
definition in a block, entry and exit range. Call these as appropriate.
* gimple-range-cache.cc (ranger_cache::ssa_range_in_bb): Delete.
(ranger_cache::range_of_def): New.
(ranger_cache::entry_range): New.
(ranger_cache::exit_range): New.
(ranger_cache::range_of_expr): Adjust.
(ranger_cache::range_on_edge): Adjust.
(ranger_cache::propagate_cache): Call exit_range directly.
* gimple-range-cache.h (class ranger_cache): Adjust.
Andrew MacLeod [Mon, 31 May 2021 20:00:16 +0000 (16:00 -0400)]
Move Ranger cache to range-query and fur_source model.
Flatten and simplify gori-computes. Tweak debug output.
range-cache now provides range_of_expr and range_on_edge in the
standard formats, but in a "query what you have" mode rather than
"go figure out anything that is missing" mode.
* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust for
gori_compute being a member rather than base class.
dervied call to member call.
(ranger_cache::dump): No longer dump gori_map.
(ranger_cache::dump_bb): New.
(ranger_cache::get_non_stale_global_range): Adjust for gori_compute
being a member rather than base class.
(ranger_cache::set_global_range): Ditto.
(ranger_cache::ssa_range_in_bb): Ditto.
(ranger_cache::range_of_expr): New.
(ranger_cache::range_on_edge): New.
(ranger_cache::block_range): Adjust for gori_computes. Debug changes.
(ranger_cache::propagate_cache): Adjust debugging output.
(ranger_cache::fill_block_cache): Adjust for gori_computes. Debug
output changes.
* gimple-range-cache.h (class ranger_cache): Make gori_compute a
member, and inherit from range_query instead.
(ranger_cache::dump_bb): New. split from dump.
* gimple-range-gori.cc (gori_compute::ssa_range_in_bb): Delete.
(gori_compute::expr_range_at_stmt): Delete.
(gori_compute::compute_name_range_op): Delete.
(gori_compute::compute_operand_range_switch): Add fur_source.
(gori_compute::compute_operand_range): Add fur_source param, inline
old compute_name_range_op and optimize_logical_operands.
(struct tf_range): Delete.
(gori_compute::logical_combine): Adjust
(gori_compute::optimize_logical_operands): Delete.
(gori_compute::compute_logical_operands_in_chain): Delete.
(gori_compute::compute_logical_operands): Adjust.
(gori_compute::compute_operand1_range): Adjust to fur_source.
(gori_compute::compute_operand2_range): Ditto.
(gori_compute::compute_operand1_and_operand2_range): Ditto.
(gori_compute::outgoing_edge_range_p): Add range_query parameter,
and adjust to fur_source.
* gimple-range-gori.h (class gori_compute): Simplify and adjust to
range_query and fur_source.
* gimple-range.cc (gimple_ranger::range_on_edge): Query range_on_edge
from the ranger_cache..
(gimple_ranger::fold_range_internal): Adjust to base class change of
ranger_cache.
(gimple_ranger::dump_bb): Adjust dump.
* gimple-range.h (gimple_ranger):export gori computes object.
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.
GCC Administrator [Tue, 1 Jun 2021 00:16:37 +0000 (00:16 +0000)]
Daily bump.
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.
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.
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.
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.
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.
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.
GCC Administrator [Mon, 31 May 2021 00:16:25 +0000 (00:16 +0000)]
Daily bump.
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.
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.
GCC Administrator [Sun, 30 May 2021 00:16:26 +0000 (00:16 +0000)]
Daily bump.
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.
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.
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.
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.
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:
GCC Administrator [Sat, 29 May 2021 00:16:29 +0000 (00:16 +0000)]
Daily bump.
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.
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.
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.
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.
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.
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.
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.
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.