platform/upstream/gcc.git
2 years agoVerify unallocated edge/BB flags are clear
Richard Biener [Fri, 24 Sep 2021 08:13:45 +0000 (10:13 +0200)]
Verify unallocated edge/BB flags are clear

This adds verification that unused auto_{edge,bb}_flag are not
remaining set but correctly cleared by consumers.  The intent
is that those flags can be cheaply used on a smaller IL region
and thus afterwards clearing can be restricted to the same
small region as well.

2021-09-24  Richard Biener  <rguenther@suse.de>

* cfghooks.c (verify_flow_info): Verify unallocated BB and
edge flags are not set.

2 years agoFortran: Improve file-reading error diagnostic [PR55534]
Tobias Burnus [Fri, 24 Sep 2021 07:30:51 +0000 (09:30 +0200)]
Fortran: Improve file-reading error diagnostic [PR55534]

PR fortran/55534

gcc/fortran/ChangeLog:

* scanner.c (load_file): Return void, call (gfc_)fatal_error for
all errors.
(include_line, include_stmt, gfc_new_file): Remove exit call
for failed load_file run.

gcc/testsuite/ChangeLog:

* gfortran.dg/include_9.f90: Add dg-prune-output.
* gfortran.dg/include_23.f90: New test.
* gfortran.dg/include_24.f90: New test.

2 years agoAvoid invalid loop transformations in jump threading registry.
Aldy Hernandez [Thu, 23 Sep 2021 08:59:24 +0000 (10:59 +0200)]
Avoid invalid loop transformations in jump threading registry.

My upcoming improvements to the forward jump threader make it thread
more aggressively.  In investigating some "regressions", I noticed
that it has always allowed threading through empty latches and across
loop boundaries.  As we have discussed recently, this should be avoided
until after loop optimizations have run their course.

Note that this wasn't much of a problem before because DOM/VRP
couldn't find these opportunities, but with a smarter solver, we trip
over them more easily.

Because the forward threader doesn't have an independent localized cost
model like the new threader (profitable_path_p), it is difficult to
catch these things at discovery.  However, we can catch them at
registration time, with the added benefit that all the threaders
(forward and backward) can share the handcuffs.

This patch is an adaptation of what we do in the backward threader, but
it is not meant to catch everything we do there, as some of the
restrictions there are due to limitations of the different block
copiers (for example, the generic copier does not re-use existing
threading paths).

We could ideally remove the now redundant bits in profitable_path_p, but
I would prefer not to for two reasons.  First, the backward threader uses
profitable_path_p as it discovers paths to avoid discovering paths in
unprofitable directions.  Second, I would like to merge all the forward
cost restrictions into the profitability class in the backward threader,
not the other way around.  Alas, that reshuffling will have to wait for
the next release.

As usual, there are quite a few tests that needed adjustments.  It seems
we were quite happily threading improper scenarios.  With most of them,
as can be seen in pr77445-2.c, we're merely shifting the threading to
after loop optimizations.

Tested on x86-64 Linux.

gcc/ChangeLog:

* tree-ssa-threadupdate.c (jt_path_registry::cancel_invalid_paths):
New.
(jt_path_registry::register_jump_thread): Call
cancel_invalid_paths.
* tree-ssa-threadupdate.h (class jt_path_registry): Add
cancel_invalid_paths.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/20030714-2.c: Adjust.
* gcc.dg/tree-ssa/pr66752-3.c: Adjust.
* gcc.dg/tree-ssa/pr77445-2.c: Adjust.
* gcc.dg/tree-ssa/ssa-dom-thread-18.c: Adjust.
* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Adjust.
* gcc.dg/vect/bb-slp-16.c: Adjust.

2 years agoFix value uninitialization in vn_reference_insert_pieces [PR102400]
Feng Xue [Thu, 23 Sep 2021 01:14:33 +0000 (09:14 +0800)]
Fix value uninitialization in vn_reference_insert_pieces [PR102400]

2021-09-23  Feng Xue  <fxue@os.amperecomputing.com>

gcc/
PR tree-optimization/102400
* tree-ssa-sccvn.c (vn_reference_insert_pieces): Initialize
result_vdef to zero value.

2 years agoFix null-pointer dereference in delete_dead_or_redundant_call [PR102451]
Feng Xue [Thu, 23 Sep 2021 00:47:45 +0000 (08:47 +0800)]
Fix null-pointer dereference in delete_dead_or_redundant_call [PR102451]

2021-09-23  Feng Xue  <fxue@os.amperecomputing.com>

gcc/
PR tree-optimization/102451
* tree-ssa-dse.c (delete_dead_or_redundant_call): Record bb of stmt
before removal.

2 years agoAVX512FP16: Support cond_op for HFmode
Hongyu Wang [Wed, 8 Sep 2021 01:42:29 +0000 (09:42 +0800)]
AVX512FP16: Support cond_op for HFmode

gcc/ChangeLog:

* config/i386/sse.md (cond_<insn><mode>): Extend to support
vector HFmodes.
(cond_mul<mode>): Likewise.
(cond_div<mode>): Likewise.
(cond_<code><mode>): Likewise.
(cond_fma<mode>): Likewise.
(cond_fms<mode>): Likewise.
(cond_fnma<mode>): Likewise.
(cond_fnms<mode>): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/i386/cond_op_addsubmuldiv__Float16-1.c: New test.
* gcc.target/i386/cond_op_addsubmuldiv__Float16-2.c: Ditto.
* gcc.target/i386/cond_op_fma__Float16-1.c: Ditto.
* gcc.target/i386/cond_op_fma__Float16-2.c: Ditto.
* gcc.target/i386/cond_op_maxmin__Float16-1.c: Ditto.
* gcc.target/i386/cond_op_maxmin__Float16-2.c: Ditto.

2 years agoDaily bump.
GCC Administrator [Fri, 24 Sep 2021 00:16:23 +0000 (00:16 +0000)]
Daily bump.

2 years agoFortran: Diagnose default-initialized pointer/allocatable dummies
Sandra Loosemore [Thu, 23 Sep 2021 15:03:52 +0000 (08:03 -0700)]
Fortran: Diagnose default-initialized pointer/allocatable dummies

TS29113 changed what was then C516 in the 2010 Fortran standard (now
C1557 in F2018) from disallowing all of pointer, allocatable, and
optional attributes on dummy arguments to BIND(C) functions, to
disallowing only pointer/allocatable with default-initialization.
gfortran was previously failing to diagnose violations of this
constraint.

2021-09-23  Sandra Loosemore  <sandra@codesourcery.com>

PR fortran/101320

gcc/fortran/
* decl.c (gfc_verify_c_interop_param): Handle F2018 C1557,
aka TS29113 C516.

gcc/testsuite/
* gfortran.dg/c-interop/c516.f90: Remove xfails.  Add more
tests.

2 years agoc++: adjust the handling of RID_ATTRIBUTE.
Michel Morin [Tue, 21 Sep 2021 23:04:31 +0000 (08:04 +0900)]
c++: adjust the handling of RID_ATTRIBUTE.

gcc/cp/ChangeLog:

* parser.c (cp_keyword_starts_decl_specifier_p): Do not
handle RID_ATTRIBUTE.
(cp_parser_constructor_declarator_p): Remove now-redundant
checks.
(cp_parser_lambda_declarator_opt): Likewise.

2 years agoc++: add spellcheck suggestions for typedef etc. [PR77565]
Michel Morin [Thu, 16 Sep 2021 14:29:54 +0000 (23:29 +0900)]
c++: add spellcheck suggestions for typedef etc. [PR77565]

cp_keyword_starts_decl_specifier_p misses many keywords that can
start decl-specifiers. This patch adds support for those keywords.

PR c++/77565

gcc/cp/ChangeLog:

* parser.c (cp_keyword_starts_decl_specifier_p): Handle more
decl-specifiers (typedef/inline/cv/explicit/virtual/friend).

gcc/testsuite/ChangeLog:

* g++.dg/spellcheck-pr77565.C: New test.

2 years agoLook for a relation between operands only when possible.
Andrew MacLeod [Thu, 23 Sep 2021 13:32:00 +0000 (09:32 -0400)]
Look for a relation between operands only when possible.

Do not look for a relation between 2 operands if there is no range-ops handler.

gcc/
PR tree-optimization/102463
* gimple-range-fold.cc (fold_using_range::relation_fold_and_or): If
there is no range-ops handler, don't look for a relation.

gcc/testsuite/
* gcc.dg/pr102463.c: New.

2 years agoCreate a ranger-local flag for non-executable edges.
Andrew MacLeod [Wed, 22 Sep 2021 20:58:22 +0000 (16:58 -0400)]
Create a ranger-local flag for non-executable edges.

Instead of repurposing EDGE_EXECUTABLE, ranger creates a local flag and
ultizes it throughout.

* gimple-range-cache.cc (ranger_cache::ranger_cache): Take
non-executable_edge flag as parameter.
* gimple-range-cache.h (ranger_cache): Adjust prototype.
* gimple-range-gori.cc (gori_compute::gori_compute): Take
non-executable_edge flag as parameter.
(gori_compute::outgoing_edge_range_p): Check new flag.
* gimple-range-gori.h (gori_compute): Adjust prototype.
* gimple-range.cc (gimple_ranger::gimple_ranger): Create new flag.
(gimple_ranger::range_on_edge): Check new flag.
* gimple-range.h (gimple_ranger::non_executable_edge_flag): New.
* gimple-ssa-evrp.c (rvrp_folder): Pass ranger flag to simplifer.
(hybrid_folder::hybrid_folder): Set ranger non-executable flag value.
(hybrid_folder::fold_stmt): Set flag value in the simplifer.
* vr-values.c (simplify_using_ranges::set_and_propagate_unexecutable):
Use not_executable flag if provided inmstead of EDGE_EXECUTABLE.
(simplify_using_ranges::simplify_switch_using_ranges): Clear
EDGE_EXECUTABLE like it originally did.
(simplify_using_ranges::cleanup_edges_and_switches): Clear any
NON_EXECUTABLE flags.
(simplify_using_ranges::simplify_using_ranges): Adjust.
* vr-values.h (class simplify_using_ranges): Adjust.
(simplify_using_ranges::set_range_query): Add non-executable flag param.

