platform/upstream/gcc.git
2 years agors6000: Match recent builtins changes in new builtins support
Bill Schmidt [Tue, 9 Nov 2021 21:26:00 +0000 (15:26 -0600)]
rs6000: Match recent builtins changes in new builtins support

2021-11-09  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (rs6000_gimple_fold_new_builtin):
Disable gimple fold for RS6000_BIF_{XVMINDP,XVMINSP,VMINFP} and
RS6000_BIF_{XVMAXDP,XVMAXSP,VMAXFP} when fast-math is not set.
(lxvrse_expand_builtin): Modify the expansion for sign extension.
All extensions are done within VSX registers.

gcc/testsuite/
* gcc.target/powerpc/p10_vec_xl_sext.c: Fix long long case.

2 years agoFortran: Fix memory leak in finalization wrappers [PR68800]
Bernhard Reutner-Fischer [Fri, 12 Oct 2018 21:57:21 +0000 (23:57 +0200)]
Fortran: Fix memory leak in finalization wrappers [PR68800]

If a finalization is not required we created a namespace containing
formal arguments for an internal interface definition but never used
any of these. So the whole sub_ns namespace was not wired up to the
program and consequently was never freed. The fix is to simply not
generate any finalization wrappers if we know that it will be unused.
Note that this reverts back to the original r190869
(8a96d64282ac534cb597f446f02ac5d0b13249cc) handling for this case
by reverting this specific part of r194075
(f1ee56b4be7cc3892e6ccc75d73033c129098e87) for PR fortran/37336.

valgrind summary for e.g.
gfortran.dg/abstract_type_3.f03 and gfortran.dg/abstract_type_4.f03
where ".orig" is pristine trunk and ".mine" contains this fix:

at3.orig.vg:LEAK SUMMARY:
at3.orig.vg-   definitely lost: 8,460 bytes in 11 blocks
at3.orig.vg-   indirectly lost: 13,288 bytes in 55 blocks
at3.orig.vg-     possibly lost: 0 bytes in 0 blocks
at3.orig.vg-   still reachable: 572,278 bytes in 2,142 blocks
at3.orig.vg-        suppressed: 0 bytes in 0 blocks
at3.orig.vg-
at3.orig.vg-Use --track-origins=yes to see where uninitialised values come from
at3.orig.vg-ERROR SUMMARY: 38 errors from 33 contexts (suppressed: 0 from 0)
--
at3.mine.vg:LEAK SUMMARY:
at3.mine.vg-   definitely lost: 344 bytes in 1 blocks
at3.mine.vg-   indirectly lost: 7,192 bytes in 18 blocks
at3.mine.vg-     possibly lost: 0 bytes in 0 blocks
at3.mine.vg-   still reachable: 572,278 bytes in 2,142 blocks
at3.mine.vg-        suppressed: 0 bytes in 0 blocks
at3.mine.vg-
at3.mine.vg-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
at3.mine.vg-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
at4.orig.vg:LEAK SUMMARY:
at4.orig.vg-   definitely lost: 13,751 bytes in 12 blocks
at4.orig.vg-   indirectly lost: 11,976 bytes in 60 blocks
at4.orig.vg-     possibly lost: 0 bytes in 0 blocks
at4.orig.vg-   still reachable: 572,278 bytes in 2,142 blocks
at4.orig.vg-        suppressed: 0 bytes in 0 blocks
at4.orig.vg-
at4.orig.vg-Use --track-origins=yes to see where uninitialised values come from
at4.orig.vg-ERROR SUMMARY: 18 errors from 16 contexts (suppressed: 0 from 0)
--
at4.mine.vg:LEAK SUMMARY:
at4.mine.vg-   definitely lost: 3,008 bytes in 3 blocks
at4.mine.vg-   indirectly lost: 4,056 bytes in 11 blocks
at4.mine.vg-     possibly lost: 0 bytes in 0 blocks
at4.mine.vg-   still reachable: 572,278 bytes in 2,142 blocks
at4.mine.vg-        suppressed: 0 bytes in 0 blocks
at4.mine.vg-
at4.mine.vg-ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
at4.mine.vg-ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)

gcc/fortran/ChangeLog:

2018-10-12  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>

PR fortran/68800
* class.c (generate_finalization_wrapper): Do not leak
finalization wrappers if they will not be used.
* expr.c (gfc_free_actual_arglist): Formatting fix.
* gfortran.h (gfc_free_symbol): Pass argument by reference.
(gfc_release_symbol): Likewise.
(gfc_free_namespace): Likewise.
* symbol.c (gfc_release_symbol): Adjust acordingly.
(free_components): Set procedure pointer components
of derived types to NULL after freeing.
(free_tb_tree): Likewise.
(gfc_free_symbol): Set sym to NULL after freeing.
(gfc_free_namespace): Set namespace to NULL after freeing.

2 years agolibstdc++: [_GLIBCXX_DEBUG] Implement unordered container merge
François Dumont [Wed, 13 Oct 2021 20:04:32 +0000 (22:04 +0200)]
libstdc++: [_GLIBCXX_DEBUG] Implement unordered container merge

The _GLIBCXX_DEBUG unordered containers need a dedicated merge implementation
so that any existing iterator on the transfered nodes is properly invalidated.

Add typedef/using declarations for everything used as-is from normal implementation.

libstdc++-v3/ChangeLog:

* include/bits/hashtable_policy.h (__distance_fw): Replace class keyword with
typename.
* include/bits/hashtable.h (_Hashtable<>::_M_merge_unique): Remove noexcept
qualification. Use const_iterator for node extraction/reinsert.
(_Hashtable<>::_M_merge_multi): Likewise. Compute new hash code before extract.
* include/debug/safe_container.h (_Safe_container<>): Make all methods
protected.
* include/debug/safe_unordered_container.h
(_Safe_unordered_container<>::_UContInvalidatePred<_ExtractKey, _Source>): New.
(_Safe_unordered_container<>::_UMContInvalidatePred<_ExtractKey, _Source>): New.
(_Safe_unordered_container<>::_UContMergeGuard<_Source, _InvalidatePred>): New.
(_Safe_unordered_container<>::_S_uc_guard<_ExtractKey, _Source>): New.
(_Safe_unordered_container<>::_S_umc_guard<_ExtractKey, _Source>): New.
(_Safe_unordered_container<>::_M_invalide_all): Make public.
(_Safe_unordered_container<>::_M_invalide_if): Likewise.
(_Safe_unordered_container<>::_M_invalide_local_if): Likewise.
* include/debug/unordered_map
(unordered_map<>::mapped_type, pointer, const_pointer): New typedef.
(unordered_map<>::reference, const_reference, difference_type): New typedef.
(unordered_map<>::get_allocator, empty, size, max_size): Add usings.
(unordered_map<>::bucket_count, max_bucket_count, bucket): Add usings.
(unordered_map<>::hash_function, key_equal, count, contains): Add usings.
(unordered_map<>::operator[], at, rehash, reserve): Add usings.
(unordered_map<>::merge): New.
(unordered_multimap<>::mapped_type, pointer, const_pointer): New typedef.
(unordered_multimap<>::reference, const_reference, difference_type): New typedef.
(unordered_multimap<>::get_allocator, empty, size, max_size): Add usings.
(unordered_multimap<>::bucket_count, max_bucket_count, bucket): Add usings.
(unordered_multimap<>::hash_function, key_equal, count, contains): Add usings.
(unordered_multimap<>::rehash, reserve): Add usings.
(unordered_multimap<>::merge): New.
* include/debug/unordered_set
(unordered_set<>::mapped_type, pointer, const_pointer): New typedef.
(unordered_set<>::reference, const_reference, difference_type): New typedef.
(unordered_set<>::get_allocator, empty, size, max_size): Add usings.
(unordered_set<>::bucket_count, max_bucket_count, bucket): Add usings.
(unordered_set<>::hash_function, key_equal, count, contains): Add usings.
(unordered_set<>::rehash, reserve): Add usings.
(unordered_set<>::merge): New.
(unordered_multiset<>::mapped_type, pointer, const_pointer): New typedef.
(unordered_multiset<>::reference, const_reference, difference_type): New typedef.
(unordered_multiset<>::get_allocator, empty, size, max_size): Add usings.
(unordered_multiset<>::bucket_count, max_bucket_count, bucket): Add usings.
(unordered_multiset<>::hash_function, key_equal, count, contains): Add usings.
(unordered_multiset<>::rehash, reserve): Add usings.
(unordered_multiset<>::merge): New.
* testsuite/23_containers/unordered_map/debug/merge1_neg.cc: New test.
* testsuite/23_containers/unordered_map/debug/merge2_neg.cc: New test.
* testsuite/23_containers/unordered_map/debug/merge3_neg.cc: New test.
* testsuite/23_containers/unordered_map/debug/merge4_neg.cc: New test.
* testsuite/23_containers/unordered_multimap/debug/merge1_neg.cc: New test.
* testsuite/23_containers/unordered_multimap/debug/merge2_neg.cc: New test.
* testsuite/23_containers/unordered_multimap/debug/merge3_neg.cc: New test.
* testsuite/23_containers/unordered_multimap/debug/merge4_neg.cc: New test.
* testsuite/23_containers/unordered_multiset/debug/merge1_neg.cc: New test.
* testsuite/23_containers/unordered_multiset/debug/merge2_neg.cc: New test.
* testsuite/23_containers/unordered_multiset/debug/merge3_neg.cc: New test.
* testsuite/23_containers/unordered_multiset/debug/merge4_neg.cc: New test.
* testsuite/23_containers/unordered_set/debug/merge1_neg.cc: New test.
* testsuite/23_containers/unordered_set/debug/merge2_neg.cc: New test.
* testsuite/23_containers/unordered_set/debug/merge3_neg.cc: New test.
* testsuite/23_containers/unordered_set/debug/merge4_neg.cc: New test.
* testsuite/util/testsuite_abi.h: [_GLIBCXX_DEBUG] Use normal unordered
container implementation.

2 years ago[Committed] Fix tree-optimization/103152: Still one more -signed1bit issue
Andrew Pinski [Tue, 9 Nov 2021 09:56:10 +0000 (09:56 +0000)]
[Committed] Fix tree-optimization/103152: Still one more -signed1bit issue

When I fixed PR 102622, I accidently left behind a TYPE_PRECISION
check which I had there for checking before hand.  This check
is not needed as the code will handle it correctly anyways.

Committed as obvious after a bootstrap/test on x86_64-linux-gnu.

PR tree-optimization/10352

gcc/ChangeLog:

* match.pd: Remove check of TYPE_PRECISION for
the a?0:pow2 case.

gcc/testsuite/ChangeLog:

* gcc.c-torture/execute/pr10352-1.c: New test.

2 years agoKeep x_range_query NULL for global ranges.
Andrew MacLeod [Tue, 9 Nov 2021 14:29:23 +0000 (09:29 -0500)]
Keep x_range_query NULL for global ranges.