2 years agoFortran: Handle allocated() with coindexed scalars [PR93834]
Tobias Burnus [Thu, 23 Sep 2021 16:47:45 +0000 (18:47 +0200)]
Fortran: Handle allocated() with coindexed scalars [PR93834]

While for an allocatable 'array', 'array(:)' and 'array(:)[1]' are
not allocatable, it is believed that not only 'scalar' but also
'scalar[1]' is allocatable.  However, coarrays are collectively
established/allocated; thus, 'allocated(scalar[i])' is equivalent
to 'allocated(scalar)'. [At least when assuming that 'i' does not
refer to a failed image.]

2021-09-23  Harald Anlauf  <anlauf@gmx.de>
    Tobias Burnus  <tobias@codesourcery.com>

PR fortran/93834
gcc/fortran/ChangeLog:

* trans-intrinsic.c (gfc_conv_allocated): Cleanup. Handle
coindexed scalar coarrays.

gcc/testsuite/ChangeLog:

* gfortran.dg/coarray/coarray_allocated.f90: New test.

2 years agolibiberty: prevent null dereferencing on dlang_type
Luís Ferreira [Thu, 23 Sep 2021 15:54:00 +0000 (11:54 -0400)]
libiberty: prevent null dereferencing on dlang_type

libiberty/
* d-demangle.c (dlang_Type): Validate MANGLED is nonnull.

* testsuite/d-demangle-expected: New test.

2 years agolibiberty: prevent buffer overflow when decoding user input
Luís Ferreira [Thu, 23 Sep 2021 15:33:47 +0000 (11:33 -0400)]
libiberty: prevent buffer overflow when decoding user input

libiberty/
* d-demangle.c (dlang_symbol_backref): Ensure strlen of
string is less than length computed by dlang_number.

2 years agolibstdc++: Remove c++20-specific dg-error directives in test
Jonathan Wakely [Wed, 22 Sep 2021 17:15:24 +0000 (18:15 +0100)]
libstdc++: Remove c++20-specific dg-error directives in test

I added extra dg-error directives for C++20 to match the extra errors
caused by some of the call stack being constexpr in C++20. Since Jason's
changes to reduce those errors, those dg-error lines no longer match.
This removes them again.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc:
Remove dg-error lines for C++20-only errors.

2 years agolibstdc++: Disable PCH for test that depends on a macro being defined
Jonathan Wakely [Wed, 22 Sep 2021 13:11:54 +0000 (14:11 +0100)]
libstdc++: Disable PCH for test that depends on a macro being defined

This test tries to ensure that <system_error> can be included after
defining _XOPEN_SOURCE=600, which doesn't test anything if that header
is already included via the <bits/stdc++.h> PCH before the macro
definition. Disable PCH so that it behaves as intended.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* testsuite/19_diagnostics/headers/system_error/93151.cc:
Disable PCH.

2 years agolibstdc++: Make std::system_category() recognize Windows error codes
Jonathan Wakely [Wed, 10 Feb 2021 16:10:46 +0000 (16:10 +0000)]
libstdc++: Make std::system_category() recognize Windows error codes

The std::system_category error category should be used for
system-specific error codes, which means on Windows it should be used
for Windows error codes.  Currently that category assumes that the error
numbers it deals with are errno numbers, which means that
ERROR_ACCESS_DENIED (which has value 0x5) gets treated as whichever
errno number happens to have that value (EIO on mingw32-w64).

This adds a mapping from known Windows error codes to generic errno
ones. This means we correctly treat ERROR_ACCESS_DENIED as corresponding
to EACCES.

Also make std::system_category().message(int) return the right message
for Windows errors, by using FormatMessage instead of strerror. The
output of FormatMessage includes ".\r\n" at the end, so we strip that
off to allow the message to be used in contexts where that would be
problematic.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* src/c++11/system_error.cc (system_error_category) [_WIN32]:
Map Windows error codes to generic POSIX error numbers. Use
FormatMessage instead of strerror.
* testsuite/19_diagnostics/error_category/system_category.cc:
Adjust for new behaviour on Windows.

2 years agolibstdc++: Improvements to standard error category objects
Jonathan Wakely [Wed, 22 Sep 2021 12:56:21 +0000 (13:56 +0100)]
libstdc++: Improvements to standard error category objects

This ensures that the objects returned by std::generic_category() and
std::system_category() are initialized before any code starts executing,
and are not destroyed at the end of the program. This means it is always
safe to access them, even during startup and termination. See LWG 2992
and P1195R0 for further discussion of this.

Additionally, make the types of those objects final, which might
potentially allow additional devirtualization opportunities. The types
are not visible to users, so there is no way they can derive from them,
so making them final has no semantic change.

Finally, add overrides for equivalent(int, const error_condition&) to
those types, to avoid the second virtual call that would be performed by
the base class definition of the function. Because we know what
default_error_condition(int) does for the derived type, we don't need to
make a virtual call.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* src/c++11/system_error.cc (generic_error_category): Define
class and virtual functions as 'final'.
(generic_error_category::equivalent(int, const error_condition&)):
Override.
(system_error_category): Define class and virtual functions as
'final'.
(system_error_category::equivalent(int, const error_condition&)):
Override.
(generic_category_instance, system_category_instance): Use
constinit union to make the objects immortal.

2 years agolibstdc++: std::system_category should know meaning of zero [PR102425]
Jonathan Wakely [Wed, 22 Sep 2021 10:58:20 +0000 (11:58 +0100)]
libstdc++: std::system_category should know meaning of zero [PR102425]

Although 0 is not an errno value, it should still be recognized as
corresponding to a value belonging to the generic_category().

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/102425
* src/c++11/system_error.cc
(system_error_category::default_error_condition): Add 0 to
switch.
* testsuite/19_diagnostics/error_category/102425.cc: New test.

2 years agoc++: improve tree dump for templated decls
Patrick Palka [Thu, 23 Sep 2021 13:36:14 +0000 (09:36 -0400)]
c++: improve tree dump for templated decls

gcc/cp/ChangeLog:

* ptree.c (cxx_print_decl): Dump the DECL_TEMPLATE_RESULT of
a TEMPLATE_DECL.  Dump the DECL_TEMPLATE_INFO rather than just
printing its pointer value.

2 years ago[Ada] Fix obsolete comment mentioning girder discriminants
Eric Botcazou [Thu, 15 Jul 2021 20:42:26 +0000 (22:42 +0200)]
[Ada] Fix obsolete comment mentioning girder discriminants

gcc/ada/

* gcc-interface/decl.c (gnat_to_gnu_entity): Fix comment.

2 years ago[Ada] Add Subprogram_Body_Or_Type
Richard Kenner [Sat, 31 Jul 2021 21:46:56 +0000 (17:46 -0400)]
[Ada] Add Subprogram_Body_Or_Type

gcc/ada/

* gen_il-gen-gen_entities.adb (Subprogram_Body_Or_Type): Add.
* gen_il-types.ads (Subprogram_Body_Or_Type): Likewise.

2 years ago[Ada] Add N_Has_Bounds and N_Is_Index
Richard Kenner [Sat, 31 Jul 2021 15:02:47 +0000 (11:02 -0400)]
[Ada] Add N_Has_Bounds and N_Is_Index

gcc/ada/

* einfo-utils.adb (Next_Index): Verify input and output are
N_Is_Index.
* gen_il-gen-gen_nodes.adb (N_Has_Bounds, N_Is_Index): Add.
* gen_il-types.ads (N_Has_Bounds, N_Is_Index): Likewise.
* sem_ch3.adb (Array_Type_Declaration): Use Next, not
Next_Index.
* sem_ch12.adb (Formal_Dimensions): Likewise.
* sem_util.adb (Is_Valid_Renaming): Likewise.

2 years ago[Ada] Adjust documentation of gnatsymbolize
Eric Botcazou [Tue, 3 Aug 2021 10:37:38 +0000 (12:37 +0200)]
[Ada] Adjust documentation of gnatsymbolize

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst (gnatsymbolize):
Document new --load option and -g1 as minimal compilation
requirement.

2 years ago[Ada] Tune detection of internally generated positional aggregates
Piotr Trojanek [Tue, 27 Jul 2021 13:00:39 +0000 (15:00 +0200)]
[Ada] Tune detection of internally generated positional aggregates

gcc/ada/

* sem_aggr.adb (Resolve_Array_Aggregate): Only keep the bounds
for internally generated attributes; otherwise, compute them
anew.

2 years ago[Ada] Wrappers of access-to-subprograms with pre/post conditions
Javier Miranda [Mon, 26 Jul 2021 08:55:39 +0000 (04:55 -0400)]
[Ada] Wrappers of access-to-subprograms with pre/post conditions

gcc/ada/

* sem_ch3.adb (Build_Access_Subprogram_Wrapper): Decorate the
wrapper with attribute Is_Wrapper, and move its declaration to
the freezing actions of its type declaration; done to facilitate
identifying it at later stages to avoid handling it as a
primitive operation of a tagged type; otherwise it may be
handled as a dispatching operation and erroneously registered in
a dispatch table.
(Make_Index): Add missing decoration of field Parent.
* sem_disp.adb (Check_Dispatching_Operation): Complete
decoration of late-overriding dispatching primitives.
(Is_Access_To_Subprogram_Wrapper): New subprogram.
(Inherited_Subprograms): Prevent cascaded errors; adding missing
support for private types.
* sem_type.adb (Add_One_Interp): Add missing support for the
first interpretation of a primitive of an inmediate ancestor
interface.
* sem_util.adb (Check_Result_And_Post_State_In_Pragma): Do not
report missing reference in postcondition placed in internally
built wrappers.
* exp_disp.adb (Expand_Dispatching_Call): Adding assertion.

2 years ago[Ada] Ada2022: implementation of AI12-0212 : iterator specs in array aggregates
Ed Schonberg [Tue, 27 Jul 2021 14:55:07 +0000 (10:55 -0400)]
[Ada] Ada2022: implementation of AI12-0212 : iterator specs in array aggregates

gcc/ada/

* sem_aggr.adb (Resolve_Array_Aggregate): Check the validity of
an array aggregate all of whose components are iterated
component associations.
* exp_aggr.adb (Expand_Array_Aggregate,
Two_Pass_Aggregate_Expansion): implement two-pass algorithm and
replace original aggregate with resulting temporary, to ensure
that a proper length check is performed if context is
constrained. Use attributes Pos and Val to handle index types of
any discrete type.

2 years ago[Ada] Follow-on efficiency improvements
Bob Duff [Fri, 30 Jul 2021 20:49:37 +0000 (16:49 -0400)]
[Ada] Follow-on efficiency improvements

gcc/ada/

* gen_il-gen.adb: Set the number of concrete nodes that have the
Homonym field to a higher number than any other field. This
isn't true, but it forces Homonym's offset to be chosen first,
so it will be at offset zero and hence slot zero.

2 years ago[Ada] If unnesting and relocating subprogram call, make new Parameter_Associations
Richard Kenner [Tue, 27 Jul 2021 16:23:23 +0000 (12:23 -0400)]
[Ada] If unnesting and relocating subprogram call, make new Parameter_Associations

gcc/ada/

* atree.adb (Relocate_Node): If relocating a subprgram call and
we're doing unnesting, make a new Parameter_Associations, if
any.

2 years ago[Ada] Remove Initializes contracts from Ada.Strings.Bounded
Piotr Trojanek [Wed, 28 Jul 2021 13:16:09 +0000 (15:16 +0200)]
[Ada] Remove Initializes contracts from Ada.Strings.Bounded

gcc/ada/

* libgnat/a-strbou.ads (Generic_Bounded_Length): Remove explicit
Initializes contract.

2 years ago[Ada] Cleanup and efficiency improvements
Bob Duff [Thu, 29 Jul 2021 15:15:46 +0000 (11:15 -0400)]
[Ada] Cleanup and efficiency improvements

gcc/ada/

* gen_il-gen.adb: Generate getters and setters with much of the
code inlined. Generate code for storing a few fields in the node
header, to avoid the extra level of indirection for those
fields. We generate the header type, so we don't have to
duplicate hand-written Ada and C code to depend on the number of
header fields.  Declare constants for slot size. Use short names
because these are used all over.  Remove
Put_Low_Level_Accessor_Instantiations, Put_Low_Level_C_Getter,
which are no longer needed.  Rename
Put_High_Level_C_Getter-->Put_C_Getter.
* atree.ads, atree.adb: Take into account the header slots.
Take into account the single Node_Or_Entity_Field type.  Remove
"pragma Assertion_Policy (Ignore);", because the routines in
this package are no longer efficiency critical.
* atree.h: Remove low-level getters, which are no longer used by
sinfo.h and einfo.h.
* einfo-utils.adb: Avoid crash in Known_Alignment.
* live.adb, sem_eval.adb: Remove code that prevents Node_Id from
having a predicate.  We don't actually add a predicate to
Node_Id, but we want to be able to for temporary debugging.
* sinfo-utils.adb: Remove code that prevents Node_Id from having
a predicate.  Take into account the single Node_Or_Entity_Field
type.
* sinfo-utils.ads: Minor.
* table.ads (Table_Type): Make the components aliased, because
low-level setters in Atree need to take 'Access.
* treepr.adb: Take into account the single Node_Or_Entity_Field
type.  Make some code more robust, so we can print out
half-baked nodes.
* types.ads: Move types here for visibility purposes.
* gcc-interface/gigi.h, gcc-interface/trans.c: Take into account
the Node_Header change in the GNAT front end.
* gcc-interface/cuintp.c, gcc-interface/targtyps.c: Add because
gigi.h now refers to type Node_Header, which is in sinfo.h.

2 years ago[Ada] Minimize parts of Ada.Strings.Fixed marked SPARK_Mode => Off
Yannick Moy [Mon, 26 Jul 2021 10:21:02 +0000 (12:21 +0200)]
[Ada] Minimize parts of Ada.Strings.Fixed marked SPARK_Mode => Off

gcc/ada/

* libgnat/a-strfix.adb (Delete, Insert, Overwrite,
Replace_Slice): Remove SPARK_Mode Off.
* libgnat/a-strfix.ads (Insert, Overwrite, Replace_Slice):
Strengthen precondition.

2 years ago[Ada] Remove global parameter in Global contracts of Ada.Strings.Bounded
Piotr Trojanek [Wed, 28 Jul 2021 12:13:58 +0000 (14:13 +0200)]
[Ada] Remove global parameter in Global contracts of Ada.Strings.Bounded

gcc/ada/

* libgnat/a-strbou.ads (Generic_Bounded_Length): Remove non-null
Global contracts.

2 years ago[Ada] Update "Implementation Defined Characteristics" documentation.
Steve Baird [Fri, 23 Jul 2021 18:09:05 +0000 (11:09 -0700)]
[Ada] Update "Implementation Defined Characteristics" documentation.

gcc/ada/

* doc/gnat_rm/implementation_defined_characteristics.rst: Update
this section to reflect the current version of Ada RM M.2.
* gnat_rm.texi: Regenerate.

2 years agors6000: Add psabi diagnostic for C++ zero-width bit field ABI change
Bill Schmidt [Thu, 23 Sep 2021 12:35:42 +0000 (07:35 -0500)]
rs6000: Add psabi diagnostic for C++ zero-width bit field ABI change

Previously zero-width bit fields were removed from structs, so that otherwise
homogeneous aggregates were treated as such and passed in FPRs and VSRs.
This was incorrect behavior per the ELFv2 ABI. Now that these fields are no
longer being removed, we generate the correct parameter passing code.  Alert
the unwary user in the rare cases where this behavior changes.

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

gcc/
PR target/102024
* config/rs6000/rs6000-call.c (rs6000_aggregate_candidate): Detect
zero-width bit fields and return indicator.
(rs6000_discover_homogeneous_aggregate): Diagnose when the
presence of a zero-width bit field changes parameter passing in
GCC 12.

gcc/testsuite/
PR target/102024
* g++.target/powerpc/pr102024.C: New.

2 years agoRemove dominator check in fold_using_range::range_of_phi.
Aldy Hernandez [Thu, 23 Sep 2021 07:40:59 +0000 (09:40 +0200)]
Remove dominator check in fold_using_range::range_of_phi.

Revert the following patch, as it was an artifact of diagnostic code
being run with improper IL.

commit 64b80b8819f9ea74712625bceb0ec4388e25f67d
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Tue Sep 21 08:28:28 2021 +0200

    Do not query SCEV in range_of_phi unless dominators are available.

    SCEV won't work without dominators and we can get called without
    dominators from debug_ranger.

gcc/ChangeLog:

* gimple-range-fold.cc (fold_using_range::range_of_phi):
Remove dominator check.

2 years agoHoist edge calculations in precompute_relations.
Aldy Hernandez [Thu, 23 Sep 2021 07:37:00 +0000 (09:37 +0200)]
Hoist edge calculations in precompute_relations.

Tested on x86-64 Linux.

gcc/ChangeLog:

* gimple-range-path.cc (path_range_query::precompute_relations):
Hoist edge calculations before using EDGE_SUCC.

2 years agoconfigure: Update --help output for --with-multilib-list
Jonathan Wakely [Thu, 23 Sep 2021 10:30:14 +0000 (11:30 +0100)]
configure: Update --help output for --with-multilib-list

The list of architectures that support the option is incomplete.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
Reviewed-by: Jim Wilson <jimw@sifive.com>
gcc/ChangeLog:

* configure.ac: Fix --with-multilib-list description.
* configure: Regenerate.

2 years agotree-optimization/102448 - clear copied alignment info from vect
Richard Biener [Thu, 23 Sep 2021 08:27:01 +0000 (10:27 +0200)]
tree-optimization/102448 - clear copied alignment info from vect

This fixes the previous change which removed setting alignment info
from the vectorizers idea of how a pointer is being used but left
in place the copied info from DR_PTR_INFO without realizing that this
is in fact _not_ the alignment of the access but the alignment of
a base pointer contained in it.

The following makes sure to not use that info.

2021-09-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/102448
* tree-vect-data-refs.c (vect_duplicate_ssa_name_ptr_info):
Clear alignment info copied from DR_PTR_INFO.

2 years agoAVX512FP16: Enable vec_cmpmn/vcondmn expanders for HF modes.
Hongyu Wang [Fri, 16 Jul 2021 02:01:17 +0000 (10:01 +0800)]
AVX512FP16: Enable vec_cmpmn/vcondmn expanders for HF modes.

gcc/ChangeLog:

* config/i386/i386-expand.c (ix86_use_mask_cmp_p): Enable
HFmode mask_cmp.
* config/i386/sse.md (sseintvecmodelower): Add HF vector modes.
(<avx512>_store<mode>_mask): Extend to support HF vector modes.
(vec_cmp<mode><avx512fmaskmodelower>): Likewise.
(vcond_mask_<mode><avx512fmaskmodelower>): Likewise.
(vcond<mode><mode>): New expander.
(vcond<mode><sseintvecmodelower>): Likewise.
(vcond<sseintvecmodelower><mode>): Likewise.
(vcondu<mode><sseintvecmodelower>): Likewise.

gcc/testsuite/ChangeLog:

* g++.target/i386/avx512fp16-vcondmn-vec.C: New test.
* g++.target/i386/avx512fp16-vcondmn-minmax.C: Ditto.
* gcc.target/i386/avx512fp16-vcondmn-loop-1.c: Ditto.
* gcc.target/i386/avx512fp16-vcondmn-loop-2.c: Ditto.
* gcc.target/i386/avx512fp16-vec_cmpmn.c: Ditto.

2 years agoAVX512FP16: add truncmn2/extendmn2 expanders
Hongyu Wang [Mon, 12 Jul 2021 06:02:10 +0000 (14:02 +0800)]
AVX512FP16: add truncmn2/extendmn2 expanders

gcc/ChangeLog:

* config/i386/sse.md (extend<ssePHmodelower><mode>2):
New expander.
(extendv4hf<mode>2): Likewise.
(extendv2hfv2df2): Likewise.
(trunc<mode><ssePHmodelower>2): Likewise.
(avx512fp16_vcvt<castmode>2ph_<mode>): Rename to ...
(trunc<mode>v4hf2): ... this, and drop constraints.
(avx512fp16_vcvtpd2ph_v2df): Rename to ...
(truncv2dfv2hf2): ... this, and likewise.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-trunc-extendvnhf.c: New test.