Instead of x_range_query always pointing to an object, have it default to
NULL and return a pointer to the global query in that case.

* function.c (allocate_struct_function): Don't set x_range_query.
* function.h (get_range_query): Move to value-query.h.
* gimple-range.cc (enable_ranger): Check that query is currently NULL.
(disable_ranger): Clear function current query field.
* value-query.cc (get_global_range_query): Relocate to:
* value-query.h (get_global_range_query): Here and inline.
(get_range_query): Relocate here from function.h.

2 years agoDump details of an attempt to register a jump threading path.
Aldy Hernandez [Tue, 9 Nov 2021 09:49:32 +0000 (10:49 +0100)]
Dump details of an attempt to register a jump threading path.

The goal with these sets of patches is to improve the detailed dumps for
the threader, as I hope we eventually reach the point when I'm not
the only one looking at these dumps ;-).

This patch adds candidate paths to the detailed threading dumps to make it
easier to see the decisions the threader makes.  With it we can now
grep for the discovery logic in action:

$ grep ^path: a.ii.*thread*
a.ii.034t.ethread:path: 4->5->xx REJECTED
a.ii.034t.ethread:path: 3->5->8 SUCCESS
a.ii.034t.ethread:path: 4->5->6 SUCCESS
a.ii.034t.ethread:path: 0->2->xx REJECTED
a.ii.034t.ethread:path: 0->2->xx REJECTED
...
...
a.ii.111t.threadfull1:path: 14->22->23->xx REJECTED (unreachable)
a.ii.111t.threadfull1:path: 15->22->23->xx REJECTED (unreachable)
a.ii.111t.threadfull1:path: 16->22->23->xx REJECTED (unreachable)

In addition to this, if --param=threader-debug=all is used, one can see
the entire chain of events leading up to the ultimate threading
decision:

==============================================
path_range_query: compute_ranges for path: 2->5
 Registering killing_def (path_oracle) _3
 Registering killing_def (path_oracle) _1
range_defined_in_block (BB2) for _1 is _Bool VARYING
 Registering killing_def (path_oracle) _2
range_defined_in_block (BB2) for _2 is _Bool VARYING
range_defined_in_block (BB2) for _3 is _Bool VARYING
outgoing_edge_range_p for b_10(D) on edge 2->5 is int VARYING
...
... [BBs and gimple along path]
...
path: 2->5->xx REJECTED

Tested on x86-64 Linux.

gcc/ChangeLog:

* tree-ssa-threadbackward.c
(back_threader::maybe_register_path_dump): New.
(back_threader::maybe_register_path): Call maybe_register_path_dump.

2 years agoReturn NULL for maybe_register_path when unprofitable.
Aldy Hernandez [Tue, 9 Nov 2021 09:45:26 +0000 (10:45 +0100)]
Return NULL for maybe_register_path when unprofitable.

This is a minor cleanup for maybe_register_path to return NULL when
the path is unprofitable.  It is needed for a follow-up patch to
generate better dumps from the threader.

There is no change in behavior, since the only call to this function
bails on !profitable_path_p.

Tested on x86-64 Linux.

gcc/ChangeLog:

* tree-ssa-threadbackward.c (back_threader::maybe_register_path):
Return NULL when unprofitable.

2 years agoIntroduce build_debug_expr_decl
Martin Jambor [Tue, 9 Nov 2021 16:54:23 +0000 (17:54 +0100)]
Introduce build_debug_expr_decl

This patch introduces a helper function build_debug_expr_decl to build
DEBUG_EXPR_DECL tree nodes in the most common way and replaces with a
call of this function all code pieces which build such a DECL itself
and sets its mode to the TYPE_MODE of its type.

There still remain 11 instances of open-coded creation of a
DEBUG_EXPR_DECL which set the mode of the DECL to something else.  It
would probably be a good idea to figure out that has any effect and if
not, convert them to calls of build_debug_expr_decl too.  But this
patch deliberately does not introduce any functional changes.

gcc/ChangeLog:

2021-11-08  Martin Jambor  <mjambor@suse.cz>

* tree.h (build_debug_expr_decl): Declare.
* tree.c (build_debug_expr_decl): New function.
* cfgexpand.c (avoid_deep_ter_for_debug): Use build_debug_expr_decl
instead of building a DEBUG_EXPR_DECL.
* ipa-param-manipulation.c
(ipa_param_body_adjustments::prepare_debug_expressions): Likewise.
* omp-simd-clone.c (ipa_simd_modify_stmt_ops): Likewise.
* tree-ssa-ccp.c (optimize_atomic_bit_test_and): Likewise.
* tree-ssa-phiopt.c (spaceship_replacement): Likewise.
* tree-ssa-reassoc.c (make_new_ssa_for_def): Likewise.

2 years agoRemove dead Fortran function.
Martin Liska [Tue, 9 Nov 2021 13:57:00 +0000 (14:57 +0100)]
Remove dead Fortran function.

gcc/fortran/ChangeLog:

* symbol.c (gfc_get_ultimate_derived_super_type): Remove.

2 years agors6000: Debug support for builtins changes
Bill Schmidt [Tue, 9 Nov 2021 15:23:55 +0000 (09:23 -0600)]
rs6000: Debug support for builtins changes

2021-11-09  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (rs6000_type_string): New function.
(def_builtin): Change debug formatting for easier parsing and
include more information.
(rs6000_init_builtins): Add dump of autogenerated builtins.
(altivec_init_builtins): Dump __builtin_altivec_mask_for_load for
completeness.

2 years agoc++: Skip unnamed bit-fields more
Marek Polacek [Mon, 8 Nov 2021 17:55:52 +0000 (12:55 -0500)]
c++: Skip unnamed bit-fields more

As Jason noticed in
<https://gcc.gnu.org/pipermail/gcc-patches/2021-November/583592.html>,
we shouldn't require an initializer for an unnamed bit-field, because,
as [class.bit] says, they cannot be initialized.

gcc/cp/ChangeLog:

* class.c (default_init_uninitialized_part): Use
next_initializable_field.
* method.c (walk_field_subobs): Skip unnamed bit-fields.

gcc/testsuite/ChangeLog:

* g++.dg/init/bitfield6.C: New test.

2 years agoipa: Fix typo in ipa-modref.c
Marek Polacek [Tue, 9 Nov 2021 16:28:54 +0000 (11:28 -0500)]
ipa: Fix typo in ipa-modref.c

gcc/ChangeLog:

* ipa-modref.c (analyze_parms): Fix a typo.

2 years ago[PR/target 102957] Allow Z*-ext extension with only 2 char.
Kito Cheng [Mon, 8 Nov 2021 14:45:49 +0000 (22:45 +0800)]
[PR/target 102957] Allow Z*-ext extension with only 2 char.

We was assume the Z* extension should be more than 2 char, so we put an
assertion there, but it should just an error or warning rather than an
assertion, however RISC-V has add `Zk` extension, which just 2 char, so
actually, we should just allow that.

gcc/ChangeLog

PR target/102957
* common/config/riscv/riscv-common.c (multi_letter_subset_rank): Remove
assertion for Z*-ext.

gcc/testsuite/ChangeLog

* gcc.target/riscv/pr102957.c: New.

2 years agoRestore 'GOMP_OPENACC_DIM' environment variable parsing
Thomas Schwinge [Fri, 5 Nov 2021 13:42:21 +0000 (14:42 +0100)]
Restore 'GOMP_OPENACC_DIM' environment variable parsing

... that got broken by recent commit c057ed9c52c6a63a1a692268f916b1a9131cd4b7
"openmp: Fix up strtoul and strtoull uses in libgomp", resulting in spurious
FAILs for tests specifying 'dg-set-target-env-var "GOMP_OPENACC_DIM" "[...]"'.

libgomp/
* env.c (parse_gomp_openacc_dim): Restore parsing.

2 years agoMerge IPA solution with local one in ipa-modref
Jan Hubicka [Tue, 9 Nov 2021 15:48:09 +0000 (16:48 +0100)]
Merge IPA solution with local one in ipa-modref

gcc/ChangeLog:

* ipa-modref.c (analyze_parms): Add past_flags, past_retslot_flags
and past_static_chain; merge past summary with current one.
(analyze_function): Update.

2 years agoDocument --param=threader-debug.
Aldy Hernandez [Tue, 9 Nov 2021 14:33:12 +0000 (15:33 +0100)]
Document --param=threader-debug.

gcc/ChangeLog:

* doc/invoke.texi (Invoking GCC): Document --param=threader-debug.

2 years agolibstdc++: Make test print which random_device tokens work
Jonathan Wakely [Tue, 9 Nov 2021 15:11:11 +0000 (15:11 +0000)]
libstdc++: Make test print which random_device tokens work

libstdc++-v3/ChangeLog:

* testsuite/26_numerics/random/random_device/cons/token.cc:
Print results of random_device_available checks.

2 years agolibstdc++: Do not use 64-bit DARN on 32-bit powerpc [PR103146]
Jonathan Wakely [Tue, 9 Nov 2021 09:34:23 +0000 (09:34 +0000)]
libstdc++: Do not use 64-bit DARN on 32-bit powerpc [PR103146]

We need to use the 64-bit DARN to detect failure without bias, but it's
not available in 32-bit mode.

libstdc++-v3/ChangeLog:

PR libstdc++/103146
* src/c++11/random.cc: Check __powerpc64__ not __powerpc__.

2 years agolibstdc++: Support getentropy and arc4random in std::random_device
Jonathan Wakely [Thu, 4 Nov 2021 15:51:37 +0000 (15:51 +0000)]
libstdc++: Support getentropy and arc4random in std::random_device

This adds additional "getentropy" and "arc4random" tokens to
std::random_device. The former is supported on Glibc and OpenBSD (and
apparently wasm), and the latter is supported on various BSDs.

libstdc++-v3/ChangeLog:

* acinclude.m4 (GLIBCXX_CHECK_GETENTROPY, GLIBCXX_CHECK_ARC4RANDOM):
Define.
* configure.ac (GLIBCXX_CHECK_GETENTROPY, GLIBCXX_CHECK_ARC4RANDOM):
Use them.
* config.h.in: Regenerate.
* configure: Regenerate.
* src/c++11/random.cc (random_device): Add getentropy and
arc4random as sources.
* testsuite/26_numerics/random/random_device/cons/token.cc:
Check new tokens.
* testsuite/26_numerics/random/random_device/entropy.cc:
Likewise.

2 years agolibstdc++: Make spurious std::random_device FAIL less likely
Jonathan Wakely [Tue, 9 Nov 2021 10:31:18 +0000 (10:31 +0000)]
libstdc++: Make spurious std::random_device FAIL less likely

It's possible that independent reads from /dev/random and /dev/urandom
could produce the same value by chance. Retry if that happens. The
chances of it happening twice are miniscule.

libstdc++-v3/ChangeLog:

* testsuite/26_numerics/random/random_device/cons/token.cc:
Retry if random devices produce the same value.

2 years agoc++: Fix ICE on complex constant with -frounding-math [PR103114]
Jakub Jelinek [Tue, 9 Nov 2021 14:29:36 +0000 (15:29 +0100)]
c++: Fix ICE on complex constant with -frounding-math [PR103114]

The FE uses build_complex which assumes that fold_convert will fold
value to a constant.  With -frounding-math that isn't guaranteed though.
So, the patch instead fold_build2s COMPLEX_EXPR, which will result
in build_complex if both arguments are constants, and otherwise
will build COMPLEX_EXPR.
build_zero_cst is an optimization for fold_convert (type, integer_zero_node).

2021-11-09  Jakub Jelinek  <jakub@redhat.com>

PR c++/103114
* parser.c (cp_parser_userdef_numeric_literal): Use fold_build2
with COMPLEX_EXPR arg instead of build_complex, use build_zero_cst
instead of fold_convert from integer_zero_node.

* g++.dg/ext/complex10.C: New test.

2 years agoc++: bogus error w/ tentative type parse of concept-id [PR98394]
Patrick Palka [Tue, 9 Nov 2021 14:09:43 +0000 (09:09 -0500)]
c++: bogus error w/ tentative type parse of concept-id [PR98394]

Here when tentatively parsing the if condition as a declaration, we try
to treat C<1> as the start of a constrained placeholder type, which we
quickly reject because C doesn't accept a type as its first argument.
But since we're parsing tentatively, we shouldn't emit an error in this
case.

In passing, also fix PR85846 by only overriding 'tentative' to false when
given a concept-name, and not also when given a concept-id that has an empty
argument list.

PR c++/98394
PR c++/85846

gcc/cp/ChangeLog:

* parser.c (cp_parser_placeholder_type_specifier): Declare
static.  Don't override tentative to false when tmpl is a
concept-id with empty argument list.  Don't emit a "does not
constrain a type" error when tentative.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-pr98394.C: New test.
* g++.dg/cpp2a/concepts-pr85846.C: New test.

2 years agoc++: unexpanded pack in var tmpl partial spec [PR100652]
Patrick Palka [Tue, 9 Nov 2021 14:09:12 +0000 (09:09 -0500)]
c++: unexpanded pack in var tmpl partial spec [PR100652]

Here we're failing to spot a bare parameter pack appearing in the argument
list of a variable template partial specialization because we only look for
them within the decl's TREE_TYPE, which is sufficient for class templates
but not for variable templates.

PR c++/100652

gcc/cp/ChangeLog:

* pt.c (push_template_decl): Check for bare parameter packs in
the argument list of a variable template partial specialization.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1y/var-templ69.C: New test.

2 years agoDefine m_rtx_reuse_manager only if not GENERATOR_FILE.
Martin Liska [Tue, 9 Nov 2021 13:42:26 +0000 (14:42 +0100)]
Define m_rtx_reuse_manager only if not GENERATOR_FILE.

gcc/ChangeLog:

* print-rtl.c (rtx_writer::rtx_writer): Make the compilation
conditional based on
* print-rtl.h (class rtx_writer): Likewise.

2 years agoGeneralize 'gcc/input.h:struct location_hash'
Thomas Schwinge [Tue, 31 Aug 2021 21:30:25 +0000 (23:30 +0200)]
Generalize 'gcc/input.h:struct location_hash'

This is currently only used here ('gcc/input.h:class string_concat_db'), but is
actually generally useful, so advertize it as such.

Per the rationale given, we may use 'BUILTINS_LOCATION' as spare value for
'Deleted', in addition to the existing use of 'UNKNOWN_LOCATION' as spare value
for 'Empty'.

gcc/
* input.h (location_hash): Use 'BUILTINS_LOCATION' as spare value
for 'Deleted'.  Turn into a '#define'.

2 years agoCleanup path solver dumps.
Aldy Hernandez [Tue, 9 Nov 2021 09:43:25 +0000 (10:43 +0100)]
Cleanup path solver dumps.

This patch makes the path solver dumps a bit more consistent.

Tested on x86-64 Linux.

gcc/ChangeLog:

* gimple-range-path.cc (path_range_query::dump): Clean up.
(path_range_query::compute_ranges): Same.
* value-relation.cc (path_oracle::dump): Same.

2 years agoRemove TDF_THREADING flag in favor of param.
Aldy Hernandez [Tue, 9 Nov 2021 09:14:25 +0000 (10:14 +0100)]
Remove TDF_THREADING flag in favor of param.

I am returning a TDF_* flag to the queue of available entries as I am
unconvinced that we need to burn an entire flag for internal debugging
constructs, especially since we seem to be running out of them.

I've added a --param=threader-debug entry similar to the one we use for
ranger debugging.  Currently this only affects the backward threader,
but since the DOM threader is an outlier and on the chopping block, I
avoided using the "backward" name.

Tested on x86-64 Linux.

gcc/ChangeLog:

* dumpfile.c (dump_options): Remove TDF_THREADING entry.
* dumpfile.h (enum dump_flag): Remove TDF_THREADING and adjust
remaining entries.
* flag-types.h (enum threader_debug): New.
* gimple-range-path.cc (DEBUG_SOLVER): Use param_threader_debug.
* params.opt: Add entry for --param=threader-debug=.

2 years agoGet rid of infinite recursion for 'typedef' used with GTY-marked 'gcc/diagnostic...
Thomas Schwinge [Tue, 9 Nov 2021 09:55:15 +0000 (10:55 +0100)]
Get rid of infinite recursion for 'typedef' used with GTY-marked 'gcc/diagnostic-spec.h:nowarn_map' [PR101204, PR103157]

Reproduced with clang version 10.0.0-4ubuntu1:

    gtype-desc.c:11333:1: warning: all paths through this function will call itself [-Winfinite-recursion]

... as well as some GCC's '-O2 -fdump-tree-optimized':

    void gt_pch_nx(int_hash<unsigned int, 0u, 4294967295u>*, gt_pointer_operator, void*) ([...])
    {
      <bb 2>:

      <bb 3>:
      goto <bb 3>;

    }