2 years agoAVX512FP16: Add float(uns)?mn2 expander
Hongyu Wang [Mon, 12 Jul 2021 01:45:33 +0000 (09:45 +0800)]
AVX512FP16: Add float(uns)?mn2 expander

gcc/ChangeLog:

* config/i386/sse.md (float<floatunssuffix><mode><ssePHmodelower>2):
New expander.
(avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode>):
Rename to ...
(float<floatunssuffix><mode>v4hf2): ... this, and drop constraints.
(avx512fp16_vcvt<floatsuffix>qq2ph_v2di): Rename to ...
(float<floatunssuffix>v2div2hf2): ... this, and likewise.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-floatvnhf.c: New test.

2 years agoAVX512FP16: Add fix(uns)?_truncmn2 for HF scalar and vector modes
Hongyu Wang [Thu, 1 Jul 2021 05:17:32 +0000 (13:17 +0800)]
AVX512FP16: Add fix(uns)?_truncmn2 for HF scalar and vector modes

NB: 64bit/32bit vectorize for HFmode is not supported for now, will
adjust this patch when V2HF/V4HF operations supported.

gcc/ChangeLog:

* config/i386/i386.md (fix<fixunssuffix>_trunchf<mode>2): New expander.
(fixuns_trunchfhi2): Likewise.
(*fixuns_trunchfsi2zext): New define_insn.
* config/i386/sse.md (ssePHmodelower): New mode_attr.
(fix<fixunssuffix>_trunc<ssePHmodelower><mode>2):
New expander for same element vector fix_truncate.
(fix<fixunssuffix>_trunc<ssePHmodelower><mode>2):
Likewise for V4HF to V4SI/V4DI fix_truncate.
(fix<fixunssuffix>_truncv2hfv2di2):
Likeise for V2HF to V2DI fix_truncate.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-trunchf.c: New test.
* gcc.target/i386/avx512fp16-truncvnhf.c: Ditto.

2 years agoAVX512FP16: Add expander for smin/maxhf3.
Hongyu Wang [Sat, 18 Sep 2021 05:56:37 +0000 (13:56 +0800)]
AVX512FP16: Add expander for smin/maxhf3.

gcc/ChangeLog:

* config/i386/i386.md (<code>hf3): New expander.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-builtin-minmax-1.c: New test.

2 years agoAVX512FP16: Add expander for fmahf4
liuhongt [Tue, 14 Jul 2020 06:45:32 +0000 (14:45 +0800)]
AVX512FP16: Add expander for fmahf4

gcc/ChangeLog:

* config/i386/sse.md (FMAMODEM): extend to handle FP16.
(VFH_SF_AVX512VL): Extend to handle HFmode.
(VF_SF_AVX512VL): Deleted.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-fma-1.c: New test.
* gcc.target/i386/avx512fp16vl-fma-1.c: New test.
* gcc.target/i386/avx512fp16vl-fma-vectorize-1.c: New test.

2 years agoAVX512FP16: Add expander for rint/nearbyinthf2.
liuhongt [Wed, 22 Sep 2021 07:03:36 +0000 (15:03 +0800)]
AVX512FP16: Add expander for rint/nearbyinthf2.

gcc/ChangeLog:

* config/i386/i386.md (rinthf2): New expander.
(nearbyinthf2): New expander.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-builtin-round-1.c: Add new testcase.

2 years agoopenmp: Diagnose omp::directive attribute without balanced token argument [PR102413]
Jakub Jelinek [Thu, 23 Sep 2021 08:07:49 +0000 (10:07 +0200)]
openmp: Diagnose omp::directive attribute without balanced token argument [PR102413]