That three-arguments 'gt_pch_nx' function as well as two one-argument
'gt_ggc_mx', 'gt_pch_nx' functions now turn empty:

    [...]
     void
    -gt_ggc_mx (int_hash<location_t,0,UINT_MAX>& x_r ATTRIBUTE_UNUSED)
    +gt_ggc_mx (struct xint_hash_t& x_r ATTRIBUTE_UNUSED)
     {
    -  int_hash<location_t,0,UINT_MAX> * ATTRIBUTE_UNUSED x = &x_r;
    -  gt_ggc_mx (&((*x)));
    +  struct xint_hash_t * ATTRIBUTE_UNUSED x = &x_r;
     }
    [...]
     void
    -gt_pch_nx (int_hash<location_t,0,UINT_MAX>& x_r ATTRIBUTE_UNUSED)
    +gt_pch_nx (struct xint_hash_t& x_r ATTRIBUTE_UNUSED)
     {
    -  int_hash<location_t,0,UINT_MAX> * ATTRIBUTE_UNUSED x = &x_r;
    -  gt_pch_nx (&((*x)));
    +  struct xint_hash_t * ATTRIBUTE_UNUSED x = &x_r;
     }
    [...]
     void
    -gt_pch_nx (int_hash<location_t,0,UINT_MAX>* x ATTRIBUTE_UNUSED,
    +gt_pch_nx (struct xint_hash_t* x ATTRIBUTE_UNUSED,
            ATTRIBUTE_UNUSED gt_pointer_operator op,
            ATTRIBUTE_UNUSED void *cookie)
     {
    -    gt_pch_nx (&((*x)), op, cookie);
     }
    [...]

gcc/
PR middle-end/101204
PR other/103157
* diagnostic-spec.h (typedef xint_hash_t): Turn into...
(struct xint_hash_t): ... this.
* doc/gty.texi: Update.

2 years agoarm: add armv9-a architecture to -march
Przemyslaw Wirkus [Tue, 9 Nov 2021 09:40:05 +0000 (09:40 +0000)]
arm: add armv9-a architecture to -march

In this patch:
+ Add `armv9-a` to -march.
+ Update multilib with armv9-a and armv9-a+simd.

gcc/ChangeLog:

* config/arm/arm-cpus.in (armv9): New define.
(ARMv9a): New group.
(armv9-a): New arch definition.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/arm.h (BASE_ARCH_9A): New arch enum value.
* config/arm/t-aprofile: Added armv9-a and armv9+simd.
* config/arm/t-arm-elf: Added arm9-a, v9_fps and all_v9_archs
to MULTILIB_MATCHES.
* config/arm/t-multilib: Added v9_a_nosimd_variants and
v9_a_simd_variants to MULTILIB_MATCHES.
* doc/invoke.texi: Update docs.

gcc/testsuite/ChangeLog:

* gcc.target/arm/multilib.exp: Update test with armv9-a entries.
* lib/target-supports.exp (v9a): Add new armflag.
(__ARM_ARCH_9A__): Add new armdef.

2 years agoipa: Fix segfault when remapping debug_binds with expressions (PR 103132)
Martin Jambor [Tue, 9 Nov 2021 10:32:20 +0000 (11:32 +0100)]
ipa: Fix segfault when remapping debug_binds with expressions (PR 103132)

My initial implementation of the method
ipa_param_body_adjustments::remap_with_debug_expressions was based on
the assumption that if it was asked to remap an expression (as opposed
to a simple SSA_NAME), the expression would not contain an SSA_NAME
operand which is to be debug-reset.  While that is true for when
called from ipa_param_body_adjustments::prepare_debug_expressions, it
turns out it is not true when invoked from remap_gimple_stmt in
tree-inline.c.  This patch adds a simple logic to handle such cases
and simply map the entire value to NULL_TREE in those cases.

gcc/ChangeLog:

2021-11-08  Martin Jambor  <mjambor@suse.cz>

PR ipa/103132
* ipa-param-manipulation.c (replace_with_mapped_expr): Early
return with error_mark_mode when part of expression is mapped to
NULL.
(ipa_param_body_adjustments::remap_with_debug_expressions): Set
mapped value to NULL if walk_tree returns error_mark_mode.

gcc/testsuite/ChangeLog:

2021-11-08  Martin Jambor  <mjambor@suse.cz>

PR ipa/103132
* gcc.dg/ipa/pr103132.c: New test.

2 years ago[Ada] Fix Codepeer warning
Ghjuvan Lacambre [Tue, 2 Nov 2021 10:32:24 +0000 (11:32 +0100)]
[Ada] Fix Codepeer warning

gcc/ada/

* freeze.adb (Check_Inherited_Conditions): Initialize
Ifaces_List.

2 years ago[Ada] Tidy up implementation of Has_Compatible_Type
Eric Botcazou [Wed, 27 Oct 2021 21:51:07 +0000 (23:51 +0200)]
[Ada] Tidy up implementation of Has_Compatible_Type

gcc/ada/

* sem_ch4.adb (Analyze_Membership_Op) <Find_Interpretation>: Handle
both overloaded and non-overloaded cases.
<Try_One_Interp>: Do a reversed call to Covers if the outcome of the
call to Has_Compatible_Type is false.
Simplify implementation after change to Find_Interpretation.
(Analyze_User_Defined_Binary_Op): Be prepared for previous errors.
(Find_Comparison_Types) <Try_One_Interp>: Do a reversed call to
Covers if the outcome of the call to Has_Compatible_Type is false.
(Find_Equality_Types) <Try_One_Interp>: Likewise.
* sem_type.adb (Has_Compatible_Type): Remove the reversed calls to
Covers.  Add explicit return on all paths.

2 years ago[Ada] Invalid GPR_PROJECT_PATH_FILE confuses gnatls
Justin Squirek [Fri, 29 Oct 2021 19:42:28 +0000 (15:42 -0400)]
[Ada] Invalid GPR_PROJECT_PATH_FILE confuses gnatls

gcc/ada/

* gnatls.adb (Initialize_Default_Project_Path): Remove early
abort on invalid path.

2 years ago[Ada] Print Storage_Pool and Procedure_To_Call fields
Eric Botcazou [Mon, 1 Nov 2021 09:30:51 +0000 (10:30 +0100)]
[Ada] Print Storage_Pool and Procedure_To_Call fields

gcc/ada/

* sprint.adb (Sprint_Node_Actual) <N_Allocator>: Also print the
Procedure_To_Call field if it is present.
<N_Extended_Return_Statement>: Also print the Storage_Pool and
Procedure_To_Call fields if they are present.
<N_Free_Statement>: Likewise.
<N_Simple_Return_Statement>: Likewise.

2 years ago[Ada] Do not indicate a pending abort if the task is already aborting
Patrick Bernardi [Thu, 28 Oct 2021 22:05:16 +0000 (18:05 -0400)]
[Ada] Do not indicate a pending abort if the task is already aborting

gcc/ada/

* libgnarl/s-tasini.adb (Check_Abort_Status): Don't return 1 if
the task is aborting.
* libgnarl/s-tasini.ads (Check_Abort_Status): Update comment.

2 years ago[Ada] RTEMS: use atomic primitive packages on aarch64
Patrick Bernardi [Thu, 28 Oct 2021 19:05:17 +0000 (15:05 -0400)]
[Ada] RTEMS: use atomic primitive packages on aarch64

gcc/ada/

* Makefile.rtl: Add ATOMICS_TARGET_PAIRS and
ATOMICS_BUILTINS_TARGET_PAIRS to LIBGNAT_TARGET_PAIRS for
aarch64-rtems.

2 years ago[Ada] Hang on compilation of unit with type extension in body
Justin Squirek [Sat, 30 Oct 2021 03:43:38 +0000 (23:43 -0400)]
[Ada] Hang on compilation of unit with type extension in body

gcc/ada/

* exp_util.adb (Ancestor_Primitive): Prevent return of an
subprogram alias when the ancestor primitive of the alias is the
same as Subp.

2 years ago[Ada] Crash on expansion of tagged membership test
Justin Squirek [Fri, 29 Oct 2021 20:40:17 +0000 (16:40 -0400)]
[Ada] Crash on expansion of tagged membership test

gcc/ada/

* exp_ch4.adb (Tagged_Membership): Use corresponding record type
when expanding a tagged membership test on protected types.

2 years ago[Ada] Improve integration of strub with type systems
Alexandre Oliva [Wed, 27 Oct 2021 21:26:27 +0000 (18:26 -0300)]
[Ada] Improve integration of strub with type systems

gcc/ada/

* strub.adb, strub.ads: New files.
* exp_attr.adb (Access_Cases): Copy strub mode to subprogram type.
* exp_disp.adb (Expand_Dispatching_Call): Likewise.
* freeze.adb (Check_Inherited_Conditions): Check that strub modes
match overridden subprograms and interfaces.
(Freeze_All): Renaming declarations too.
* sem_attr.adb (Resolve_Attribute): Reject 'Access to
strub-annotated data object.
* sem_ch3.adb (Derive_Subprogram): Copy strub mode to
inherited subprogram.
* sem_prag.adb (Analyze_Pragma): Propagate Strub Machine_Attribute
from access-to-subprogram to subprogram type when required,
but not from access-to-data to data type.  Mark the entity that
got the pragma as having a gigi rep item.
* sem_res.adb (Resolve): Reject implicit conversions that
would change strub modes.
(Resolve_Type_Conversions): Reject checked conversions
between incompatible strub modes.
* doc/gnat_rm/security_hardening_features.rst: Update.
* gnat_rm.texi: Regenerate.
* libgnat/a-except.ads (Raise_Exception): Revert strub-callable
annotation in public subprogram.
* libgnat/s-arit128.ads (Multiply_With_Ovflo_Check128): Likewise.
* libgnat/s-arit64.ads (Multiply_With_Ovflo_Check64): Likewise.
* libgnat/s-secsta.ads (SS_Allocate): Likewise.
(SS_Mark, SS_Release): Likewise.
* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add ada/strub.o.

2 years ago[Ada] Initialize Current_Source_Unit
Etienne Servais [Fri, 29 Oct 2021 10:32:11 +0000 (12:32 +0200)]
[Ada] Initialize Current_Source_Unit

gcc/ada/

* sinput.ads: Initialize Current_Source_Unit to No_Unit.

2 years ago[Ada] Use atomics in runtime on ARM and Aarch64 VxWorks
Piotr Trojanek [Wed, 27 Oct 2021 11:33:53 +0000 (13:33 +0200)]
[Ada] Use atomics in runtime on ARM and Aarch64 VxWorks

gcc/ada/

* Makefile.rtl (ARM and Aarch64 VxWorks): Use atomic variants of
runtime units.
* libgnat/a-strunb__shared.ads: Mention AARCH64 and ARM as
supported.
* libgnat/s-atocou.ads: Likewise.

2 years ago[Ada] Accessibility fix
Ghjuvan Lacambre [Wed, 27 Oct 2021 11:26:38 +0000 (13:26 +0200)]
[Ada] Accessibility fix

gcc/ada/

* sem_util.adb (Accessibility_Level): Use init_proc_level_formal
instead of computing a new accessibility level from Scope_Depth
(E).

2 years ago[Ada] Add gcc specs with vxworks7 base addresses for cert
Johannes Kliemann [Mon, 25 Oct 2021 13:53:59 +0000 (13:53 +0000)]
[Ada] Add gcc specs with vxworks7 base addresses for cert

gcc/ada/

* vxworks7-cert-rtp-link.spec: Replace the definition of
__wrs_rtp_base with the base_link spec.
* vxworks7-cert-rtp-base-link.spec: Add base_link spec with
__wrs_rtp_base definition for all architectures.
* vxworks7-cert-rtp-base-link__ppc64.spec: Add base_link spec
with __wrs_rtp_base definition for ppc64.
* vxworks7-cert-rtp-base-link__x86.spec: Add base_link spec with
__wrs_rtp_base definition for x86.
* vxworks7-cert-rtp-base-link__x86_64.spec: Add base_link spec
with __wrs_rtp_base definition for x86_64.

2 years ago[Ada] Cleanup copying of parameter lists
Piotr Trojanek [Wed, 27 Oct 2021 18:58:37 +0000 (20:58 +0200)]
[Ada] Cleanup copying of parameter lists

gcc/ada/

* sem_util.adb (Copy_Parameter_List): Refactor to remove
repeated calls to First_Formal.

2 years ago[Ada] Cleanup building of renamed equality
Piotr Trojanek [Wed, 27 Oct 2021 18:43:24 +0000 (20:43 +0200)]
[Ada] Cleanup building of renamed equality

gcc/ada/

* exp_ch8.adb (Build_Body_For_Renaming): Remove unnecessary
calls to Sloc; set Handled_Statement_Sequence when building
subprogram body; whitespace cleanup.

2 years ago[Ada] Refine type in expansion of array equality
Piotr Trojanek [Wed, 27 Oct 2021 15:32:52 +0000 (17:32 +0200)]
[Ada] Refine type in expansion of array equality

gcc/ada/

* exp_ch4.adb (Handle_One_Dimension): Parameter N must be always
positive, because it is translated into expression of 'First and
'Last.

2 years ago[Ada] Simplify building of entity occurrences
Piotr Trojanek [Wed, 27 Oct 2021 14:34:20 +0000 (16:34 +0200)]
[Ada] Simplify building of entity occurrences

gcc/ada/

* tbuild.adb (New_Occurrence_Of): Simplify by reusing
Make_Identifier.

2 years ago[Ada] Return a valid value when handling Constraint_Error
Etienne Servais [Tue, 26 Oct 2021 16:08:47 +0000 (18:08 +0200)]
[Ada] Return a valid value when handling Constraint_Error

gcc/ada/

* scng.adb (Set_Start_Column): Return Column_Number'Last when
handling Constraint_Error. Plus reformat a strangely 7 level if
loop.

2 years ago[Ada] Simplify expansion of array equality
Piotr Trojanek [Tue, 26 Oct 2021 16:05:43 +0000 (18:05 +0200)]
[Ada] Simplify expansion of array equality

gcc/ada/

* exp_ch4.adb (Test_Empty_Arrays): Simplify with Evolve_Or_Else;
remove unnecessary call to Relocate_Node.
(Test_Lengths_Correspond): Likewise.

2 years ago[Ada] Reference in Unbounded_String is almost never null
Piotr Trojanek [Wed, 27 Oct 2021 08:33:32 +0000 (10:33 +0200)]
[Ada] Reference in Unbounded_String is almost never null

gcc/ada/

* libgnat/a-strunb.adb (Deallocate): Rename Reference_Copy to
Old, to make the code similar to other routines in this package.
(Realloc_For_Chunk): Use a temporary, deallocate the previous
string using a null-allowing copy of the string reference.

2 years ago[Ada] sem_util.adb: fix typos in Accessibility_Level docs
Ghjuvan Lacambre [Wed, 27 Oct 2021 08:26:00 +0000 (10:26 +0200)]
[Ada] sem_util.adb: fix typos in Accessibility_Level docs

gcc/ada/

* sem_util.adb (Accessibility_Level): Fix typos.

2 years ago[Ada] Document the SuSE kernel bug
Tom Tromey [Wed, 6 Oct 2021 20:11:24 +0000 (14:11 -0600)]
[Ada] Document the SuSE kernel bug

gcc/ada/

* doc/gnat_ugn/platform_specific_information.rst: Document the
SuSE kernel bug.
* gnat_ugn.texi: Regenerate.

2 years ago[Ada] Errors on globals in expressions of predicate aspects in generic bodies
Gary Dismukes [Tue, 26 Oct 2021 00:45:50 +0000 (20:45 -0400)]
[Ada] Errors on globals in expressions of predicate aspects in generic bodies

gcc/ada/

* sem_ch13.adb (Freeze_Entity_Checks): Analyze the expression of
a pragma Predicate associated with an aspect at the freeze point
of the type, to ensure that references to globals get saved when
the aspect occurs within a generic body. Also, add
Aspect_Static_Predicate to the choices of the membership test of
the enclosing guard.

2 years ago[Ada] Tune comment about expansion of array equality
Piotr Trojanek [Tue, 26 Oct 2021 15:57:59 +0000 (17:57 +0200)]
[Ada] Tune comment about expansion of array equality

gcc/ada/

* exp_ch4.adb (Arr_Attr): Refine type of the parameter from Int
to Pos; refine name of the parameter from Num to Dim; fix
reference to "Expr" in comment.

2 years ago[Ada] Add missing regular expression syntax error check
Steve Baird [Thu, 21 Oct 2021 17:47:06 +0000 (10:47 -0700)]
[Ada] Add missing regular expression syntax error check

gcc/ada/

* libgnat/s-regexp.adb (Compile.Check_Well_Formed_Patern): When
a "|" operator is encountered in a pattern, check that it is not
the last character of the pattern.

2 years ago[Ada] Complete support for prefixed call on subtypes/derived types
Yannick Moy [Tue, 26 Oct 2021 10:21:40 +0000 (12:21 +0200)]
[Ada] Complete support for prefixed call on subtypes/derived types

gcc/ada/

* sem_ch3.adb (Analyze_Subtype_Declaration,
Derived_Type_Declaration): Initialize list of primitive
operations when Extensions_Allowed.

2 years ago[Ada] Fix detection of array aggregates with single others associations
Piotr Trojanek [Mon, 25 Oct 2021 19:15:58 +0000 (21:15 +0200)]
[Ada] Fix detection of array aggregates with single others associations

gcc/ada/

* checks.adb (Apply_Constraint_Check): Guard against calling
Choices when the first association in an array aggregate is a
N_Iterated_Component_Association node.

2 years ago[Ada] Fix support for prefixed call with incomplete type declarations
Yannick Moy [Mon, 25 Oct 2021 10:48:22 +0000 (12:48 +0200)]
[Ada] Fix support for prefixed call with incomplete type declarations

gcc/ada/

* sem_ch3.adb (Analyze_Incomplete_Type_Decl): Add the missing
initialization.

2 years ago[Ada] Guard against illegal items in Global but not Depends
Piotr Trojanek [Mon, 25 Oct 2021 14:33:24 +0000 (16:33 +0200)]
[Ada] Guard against illegal items in Global but not Depends

gcc/ada/

* sem_prag.adb (Check_Usage): Guard against calling Usage_Error
with illegal Item_Id. The intention to do this was already
described in the comment but not implemented.

2 years ago[Ada] Build activation chain for BIP only when needed
Etienne Servais [Wed, 22 Sep 2021 15:20:27 +0000 (17:20 +0200)]
[Ada] Build activation chain for BIP only when needed

gcc/ada/

* exp_ch6.adb (Expand_Actuals): Add a condition to check for the
possibility of task.

2 years agoConvert strlen pass from evrp to ranger.
Aldy Hernandez [Fri, 8 Oct 2021 13:54:23 +0000 (15:54 +0200)]
Convert strlen pass from evrp to ranger.

The following patch converts the strlen pass from evrp to ranger,
leaving DOM as the last remaining user.

No additional cleanups have been done.  For example, the strlen pass
still has uses of VR_ANTI_RANGE, and the sprintf still passes around
pairs of integers instead of using a proper range.  Fixing this
could further improve these passes.

Basically the entire patch is just adjusting the calls to range_of_expr
to include context.  The previous context of si->stmt was mostly
empty, so not really useful ;-).

With ranger we are now able to remove the range calculation from
before_dom_children entirely.  Just working with the ranger on-demand
catches all the strlen and sprintf testcases with the exception of
builtin-sprintf-warn-22.c which is due to a limitation of the sprintf
code.  I have XFAILed the test and documented what the problem is.

On a positive note, these changes found two possible sprintf overflow
bugs in the C++ and Fortran front-ends which I have fixed below.

Tested on x86-64 Linux.

gcc/ChangeLog:

* tree-ssa-strlen.c (compare_nonzero_chars): Pass statement
context to ranger.
(get_addr_stridx): Same.
(get_stridx): Same.
(get_range_strlen_dynamic): Same.
(handle_builtin_strlen): Same.
(handle_builtin_strchr): Same.
(handle_builtin_strcpy): Same.
(maybe_diag_stxncpy_trunc): Same.
(handle_builtin_stxncpy_strncat): Same.
(handle_builtin_memcpy): Same.
(handle_builtin_strcat): Same.
(handle_alloc_call): Same.
(handle_builtin_memset): Same.
(handle_builtin_string_cmp): Same.
(handle_pointer_plus): Same.
(count_nonzero_bytes_addr): Same.
(count_nonzero_bytes): Same.
(handle_store): Same.
(fold_strstr_to_strncmp): Same.
(handle_integral_assign): Same.
(check_and_optimize_stmt): Same.
(class strlen_dom_walker): Replace evrp with ranger.
(strlen_dom_walker::before_dom_children): Remove evrp.
(strlen_dom_walker::after_dom_children): Remove evrp.
* gimple-ssa-warn-access.cc (maybe_check_access_sizes):
Restrict sprintf output.

gcc/cp/ChangeLog:

* ptree.c (cxx_print_xnode): Add more space to pfx array.

gcc/fortran/ChangeLog:

* misc.c (gfc_dummy_typename): Make sure ts->kind is
non-negative.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/builtin-sprintf-warn-22.c: XFAIL.

2 years agolibstdc++: only define _GLIBCXX_HAVE_TLS for VxWorks >= 6.6
Rasmus Villemoes [Fri, 5 Nov 2021 14:37:33 +0000 (15:37 +0100)]
libstdc++: only define _GLIBCXX_HAVE_TLS for VxWorks >= 6.6

According to
https://gcc.gnu.org/legacy-ml/gcc-patches/2008-03/msg01698.html, the
TLS support, including the __tls_lookup function, was added to VxWorks
in 6.6.

It certainly doesn't exist on our VxWorks 5 platform, but the fallback
code in eh_globals.cc using __gthread_key_create() etc. used to work
just fine.

libstdc++-v3/ChangeLog:

* config/os/vxworks/os_defines.h (_GLIBCXX_HAVE_TLS): Only
define for VxWorks >= 6.6.

2 years agoFix clang -Wcast-qual warning.
Martin Liska [Tue, 9 Nov 2021 08:46:09 +0000 (09:46 +0100)]
Fix clang -Wcast-qual warning.

gcc/ChangeLog:

* genconditions.c (write_one_condition): Add const qualifier
to pointer casting.

2 years agoMinor optimization of variable bit testing
Jeff Law [Tue, 9 Nov 2021 04:23:34 +0000 (23:23 -0500)]
Minor optimization of variable bit testing

gcc/
* match.pd: New pattern to simplify (1 << n) & M ==/!= 0 for M
being a power of 2.

gcc/testsuite
* gcc.dg/tree-ssa/bittest.c: New test

2 years agoDaily bump.
GCC Administrator [Tue, 9 Nov 2021 00:16:21 +0000 (00:16 +0000)]
Daily bump.

2 years agors6000: Add escape-newline support for builtins files
Bill Schmidt [Mon, 8 Nov 2021 21:08:59 +0000 (15:08 -0600)]
rs6000: Add escape-newline support for builtins files

2021-11-08  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-builtin-new.def (VEC_INIT_V16QI): Use
escape-newline support.
(VEC_INIT_V4SI): Likewise.
(VEC_INIT_V8HI): Likewise.
(PACK_V1TI): Likewise.
(DIVDEU): Likewise.
(VFIRSTMISMATCHOREOSINDEX_V16QI): Likewise.
(VFIRSTMISMATCHOREOSINDEX_V8HI): Likewise.
(VFIRSTMISMATCHOREOSINDEX_V4SI): Likewise.
(CMPRB2): Likewise.
(VSTDCP): Likewise.
(VSIEDP): Likewise.
(FMAF128_ODD): Likewise.
(VSCEQPUO): Likewise.
(VSIEQP): Likewise.
(VSIEQPF): Likewise.
(VSTDCQP): Likewise.
(PACK_TD): Likewise.
(TABORTDC): Likewise.
(TABORTDCI): Likewise.
(SE_LXVRBX): Likewise.
(SE_LXVRHX): Likewise.
(SE_LXVRWX): Likewise.
(SE_LXVRDX): Likewise.
(VREPLACE_UN_UV2DI): Likewise.
(VREPLACE_UN_UV4SI): Likewise.
(VREPLACE_UN_V2DI): Likewise.
(VREPLACE_ELT_UV2DI): Likewise.
(VREPLACE_ELT_V2DI): Likewise.
(ZE_LXVRBX): Likewise.
(ZE_LXVRHX): Likewise.
(ZE_LXVRWX): Likewise.
(ZE_LXVRDX): Likewise.
(CFUGED): Likewise.
(CNTLZDM): Likewise.
(CNTTZDM): Likewise.
(PDEPD): Likewise.
(PEXTD): Likewise.
(PMXVBF16GER2): Likewise.
(PMXVBF16GER2_INTERNAL): Likewise.
(PMXVBF16GER2NN): Likewise.
(PMXVBF16GER2NN_INTERNAL): Likewise.
(PMXVBF16GER2NP): Likewise.
(PMXVBF16GER2NP_INTERNAL): Likewise.
(PMXVBF16GER2PN): Likewise.
(PMXVBF16GER2PN_INTERNAL): Likewise.
(PMXVBF16GER2PP): Likewise.
(PMXVBF16GER2PP_INTERNAL): Likewise.
(PMXVF16GER2): Likewise.
(PMXVF16GER2_INTERNAL): Likewise.
(PMXVF16GER2NN): Likewise.
(PMXVF16GER2NN_INTERNAL): Likewise.
(PMXVF16GER2NP): Likewise.
(PMXVF16GER2NP_INTERNAL): Likewise.
(PMXVF16GER2PN): Likewise.
(PMXVF16GER2PN_INTERNAL): Likewise.
(PMXVF16GER2PP): Likewise.
(PMXVF16GER2PP_INTERNAL): Likewise.
(PMXVF32GER_INTERNAL): Likewise.
(PMXVF32GERNN): Likewise.
(PMXVF32GERNN_INTERNAL): Likewise.
(PMXVF32GERNP): Likewise.
(PMXVF32GERNP_INTERNAL): Likewise.
(PMXVF32GERPN): Likewise.
(PMXVF32GERPN_INTERNAL): Likewise.
(PMXVF32GERPP): Likewise.
(PMXVF32GERPP_INTERNAL): Likewise.
(PMXVF64GER): Likewise.
(PMXVF64GER_INTERNAL): Likewise.
(PMXVF64GERNN): Likewise.
(PMXVF64GERNN_INTERNAL): Likewise.
(PMXVF64GERNP): Likewise.
(PMXVF64GERNP_INTERNAL): Likewise.
(PMXVF64GERPN): Likewise.
(PMXVF64GERPN_INTERNAL): Likewise.
(PMXVF64GERPP): Likewise.
(PMXVF64GERPP_INTERNAL): Likewise.
(PMXVI16GER2): Likewise.
(PMXVI16GER2_INTERNAL): Likewise.
(PMXVI16GER2PP): Likewise.
(PMXVI16GER2PP_INTERNAL): Likewise.
(PMXVI16GER2S): Likewise.
(PMXVI16GER2S_INTERNAL): Likewise.
(PMXVI16GER2SPP): Likewise.
(PMXVI16GER2SPP_INTERNAL): Likewise.
(PMXVI4GER8): Likewise.
(PMXVI4GER8_INTERNAL): Likewise.
(PMXVI4GER8PP): Likewise.
(PMXVI4GER8PP_INTERNAL): Likewise.
(PMXVI8GER4): Likewise.
(PMXVI8GER4_INTERNAL): Likewise.
(PMXVI8GER4PP): Likewise.
(PMXVI8GER4PP_INTERNAL): Likewise.
(PMXVI8GER4SPP): Likewise.
(PMXVI8GER4SPP_INTERNAL): Likewise.
* config/rs6000/rs6000-gen-builtins.c (MAXLINES): New macro.
(linebuf): Increase size.
(lines): New variable.
(lastline): Likewise.
(real_line_pos): New function.
(diag): Change signature.
(bif_diag): Change signature; support escape-newline handling.
(ovld_diag): Likewise.
(fatal): Move earlier.
(consume_whitespace): Adjust diag call.
(advance_line): Add escape-newline handling; call fatal.
(safe_inc_pos): Adjust diag call.
(match_identifier): Likewise.
(match_integer): Likewise.
(match_to_right_bracket): Call fatal instead of diag; adjust diag
call.
(match_basetype): Adjust diag calls.
(match_bracketed_pair): Likewise.
(match_const_restriction): Likewise.
(match_type): Likewise.
(parse_args): Likewise.
(parse_bif_attrs): Likewise.
(complete_vector_type): Likewise.
(complete_base_type): Likewise.
(parse_prototype): Likewise.
(parse_bif_entry): Likewise.
(parse_bif_stanza): Likewise.
(parse_ovld_entry): Likewise.
(parse_ovld_stanza): Likewise.
(main): Allocate buffers for lines[].