If omp::directive attribute argument starting with the opening ( is not a balanced
token sequence, then cp_parser_skip_balanced_tokens (parser, 1) returns 1,
but the code was subtracting 2 from it and iterating until it was 0, so for the
non-balanced case it iterated from (size_t) -1 down to 0.

The following patch just diagnoses that as an error.

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

PR c++/102413
* parser.c (cp_parser_omp_directive_args): Diagnose if omp::directive
is not followed by a balanced token sequence starting with open paren.

* g++.dg/gomp/attrs-14.C: New test.

2 years agoOverhaul jump thread state in forward threader.
Aldy Hernandez [Wed, 22 Sep 2021 16:10:43 +0000 (18:10 +0200)]
Overhaul jump thread state in forward threader.

I've been pulling state from across the forward jump threader into the
jt_state class, but it it still didn't feel right.  The ultimate goal
was to keep track of candidate threading paths so that the simplifier
could simplify statements with the path as context.  This patch completes
the transition, while cleaning up a lot of things in the process.

I've revamped both state and the simplifier such that a base state class
contains only the blocks as they're registered, and any pass specific
knowledge is where it belongs... in the pass.  This allows VRP to keep
its const and copies business, and DOM to keep this as well as its evrp
client.  This makes the threader cleaner, as it will now have no knowledge
of either const/copies or evrp.

This also paves the wave for the upcoming hybrid threader, which will
just derive the state class and provide almost nothing, since the ranger
doesn't need to register any equivalences or ranges as it folds.

There is some code duplication in the simplifier, since both the DOM and
VRP clients use a vr_values based simplifier, but this is temporary as
the VRP client is about to be replaced with a hybrid ranger.

For a better view of what this patch achieves, here are the base
classes:

class jt_state
{
public:
  virtual ~jt_state () { }
  virtual void push (edge);
  virtual void pop ();
  virtual void register_equiv (tree dest, tree src, bool update_range =
false);
  virtual void register_equivs_edge (edge e);
  virtual void register_equivs_stmt (gimple *, basic_block,
     class jt_simplifier *);
  virtual void record_ranges_from_stmt (gimple *stmt, bool temporary);
  void get_path (vec<basic_block> &);
  void append_path (basic_block);
  void dump (FILE *);
  void debug ();
private:
  auto_vec<basic_block> m_blocks;
};

class jt_simplifier
{
public:
  virtual ~jt_simplifier () { }
  virtual tree simplify (gimple *, gimple *, basic_block, jt_state *) =
0;
};

There are no functional changes.

gcc/ChangeLog:

* tree-ssa-dom.c (class dom_jump_threader_simplifier): Rename...
(class dom_jt_state): ...this and provide virtual overrides.
(dom_jt_state::register_equiv): New.
(class dom_jt_simplifier): Rename from
dom_jump_threader_simplifier.
(dom_jump_threader_simplifier::simplify): Rename...
(dom_jt_simplifier::simplify): ...to this.
(pass_dominator::execute): Use dom_jt_simplifier and
dom_jt_state.
* tree-ssa-threadedge.c (jump_threader::jump_threader):
Clean-up.
(jt_state::register_equivs_stmt): Abstract out...
(jump_threader::record_temporary_equivalences_from_stmts_at_dest):
...from here.
(jump_threader::thread_around_empty_blocks): Update state.
(jump_threader::thread_through_normal_block): Same.
(jt_state::jt_state): Remove.
(jt_state::push): Remove pass specific bits.  Keep block vector
updated.
(jt_state::append_path): New.
(jt_state::pop): Remove pass specific bits.
(jt_state::register_equiv): Same.
(jt_state::record_ranges_from_stmt): Same.
(jt_state::register_equivs_on_edge): Same.  Rename...
(jt_state::register_equivs_edge):  ...to this.
(jt_state::dump): New.
(jt_state::debug): New.
(jump_threader_simplifier::simplify): Remove.
(jt_state::get_path): New.
* tree-ssa-threadedge.h (class jt_simplifier): Make into a base
class.  Expose common functionality as virtual methods.
(class jump_threader_simplifier): Same.  Rename...
(class jt_simplifier): ...to this.
* tree-vrp.c (class vrp_jump_threader_simplifier): Rename...
(class vrp_jt_simplifier): ...to this. Provide pass specific
overrides.
(class vrp_jt_state): New.
(vrp_jump_threader_simplifier::simplify): Rename...
(vrp_jt_simplifier::simplify): ...to this.  Inline code from
what used to be the base class.
(vrp_jump_threader::vrp_jump_threader): Use vrp_jt_state and
vrp_jt_simplifier.

2 years agoDaily bump.
GCC Administrator [Thu, 23 Sep 2021 00:16:29 +0000 (00:16 +0000)]
Daily bump.

2 years agoFortran: diagnostic for argument w/type parameters for assumed-type dummy
Sandra Loosemore [Wed, 22 Sep 2021 14:49:17 +0000 (07:49 -0700)]
Fortran: diagnostic for argument w/type parameters for assumed-type dummy

2021-09-22  Sandra Loosemore  <sandra@codesourcery.com>

PR fortran/101319

gcc/fortran/
* interface.c (gfc_compare_actual_formal): Extend existing
assumed-type diagnostic to also check for argument with type
parameters.

gcc/testsuite/
* gfortran.dg/c-interop/assumed-type-dummy.f90: Remove xfail.

2 years agoFortran: Fixes for F2018 C838 (PR fortran/101334)
Sandra Loosemore [Mon, 20 Sep 2021 00:32:03 +0000 (17:32 -0700)]
Fortran: Fixes for F2018 C838 (PR fortran/101334)

The compiler was failing to diagnose the error required by F2018 C838
when passing an assumed-rank array argument to a non-assumed-rank dummy.
It was also incorrectly giving an error for calls to the 2-argument form
of the ASSOCIATED intrinsic, which is supposed to be permitted by C838.

2021-09-19  Sandra Loosemore  <sandra@codesourcery.com>

PR fortran/101334

gcc/fortran/
* check.c (gfc_check_associated): Allow an assumed-rank
array for the pointer argument.
* interface.c (compare_parameter): Also give rank mismatch
error on assumed-rank array.

gcc/testsuite/
* gfortran.dg/c-interop/c535b-2.f90: Remove xfails.
* gfortran.dg/c-interop/c535b-3.f90: Likewise.

2 years agoFortran: Fix testcases that violate C838, + revealed ICE
Sandra Loosemore [Mon, 20 Sep 2021 00:23:58 +0000 (17:23 -0700)]
Fortran: Fix testcases that violate C838, + revealed ICE

The three test cases fixed in this patch violated F2018 C838, which
only allows passing an assumed-rank argument to an assumed-rank dummy.
Wrapping the call in "select rank" revealed a null pointer dereference
which is fixed by guarding the use of the result of
GFC_DECL_SAVED_DESCRIPTOR similar to what is already done elsewhere.

2021-09-19  Sandra Loosemore  <sandra@codesourcery.com>

gcc/fortran/
* trans-stmt.c (trans_associate_var): Check that result of
GFC_DECL_SAVED_DESCRIPTOR is not null before using it.

gcc/testsuite/
* gfortran.dg/assumed_rank_18.f90 (g): Wrap call to h in
select rank.
* gfortran.dg/assumed_type_10.f90 (test_array): Likewise for
call to test_lib.
* gfortran.dg/assumed_type_11.f90 (test_array): Likewise.

2 years agoFortran: Improve -Wmissing-include-dirs warnings [PR55534]
Tobias Burnus [Wed, 22 Sep 2021 18:58:35 +0000 (20:58 +0200)]
Fortran: Improve -Wmissing-include-dirs warnings [PR55534]

It turned out that enabling the -Wmissing-include-dirs for libcpp did output
too many warnings – at least as run with -B and similar options during the
GCC build and warning for internal include dirs like finclude, unlikely of
relevance to for a real-world user.
This patch now only warns for -I and -J by default but permits to get the
full warnings including libcpp ones with -Wmissing-include-dirs. It
additionally documents this in the manual.

With that change, the -Wno-missing-include-dirs could be removed
from libgfortran's configure and libgomp's testsuite always cflags.
This reverts those bits of the previous
commit r12-3722-g417ea5c02cef7f000e66d1af22b066c2c1cda047

Additionally, it turned out that all call to load_file called exit
explicitly - except for the main file via gfc_init -> gfc_new_file. The
latter also output a file not existing fatal error, such that two errors
where printed. Now exit is called in line with the other users of
load_file.

Finally, when compileing with "nonexisting/file.f90", first a warning that
"nonexisting" does not exist as include path was printed before the file
not found error was printed. Now the directory in which the physical file
is located is added silently, relying on the file-not-found diagnostic for
those.

PR fortran/55534
gcc/ChangeLog:

* doc/invoke.texi (-Wno-missing-include-dirs.): Document Fortran
behavior.

gcc/fortran/ChangeLog:

* cpp.c (gfc_cpp_register_include_paths, gfc_cpp_post_options):
Add new bool verbose_missing_dir_warn argument.
* cpp.h (gfc_cpp_post_options): Update prototype.
* f95-lang.c (gfc_init): Remove duplicated file-not found diag.
* gfortran.h (gfc_check_include_dirs): Takes bool
verbose_missing_dir_warn arg.
(gfc_new_file): Returns now void.
* options.c (gfc_post_options): Update to warn for -I and -J,
only, by default but for all when user requested.
* scanner.c (gfc_do_check_include_dir):
(gfc_do_check_include_dirs, gfc_check_include_dirs): Take bool
verbose warn arg and update to avoid printing the same message
twice or never.
(load_file): Fix indent.
(gfc_new_file): Return void and exit when load_file failed
as all other load_file users do.

libgfortran/ChangeLog:

* configure.ac (AM_FCFLAGS): Revert r12-3722 by removing
-Wno-missing-include-dirs.
* configure: Regenerate.

libgomp/ChangeLog:

* testsuite/libgomp.fortran/fortran.exp (ALWAYS_CFLAGS): Revert
r12-3722 by removing -Wno-missing-include-dirs.
* testsuite/libgomp.oacc-fortran/fortran.exp (ALWAYS_CFLAGS): Likewise.

gcc/testsuite/ChangeLog:

* gfortran.dg/include_14.f90: Add -J testcase and update dg-output.
* gfortran.dg/include_15.f90: Likewise.
* gfortran.dg/include_16.f90: Likewise.
* gfortran.dg/include_17.f90: Likewise.
* gfortran.dg/include_18.f90: Likewise.
* gfortran.dg/include_19.f90: Likewise.

2 years agoMore NEGATE_EXPR folding in match.pd
Roger Sayle [Wed, 22 Sep 2021 18:17:49 +0000 (19:17 +0100)]
More NEGATE_EXPR folding in match.pd

As observed by Jakub in comment #2 of PR 98865, the expression -(a>>63)
is optimized in GENERIC but not in GIMPLE.  Investigating further it
turns out that this is one of a few transformations performed by
fold_negate_expr in fold-const.c that aren't yet performed by match.pd.
This patch moves/duplicates them there, and should be relatively safe
as these transformations are already performed by the compiler, but
just in different passes.

This revised patch adds a Boolean simplify argument to tree-ssa-sccvn.c's
vn_nary_build_or_lookup_1 to control whether simplification should be
performed before value numbering, updating the callers, but then
avoiding simplification when constructing/value-numbering NEGATE_EXPR.
This avoids the regression of gcc.dg/tree-ssa/ssa-free-88.c, and enables
the new test case(s) to pass.

2021-09-22  Roger Sayle  <roger@nextmovesoftware.com>
    Richard Biener  <rguenther@suse.de>

gcc/ChangeLog
* match.pd (negation simplifications): Implement some negation
folding transformations from fold-const.c's fold_negate_expr.
* tree-ssa-sccvn.c (vn_nary_build_or_lookup_1): Add a SIMPLIFY
argument, to control whether the op should be simplified prior
to looking up/assigning a value number.
(vn_nary_build_or_lookup): Update call to vn_nary_build_or_lookup_1.
(vn_nary_simplify): Likewise.
(visit_nary_op): Likewise, but when constructing a NEGATE_EXPR
now call vn_nary_build_or_lookup_1 disabling simplification.

gcc/testsuite/ChangeLog
* gcc.dg/fold-negate-1.c: New test case.

2 years agox86: Clean up gcc.target/i386/auto-init-* tests
H.J. Lu [Mon, 20 Sep 2021 14:48:05 +0000 (07:48 -0700)]
x86: Clean up gcc.target/i386/auto-init-* tests

1. Replace ia32 with { ! lp64 } to enable ILP32 tests for -mx32.
2. Replace lp64 with { ! ia32 } to enable x86-64 ISA tests for -mx32.
3. For auto-init-3.c, add -msse and -mfpmath=387 for ia32.

* gcc.target/i386/auto-init-2.c: Replace ia32 with { ! lp64 }.
* gcc.target/i386/auto-init-3.c (dg-options): Add -msse.
(dg-additional-options): Add -mfpmath=387 for ia32.
Replace lp64 with { ! ia32 }. Add a space after ia32.
* gcc.target/i386/auto-init-4.c: Replace lp64 with { ! ia32 }.
* gcc.target/i386/auto-init-5.c: Likewise.
* gcc.target/i386/auto-init-padding-3.c: Likewise.
* gcc.target/i386/auto-init-padding-7.c: Likewise.
* gcc.target/i386/auto-init-padding-8.c: Likewise.
* gcc.target/i386/auto-init-padding-9.c: Likewise.

2 years agoc++: concept-ids and value-dependence [PR102412]
Patrick Palka [Wed, 22 Sep 2021 15:16:53 +0000 (11:16 -0400)]
c++: concept-ids and value-dependence [PR102412]

The problem here is that uses_template_parms returns true for all
concept-ids (even those with non-dependent arguments), so when a concept-id
is used as a default template argument then during deduction the default
argument is considered dependent even after substituting into it, which
leads to deduction failure (from type_unification_real).

This patch fixes this by implementing the resolution of CWG 2446 which
says a concept-id is dependent only if its arguments are.

DR 2446
PR c++/102412

gcc/cp/ChangeLog:

* constexpr.c (cxx_eval_constant_expression)
<case TEMPLATE_ID_EXPR>: Check value_dependent_expression_p
instead of processing_template_decl.
* pt.c (value_dependent_expression_p) <case TEMPLATE_ID_EXPR>:
Return true only if any_dependent_template_arguments_p.
(instantiation_dependent_r) <case CALL_EXPR>: Remove this case.
<case TEMPLATE_ID_EXPR>: Likewise.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-nondep2.C: New test.
* g++.dg/cpp2a/concepts-nondep3.C: New test.

2 years ago[Ada] Simplify contract of Ada.Strings.Fixed.Trim for proof
Yannick Moy [Tue, 27 Jul 2021 13:57:04 +0000 (15:57 +0200)]
[Ada] Simplify contract of Ada.Strings.Fixed.Trim for proof

gcc/ada/

* libgnat/a-strfix.ads (Trim): Simplify contracts.
* libgnat/a-strfix.adb (Trim): Remove white space.

2 years ago[Ada] Reuse routines for detecting attributes Old and Result
Piotr Trojanek [Mon, 26 Jul 2021 21:16:13 +0000 (23:16 +0200)]
[Ada] Reuse routines for detecting attributes Old and Result

gcc/ada/

* exp_ch4.adb (Expand_N_Op_Eq): Reuse Is_Attribute_Result.
* exp_prag.adb (Expand_Attributes): Reuse Is_Attribute_Old.

2 years ago[Ada] Spurious error on deferred constant with predicate
Yannick Moy [Tue, 27 Jul 2021 10:20:41 +0000 (12:20 +0200)]
[Ada] Spurious error on deferred constant with predicate

gcc/ada/

* sem_ch3.adb (Analyze_Object_Declaration): Do not insert a
predicate check after a deferred constant declaration.

2 years ago[Ada] Fix conformance errors and erroneous code
Bob Duff [Mon, 26 Jul 2021 19:26:28 +0000 (15:26 -0400)]
[Ada] Fix conformance errors and erroneous code

gcc/ada/

* contracts.adb, einfo-utils.adb, einfo-utils.ads, exp_ch7.adb,
exp_ch9.adb, exp_disp.adb, exp_prag.adb, exp_smem.adb,
exp_util.adb, freeze.adb, sem_aggr.adb, sem_attr.adb,
sem_ch8.adb, sem_prag.ads, sem_util.adb, sem_util.ads: Fix
conformance errors.
* errout.adb, erroutc.adb: Remove pragmas Suppress.
* err_vars.ads: Initialize variables that were previously being
read uninitialized.

2 years ago[Ada] Clarify parts of Ada.Strings.Unbounded in SPARK or not
Yannick Moy [Mon, 26 Jul 2021 14:56:27 +0000 (16:56 +0200)]
[Ada] Clarify parts of Ada.Strings.Unbounded in SPARK or not

gcc/ada/

* libgnat/a-strunb.ads: Mark package in SPARK with private part
not in SPARK.
(Free): Mark not in SPARK.

2 years ago[Ada] Update status of some attributes
Arnaud Charlet [Mon, 26 Jul 2021 10:08:46 +0000 (06:08 -0400)]
[Ada] Update status of some attributes

gcc/ada/

* snames.ads-tmpl: Update status of some attributes.

2 years ago[Ada] VxWorks inconsistent use of return type (STATUS)
Doug Rupp [Fri, 23 Jul 2021 19:00:04 +0000 (12:00 -0700)]
[Ada] VxWorks inconsistent use of return type (STATUS)

gcc/ada/

* libgnarl/s-interr__vxworks.adb (Interfaces.C): Remove as
unused.
(System.VxWorks.Ext): Import.
(System.VxWorks.Ext.STATUS): use type.
(STATUS): New subtype.
(OK): New constant.
(Interrupt_Connector): Return STATUS type vice int.
(Interrupt_Connect, Notify_Interrupt, Unbind_Handler,
Interrupt_Server_Task): Rename Status to Result. Assert Result =
OK.
* libgnarl/s-osinte__vxworks.adb (To_Clock_Ticks): Define constant
IERR, and return it vice ERROR.
(Binary_Semaphore_Delete): Return STATUS type vice int.
(Binary_Semaphore_Obtain): Likewise.
(Binary_Semaphore_Release): Likewise.
(Binary_Semaphore_Flush): Likewise.
* libgnarl/s-osinte__vxworks.ads (SVE): Renaming of
System.VxWorks.Ext.
(STATUS): Use SVE in declaration of subtype.
(BOOL): Likewise.
(vx_freq_t): Likewise.
(t_id): Likewise.
(gitpid): Use SVE in renaming of subprogram
(Task_Stop): Likewise.
(Task_Cont): Likewise.
(Int_Lock): Likewise.
(Int_Unlock): Likewise.
(Set_Time_Slice): Likewise.
(semDelete): Likewise.
(taskCpuAffinitySet): Likewise.
(taskMaskAffinitySet): Likewise.
(sigset_t): Use SVE in declaration of type.
(OK): Remove as unused.
(ERROR): Likewise.
(taskOptionsGet): return STATUS vice int.
(taskSuspend): Likewise.
(taskResume): Likewise.
(taskDelay): Likewise.
(taskVarAdd): Likewise.
(taskVarDelete): Likewise.
(taskVarSet): Likewise.
(tlkKeyCreate): Likewise.
(taskPrioritySet): Likewise.
(semGive): Likewise.
(semTake): Likewise.
(Binary_Semaphore_Delete): Likewise.
(Binary_Semaphore_Obtain): Likewise.
(Binary_Semaphore_Release): Likewise.
(Binary_Semaphore_Flush): Likewise.
(Interrupt_Connect): Likewise.
* libgnarl/s-taprop__vxworks.adb
(System.VxWorks.Ext.STATUS): use type.
(int): Syntactically align subtype.
(STATUS): New subtype.
(OK): New constant.
(Finalize_Lock): Check STATUS vice int. Assert OK.
(Finalize_Lock): Likewise.
(Write_Lock): Likewise.
(Write_Lock): Likewise.
(Write_Lock): Likewise.
(Unlock): Likewise.
(Unlock): Likewise.
(Unlock): Likewise.
(Unlock): Likewise.
(Sleep): Likewise.
(Sleep): Likewise.
(Sleep): Likewise.
(Timed_Sleep): Likewise and test Result.
(Timed_Delay): Likewise and test Result.
(Wakeup): Likewise.
(Yield): Likewise.
(Finalize_TCB): Likewise.
(Suspend_Until_True): Check OK.
(Stop_All_Tasks): Declare Dummy STATUS vice in.  Check OK.
(Is_Task_Context): Use OSI renaming.
(Initialize): Use STATUS vice int.
* libgnarl/s-vxwext.adb
(IERR): Renamed from ERROR.
(taskCpuAffinitySet): Return IERR (int).
(taskMaskAffinitySet): Likewise.
* libgnarl/s-vxwext.ads
(STATUS): New subtype.
(OK): New STATUS constant.
(ERROR): Likewise.
* libgnarl/s-vxwext__kernel-smp.adb
(IERR): Renamed from ERROR.
(Int_Lock): Return IERR.
(semDelete): Return STATUS.
(Task_Cont): Likewise.
(Task_Stop): Likewise.
* libgnarl/s-vxwext__kernel.adb
(IERR): Renamed from ERROR.
(semDelete): Return STATUS.
(Task_Cont): Likewise.
(Task_Stop): Likewise.
(taskCpuAffinitySet): Return IERR (int)
(taskMaskAffinitySet): Likewise.
* libgnarl/s-vxwext__kernel.ads
(STATUS): New subtype.
(OK): New STATUS constant.
(ERROR): Likewise.
(Interrupt_Connect): Return STATUS
(semDelete): Likewise.
(Task_Cont): Likewise.
(Task_Stop): Likewise.
(Set_Time_Slice): Likewise.
* libgnarl/s-vxwext__rtp-smp.adb
(IERR): Renamed from ERROR.
(Int_Lock): return IERR constant vice ERROR.
(Interrupt_Connect): Return STATUS.
(semDelete): Likewise.
(Set_Time_Slice): Likewise.
* libgnarl/s-vxwext__rtp.adb
(IERR): Renamed from ERROR.
(Int_Lock): return IERR constant vice ERROR.
(Int_Unlock): Return STATUS.
(semDelete): Likewise.
(Set_Time_Slice): Likewise.
(taskCpuAffinitySet): Return IERR (int)
(taskMaskAffinitySet): Likewise.
* libgnarl/s-vxwext__rtp.ads
(STATUS): New subtype.
(OK): New STATUS constant.
(ERROR): Likewise.
(Interrupt_Connect): Return STATUS
(semDelete): Likewise.
(Task_Cont): Likewise.
(Task_Stop): Likewise.
(Set_Time_Slice): Likewise.

2 years ago[Ada] More flexibility in preprocessor
Arnaud Charlet [Mon, 26 Jul 2021 08:16:06 +0000 (04:16 -0400)]
[Ada] More flexibility in preprocessor

gcc/ada/

* prep.adb (Preprocess): Allow for more flexibility when
Relaxed_RM_Semantics is set.

2 years ago[Ada] Contracts written for the Ada.Strings.Bounded library
Pierre-Alexandre Bazin [Fri, 2 Jul 2021 13:43:44 +0000 (15:43 +0200)]
[Ada] Contracts written for the Ada.Strings.Bounded library

gcc/ada/

* libgnat/a-strbou.adb: Turn SPARK_Mode on.
* libgnat/a-strbou.ads: Write contracts.
* libgnat/a-strfix.ads (Index): Fix grammar error in a comment.
* libgnat/a-strsea.ads (Index): Likewise.
* libgnat/a-strsup.adb: Rewrite the body to take into account
the new definition of Super_String using Relaxed_Initialization
and a predicate.
(Super_Replicate, Super_Translate, Times): Added loop
invariants, and ghost lemmas for Super_Replicate and Times.
(Super_Trim): Rewrite the body using search functions to
determine the cutting points.
(Super_Element, Super_Length, Super_Slice, Super_To_String):
Remove (now written as expression functions in a-strsup.ads).
* libgnat/a-strsup.ads: Added contracts.
(Super_Element, Super_Length, Super_Slice, Super_To_String):
Rewrite as expression functions.

2 years ago[Ada] Add adequate guard before calling First_Rep_Item
Yannick Moy [Fri, 23 Jul 2021 08:52:51 +0000 (10:52 +0200)]
[Ada] Add adequate guard before calling First_Rep_Item

gcc/ada/

* sem_ch13.adb (Build_Predicate_Functions): Add guard.

2 years ago[Ada] VxWorks inconsistent use of return type (BOOL)
Doug Rupp [Mon, 12 Jul 2021 20:21:45 +0000 (13:21 -0700)]
[Ada] VxWorks inconsistent use of return type (BOOL)

gcc/ada/

* libgnarl/s-vxwext.ads (BOOL): New int type.
(Interrupt_Context): Change return type to BOOL.
* libgnarl/s-vxwext__kernel.ads: Likewise.
* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
* libgnarl/s-vxwext__rtp.adb: Likewise.
* libgnarl/s-vxwext__rtp.ads: Likewise.
* libgnarl/s-osinte__vxworks.adb (Interrupt_Context): Change
return type to BOOL.
* libgnarl/s-osinte__vxworks.ads (BOOL) New subtype.
(taskIsSuspended): Change return type to BOOL.
(Interrupt_Context): Change return type to BOOL. Adjust comments
accordingly.
* libgnarl/s-taprop__vxworks.adb (System.VxWorks.Ext.BOOL):
use type.
(Is_Task_Context): Test Interrupt_Context against 0.
* libgnat/i-vxwork.ads (BOOL): New int.
(intContext): Change return type to BOOL. Adjust comments.
* libgnat/i-vxwork__x86.ads: Likewise.

2 years ago[Ada] Add Package_Body helper routine to be used in GNATprove
Piotr Trojanek [Thu, 22 Jul 2021 13:33:16 +0000 (15:33 +0200)]
[Ada] Add Package_Body helper routine to be used in GNATprove

gcc/ada/

* sem_aux.adb, sem_aux.ads (Package_Body): Moved from GNATprove.
* sem_elab.adb (Spec_And_Body_From_Entity): Refine type of parameter.

2 years ago[Ada] Minor doc improvement
Arnaud Charlet [Thu, 22 Jul 2021 07:27:41 +0000 (03:27 -0400)]
[Ada] Minor doc improvement

gcc/ada/

* doc/gnat_ugn/platform_specific_information.rst: Improve doc
on permission and containers.
* gnat_ugn.texi: Regenerate.

2 years ago[Ada] Fix infinite loop in compilation of illegal code
Yannick Moy [Tue, 20 Jul 2021 11:59:19 +0000 (13:59 +0200)]
[Ada] Fix infinite loop in compilation of illegal code

gcc/ada/

* atree.adb (Rewrite): Fix parent node of shared aspects.
* atree.ads (Rewrite): Add ??? comment on incorrect
documentation.
* einfo-utils.adb (Known_Esize): Fix logic.
* sem_ch13.adb (Alignment_Check_For_Size_Change,
Analyze_Attribute_Definition_Clause): Protect against unset
Size.

2 years ago[Ada] More precise analysis of function renamings in GNATprove
Yannick Moy [Fri, 16 Jul 2021 14:35:19 +0000 (16:35 +0200)]
[Ada] More precise analysis of function renamings in GNATprove

gcc/ada/

* freeze.adb (Build_Renamed_Body): Special case for GNATprove.
* sem_ch6.adb (Analyze_Expression_Function): Remove useless test
for a node to come from source, which becomes harmful otherwise.

2 years ago[Ada] Removal of technical debt
Justin Squirek [Mon, 19 Jul 2021 19:13:49 +0000 (15:13 -0400)]
[Ada] Removal of technical debt

gcc/ada/

* ali.adb, ali.ads (Scan_ALI): Remove use of deprecated
parameter Ignore_ED, and all specification for Lower in call to
Get_File_Name.
* ali-util.adb (Read_Withed_ALIs): Modify call to Scan_ALI.
* clean.adb (Clean_Executables): Likewise.
* gnatbind.adb (Add_Artificial_ALI_File, Executable section):
Likewise.
* gnatlink.adb (Executable section): Likewise.
* gnatls.adb (Executable section): Likewise.
* make.adb (Check, Wait_For_Available_Slot): Likewise.
* aspects.ads: Add Aspect_No_Controlled_Parts to
Nonoverridable_Aspect_Id
* opt.ads: Remove function pointers used as a workaround for
ASIS.
* osint-c.adb (Executable section): Remove setting of function
pointer workarounds needed for ASIS.
* osint.adb (Read_Default_Search_Dirs): Correct behavior to
detect EOL characters.
* par_sco.adb (Output_Header): Remove comment regarding use of
First_Sloc.
(Traverse_Sync_Definition): Renamed to
Traverse_Protected_Or_Task_Definition.
* pprint.adb (Interal_List_Name): Add description about purpose,
and refactor conditional statement.
(Prepend): Removed.
* repinfo.adb (List_Rep_Info, Write_Info_Line): Remove use of
subprogram pointer.
* scng.adb (Scan): Remove CODEFIX question, and minor comment
change.
* sem_attr.adb (Analyze_Image_Attribute): Remove special
processing for 'Img.
* sem_ch6.adb (Check_Untagged_Equality): Add RM reference.
(FCE): Add comment describing behavior.
(Is_Non_Overriding_Operation): Minor comment formatting change.
* sem_type.adb (Is_Actual_Subprogram): Add comment about
Comes_From_Source test.
(Matching_Types): Describe non-matching cases.
* sem_util.adb (Is_Confirming): Add stub case for
No_Controlled_Parts.

2 years ago[Ada] Fix access to predicated parent in Itype
Yannick Moy [Thu, 15 Jul 2021 12:31:29 +0000 (14:31 +0200)]
[Ada] Fix access to predicated parent in Itype

gcc/ada/

* sem_ch13.adb (Build_Predicate_Functions): Access
Predicated_Parent only on subtypes.

2 years ago[Ada] Allow more cases of import with Relaxed_RM_Semantics
Arnaud Charlet [Thu, 15 Jul 2021 17:31:11 +0000 (17:31 +0000)]
[Ada] Allow more cases of import with Relaxed_RM_Semantics

gcc/ada/

* sem_prag.adb (Process_Import_Or_Interface): Relax error when
Relaxed_RM_Semantics.

2 years ago[Ada] Improve performance for case-insensitive regular expressions
Steve Baird [Wed, 14 Jul 2021 23:55:28 +0000 (16:55 -0700)]
[Ada] Improve performance for case-insensitive regular expressions

gcc/ada/

* libgnat/s-regpat.adb (Match): Handle the case where Self.First
is not NUL (so we know the first character we are looking for),
but case-insensitive matching has
been specified.
(Optimize): In the case of an EXACTF Op, set Self.First as is
done in the EXACT case, except with the addition of a call to
Lower_Case.

2 years ago[Ada] Remove System.Img_Enum_New unit
Eric Botcazou [Thu, 15 Jul 2021 15:55:19 +0000 (17:55 +0200)]
[Ada] Remove System.Img_Enum_New unit

gcc/ada/

* libgnat/s-imenne.ads, libgnat/s-imenne.adb: Delete.
* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Remove s-imenne.o.
(GNATBIND_OBJS): Likewise.

2 years ago[Ada] Fix obsolete comments/name referring to girder discriminants
Yannick Moy [Thu, 15 Jul 2021 08:40:05 +0000 (10:40 +0200)]
[Ada] Fix obsolete comments/name referring to girder discriminants

gcc/ada/

* einfo.ads: Fix comments.
* exp_aggr.adb: Fix variable name.
* exp_util.adb: Fix comments.
* sem_ch13.adb: Fix comments.
* sem_ch3.adb: Fix comments and variable name.

2 years ago[Ada] VxWorks inconsistent use of return type (Int_Unlock)
Doug Rupp [Mon, 12 Jul 2021 18:47:53 +0000 (11:47 -0700)]
[Ada] VxWorks inconsistent use of return type (Int_Unlock)

gcc/ada/

* libgnarl/s-osinte__vxworks.ads: Make procedure vice function.
* libgnarl/s-vxwext.ads: Likewise.
* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
* libgnarl/s-vxwext__kernel.adb: Likewise.
* libgnarl/s-vxwext__kernel.ads: Likewise.
* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
* libgnarl/s-vxwext__rtp.adb: Likewise.
* libgnarl/s-vxwext__rtp.ads: Likewise.
* libgnarl/s-taprop__vxworks.adb (Stop_All_Tasks): Call
Int_Unlock as a procedure.

2 years ago[Ada] VxWorks inconsistent use of return type (vx_freq_t)
Doug Rupp [Mon, 12 Jul 2021 17:52:32 +0000 (10:52 -0700)]
[Ada] VxWorks inconsistent use of return type (vx_freq_t)

gcc/ada/

* libgnarl/s-osinte__vxworks.ads (SVE): New package renaming
(vx_freq_t): New subtype.
(sysClkRateGet): Return vx_freq_t.
* libgnarl/s-vxwext.ads (vx_freq_t): New type.
* libgnarl/s-vxwext__kernel.ads: Likewise.
* libgnarl/s-vxwext__rtp.ads: Likewise.

2 years ago[Ada] Replace use of 'Image with use of Error_Msg_Uint
Ghjuvan Lacambre [Thu, 15 Jul 2021 09:11:00 +0000 (11:11 +0200)]
[Ada] Replace use of 'Image with use of Error_Msg_Uint

gcc/ada/

* sem_case.adb (Composite_Case_Ops): Replace 'Image with
Error_Msg_Uint.

2 years ago[Ada] Generate temporary for if-expression with -fpreserve-control-flow
Eric Botcazou [Thu, 15 Jul 2021 09:18:02 +0000 (11:18 +0200)]
[Ada] Generate temporary for if-expression with -fpreserve-control-flow

gcc/ada/

* exp_ch4.adb (Expand_N_If_Expression): Generate an intermediate
temporary when the expression is a condition in an outer decision
and control-flow optimizations are suppressed.

2 years ago[Ada] Add -gnatX support for casing on array values
Steve Baird [Fri, 9 Jul 2021 19:04:09 +0000 (12:04 -0700)]
[Ada] Add -gnatX support for casing on array values

gcc/ada/

* exp_ch5.adb (Expand_General_Case_Statement.Pattern_Match): Add
new function Indexed_Element to handle array element
comparisons. Handle case choices that are array aggregates,
string literals, or names denoting constants.
* sem_case.adb (Composite_Case_Ops.Array_Case_Ops): New package
providing utilities needed for casing on arrays.
(Composite_Case_Ops.Choice_Analysis): If necessary, include
array length as a "component" (like a discriminant) when
traversing components. We do not (yet) partition choice analysis
to deal with unequal length choices separately. Instead, we
embed everything in the minimum-dimensionality Cartesian product
space needed to handle all choices properly; this is determined
by the length of the longest choice pattern.
(Composite_Case_Ops.Choice_Analysis.Traverse_Discrete_Parts):
Include length as a "component" in the traversal if necessary.
(Composite_Case_Ops.Choice_Analysis.Parse_Choice.Traverse_Choice):
Add support for case choices that are string literals or names
denoting constants.
(Composite_Case_Ops.Choice_Analysis): Include length as a
"component" in the analysis if necessary.
(Check_Choices.Check_Case_Pattern_Choices.Ops.Value_Sets.Value_Index_Count):
Improve error message when capacity exceeded.
* doc/gnat_rm/implementation_defined_pragmas.rst: Update
documentation to reflect current implementation status.
* gnat_rm.texi: Regenerate.

2 years ago[Ada] Fix imprecise wording for error on scalar storage order
Eric Botcazou [Tue, 13 Jul 2021 09:23:38 +0000 (11:23 +0200)]
[Ada] Fix imprecise wording for error on scalar storage order

gcc/ada/

* freeze.adb (Check_Component_Storage_Order): Give a specific error
message for non-byte-aligned component in the packed case.  Replace
"composite" with "record" in both cases.

2 years ago[Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_All
Arnaud Charlet [Mon, 12 Jul 2021 10:14:15 +0000 (06:14 -0400)]
[Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_All

gcc/ada/

* libgnarl/a-tasini.ads, libgnarl/a-tasini.adb: Make compatible
with No_Elaboration_Code_All.
* libgnarl/s-taskin.ads, libgnarl/s-tassta.adb: Adjust
accordingly.

2 years ago[Ada] Change message format on missing return
Arnaud Charlet [Mon, 12 Jul 2021 09:33:26 +0000 (05:33 -0400)]
[Ada] Change message format on missing return

gcc/ada/

* sem_ch6.adb (Check_Returns): Change message on missing return.

2 years ago[Ada] Mark gnatfind and gnatxref obsolete
Arnaud Charlet [Mon, 12 Jul 2021 10:33:29 +0000 (06:33 -0400)]
[Ada] Mark gnatfind and gnatxref obsolete

gcc/ada/

* gnatfind.adb, gnatxref.adb: Mark these tools as obsolete
before removing them completely.

2 years agoSet bound/cmp/control for until wrap loop.
Jiufu Guo [Wed, 22 Sep 2021 05:20:29 +0000 (13:20 +0800)]
Set bound/cmp/control for until wrap loop.

In patch r12-3136, niter->control, niter->bound and niter->cmp are
derived from number_of_iterations_lt.  While for 'until wrap condition',
the calculation in number_of_iterations_lt is not align the requirements
on the define of them and requirements in determine_exit_conditions.

This patch calculate niter->control, niter->bound and niter->cmp in
number_of_iterations_until_wrap.

gcc/ChangeLog:

2021-09-22  Jiufu Guo  <guojiufu@linux.ibm.com>

PR tree-optimization/102087
* tree-ssa-loop-niter.c (number_of_iterations_until_wrap):
Update bound/cmp/control for niter.

gcc/testsuite/ChangeLog:

2021-09-22  Jiufu Guo  <guojiufu@linux.ibm.com>

* gcc.dg/pr102087.c: New test.
PR tree-optimization/102087

2 years agoCheck for BB before calling register_outgoing_edges.
Aldy Hernandez [Wed, 22 Sep 2021 07:30:21 +0000 (09:30 +0200)]
Check for BB before calling register_outgoing_edges.

We may be asked to fold an artificial statement not in the CFG.  Since
there are no outgoing edges from those, avoid calling
register_outgoing_edges.

Tested on x86-64 Linux.

gcc/ChangeLog:

* gimple-range-fold.cc (fold_using_range::range_of_range_op):
Move check for non-empty BB here.
(fur_source::register_outgoing_edges): ...from here.

2 years agopath solver: Use range_on_path_entry instead of looking at equivalences.
Aldy Hernandez [Wed, 22 Sep 2021 07:34:15 +0000 (09:34 +0200)]
path solver: Use range_on_path_entry instead of looking at equivalences.

Cycling through equivalences to improve a range is nowhere near as
efficient as asking the ranger what the range on entry is.

Testing on a hybrid VRP threader, shows that this improves our VRP
threading benefit from 14.5% to 18.5% and our overall jump threads from
0.85% to 1.28%.

Tested on x86-64 Linux.

gcc/ChangeLog:

* gimple-range-path.cc (path_range_query::internal_range_of_expr):
Remove call to improve_range_with_equivs.
(path_range_query::improve_range_with_equivs): Remove
* gimple-range-path.h: Remove improve_range_with_equivs.

2 years agoAVX512FP16: Add permutation and mask blend intrinsics.
dianhong xu [Tue, 22 Jun 2021 12:33:24 +0000 (20:33 +0800)]
AVX512FP16: Add permutation and mask blend intrinsics.

gcc/ChangeLog:

* config/i386/avx512fp16intrin.h:
(_mm512_mask_blend_ph): New intrinsic.
(_mm512_permutex2var_ph): Ditto.
(_mm512_permutexvar_ph): Ditto.
* config/i386/avx512fp16vlintrin.h:
(_mm256_mask_blend_ph): New intrinsic.
(_mm256_permutex2var_ph): Ditto.
(_mm256_permutexvar_ph): Ditto.
(_mm_mask_blend_ph): Ditto.
(_mm_permutex2var_ph): Ditto.
(_mm_permutexvar_ph): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-14.c: New test.

2 years agoAVX512FP16: Add complex conjugation intrinsic instructions.
dianhong xu [Tue, 22 Jun 2021 12:33:24 +0000 (20:33 +0800)]
AVX512FP16: Add complex conjugation intrinsic instructions.

gcc/ChangeLog:

* config/i386/avx512fp16intrin.h: Add new intrinsics.
(_mm512_conj_pch): New intrinsic.
(_mm512_mask_conj_pch): Ditto.
(_mm512_maskz_conj_pch): Ditto.
* config/i386/avx512fp16vlintrin.h: Add new intrinsics.
(_mm256_conj_pch): New intrinsic.
(_mm256_mask_conj_pch): Ditto.
(_mm256_maskz_conj_pch): Ditto.
(_mm_conj_pch): Ditto.
(_mm_mask_conj_pch): Ditto.
(_mm_maskz_conj_pch): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-conjugation-1.c: New test.
* gcc.target/i386/avx512fp16vl-conjugation-1.c: New test.

2 years agoAVX512FP16: Add reduce operators(add/mul/min/max).
dianhong xu [Mon, 21 Jun 2021 08:11:23 +0000 (16:11 +0800)]
AVX512FP16: Add reduce operators(add/mul/min/max).

gcc/ChangeLog:

* config/i386/avx512fp16intrin.h (_MM512_REDUCE_OP): New macro
(_mm512_reduce_add_ph): New intrinsic.
(_mm512_reduce_mul_ph): Ditto.
(_mm512_reduce_min_ph): Ditto.
(_mm512_reduce_max_ph): Ditto.
* config/i386/avx512fp16vlintrin.h
(_MM256_REDUCE_OP/_MM_REDUCE_OP): New macro.
(_mm256_reduce_add_ph): New intrinsic.
(_mm256_reduce_mul_ph): Ditto.
(_mm256_reduce_min_ph): Ditto.
(_mm256_reduce_max_ph): Ditto.
(_mm_reduce_add_ph): Ditto.
(_mm_reduce_mul_ph): Ditto.
(_mm_reduce_min_ph): Ditto.
(_mm_reduce_max_ph): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-reduce-op-1.c: New test.
* gcc.target/i386/avx512fp16vl-reduce-op-1.c: Ditto.

2 years agoAVX512FP16: Support load/store/abs intrinsics.
dianhong xu [Tue, 15 Jun 2021 09:00:35 +0000 (17:00 +0800)]
AVX512FP16: Support load/store/abs intrinsics.

gcc/ChangeLog:

* config/i386/avx512fp16intrin.h (__m512h_u, __m256h_u,
__m128h_u): New typedef.
(_mm512_load_ph): New intrinsic.
(_mm256_load_ph): Ditto.
(_mm_load_ph): Ditto.
(_mm512_loadu_ph): Ditto.
(_mm256_loadu_ph): Ditto.
(_mm_loadu_ph): Ditto.
(_mm512_store_ph): Ditto.
(_mm256_store_ph): Ditto.
(_mm_store_ph): Ditto.
(_mm512_storeu_ph): Ditto.
(_mm256_storeu_ph): Ditto.
(_mm_storeu_ph): Ditto.
(_mm512_abs_ph): Ditto.
* config/i386/avx512fp16vlintrin.h
(_mm_abs_ph): Ditto.
(_mm256_abs_ph): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-13.c: New test.

2 years agoSmall tweak to comments in range_cannot_be_superflat
Eric Botcazou [Wed, 22 Sep 2021 10:18:48 +0000 (12:18 +0200)]
Small tweak to comments in range_cannot_be_superflat

gcc/ada/
* gcc-interface/decl.c (range_cannot_be_superflat): Tweak comments.

2 years agoIBM Z: TPF: Add cc clobber to profiling expanders
Andreas Krebbel [Wed, 22 Sep 2021 10:13:05 +0000 (12:13 +0200)]
IBM Z: TPF: Add cc clobber to profiling expanders

The code sequence emitted uses CC internally.

gcc/ChangeLog:

* config/s390/tpf.md (prologue_tpf, epilogue_tpf): Add cc clobber.

2 years agoFortran: Add gfc_simple_for_loop aux function
Tobias Burnus [Wed, 22 Sep 2021 09:11:00 +0000 (11:11 +0200)]
Fortran: Add gfc_simple_for_loop aux function

Function to generate a simple loop (to be used internally).
Callers will be added in follow-up commits.

gcc/fortran/
* trans-expr.c (gfc_simple_for_loop): New.
* trans.h (gfc_simple_for_loop): New prototype.

2 years agoobstack.h __PTR_ALIGN vs. ubsan
Alan Modra [Wed, 1 Sep 2021 23:35:05 +0000 (09:05 +0930)]
obstack.h __PTR_ALIGN vs. ubsan

Current ubsan complains on every use of __PTR_ALIGN (when ptrdiff_t is
as large as a pointer), due to making calculations relative to a NULL
pointer.  This patch avoids the problem by extracting out and
simplifying __BPTR_ALIGN for the usual case.  I've continued to use
ptrdiff_t here, where it might be better to throw away __BPTR_ALIGN
entirely and just assume uintptr_t exists.

* obstack.h (__PTR_ALIGN): Expand and simplify __BPTR_ALIGN
rather than calculating relative to a NULL pointer.

2 years agoIBM Z: Fix PR102222
Andreas Krebbel [Wed, 22 Sep 2021 07:32:21 +0000 (09:32 +0200)]
IBM Z: Fix PR102222

Avoid emitting a strict low part move if the insv target actually
affects the whole target reg.

gcc/ChangeLog:

PR target/102222
* config/s390/s390.c (s390_expand_insv): Emit a normal move if it
is actually a full copy of the source operand into the target.
Don't emit a strict low part move if source and target mode match.

gcc/testsuite/ChangeLog:

* gcc.target/s390/pr102222.c: New test.

2 years agoopenmp: Fix OpenMP expansion of scope with non-fallthrugh body [PR102415]
Jakub Jelinek [Wed, 22 Sep 2021 07:32:32 +0000 (09:32 +0200)]
openmp: Fix OpenMP expansion of scope with non-fallthrugh body [PR102415]

I've used function for omp single expansion also for omp scope.  That is
mostly ok, but as the testcase shows, there is one important difference.
The omp single expansion always has a fallthru body, because it during
omp lowering expands the body as if wrapped in an if to simulate that
one thread runs the body and others wait (unless nowait) until it completes
and continue.  omp scope is invoked by all threads and so if the body
is non-fallthru, the barrier (unless nowait) at the end will not be reached
by any of the threads.

The following patch fixes that by handling the case where cfg pass optimizes
away the exit bb of it gracefully.

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

PR middle-end/102415
* omp-expand.c (expand_omp_single): If region->exit is NULL,
assert region->entry is GIMPLE_OMP_SCOPE region and return.

* c-c++-common/gomp/scope-3.c: New test.