2 years agoFix couple of issues in large PIC model on x86-64/VxWorks
Eric Botcazou [Mon, 8 Nov 2021 21:09:16 +0000 (22:09 +0100)]
Fix couple of issues in large PIC model on x86-64/VxWorks

The first issue is that the !gotoff_operand path of legitimize_pic_address
in the large PIC model does not make use of REG when it is available, which
breaks for thunks because new pseudo-registers can no longer be created.
And the second issue is that the system compiler (LLVM) generates @GOTOFF
in large model even for RTP, so we do the same.

gcc/
* config/i386/i386.c (legitimize_pic_address): Adjust comment and
use the REG argument on the CM_LARGE_PIC code path as well.
* config/i386/predicates.md (gotoff_operand): Do not treat VxWorks
specially with the large code models.

2 years agoRemove workaround allowing interposition of nested functions.
Jan Hubicka [Mon, 8 Nov 2021 17:58:03 +0000 (18:58 +0100)]
Remove workaround allowing interposition of nested functions.

* gimple.c (gimple_call_static_chain_flags): Revert the workaround
allowing interposition since issues with binds_to_local_def were
hopefully solved.

2 years agoDon't calculate new values when using the private context callback.
Andrew MacLeod [Mon, 8 Nov 2021 14:32:42 +0000 (09:32 -0500)]
Don't calculate new values when using the private context callback.

When using rangers private callback mechanism to provide context
to fold_stmt calls, we are only suppose to be using the cache in read
only mode, never calculate new values.

gcc/
PR tree-optimization/103122
* gimple-range.cc (gimple_ranger::range_of_expr): Request the cache
entry with "calulate new values" set to false.

gcc/testsuite/
* g++.dg/pr103122.C: New.

2 years agoImprove handling of some builtins.
Jan Hubicka [Mon, 8 Nov 2021 17:40:17 +0000 (18:40 +0100)]
Improve handling of some builtins.

For nested functions we output call to builtin_dwarf_cfa which
initializes frame entry used only for debugging.  This however
prevents us from detecting functions containing nested functions
as const/pure or analyze side effects in modref.

builtin_dwarf_cfa is not documented and I wonder if it should be turned to
internal function. But I think we could consider functions using it const even
if in theory one can do things like test the return address and see the
difference between different frame addreses.

While doing so I also noticed that special_buitin_state handles quite few
builtins that are not special cased by ipa-modref.  They do not make
user visible loads/stores and thus I think they shoul dbe annotated by
".c" to make this explicit for both modref and PTA.

Finally I aded dwarf_cfa and similar return_address to list of simple
bulitins since it compiles to simple stack frame load (and we consider
simple other builtins doing so).

* builtins.c (is_simple_builtin): Add builitin_dwarf_cfa
and builtin_return_address.
(builtin_fnspec): Annotate builtin_return,
bulitin_eh_pointer, builtin_eh_filter, builtin_unwind_resume,
builtin_cxa_end_cleanup, builtin_eh_copy_values,
builtin_frame_address, builtin_apply_args,
builtin_asan_before_dynamic_init, builtin_asan_after_dynamic_init,
builtin_prefetch, builtin_dwarf_cfa, builtin_return_addrss
as ".c"
* ipa-pure-const.c (special_builtin_state): Add builtin_dwarf_cfa
and builtin_return_address.

2 years agoMove uncprop after modref
Jan Hubicka [Mon, 8 Nov 2021 17:38:09 +0000 (18:38 +0100)]
Move uncprop after modref

moveS uncprop after modref and pure/const pass and adds a comment that
this pass should alwasy be last since it is only supposed to help PHI lowering.
The pass replaces constant by SSA names that are known to be constant at the
place which hardly helps other passes.

gcc/ChangeLog:

PR tree-optimization/103177
* passes.def: Move uncprop after pure/const and modref.

2 years agoipa: Unshare expresseions before putting them into debug statements (PR 103099, PR...
Martin Jambor [Mon, 8 Nov 2021 16:49:54 +0000 (17:49 +0100)]
ipa: Unshare expresseions before putting them into debug statements (PR 103099, PR 103107)

My recent patch to improve debug experience when there are removed
parameters (by ipa-sra or ipa-split) was not careful to unshare the
expressions that were then put into debug statements, which manifests
itself as PR 103099.  This patch adds unsharing them using
unshare_expr_without_location which is a bit more careful with stripping
locations than what we were doing manually and so also fixes PR 103107.

gcc/ChangeLog:

2021-11-08  Martin Jambor  <mjambor@suse.cz>

PR ipa/103099
PR ipa/103107
* tree-inline.c (remap_gimple_stmt): Unshare the expression without
location before invoking remap_with_debug_expressions on it.
* ipa-param-manipulation.c
(ipa_param_body_adjustments::prepare_debug_expressions): Likewise.

gcc/testsuite/ChangeLog:

2021-11-08  Martin Jambor  <mjambor@suse.cz>

PR ipa/103099
PR ipa/103107
* g++.dg/ipa/pr103099.C: New test.
* gcc.dg/ipa/pr103107.c: Likewise.

2 years agopowerpc: Fix vsx_splat_v4si_di breakage on Power8.
David Edelsohn [Mon, 8 Nov 2021 16:46:47 +0000 (11:46 -0500)]
powerpc: Fix vsx_splat_v4si_di breakage on Power8.

The vsx_splat_v4si_di pattern uses a Power8 and a Power9 instruction.
The final condition of TARGET_DIRECT_MODE_64BIT implicitly requires Power8.
The "we" constraint requires Power9, but also requires 64 bit. Because
the DImode pattern already requires 64 bit mode, this isn't horrible,
but it would be best to remove all uses of "we" constraint.  The
mtvsrws instruction itself does not require 64 bit mode.

This patch reverts the previous change to fix the breakage.

gcc/ChangeLog:

* config/rs6000/vsx.md (vsx_splat_v4si_di): Revert "wa"
constraint to "we".

2 years agoFix spurious valgrind errors in irred loop verification
Richard Biener [Mon, 8 Nov 2021 14:21:08 +0000 (15:21 +0100)]
Fix spurious valgrind errors in irred loop verification

The sbitmap bitmap_{set,clear}_bit changes trigger spurious
uninit value use reportings from valgrind since we now
read the old value before setting/clearing a bit so
verify_loop_structures optimization to not clear the sbitmap is reported.

Fixed by using a temporary BB flag which should also be more
efficient in terms of cache re-use.

2021-11-08  Richard Biener  <rguenther@suse.de>

* cfgloop.c (verify_loop_structure): Use a temporary BB flag
instead of an sbitmap to cache irreducible state.

2 years agopath solver: Avoid recalculating ranges already in the cache.
Aldy Hernandez [Mon, 8 Nov 2021 11:13:33 +0000 (12:13 +0100)]
path solver: Avoid recalculating ranges already in the cache.

The problem here is an ordering issue with a path that starts
with 19->3:

 <bb 3> [local count: 916928331]:
  # value_20 = PHI <value_17(19), value_7(D)(17)>
  # n_27 = PHI <n_16(19), 1(17)>
  n_16 = n_27 + 4;
  value_17 = value_20 / 10000;
  if (value_20 > 42949672959999)
    goto <bb 19>; [89.00%]
  else
    goto <bb 4>; [11.00%]

The problem here is that both value_17 and value_20 are in the set of
imports we must pre-calculate.  The value_17 name occurs first in the
bitmap, so we try to resolve it first, which causes us to recursively
solve the value_20 range.  We do so correctly and put them both in the
cache.  However, when we try to solve value_20 from the bitmap, we
ignore that it already has a cached entry and try to resolve the PHI
with the wrong value of value_17:

  # value_20 = PHI <value_17(19), value_7(D)(17)>

The right thing to do is to avoid recalculating definitions already
solved.

Regstrapped and checked for # threads before and after on x86-64 Linux.

gcc/ChangeLog:

PR tree-optimization/103120
* gimple-range-path.cc (path_range_query::range_defined_in_block):
Bail if there's a cache entry.

gcc/testsuite/ChangeLog:

* gcc.dg/pr103120.c: New test.

2 years agors6000: Miscellaneous uses of rs6000_builtins_decl_x
Bill Schmidt [Mon, 8 Nov 2021 14:34:03 +0000 (08:34 -0600)]
rs6000: Miscellaneous uses of rs6000_builtins_decl_x

There are a few leftover places where we use the old rs6000_builtins_decl
array, but we need to use rs6000_builtins_decl_x instead when the new
builtins infrastructure is in play.

2021-11-08  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000.c (rs6000_builtin_reciprocal): Use
rs6000_builtin_decls_x when appropriate.
(add_condition_to_bb): Likewise.
(rs6000_atomic_assign_expand_fenv): Likewise.

2 years agors6000: Update rs6000_builtin_decl
Bill Schmidt [Mon, 8 Nov 2021 14:17:53 +0000 (08:17 -0600)]
rs6000: Update rs6000_builtin_decl

Create a new version of this function that uses the new infrastructure,
and particularly checks for supported builtins the new way.

2021-11-08  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (rs6000_new_builtin_decl): New function.
(rs6000_builtin_decl): Call it.

2 years agoFix static chain dump.
Martin Liska [Mon, 8 Nov 2021 11:57:08 +0000 (12:57 +0100)]
Fix static chain dump.

gcc/ChangeLog:

* cgraph.c (cgraph_node::dump): Dump it from decl.

2 years agogcov-profile: Fix -fcompare-debug with -fprofile-generate [PR100520]
Martin Liska [Fri, 5 Nov 2021 15:50:06 +0000 (16:50 +0100)]
gcov-profile: Fix -fcompare-debug with -fprofile-generate [PR100520]

PR gcov-profile/100520

gcc/ChangeLog:

* coverage.c (coverage_compute_profile_id): Strip .gk when
compare debug is used.
* system.h (endswith): New function.

gcc/testsuite/ChangeLog:

* gcc.dg/pr100520.c: New test.

2 years agoDump static chain for cgraph_node.
Martin Liska [Mon, 8 Nov 2021 09:27:47 +0000 (10:27 +0100)]
Dump static chain for cgraph_node.

gcc/ChangeLog:

* cgraph.c (cgraph_node::dump): Dump static_chain_decl.

2 years agoFix 'Copyright (C) 2020-21' into '2020-2021'
Thomas Schwinge [Fri, 22 Oct 2021 14:01:54 +0000 (16:01 +0200)]
Fix 'Copyright (C) 2020-21' into '2020-2021'

'contrib/update-copyright.py' currently complains:

    gcc/config/rs6000/rs6000-gen-builtins.c: unrecognised year: 21
    gcc/config/rs6000/rs6000-overload.def: unrecognised year: 21
    gcc/config/rs6000/rbtree.h: unrecognised year: 21
    gcc/config/rs6000/rbtree.c: unrecognised year: 21
    gcc/config/rs6000/rs6000-builtin-new.def: unrecognised year: 21

Fix up files added in commit fa5f8b49e55caf5bb341f5eb6b5ab828b9286425
"rs6000: Red-black tree implementation for balanced tree search",
commit 4a720a9547320699aceda7d2e0b08de5ab40132f
"rs6000: Add initial input files",
commit bd5b625228d545d5ecb35df24f9f094edc95e3fa
"rs6000: Initial create of rs6000-gen-builtins.c".

gcc/
* config/rs6000/rbtree.c: Fix 'Copyright (C) 2020-21' into '2020-2021'
* config/rs6000/rbtree.h: Likewise.
* config/rs6000/rs6000-builtin-new.def: Likewise.
* config/rs6000/rs6000-gen-builtins.c: Likewise.
* config/rs6000/rs6000-overload.def: Likewise.

2 years agoFix 'contrib/update-copyright.py': 'TypeError: exceptions must derive from BaseException'
Thomas Schwinge [Fri, 22 Oct 2021 13:54:42 +0000 (15:54 +0200)]
Fix 'contrib/update-copyright.py': 'TypeError: exceptions must derive from BaseException'

Running 'contrib/update-copyright.py' currently fails:

    [...]
    Traceback (most recent call last):
      File "contrib/update-copyright.py", line 365, in update_copyright
        canon_form = self.canonicalise_years (dir, filename, filter, years)
      File "contrib/update-copyright.py", line 270, in canonicalise_years
        (min_year, max_year) = self.year_range (years)
      File "contrib/update-copyright.py", line 253, in year_range
        year_list = [self.parse_year (year)
      File "contrib/update-copyright.py", line 253, in <listcomp>
        year_list = [self.parse_year (year)
      File "contrib/update-copyright.py", line 250, in parse_year
        raise self.BadYear (string)
    TypeError: exceptions must derive from BaseException

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "contrib/update-copyright.py", line 796, in <module>
        GCCCmdLine().main()
      File "contrib/update-copyright.py", line 527, in main
        self.copyright.process_tree (dir, filter)
      File "contrib/update-copyright.py", line 458, in process_tree
        self.process_file (dir, filename, filter)
      File "contrib/update-copyright.py", line 421, in process_file
        res = self.update_copyright (dir, filename, filter,
      File "contrib/update-copyright.py", line 366, in update_copyright
        except self.BadYear as e:
    TypeError: catching classes that do not inherit from BaseException is not allowed

Fix up for commit 3b25e83536bcd1b2977659a2c6d9f0f9bf2a3152
"Port update-copyright.py to Python3".

contrib/
* update-copyright.py (class BadYear): Derive from 'Exception'.

2 years agoaarch64: LD3/LD4 post-modify costs for struct modes
Richard Sandiford [Mon, 8 Nov 2021 10:36:25 +0000 (10:36 +0000)]
aarch64: LD3/LD4 post-modify costs for struct modes

The LD3/ST3 and LD4/ST4 address cost code had no test coverage (oops).
This patch fixes that and updates it for the new structure modes.
The test only covers Advanced SIMD because SVE doesn't have
post-increment forms.

gcc/
* config/aarch64/aarch64.c (aarch64_ldn_stn_vectors): New function.
(aarch64_address_cost): Use it instead of testing for CImode and
XImode directly.

gcc/testsuite/
* gcc.target/aarch64/neoverse_v1_1.c: New test.

2 years agogenmodes: Define NUM_MODE_* macros
Richard Sandiford [Mon, 8 Nov 2021 10:36:25 +0000 (10:36 +0000)]
genmodes: Define NUM_MODE_* macros

I was working on a patch that needed to calculate the number of
modes in a particular class.  It seemed better to have genmodes
generate this directly rather than do the kind of dance that
expmed.h had.

gcc/
* genmodes.c (emit_insn_modes_h): Define NUM_MODE_* macros.
* expmed.h (NUM_MODE_INT): Delete in favor of genmodes definitions.
(NUM_MODE_PARTIAL_INT, NUM_MODE_VECTOR_INT): Likewise.
* real.h (real_format_for_mode): Use NUM_MODE_FLOAT and
NUM_MODE_DECIMAL_FLOAT.
(REAL_MODE_FORMAT): Likewise.

2 years ago[vect] Consider outside costs earlier for epilogue loops
Andre Vieira [Mon, 8 Nov 2021 09:35:45 +0000 (09:35 +0000)]
[vect] Consider outside costs earlier for epilogue loops

gcc/ChangeLog:

* tree-vect-loop.c (vect_better_loop_vinfo_p): Change how epilogue loop
costs are compared.

2 years agotree-optimization/103102 - fix error in vectorizer refactoring
Richard Biener [Mon, 8 Nov 2021 08:08:12 +0000 (09:08 +0100)]
tree-optimization/103102 - fix error in vectorizer refactoring

This fixes an oversight that caused vectorized epilogues to have
versioning for niters applied.

2021-11-08  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (vect_create_loop_vinfo): Add main_loop_info
parameter.
* tree-vect-loop.c (vect_create_loop_vinfo): Likewise.  Set
LOOP_VINFO_ORIG_LOOP_INFO and conditionalize set of
LOOP_VINFO_NITERS_ASSUMPTIONS.
(vect_analyze_loop_1): Adjust.
(vect_analyze_loop): Move loop constraint setting and
SCEV/niter reset here from vect_create_loop_vinfo to perform
it only once.
(vect_analyze_loop_form): Move dumping of symbolic niters
here from vect_create_loop_vinfo.

2 years agoAdd loads/stores relative to static chain in ipa-modref
Jan Hubicka [Mon, 8 Nov 2021 06:52:45 +0000 (07:52 +0100)]
Add loads/stores relative to static chain in ipa-modref

Adds tracking of accesses relative to static chain into modref
load/stores analysis.  This helps some Fortran benchmarks however it is still
quite limited.  One problem is that we never discover functions with nested
functions as const, pure or not accessing global memory because it contains
__builtin_dward_cfa call which we believe to be non-pure.

Bootstrapped/regtested x86_64-linux.  Plan to commit it tomorrow if there are
no complains and once periodic testers picks today modref changes.

Honza

gcc/ChangeLog:

* ipa-modref-tree.h (enum modref_special_parms): New enum.
(struct modref_access_node): update for special parms.
(struct modref_ref_node): Likewise.
(struct modref_parm_map): Likewise.
(struct modref_tree): Likewise.
* ipa-modref.c (dump_access): Likewise.
(get_access): Detect static chain.
(parm_map_for_arg): Take tree as arg instead of
stmt and index.
(merge_call_side_effects): Compute map for static chain.
(process_fnspec): Update.
(struct escape_point): Remove retslot_arg and static_chain_arg.
(analyze_parms): Update.
(compute_parm_map): Update.
(propagate_unknown_call): Update.
(modref_propagate_in_scc): Update.
(modref_merge_call_site_flags): Update.
(ipa_merge_modref_summary_after_inlining): Update.
* tree-ssa-alias.c (modref_may_conflict): Handle static chain.
* ipa-modref-tree.c (test_merge): Update.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/modref-12.c: New test.

2 years agoDisables gimple folding for VSX_BUILTIN_XVMINDP, VSX_BUILTIN_XVMAXDP,ALTIVEC_BUILTIN_...
Haochen Gui [Tue, 2 Nov 2021 06:09:32 +0000 (14:09 +0800)]
Disables gimple folding for VSX_BUILTIN_XVMINDP, VSX_BUILTIN_XVMAXDP,ALTIVEC_BUILTIN_VMINFP and ALTIVEC_BUILTIN_VMAXFP when fast-math is not set.

gcc/
* config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin): Disable
gimple fold for VSX_BUILTIN_XVMINDP, ALTIVEC_BUILTIN_VMINFP,
VSX_BUILTIN_XVMAXDP, ALTIVEC_BUILTIN_VMAXFP when fast-math is not
set.

gcc/testsuite/
* gcc.target/powerpc/vec-minmax-1.c: New test.
* gcc.target/powerpc/vec-minmax-2.c: Likewise.

2 years agoUpdate documentation for -ftree-loop-vectorize and -ftree-slp-vectorize which are...
liuhongt [Fri, 5 Nov 2021 02:41:22 +0000 (10:41 +0800)]
Update documentation for -ftree-loop-vectorize and -ftree-slp-vectorize which are enabled by default at -02.

gcc/ChangeLog:

PR tree-optimization/103077
* doc/invoke.texi (Options That Control Optimization):
Update documentation for -ftree-loop-vectorize and
-ftree-slp-vectorize which are enabled by default at -02.

2 years agoAdd !HONOR_SNANS to simplifcation: (trunc)copysign((extend)a, (extend)b) to copysign...
liuhongt [Mon, 8 Nov 2021 01:32:17 +0000 (09:32 +0800)]
Add !HONOR_SNANS to simplifcation: (trunc)copysign((extend)a, (extend)b) to copysign (a, b).

> Note that this is not safe with -fsignaling-nans, so needs to be disabled
> for that option (if there isn't already logic somewhere with that effect),
> because the extend will convert a signaling NaN to quiet (raising
> "invalid"), but copysign won't, so this transformation could result in a
> signaling NaN being wrongly returned when the original code would never
> have returned a signaling NaN.
>
> --
> Joseph S. Myers
> joseph@codesourcery.com

gcc/ChangeLog

PR target/102464
* match.pd (Simplifcation (trunc)copysign((extend)a, (extend)b)
to .COPYSIGN (a, b)): Add !HONOR_SNANS.

2 years ago[Gimple] Simplify (trunc)fma ((extend)a, (extend)b, (extend)c) to IFN_FMA (a,b, c).
liuhongt [Mon, 8 Nov 2021 01:19:29 +0000 (09:19 +0800)]
[Gimple] Simplify (trunc)fma ((extend)a, (extend)b, (extend)c) to IFN_FMA (a,b, c).

a, b, c are same type as truncation type and has less precision than
extend type, the optimization is guarded under
flag_unsafe_math_optimizations.

gcc/ChangeLog:
PR target/102464
* match.pd: Simplify
(trunc)fma ((extend)a, (extend)b, (extend)c) to IFN_FMA (a, b,
c) under flag_unsafe_math_optimizations.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr102464-fma.c: New test.

2 years agoDaily bump.
GCC Administrator [Mon, 8 Nov 2021 00:16:17 +0000 (00:16 +0000)]
Daily bump.

2 years agoFix keyword name for co_reduce.
Thomas Koenig [Sun, 7 Nov 2021 14:38:35 +0000 (15:38 +0100)]
Fix keyword name for co_reduce.

gcc/fortran/ChangeLog:

* intrinsic.c (add_subroutines): Change keyword "operator"
to the correct one, "operation".
* check.c (gfc_check_co_reduce): Change OPERATOR to
OPERATION in error messages.
* intrinsic.texi: Change OPERATOR to OPERATION in
documentation.

gcc/testsuite/ChangeLog:

* gfortran.dg/co_reduce_2.f90: New test.
* gfortran.dg/coarray_collectives_14.f90: Change OPERATOR
to OPERATION.
* gfortran.dg/coarray_collectives_16.f90: Likewise.
* gfortran.dg/coarray_collectives_9.f90: Likewise.

Co-authored by: Steve Kargl <steve@gcc.gnu.org>

2 years agoLimit range of modref-max-depth
Jan Hubicka [Sun, 7 Nov 2021 21:58:19 +0000 (22:58 +0100)]
Limit range of modref-max-depth

gcc/ChangeLog:

PR ipa/103055
* params.opt (modref-max-depth): Add range.
(modref-max-adjustments): Fix range.

2 years agoRemove VRP threader.
Aldy Hernandez [Mon, 1 Nov 2021 14:50:38 +0000 (15:50 +0100)]
Remove VRP threader.

Now that things have stabilized, we can remove the old code.

I have left the hybrid threader in tree-ssa-threadedge, even though the
VRP threader was the only user, because we may need it as an interim
step for DOM threading removal.

Tested on x86-64 Linux.

gcc/ChangeLog:

* tree-pass.h (make_pass_vrp_threader): Remove.
* tree-ssa-threadbackward.c
(back_threader_profitability::profitable_path_p): Remove
ASSERT_EXPR references.
* tree-ssa-threadedge.c (jt_state::register_equivs_stmt): Same.
* tree-vrp.c (vrp_folder::simplify_casted_conds): Same.
(execute_vrp): Same.
(class hybrid_threader): Remove.
(hybrid_threader::hybrid_threader): Remove.
(hybrid_threader::~hybrid_threader): Remove.
(hybrid_threader::before_dom_children): Remove.
(hybrid_threader::after_dom_children): Remove.
(execute_vrp_threader): Remove.
(class pass_vrp_threader): Remove.
(make_pass_vrp_threader): Remove.

2 years agoFortran: Diagnose all operands/arguments with constraint violations
Sandra Loosemore [Thu, 4 Nov 2021 22:43:29 +0000 (15:43 -0700)]
Fortran: Diagnose all operands/arguments with constraint violations

04-Nov-2021  Sandra Loosemore <sandra@codesourcery.com>
     Bernhard Reutner-Fischer <aldot@gcc.gnu.org>

 PR fortran/101337

gcc/fortran/ChangeLog:
* interface.c (gfc_compare_actual_formal): Continue checking
all arguments after encountering an error.
* intrinsic.c (do_ts29113_check): Likewise.
* resolve.c (resolve_operator): Continue resolving on op2 error.

gcc/testsuite/ChangeLog:
* gfortran.dg/bessel_3.f90: Expect additional diagnostics from
multiple bad arguments in the call.
* gfortran.dg/pr24823.f: Likewise.
* gfortran.dg/pr39937.f: Likewise.
* gfortran.dg/pr41011.f: Likewise.
* gfortran.dg/pr61318.f90: Likewise.
* gfortran.dg/c-interop/c407b-2.f90: Remove xfails.
* gfortran.dg/c-interop/c535b-2.f90: Likewise.

2 years agoFix inter-procedural EAF flags propagation with respect to !binds_to_current_def_p
Jan Hubicka [Sun, 7 Nov 2021 17:20:45 +0000 (18:20 +0100)]
Fix inter-procedural EAF flags propagation with respect to !binds_to_current_def_p

While proofreading the code for handling EAF flags of !binds_to_current_def_p I
noticed that the interprocedural dataflow actually ignores the flag possibly
introducing wrong code on quite complex interposable functions in non-trivial
recursion cycles (or at ltrans partition boundary).

This patch unifies the flags changes to single place (remove_useless_eaf_flags)
and does extend modref_merge_call_site_flags to do the right thing.

lto-bootstrapped/regtested x86_64-linux.  Plan to commit it today after bit
more testing (firefox/clang build).

gcc/ChangeLog:

* gimple.c (gimple_call_arg_flags): Use interposable_eaf_flags.
(gimple_call_retslot_flags): Likewise.
(gimple_call_static_chain_flags): Likewise.
* ipa-modref.c (remove_useless_eaf_flags): Do not remove everything for
NOVOPS.
(modref_summary::useful_p): Likewise.
(modref_summary_lto::useful_p): Likewise.
(analyze_parms): Do not give up on NOVOPS.
(analyze_function): When dumping report chnages in EAF flags
between IPA and local pass.
(modref_merge_call_site_flags): Compute implicit eaf flags
based on callee ecf_flags and fnspec; if the function does not
bind to current defs use interposable_eaf_flags.
(modref_propagate_flags_in_scc): Update.
* ipa-modref.h (interposable_eaf_flags): New function.

2 years agors6000: Replace the builtin expansion machinery
Bill Schmidt [Sun, 7 Nov 2021 13:56:07 +0000 (07:56 -0600)]
rs6000: Replace the builtin expansion machinery

This patch forms the meat of the improvements for this patch series.
We develop a replacement for rs6000_expand_builtin and its supporting
functions, which are inefficient and difficult to maintain.

Differences between the old and new support in this patch include:
 - Make use of the new builtin data structures, directly looking up
   a function's information rather than searching for the function
   multiple times;
 - Test for enablement of builtins at expand time, to support #pragma
   target changes within a compilation unit;
 - Use the builtin function attributes (e.g., bif_is_cpu) to control
   special handling;
 - Refactor common code into one place; and
 - Provide common error handling in one place for operands that are
   restricted to specific values or ranges.

2021-11-07  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (rs6000_expand_new_builtin): New
forward decl.
(rs6000_invalid_new_builtin): New function.
(rs6000_expand_builtin): Call rs6000_expand_new_builtin.
(rs6000_expand_ldst_mask): New function.
(new_cpu_expand_builtin): Likewise.
(elemrev_icode): Likewise.
(ldv_expand_builtin): Likewise.
(lxvrse_expand_builtin): Likewise.
(lxvrze_expand_builtin): Likewise.
(stv_expand_builtin): Likewise.
(new_mma_expand_builtin): Likewise.
(new_htm_spr_num): Likewise.
(new_htm_expand_builtin): Likewise.
(rs6000_expand_new_builtin): Likewise.
(rs6000_init_builtins): Initialize altivec_builtin_mask_for_load.

2 years agoImplement intra-procedural dataflow in ipa-modref flags propagation.
Jan Hubicka [Sun, 7 Nov 2021 08:35:16 +0000 (09:35 +0100)]
Implement intra-procedural dataflow in ipa-modref flags propagation.

implement the (long promised) intraprocedural dataflow for
propagating eaf flags, so we can handle parameters that participate
in loops in SSA graphs. Typical example are acessors that walk linked
lists, for example.

I implemented dataflow using the standard iteration over BBs in RPO some time
ago, but did not like it becuase it had measurable compile time impact with
very small code quality effect. This is why I kept mainline to do the DFS walk
instead. The reason is that we care about flags of SSA names that corresponds
to parameters and those can be often determined from a small fraction of the
SSA graph so solving dataflow for all SSA names in a function is a waste.

This patch implements dataflow more carefully.  The DFS walk is kept in place to
solve acyclic cases and discover the relevat part of SSA graph into new graph
(which is similar to one used for inter-procedrual dataflow - we only need to
know the edges and if the access is direct or derefernced).  The RPO iterative
dataflow then works on this simplified graph.

This seems to be fast in practice. For GCC linktime we do dataflow for 4881
functions. Out of that 4726 finishes in one iteration, 144 in two and 10 in 3.

Overall 31979 functions are analysed, so we do dataflow only for bit over of
10% of cases.  131123 edges are visited by the solver.  I measured no compile
time impact of this.

gcc/ChangeLog:

* ipa-modref.c (modref_lattice): Add do_dataflow,
changed and propagate_to fields.
(modref_lattice::release): Free propagate_to
(modref_lattice::merge): Do not give up early on unknown
lattice values.
(modref_lattice::merge_deref): Likewise.
(modref_eaf_analysis): Update toplevel comment.
(modref_eaf_analysis::analyze_ssa_name): Record postponned ssa names;
do optimistic dataflow initialization.
(modref_eaf_analysis::merge_with_ssa_name): Build dataflow graph.
(modref_eaf_analysis::propagate): New member function.
(analyze_parms): Update to new API of modref_eaf_analysis.

2 years agoDaily bump.
GCC Administrator [Sun, 7 Nov 2021 00:16:19 +0000 (00:16 +0000)]
Daily bump.