platform/upstream/gcc.git
18 months agoada: Fix finalization issues in extended return statements
Eric Botcazou [Wed, 14 Dec 2022 14:16:21 +0000 (15:16 +0100)]
ada: Fix finalization issues in extended return statements

The first issue pertains to return objects of (class-wide) interface types,
which need to be adjusted if the type is not inherently limited.  The second
issue is for return objects of non-class-wide types that are initialized by
a function call, which can use a direct renaming only if the object doing
the capture of the function call is flagged by Is_Related_To_Func_Return.
The third one is that, in the second case, we may need to reassign the tag.

gcc/ada/

* exp_ch3.adb (Expand_N_Object_Declaration): For a special return
object of an interface type that is not inherently limited, make
a call to the Adjust primitive after doing the copy.  For a special
return object of a non-class-wide type initialized by a function
call, use a direct renaming only if the object doing the capture
is flagged by Is_Related_To_Func_Return.  For a special return
object using a direct renaming, reassign the tag, if need be.
* exp_ch6.adb (Expand_Simple_Function_Return): Fix comment.
* exp_util.adb (Is_Related_To_Func_Return): Accept both regular and
renaming object declarations for return objects.

18 months agoada: Fix incorrect warning about unreferenced packed arrays
Bob Duff [Mon, 12 Dec 2022 20:31:05 +0000 (15:31 -0500)]
ada: Fix incorrect warning about unreferenced packed arrays

This patch fixes a bug in which a reference to a renaming of a
component of a packed array was not counted as a reference,
and thus caused incorrect warnings about unreferenced objects.

gcc/ada/

* sem_ch5.adb (Analyze_Assignment): Fix the bug by checking
Original_Node. The renaming might be elsewhere, but the (original)
reference is right here.
* errout.adb: Remove pragma Unreferenced which was added because
of the above bug.
* einfo.ads: Misc cleanup.
* lib.adb: Likewise.
* lib.ads: Likewise.

18 months agoAdd missing declarations to gcc/m2/gm2-libs-min/M2RTS.{def,mod}
Gaius Mulley [Thu, 5 Jan 2023 14:13:43 +0000 (14:13 +0000)]
Add missing declarations to gcc/m2/gm2-libs-min/M2RTS.{def,mod}

This patch adds two missing procedures to
gcc/m2/gm2-libs-min/M2RTS.{def,mod} required for linking.  The
patch also includes test code, changes to
gcc/testsuite/lib/gm2.exp and an expect tcl script to test the
min libraries.

gcc/m2/ChangeLog:

* gm2-libs-min/M2RTS.def (ConstructModules): New procedure
declaration.
(DeconstructModules): New procedure declaration.
* gm2-libs-min/M2RTS.mod (ConstructModules): New procedure
dummy implementation.
(DeconstructModules): New procedure dummy implementation.

gcc/testsuite:

* lib/gm2.exp (gm2_init_minx): New procedure.
(gm2_init_min): New procedure calls gm2_init_min with
dialect flags.
* gm2/link/min/pass/tiny.mod: New test case.
* gm2/link/min/pass/link-min-pass.exp: New file.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
18 months agomodula-2, driver: Implement handling for -static-libgm2.
Iain Sandoe [Sun, 1 Jan 2023 20:47:42 +0000 (20:47 +0000)]
modula-2, driver: Implement handling for -static-libgm2.

This was unimplemented so far.

gcc/ChangeLog:

* common.opt: Add -static-libgm2.
* config/darwin.h (LINK_SPEC): Handle static-libgm2.
* doc/gm2.texi: Document static-libgm2.
* gcc.cc (driver_handle_option): Allow static-libgm2.

gcc/m2/ChangeLog:

* gm2spec.cc (lang_specific_driver): Handle static-libgm2.
* lang.opt: Add static-libgm2.

18 months agomodula-2, driver: Handle static-libstd++ for targets without static/dynamic
Iain Sandoe [Thu, 22 Dec 2022 19:00:13 +0000 (19:00 +0000)]
modula-2, driver: Handle static-libstd++ for targets without static/dynamic

The follows the pattern used in C++ and D drivers to pass -static-libstdc++
onto the target driver to allow spec substitution of static libraries.

NOTE: The handling of Bstatic/dynamic and the possible use of static libgm2
libraries is unimplemented in this driver so far.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/m2/ChangeLog:

* gm2spec.cc (lang_specific_driver): Pass -static-libstdc++ on to
the target driver if the linker does not support Bstatic/dynamic.

18 months agoopenmp: Fix up finish_omp_target_clauses [PR108286]
Jakub Jelinek [Thu, 5 Jan 2023 10:57:30 +0000 (11:57 +0100)]
openmp: Fix up finish_omp_target_clauses [PR108286]

The comment in the loop says that we shouldn't add a map clause if such
a clause exists already, but the loop was actually using OMP_CLAUSE_DECL
on any clause.  Target construct can have various clauses which don't
have OMP_CLAUSE_DECL at all (e.g. nowait, device or if) or clause
where it means something different (e.g. privatization clauses, allocate,
depend).

So, only check OMP_CLAUSE_DECL on OMP_CLAUSE_MAP clauses.

2023-01-05  Jakub Jelinek  <jakub@redhat.com>

PR c++/108286
* semantics.cc (finish_omp_target_clauses): Ignore clauses other than
OMP_CLAUSE_MAP.

* testsuite/libgomp.c++/pr108286.C: New test.

18 months agoAdd AMD znver4 instruction reservations
Tejas Joshi [Tue, 8 Nov 2022 18:40:59 +0000 (00:10 +0530)]
Add AMD znver4 instruction reservations

This adds znver4 automata units and reservations separately from other
znver automata, avoiding the insn-automata.cc size blow-up.

gcc/ChangeLog:

* common/config/i386/i386-common.cc (processor_alias_table):
Use CPU_ZNVER4 for znver4.
* config/i386/i386.md: Add znver4.md.
* config/i386/znver4.md: New.

18 months agolibstdc++: Support single components in name of chrono::current_zone() [PR108211]
Jonathan Wakely [Wed, 4 Jan 2023 20:49:59 +0000 (20:49 +0000)]
libstdc++: Support single components in name of chrono::current_zone() [PR108211]

We currently only handle the case where /etc/localtime is a symlink to a
path like ".../Etc/UTC" and fail for ".../UTC". This makes both work.

libstdc++-v3/ChangeLog:

PR libstdc++/108211
* src/c++20/tzdb.cc (chrono::current_zone()): Check for zone
using only last component of the name.

18 months agolibstdc++: Only use std::atomic<tzdb_list::_Node*> if lock free [PR108228]
Jonathan Wakely [Wed, 4 Jan 2023 16:45:14 +0000 (16:45 +0000)]
libstdc++: Only use std::atomic<tzdb_list::_Node*> if lock free [PR108228]

This fixes linker errors for hppa-hp-hpux11.11 due to an undefined weak
symbol and the use of atomic operations that require libatomic.

The weak symbol can simply be defined, which we already do for darwin.

The std::atomic<_Node*> is only an optimization, so can be avoided for
targets where the underlying atomic ops aren't available without help
from libatomic. The accesses to the std::atomic<_Node*> can be
abstracted behind a new API for getting and setting the cached value,
and then the atomics can be used conditionally.

libstdc++-v3/ChangeLog:

PR libstdc++/108228
PR libstdc++/108235
* config/abi/pre/gnu.ver: Move zoneinfo_dir_override export to
the latest symbol version.
* src/c++20/tzdb.cc (USE_ATOMIC_SHARED_PTR): Define to 0 if
atomic<_Node*> is not always lock free.
(USE_ATOMIC_LIST_HEAD): New macro.
[__hpux__] (__gnu_cxx::zoneinfo_dir_override()): Provide
definition of weak symbol.
(tzdb_list::_Node::_S_head): Rename to _S_head_cache.
(tzdb_list::_Node::_S_list_head): New function for accessing
list head efficiently.
(tzdb_list::_Node::_S_cache_list_head): New function for
updating _S_list_head.

18 months agolibstdc++: Fix std::chrono::hh_mm_ss with unsigned rep [PR108265]
Jonathan Wakely [Wed, 4 Jan 2023 16:43:51 +0000 (16:43 +0000)]
libstdc++: Fix std::chrono::hh_mm_ss with unsigned rep [PR108265]

libstdc++-v3/ChangeLog:

PR libstdc++/108265
* include/std/chrono (hh_mm_ss): Do not use chrono::abs if
duration rep is unsigned.
* testsuite/std/time/hh_mm_ss/1.cc: Check unsigned rep.

18 months agoDaily bump.
GCC Administrator [Thu, 5 Jan 2023 00:17:41 +0000 (00:17 +0000)]
Daily bump.

18 months agoc++: mark_single_function and SFINAE [PR108282]
Patrick Palka [Wed, 4 Jan 2023 19:12:25 +0000 (14:12 -0500)]
c++: mark_single_function and SFINAE [PR108282]

We typically ignore mark_used failure when in a non-SFINAE context for
sake of better error recovery.  But in mark_single_function we're
instead ignoring mark_used failure in a SFINAE context, which ends up
causing the second static_assert here to incorrectly fail.

PR c++/108282

gcc/cp/ChangeLog:

* decl2.cc (mark_single_function): Ignore mark_used failure
only in a non-SFINAE context rather than in a SFINAE one.

gcc/testsuite/ChangeLog:

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

18 months agoc++: Error recovery in merge_default_template_args [PR108206]
Jakub Jelinek [Wed, 4 Jan 2023 17:42:31 +0000 (18:42 +0100)]
c++: Error recovery in merge_default_template_args [PR108206]

We ICE on the following testcase during error recovery, both new_parm
and old_parm are error_mark_node, the ICE is on
          error ("redefinition of default argument for %q+#D", new_parm);
          inform (DECL_SOURCE_LOCATION (old_parm),
                  "original definition appeared here");
where we don't print anything useful for new_parm and ICE trying to
access DECL_SOURCE_LOCATION of old_parm.  I think we shouldn't diagnose
anything when either of the parms is erroneous, GCC 11 before
merge_default_template_args has been added was doing
      if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
          || TREE_VEC_ELT (parms, i) == error_mark_node)
        continue;

      tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
      if (error_operand_p (tmpl_parm))
        return false;
in redeclare_class_template.

2023-01-04  Jakub Jelinek  <jakub@redhat.com>

PR c++/108206
* decl.cc (merge_default_template_args): Return false if either
new_parm or old_parm are erroneous.

* g++.dg/template/pr108206.C: New test.

18 months agoAvoid quadratic behaviour of LTO symbol promotion
Jan Hubicka [Wed, 4 Jan 2023 17:03:53 +0000 (18:03 +0100)]
Avoid quadratic behaviour of LTO symbol promotion

LTO partitioning does renaming of symbols that ends up in same partition
and clash with assembler name.  This is done for "ordinary" symbols (such
as static functions) but also for symbols that are kept only as master
clones holding bodies of functions to be specialized later.
This is done only becuase we stream bodies to named section and clash
in names would mean that ltrans will load wrong body and crash.

Martin recently added bit to stream body for clones that are needed
since this makes it easier to bookeep what summaries are output.  THis
however triggers mass renaming of inline clones that is very slow
and unnecesary since their bodies are never streamed.

Bootstrapped/regtested x86_64-linux, comitted.

gcc/lto/ChangeLog:

2023-01-04  Jan Hubicka  <hubicka@ucw.cz>

* lto-partition.cc (may_need_named_section_p): Clones with no body
need no remaning.

18 months agolibstdc++: Export the __gnu_cxx::zoneinfo_dir_override symbol [PR108228].
Iain Sandoe [Sat, 24 Dec 2022 10:55:09 +0000 (10:55 +0000)]
libstdc++: Export the __gnu_cxx::zoneinfo_dir_override symbol [PR108228].

This symbol needs to be visible in the library interface for Darwin
to override it with a user-provided one.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR libstdc++/108228

libstdc++-v3/ChangeLog:

* config/abi/pre/gnu.ver (GLIBCXX_3.4):
Add __gnu_cxx::zoneinfo_dir_override().

18 months agomodula-2: Fix registration of modules via constructors [PR108183].
Iain Sandoe [Fri, 30 Dec 2022 19:46:13 +0000 (19:46 +0000)]
modula-2: Fix registration of modules via constructors [PR108183].

This reworks the mechanism used for module registration to use init-
time constructors.  The order of registration is not important, the
actual initialization dependency tree will be computed early in the
execution (all that matters is that we have registered before that).

This fixes a potential issue in which the external name known to the
m2 system is of the form _M2_XXXXXX_ctor() but the C++ code was
producing a static variable instance with the same name.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108183

gcc/m2/ChangeLog:

* gm2-libs-ch/UnixArgs.cc (_M2_UnixArgs_ctor): Rework to use
an extern "C" function with 'constructor' attribute.
* gm2-libs-ch/dtoa.cc (_M2_dtoa_ctor): Likewise.
* gm2-libs-ch/ldtoa.cc (_M2_ldtoa_ctor): Likewise.

libgm2/ChangeLog:

* libm2cor/KeyBoardLEDs.cc (_M2_KeyBoardLEDs_ctor): Rework to use
an extern "C" function with 'constructor' attribute.
* libm2iso/ErrnoCategory.cc (_M2_ErrnoCategory_ctor): Likewise.
* libm2iso/RTco.cc (_M2_RTco_ctor): Likewise.
* libm2pim/Selective.cc (_M2_Selective_ctor): Likewise.
* libm2pim/SysExceptions.cc (_M2_SysExceptions_ctor): Likewise.
* libm2pim/UnixArgs.cc (_M2_UnixArgs_ctor): Likewise.
* libm2pim/cgetopt.cc (_M2_cgetopt_ctor): Likewise.
* libm2pim/dtoa.cc (_M2_dtoa_ctor): Likewise.
* libm2pim/errno.cc (_M2_errno_ctor): Likewise.
* libm2pim/ldtoa.cc (_M2_ldtoa_ctor): Likewise.
* libm2pim/sckt.cc (_M2_sckt_ctor): Likewise.
* libm2pim/termios.cc (_M2_termios_ctor): Likewise.
* libm2pim/wrapc.c: Add a new line to the file end.

18 months agomodula-2: Module registration constructors need to be visible [PR108259].
Iain Sandoe [Sun, 1 Jan 2023 15:42:03 +0000 (15:42 +0000)]
modula-2: Module registration constructors need to be visible [PR108259].

In the current design the main executable links explicitly to the module
registration construtors that it uses.  This means that they must be
visible in shared libraries.

PR modula2/108259

gcc/m2/ChangeLog:

* gm2-gcc/m2decl.cc (m2decl_DeclareModuleCtor): Make module
registration constructors visible.

18 months agomodula-2, doc: Build dvi, ps and pdf doc in the gcc/doc directory.
Iain Sandoe [Sat, 31 Dec 2022 13:22:56 +0000 (13:22 +0000)]
modula-2, doc: Build dvi, ps and pdf doc in the gcc/doc directory.

This also uses the configured $(TEXI2DVI) and $(TEXI2PDF) to deal with those
targets (since we cannot assume to know what the use might have installed).

gcc/m2/ChangeLog:

* Make-lang.in (dvi, ps, pdf): Build in the gcc/doc directory, also
use the configured tools for texi -> dvi and texi -> pdf.

18 months agoModula-2, testsuite: No 96 bit floating type on Darwin.
Iain Sandoe [Sat, 31 Dec 2022 13:59:41 +0000 (13:59 +0000)]
Modula-2, testsuite: No 96 bit floating type on Darwin.

The realbitscast.mod is currently failing on x86_64 and aarch64
Darwin since they do not have a 96b floating type.  Disable the
type for all Darwin arches.

gcc/testsuite/ChangeLog:

* gm2/iso/pass/realbitscast.mod: Disable REAL96 on Darwin.

18 months agoMAINTAINERS: Add myself as Modula-2 front-end maintainer
Gaius Mulley [Wed, 4 Jan 2023 12:52:15 +0000 (12:52 +0000)]
MAINTAINERS: Add myself as Modula-2 front-end maintainer

Update MAINTAINERS file.

Changelog:

* MAINTAINERS: Add Gaius Mulley as Modula-2 front-end maintainer.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
18 months agolibstdc++: Fix std::array<T, 0>::data() to be a constant expression [PR108258]
Jonathan Wakely [Wed, 4 Jan 2023 11:49:19 +0000 (11:49 +0000)]
libstdc++: Fix std::array<T, 0>::data() to be a constant expression [PR108258]

When I refactored the __array_traits helper I broke this.

libstdc++-v3/ChangeLog:

PR libstdc++/108258
* include/std/array (__array_traits<T, 0>::operator T*()): Add
constexpr.
* testsuite/23_containers/array/element_access/constexpr_c++17.cc: Check
std::array<T, 0>::data().

18 months agovrp: Handle pointers in maybe_set_nonzero_bits [PR108253]
Jakub Jelinek [Wed, 4 Jan 2023 11:16:22 +0000 (12:16 +0100)]
vrp: Handle pointers in maybe_set_nonzero_bits [PR108253]

maybe_set_nonzero_bits calls set_nonzero_bits which asserts that
var doesn't have pointer type.  While we could punt for those
cases, I think we can handle at least some easy cases.
Earlier in maybe_set_nonzero_bits we've checked this is on
(var & cst) == 0
edge and the other edge is __builtin_unreachable, so if cst
is say 3 as in the testcase, we want to turn it into 4 byte alignment
of the pointer.

2023-01-04  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/108253
* tree-vrp.cc (maybe_set_nonzero_bits): Handle var with pointer
types.

* g++.dg/opt/pr108253.C: New test.

18 months agogeneric-match-head: Don't assume GENERIC folding is done only early [PR108237]
Jakub Jelinek [Wed, 4 Jan 2023 09:54:38 +0000 (10:54 +0100)]
generic-match-head: Don't assume GENERIC folding is done only early [PR108237]

We ICE on the following testcase, because a valid V2DImode
!= comparison is folded into an unsupported V2DImode > comparison.
The match.pd pattern which does this looks like:
/* Transform comparisons of the form (X & Y) CMP 0 to X CMP2 Z
   where ~Y + 1 == pow2 and Z = ~Y.  */
(for cst (VECTOR_CST INTEGER_CST)
 (for cmp (eq ne)
      icmp (le gt)
  (simplify
   (cmp (bit_and:c@2 @0 cst@1) integer_zerop)
    (with { tree csts = bitmask_inv_cst_vector_p (@1); }
     (if (csts && (VECTOR_TYPE_P (TREE_TYPE (@1)) || single_use (@2)))
      (with { auto optab = VECTOR_TYPE_P (TREE_TYPE (@1))
                         ? optab_vector : optab_default;
              tree utype = unsigned_type_for (TREE_TYPE (@1)); }
       (if (target_supports_op_p (utype, icmp, optab)
            || (optimize_vectors_before_lowering_p ()
                && (!target_supports_op_p (type, cmp, optab)
                    || !target_supports_op_p (type, BIT_AND_EXPR, optab))))
        (if (TYPE_UNSIGNED (TREE_TYPE (@1)))
         (icmp @0 { csts; })
         (icmp (view_convert:utype @0) { csts; })))))))))
and that optimize_vectors_before_lowering_p () guarded stuff there
already deals with this problem, not trying to fold a supported comparison
into a non-supported one.  The reason it doesn't work in this case is that
it isn't GIMPLE folding which does this, but GENERIC folding done during
forwprop4 - forward_propagate_into_comparison -> forward_propagate_into_comparison_1
-> combine_cond_expr_cond -> fold_binary_loc -> generic_simplify
and we simply assumed that GENERIC folding happens only before
gimplification.

The following patch fixes that by checking cfun properties instead of
always returning true in those cases.

2023-01-04  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/108237
* generic-match-head.cc: Include tree-pass.h.
(canonicalize_math_p, optimize_vectors_before_lowering_p): Define
to false if cfun and cfun->curr_properties has PROP_gimple_opt_math
resp. PROP_gimple_lvec property set.

* gcc.c-torture/compile/pr108237.c: New test.

18 months agoubsan: Avoid narrowing of multiply for -fsanitize=signed-integer-overflow [PR108256]
Jakub Jelinek [Wed, 4 Jan 2023 09:52:49 +0000 (10:52 +0100)]
ubsan: Avoid narrowing of multiply for -fsanitize=signed-integer-overflow [PR108256]

We shouldn't narrow multiplications originally done in signed types,
because the original multiplication might overflow but the narrowed
one will be done in unsigned arithmetics and will never overflow.

2023-01-04  Jakub Jelinek  <jakub@redhat.com>

PR sanitizer/108256
* convert.cc (do_narrow): Punt for MULT_EXPR if original
type doesn't wrap around and -fsanitize=signed-integer-overflow
is on.
* fold-const.cc (fold_unary_loc) <CASE_CONVERT>: Likewise.

* c-c++-common/ubsan/pr108256.c: New test.

18 months agoInitial Emeraldrapids Support
Hu, Lin1 [Thu, 15 Dec 2022 07:51:44 +0000 (15:51 +0800)]
Initial Emeraldrapids Support

gcc/ChangeLog:

* common/config/i386/cpuinfo.h (get_intel_cpu): Handle Emeraldrapids.
* common/config/i386/i386-common.cc: Add Emeraldrapids.

18 months agoi386: Remove Meteorlake's family_model
Hu, Lin1 [Thu, 15 Dec 2022 07:51:18 +0000 (15:51 +0800)]
i386: Remove Meteorlake's family_model

gcc/ChangeLog:

* common/config/i386/cpuinfo.h (get_intel_cpu): Remove case 0xb5
for meteorlake.

18 months agoDaily bump.
GCC Administrator [Wed, 4 Jan 2023 00:17:22 +0000 (00:17 +0000)]
Daily bump.

18 months agotestsuite: AIX
David Edelsohn [Mon, 26 Dec 2022 23:01:29 +0000 (18:01 -0500)]
testsuite: AIX

C++ Modules do not work reliably on AIX.  This patch disables the
modules portion of the testsuite on AIX.

IBM128 float keywords not enabled for AIX, so skip this test.

gcc/testsuite/ChangeLog:

* g++.dg/modules/modules.exp: Skip on AIX.
* gcc.target/powerpc/pr99708.c: Skip on AIX.

18 months agoOpenMP: GC unused SIMD clones
Sandra Loosemore [Tue, 3 Jan 2023 17:46:02 +0000 (17:46 +0000)]
OpenMP: GC unused SIMD clones

SIMD clones are created during the IPA phase when it is not known whether
or not the vectorizer can use them.  Clones for functions with external
linkage are part of the ABI, but local clones can be GC'ed if no calls are
found in the compilation unit after vectorization.

gcc/ChangeLog
* cgraph.h (struct cgraph_node): Add gc_candidate bit, modify
default constructor to initialize it.
* cgraphunit.cc (expand_all_functions): Save gc_candidate functions
for last and iterate to handle recursive calls.  Delete leftover
candidates at the end.
* omp-simd-clone.cc (simd_clone_create): Set gc_candidate bit
on local clones.
* tree-vect-stmts.cc (vectorizable_simd_clone_call): Clear
gc_candidate bit when a clone is used.

gcc/testsuite/ChangeLog
* g++.dg/gomp/target-simd-clone-1.C: Tweak to test
that the unused clone is GC'ed.
* gcc.dg/gomp/target-simd-clone-1.c: Likewise.

18 months agolibgcc: Specialize execute_cfa_program in DWARF unwinder for alignments [redo]
Florian Weimer [Tue, 3 Jan 2023 15:47:32 +0000 (16:47 +0100)]
libgcc: Specialize execute_cfa_program in DWARF unwinder for alignments [redo]

The parameters fs->data_align and fs->code_align always have fixed
values for a particular target in GCC-generated code.  Specialize
execute_cfa_program for these values, to avoid multiplications.

gcc/c-family/

* c-cppbuiltin.cc (c_cpp_builtins): Define
__LIBGCC_DWARF_CIE_DATA_ALIGNMENT__.

libgcc/

* unwind-dw2-execute_cfa.h: New file.  Extracted from
the execute_cfa_program function in unwind-dw2.c.
* unwind-dw2.c (execute_cfa_program_generic): New function.
(execute_cfa_program_specialized): Likewise.
(execute_cfa_program): Call execute_cfa_program_specialized
or execute_cfa_program_generic, as appropriate.

18 months agoRevert "Compute a table of DWARF register sizes at compile"
Florian Weimer [Tue, 3 Jan 2023 15:47:31 +0000 (16:47 +0100)]
Revert "Compute a table of DWARF register sizes at compile"

This reverts commit 3b6cac2b44b384cd2091eaeaebeb3478c253a25d.

18 months agoRevert "Define __LIBGCC_DWARF_REG_SIZES_CONSTANT__ if DWARF register size is constant"
Florian Weimer [Tue, 3 Jan 2023 15:47:31 +0000 (16:47 +0100)]
Revert "Define __LIBGCC_DWARF_REG_SIZES_CONSTANT__ if DWARF register size is constant"

This reverts commit 97bbdb726aba76ead550e25061029cf0aa78671b.

18 months agoRevert "libgcc: Specialize execute_cfa_program in DWARF unwinder for alignments"
Florian Weimer [Tue, 3 Jan 2023 15:47:31 +0000 (16:47 +0100)]
Revert "libgcc: Specialize execute_cfa_program in DWARF unwinder for alignments"

This reverts commit cb775ecd6e437de8fdba9a3f173f3787e90e98f2.

18 months agotree-optimization/105043: Object Size Checking docs cleanup
Siddhesh Poyarekar [Thu, 15 Dec 2022 19:24:55 +0000 (14:24 -0500)]
tree-optimization/105043: Object Size Checking docs cleanup

Break the _FORTIFY_SOURCE-specific builtins out into a separate
subsection from Object Size Checking built-ins and mention
_FORTIFY_SOURCE in there so that the link between the object size
checking builtins, the helper builtins (e.g. __builtin___memcpy_chk) and
_FORTIFY_SOURCE is clearer.

gcc/ChangeLog:

PR tree-optimization/105043
* doc/extend.texi (Object Size Checking): Split out into two
subsections and mention _FORTIFY_SOURCE.

Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
18 months agoImprove ix86_expand_int_movcc to allow condition (mask) sharing.
Roger Sayle [Tue, 3 Jan 2023 13:40:47 +0000 (13:40 +0000)]
Improve ix86_expand_int_movcc to allow condition (mask) sharing.

This patch modifies the way that ix86_expand_int_movcc generates RTL,
to allow the condition mask to be shared/reused between multiple
conditional move sequences.  Such redundancy is common when RTL
if-conversion transforms non-trivial basic blocks.

As a motivating example, consider the new test case:

int a, b, c, d;
int foo(int x)
{
    if (x == 0) {
        a = 3;
        b = 1;
        c = 4;
        d = 1;
    } else {
        a = 5;
        b = 9;
        c = 2;
        d = 7;
    }
    return x;
}

This is currently compiled, with -O2, to:

foo: cmpl $1, %edi
movl %edi, %eax
sbbl %edi, %edi
andl $-2, %edi
addl $5, %edi
cmpl $1, %eax
sbbl %esi, %esi
movl %edi, a(%rip)
andl $-8, %esi
addl $9, %esi
cmpl $1, %eax
sbbl %ecx, %ecx
movl %esi, b(%rip)
andl $2, %ecx
addl $2, %ecx
cmpl $1, %eax
sbbl %edx, %edx
movl %ecx, c(%rip)
andl $-6, %edx
addl $7, %edx
movl %edx, d(%rip)
ret

Notice that the if-then-else blocks have been if-converted into four
conditional move sequences/assignments, each consisting of cmpl, sbbl,
andl and addl.  However, as the conditions are the same, the cmpl and
sbbl instructions used to generate the mask could be shared by CSE.

This patch enables that so that we now generate:

foo:    cmpl    $1, %edi
        movl    %edi, %eax
        sbbl    %edx, %edx
        movl    %edx, %edi
        movl    %edx, %esi
        movl    %edx, %ecx
        andl    $-6, %edx
        andl    $-2, %edi
        andl    $-8, %esi
        andl    $2, %ecx
        addl    $7, %edx
        addl    $5, %edi
        addl    $9, %esi
        addl    $2, %ecx
        movl    %edx, d(%rip)
        movl    %edi, a(%rip)
        movl    %esi, b(%rip)
        movl    %ecx, c(%rip)
        ret

Notice, the code now contains only a single cmpl and a single sbbl,
with result being shared (via movl).

2023-01-03  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* config/i386/i386-expand.cc (ix86_expand_int_movcc): Rewrite
RTL expansion to allow condition (mask) to be shared/reused,
by avoiding overwriting pseudos and adding REG_EQUAL notes.

gcc/testsuite/ChangeLog
* gcc.target/i386/cmov10.c: New test case.

18 months agoPR target/108229: A minor STV compute_convert_gain tweak on x86.
Roger Sayle [Tue, 3 Jan 2023 13:37:31 +0000 (13:37 +0000)]
PR target/108229: A minor STV compute_convert_gain tweak on x86.

This patch addresses PR target/108229, which is a change in code
generation during the STV pass, due to the recently approved patch
to handle vec_select (reductions) in the vector unit.  The recent
change is innocent, but exposes a latent STV "gain" calculation issue
that is benign (or closely balanced) on most microarchitectures.

The issue is when STV considers converting PLUS with a MEM operand.

On TARGET_64BIT (m=1):
addq 24(%rdi), %rdx // 4 bytes
or with -m32 (m=2)
        addl    24(%esi), %eax // 3 bytes
        adcl    28(%esi), %edx // 3 bytes
is being converted by STV to
        vmovq   24(%rdi), %xmm5 // 5 bytes
        vpaddq  %xmm5, %xmm4, %xmm4 // 4 bytes

The current code in general_scalar_chain::compute_convert_gain
considers that scalar unit addition is replaced with a vector
unit addition (usually about the same cost), but doesn't consider
anything special about MEM operands, assuming that a scalar load
gains/costs nothing compared to a vector load.  We can allow the
backend slightly better fine tuning by including in the gain
calculation that m scalar loads are being replaced by one vector
load, and when optimizing for size including that we're increasing
code size (e.g. an extra vmovq instruction for a MEM operand).

This patch is a win on the CSiBE benchmark when compiled with -Os.

2023-01-03  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
PR target/108229
* config/i386/i386-features.cc
(general_scalar_chain::compute_convert_gain) <case PLUS>: Consider
the gain/cost of converting a MEM operand.

18 months agoexpr: Fix up store_expr into SUBREG_PROMOTED_* target [PR108264]
Jakub Jelinek [Tue, 3 Jan 2023 11:13:24 +0000 (12:13 +0100)]
expr: Fix up store_expr into SUBREG_PROMOTED_* target [PR108264]

The following testcase ICEs on s390x-linux (e.g. with -march=z13).
The problem is that target is (subreg/s/u:SI (reg/v:DI 66 [ x+-4 ]) 4)
and we call convert_move from temp to the SUBREG_REG of that, expecting
to extend the value properly.  That works nicely if temp has some
scalar integer mode (or partial one), but ICEs when temp has V4QImode
on the assertion that from and to modes have the same bitsize.
store_expr generally allows say store from V4QI to SI target because
they have the same size and if temp is a CONST_INT, we already have code
to convert the constant properly, so the following patch just adds handling
of non-scalar integer modes by converting them to the mode of target
first before convert_move extends them.

2023-01-03  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/108264
* expr.cc (store_expr): For stores into SUBREG_PROMOTED_* targets
from source which doesn't have scalar integral mode first convert
it to outer_mode.

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

18 months agocfgrtl: Don't try to redirect asm goto to EXIT [PR108263]
Jakub Jelinek [Tue, 3 Jan 2023 11:12:35 +0000 (12:12 +0100)]
cfgrtl: Don't try to redirect asm goto to EXIT [PR108263]

The following testcase distilled from Linux kernel on ppc64le ICEs,
because fixup_reorder_chain sees a bb with a single fallthru edge
falling into a bb with simple return and decides to redirect
that fallthru edge to EXIT.  That is possible if the bb ending
in the fallthru edge doesn't end with a jump or ends with a normal
unconditional jump, but not when the bb ends with asm goto which can despite
a single fallthru have multiple labels to the fallthrough basic block.

The following patch makes sure we never try to redirect such cases to EXIT.

2023-01-03  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/108263
* cfgrtl.cc (fixup_reorder_chain): Avoid trying to redirect
asm goto to EXIT.

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

18 months agoada: Fix unescaped quotes when combining fdiagnostics-format=json and gnatdJ
Ghjuvan Lacambre [Mon, 12 Dec 2022 13:54:47 +0000 (14:54 +0100)]
ada: Fix unescaped quotes when combining fdiagnostics-format=json and gnatdJ

This commit fixes a small bug where GNAT would emit unescaped quotes in
its -fdiagnostics-format=json output when using -gnatdJ and emitting
messages about operator functions (e.g. "=").

gcc/ada/

* errout.adb (Write_JSON_Span): Escape subprogram name.

18 months agoada: output.adb: fix newline being inserted when buffer is full
Ghjuvan Lacambre [Thu, 8 Dec 2022 08:58:28 +0000 (09:58 +0100)]
ada: output.adb: fix newline being inserted when buffer is full

Before this commit, when GNAT needed to emit lines longer than
the buffer, it accidentally inserted a newline in its output when
attempting to flush its buffer.

We fix this by using Flush_Buffer instead of Write_Eol in Write_Char.

gcc/ada/

* output.adb (Write_Buffer): Use Flush_Buffer instead of Write_Eol.

18 months agoada: Fix GNAT.Formatted_String's handling of real values
Ronan Desplanques [Fri, 9 Dec 2022 10:29:02 +0000 (11:29 +0100)]
ada: Fix GNAT.Formatted_String's handling of real values

Before this patch, passing a width and a precision through
arguments with the "*" syntax always failed for real values in
GNAT.Formatted_String's routines.

gcc/ada/

* libgnat/g-forstr.adb (P_Flt_Format): Add "*" syntax handling.

18 months agoada: Fix parsing bug in GNAT.Formatted_String
Ronan Desplanques [Fri, 9 Dec 2022 10:29:02 +0000 (11:29 +0100)]
ada: Fix parsing bug in GNAT.Formatted_String

Before this patch, GNAT.Formatted_String.Formatted_String failed to
handle format strings with two or more specifiers whose widths were
specified with the "*" syntax. This patch makes the parser
correctly reset its bits of state related to width and precision
parsing when needed.

gcc/ada/

* libgnat/g-forstr.adb (P_Int_Format): Fix parsing bug.

18 months agoada: Fix premature finalization of return temporary
Eric Botcazou [Fri, 9 Dec 2022 23:51:10 +0000 (00:51 +0100)]
ada: Fix premature finalization of return temporary

Various parts of the expander and the code generator must have a consistent
view on which temporaries generated for return statements must be finalized
because they are regular temporaries, and which ones must not be since they
are allocated on the return stack directly.  The Is_Related_To_Func_Return
predicate is used for this purpose and needs to be tested consistently.

gcc/ada/

* exp_ch6.adb (Expand_Simple_Function_Return): Make sure that a
captured function call also verifies Is_Related_To_Func_Return.
Do not generate an actual subtype for special return objects.
* exp_util.ads (Is_Related_To_Func_Return): Add commentary.

18 months agoada: Fix format string parsing in GNAT.Formatted_String
Ronan Desplanques [Wed, 7 Dec 2022 16:37:21 +0000 (17:37 +0100)]
ada: Fix format string parsing in GNAT.Formatted_String

Before this patch, format strings ending with "%%" (two consecutive
percent signs) caused GNAT.Formatted_String."-" to give the wrong
output, and cause the various GNAT.Formatted_String."&" to raise
exceptions with misleading error messages.

Also before this patch, a bug in GNAT.Formatted_String."-" caused
characters from the format string to be dropped. Calling
GNAT.Formatted_String."-" on an instance of
GNAT.Formatted_String.Formatted_String caused subsequent uses of
that instance to return wrong results.

In addition to fixing the parsing of format strings, this patch
centralizes the detection of format specifiers in a unique
procedure.

gcc/ada/

* libgnat/g-forstr.adb
(Advance_And_Accumulate_Until_Next_Specifier): New procedure.
("-"): Replace inline code with call to
Advance_And_Accumulate_Until_Next_Specifier.
(Next_Format): likewise.

18 months agoada: Make Apply_Discriminant_Check.Denotes_Explicit_Dereference more robust
Eric Botcazou [Thu, 8 Dec 2022 22:21:58 +0000 (23:21 +0100)]
ada: Make Apply_Discriminant_Check.Denotes_Explicit_Dereference more robust

The predicate implements the rules of the language so it needs to cope with
constructs rewritten by the expander, in particular explicit dereferences
that the expander uses liberally for various purposes.

This change makes the detection of rewritten calls more robust and adds the
detection of rewritten return objects.

gcc/ada/

* checks.adb (Apply_Discriminant_Check.Denotes_Explicit_Dereference):
Return false for artificial dereferences generated by the expander.

18 months agoada: Fix calling convention of foreign functions returning limited type
Eric Botcazou [Thu, 8 Dec 2022 09:51:29 +0000 (10:51 +0100)]
ada: Fix calling convention of foreign functions returning limited type

Such functions use neither Ada 2005's build-in-place mechanism nor Ada 95's
return-by-reference mechanism, but instead the common calling convention of
functions returning a nonlimited by-reference type.

gcc/ada/

* exp_ch6.adb (Is_Build_In_Place_Function): Adjust comment.
* sem_util.adb (Compute_Returns_By_Ref): Do not set Returns_By_Ref
on functions with foreign convention.

18 months agoada: Adapt frontend optimization for aggregate assignment
Marc Poulhiès [Fri, 25 Nov 2022 13:52:04 +0000 (14:52 +0100)]
ada: Adapt frontend optimization for aggregate assignment

The frontend currently relies on gigi to use efficient assignment in
particular cases like:

  Some_Var.all := (others => (others => 0));

gigi would use memset to clear memory pointed to by Some_Var.

In the case of an access with a Designated_Storage_Model aspect with a Copy_To
procedure, memset can't be used directly. Instead of simply disabling this
frontend/gigi optimization and having the frontend emit several assignments, a
temporary is used (through the new Build_Assignment_With_Temporary): gigi can
still memset it, and this temporary is then copied into the original
target (and the regular storage model mechanism handles it).

gcc/ada/

* exp_aggr.adb (Build_Assignment_With_Temporary): New.
(Expand_Array_Aggregate): Tune backend optimization
and insert a temporary in the case of an access with
Designated_Storage_Model aspect.
(Convert_Array_Aggr_In_Allocator): Likewise.

18 months agoada: Another small adjustment to special resolution of membership test
Eric Botcazou [Wed, 7 Dec 2022 16:54:37 +0000 (17:54 +0100)]
ada: Another small adjustment to special resolution of membership test

This goes back to the original implementation but keeps the special size
test with universal_integer to cope with its limited range.

gcc/ada/

* sem_res.adb (Resolve_Membership_Op): Adjust again latest change.

18 months agoada: Make Sem_Util.Is_Aliased_View predicate more robust
Eric Botcazou [Wed, 7 Dec 2022 16:26:27 +0000 (17:26 +0100)]
ada: Make Sem_Util.Is_Aliased_View predicate more robust

The predicate implements the rules of the language so it needs to cope with
constructs rewritten by the expander, in particular explicit dereferences
that the expander uses liberally for various purposes.

This change makes the detection of rewritten calls more robust, plugging an
existing loophole for specific objects and exposing a missing propagation of
the Is_Aliased flag for certain build-in-place objects, as well as adds the
detection of rewritten return objects.

It also contains a small enhancement to Set_Debug_Info_Defining_Id aimed at
making it easier to debug the generated code by means of -gnatD.

gcc/ada/

* sem_util.ads (Set_Debug_Info_Defining_Id): Adjust comment.
* sem_util.adb (Is_Aliased_View) <N_Explicit_Dereference>: Return
false for more artificial dereferences generated by the expander.
(Set_Debug_Info_Defining_Id): Set Debug_Info_Needed unconditionally
in -gnatD mode.
* exp_ch6.adb (Replace_Renaming_Declaration_Id): Also preserve the
Is_Aliased flag.

18 months agoada: GNAT UGN: Adjust wording in "Platform-specific Information" chapter
Joel Brobecker [Tue, 6 Dec 2022 05:21:57 +0000 (09:21 +0400)]
ada: GNAT UGN: Adjust wording in "Platform-specific Information" chapter

The wording of the introduction paragraph specified an incomplete
list of OSes. Rather than trying to update the list, this commit
changes the text to make it more general. For those parts of
this chapter which only apply to specific OSes, the documentation
is written in a way that it is clear which OS it applies to.

gcc/ada/

* doc/gnat_ugn/platform_specific_information.rst
(_Platform_Specific_Information): Minor rewording of intro text.
* gnat_ugn.texi: Regenerate.

18 months agoada: Fix detection of function calls in object declarations
Eric Botcazou [Tue, 6 Dec 2022 23:56:43 +0000 (00:56 +0100)]
ada: Fix detection of function calls in object declarations

The current code has relied on Original_Node to detect rewritten function
calls in object declarations but that's not robust enough in the presence
of function calls written in object notation.

gcc/ada/

* exp_util.ads (Is_Captured_Function_Call): Declare.
* exp_util.adb (Is_Captured_Function_Call): New predicate.
* exp_ch3.adb (Expand_N_Object_Declaration): Use it to detect a
rewritten function call as the initializing expression.
* exp_ch6.adb (Expand_Simple_Function_Return): Use it to detect a
rewritten function call as the returned expression.

18 months agoada: Simplify [Small_]Integer_Type_For
Bob Duff [Tue, 6 Dec 2022 16:37:27 +0000 (11:37 -0500)]
ada: Simplify [Small_]Integer_Type_For

Make Small_Integer_Type_For call Integer_Type_For,
so they share most of the code.

Remove Standard_Long_Integer from consideration,
because that's different on different machines (32- or 64-bit).
Standard_Integer or Standard_Long_Long_Integer will be
chosen.

gcc/ada/

* exp_util.adb (Integer_Type_For): Assertion and comment.
(Small_Integer_Type_For): Remove some code and call
Integer_Type_For instead.
* sem_util.ads (Rep_To_Pos_Flag): Improve comments. "Standard_..."
seems overly pedantic here.
* exp_attr.adb (Succ, Pred): Clean up: make the code as similar as
possible.
* exp_ch4.adb: Minor: named notation.

18 months agoada: Cannot reference ghost entity in class-wide precondition
Javier Miranda [Mon, 28 Nov 2022 09:15:54 +0000 (09:15 +0000)]
ada: Cannot reference ghost entity in class-wide precondition

gcc/ada/

* ghost.adb (Is_OK_Declaration): A reference to a Ghost entity may
appear within the class-wide precondition of a helper subprogram.
This context is treated as suitable because it was already
verified when we were analyzing the original class-wide
precondition.

18 months agoada: Fix support of Default_Component_Value aspect on derived types
Eric Botcazou [Mon, 5 Dec 2022 21:31:50 +0000 (22:31 +0100)]
ada: Fix support of Default_Component_Value aspect on derived types

The support of the Default_Component_Value aspect on derived constrained
array types is broken because of a couple of issues: 1) the derived types
incorrectly inherit the initialization procedure of the ancestor types
and 2) the propagation of the aspect does not work for constrained array
types (unlike for unconstrained array types).

gcc/ada/

* exp_tss.adb (Base_Init_Proc): Do not return the Init_Proc of the
ancestor type for a derived array type.
* sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): Factor out the
common processing done on representation items.
For Default_Component_Value and Default_Value, look into the first
subtype to find out the representation items.

18 months agoDaily bump.
GCC Administrator [Tue, 3 Jan 2023 00:17:09 +0000 (00:17 +0000)]
Daily bump.

18 months agoi386: correct division modeling in lujiazui.md
Alexander Monakov [Fri, 9 Dec 2022 17:47:55 +0000 (20:47 +0300)]
i386: correct division modeling in lujiazui.md

Model the divider in Lujiazui processors as a separate automaton to
significantly reduce the overall model size. This should also result
in improved accuracy, as pipe 0 should be able to accept new
instructions while the divider is occupied.

It is unclear why integer divisions are modeled as if pipes 0-3 are all
occupied. I've opted to keep a single-cycle reservation of all four
pipes together, so GCC should continue trying to pack instructions
around a division accordingly.

Currently top three symbols in insn-automata.o are:

106102 r lujiazui_core_check
106102 r lujiazui_core_transitions
196123 r lujiazui_core_min_issue_delay

This patch shrinks all lujiazui tables to:

3 r lujiazui_decoder_min_issue_delay
20 r lujiazui_decoder_transitions
32 r lujiazui_agu_min_issue_delay
126 r lujiazui_agu_transitions
304 r lujiazui_div_base
352 r lujiazui_div_check
352 r lujiazui_div_transitions
1152 r lujiazui_core_min_issue_delay
1592 r lujiazui_agu_translate
1592 r lujiazui_core_translate
1592 r lujiazui_decoder_translate
1592 r lujiazui_div_translate
3952 r lujiazui_div_min_issue_delay
9216 r lujiazui_core_transitions

This continues the work on reducing i386 insn-automata.o size started
with similar fixes for division and multiplication instructions in
znver.md.

gcc/ChangeLog:

PR target/87832
* config/i386/lujiazui.md (lujiazui_div): New automaton.
(lua_div): New unit.
(lua_idiv_qi): Correct unit in the reservation.
(lua_idiv_qi_load): Ditto.
(lua_idiv_hi): Ditto.
(lua_idiv_hi_load): Ditto.
(lua_idiv_si): Ditto.
(lua_idiv_si_load): Ditto.
(lua_idiv_di): Ditto.
(lua_idiv_di_load): Ditto.
(lua_fdiv_SF): Ditto.
(lua_fdiv_SF_load): Ditto.
(lua_fdiv_DF): Ditto.
(lua_fdiv_DF_load): Ditto.
(lua_fdiv_XF): Ditto.
(lua_fdiv_XF_load): Ditto.
(lua_ssediv_SF): Ditto.
(lua_ssediv_load_SF): Ditto.
(lua_ssediv_V4SF): Ditto.
(lua_ssediv_load_V4SF): Ditto.
(lua_ssediv_V8SF): Ditto.
(lua_ssediv_load_V8SF): Ditto.
(lua_ssediv_SD): Ditto.
(lua_ssediv_load_SD): Ditto.
(lua_ssediv_V2DF): Ditto.
(lua_ssediv_load_V2DF): Ditto.
(lua_ssediv_V4DF): Ditto.
(lua_ssediv_load_V4DF): Ditto.

18 months agolibgcc: Specialize execute_cfa_program in DWARF unwinder for alignments
Florian Weimer [Mon, 2 Jan 2023 15:18:02 +0000 (16:18 +0100)]
libgcc: Specialize execute_cfa_program in DWARF unwinder for alignments

The parameters fs->data_align and fs->code_align always have fixed
values for a particular target in GCC-generated code.  Specialize
execute_cfa_program for these values, to avoid multiplications.

gcc/c-family/

* c-cppbuiltin.cc (c_cpp_builtins): Define
__LIBGCC_DWARF_CIE_DATA_ALIGNMENT__.

libgcc/

* unwind-dw2-execute_cfa.h: New file.  Extracted from
the execute_cfa_program function in unwind-dw2.c.
* unwind-dw2.c (execute_cfa_program_generic): New function.
(execute_cfa_program_specialized): Likewise.
(execute_cfa_program): Call execute_cfa_program_specialized
or execute_cfa_program_generic, as appropriate.

18 months agoDefine __LIBGCC_DWARF_REG_SIZES_CONSTANT__ if DWARF register size is constant
Florian Weimer [Mon, 2 Jan 2023 15:18:02 +0000 (16:18 +0100)]
Define __LIBGCC_DWARF_REG_SIZES_CONSTANT__ if DWARF register size is constant

And use that to speed up the libgcc unwinder.

gcc/

* debug.h (dwarf_reg_sizes_constant): Declare.
* dwarf2cfi.cc (dwarf_reg_sizes_constant): New function.

gcc/c-family/

* c-cppbuiltin.cc (__LIBGCC_DWARF_REG_SIZES_CONSTANT__):
Define if constant is known.

libgcc/

* unwind-dw2.c (dwarf_reg_size): New function.
(_Unwind_GetGR, _Unwind_SetGR, _Unwind_SetGRPtr)
(_Unwind_SetSpColumn, uw_install_context_1): Use it.
(uw_init_context_1): Do not initialize dwarf_reg_size_table
if not in use.

18 months agoCompute a table of DWARF register sizes at compile
Florian Weimer [Mon, 2 Jan 2023 15:18:02 +0000 (16:18 +0100)]
Compute a table of DWARF register sizes at compile

The sizes are compile-time constants.  Create a vector with them,
so that they can be inspected at compile time.

gcc/

* dwarf2cfi.cc (init_return_column_size): Remove.
(init_one_dwarf_reg_size): Adjust.
(generate_dwarf_reg_sizes): New function.  Extracted
from expand_builtin_init_dwarf_reg_sizes.
(expand_builtin_init_dwarf_reg_sizes): Call
generate_dwarf_reg_sizes.
* target.def (init_dwarf_reg_sizes_extra): Adjust
hook signature.
* config/msp430/msp430.cc
(msp430_init_dwarf_reg_sizes_extra): Adjust.
* config/rs6000/rs6000.cc
(rs6000_init_dwarf_reg_sizes_extra): Likewise.
* doc/tm.texi: Update.

18 months agoAda,Darwin: Do not link libgcc statically on Darwin 8 and 9 [PR108202].
Iain Sandoe [Thu, 22 Dec 2022 17:32:59 +0000 (17:32 +0000)]
Ada,Darwin: Do not link libgcc statically on Darwin 8 and 9 [PR108202].

Normally, GCC executables are built with -static-libstdc++ -static-libgcc
on Darwin.  This is fine in most cases, because GCC executables typically
do no use exceptions.   However gnat1 does use exceptions and also pulls
in system libraries that are linked against the installed shared libgcc
which contains the system unwinder.  This means that gnat1 effectively has
two unwinder instances (which does not work reliably since the unwinders
have global state).

A recent change in the initialization of FDEs has made this a hard error
now on Darwin versions (8 and 9) with libgcc installed in /usr/lib (gnat1
now hangs when an exception is thrown).

The solution is to link libgcc dynamically, picking up the installed
system version.  To do this we strip -static-libgcc from the link flags.

PR ada/108202

gcc/ada/ChangeLog:

* gcc-interface/Make-lang.in (GCC_LINKERFLAGS, GCC_LDFLAGS):
Versions of ALL_LINKERFLAGS, LDFLAGS with -Werror and
-static-libgcc filtered out for Darwin8 and 9 (-Werror is filtered
out for other hosts).

18 months agoUpdate copyright years.
Jakub Jelinek [Mon, 2 Jan 2023 08:46:13 +0000 (09:46 +0100)]
Update copyright years.

18 months agoUpdate copyright years.
Jakub Jelinek [Mon, 2 Jan 2023 08:37:43 +0000 (09:37 +0100)]
Update copyright years.

18 months agoUpdate Copyright year in ChangeLog files
Jakub Jelinek [Mon, 2 Jan 2023 08:36:59 +0000 (09:36 +0100)]
Update Copyright year in ChangeLog files

2022 -> 2023

18 months agoUpdate copyright dates.
Jakub Jelinek [Mon, 2 Jan 2023 08:26:59 +0000 (09:26 +0100)]
Update copyright dates.

Manual part of copyright year updates.

2023-01-02  Jakub Jelinek  <jakub@redhat.com>

gcc/
* gcc.cc (process_command): Update copyright notice dates.
* gcov-dump.cc (print_version): Ditto.
* gcov.cc (print_version): Ditto.
* gcov-tool.cc (print_version): Ditto.
* gengtype.cc (create_file): Ditto.
* doc/cpp.texi: Bump @copying's copyright year.
* doc/cppinternals.texi: Ditto.
* doc/gcc.texi: Ditto.
* doc/gccint.texi: Ditto.
* doc/gcov.texi: Ditto.
* doc/install.texi: Ditto.
* doc/invoke.texi: Ditto.
gcc/ada/
* gnat_ugn.texi: Bump @copying's copyright year.
* gnat_rm.texi: Likewise.
gcc/d/
* gdc.texi: Bump @copyrights-d year.
gcc/fortran/
* gfortranspec.cc (lang_specific_driver): Update copyright notice
dates.
* gfc-internals.texi: Bump @copying's copyright year.
* gfortran.texi: Ditto.
* intrinsic.texi: Ditto.
* invoke.texi: Ditto.
gcc/go/
* gccgo.texi: Bump @copyrights-go year.
libgomp/
* libgomp.texi: Bump @copying's copyright year.
libitm/
* libitm.texi: Bump @copying's copyright year.
libquadmath/
* libquadmath.texi: Bump @copying's copyright year.

18 months agoUpdate Copyright year in ChangeLog files
Jakub Jelinek [Mon, 2 Jan 2023 08:23:36 +0000 (09:23 +0100)]
Update Copyright year in ChangeLog files

2022 -> 2023

18 months agoDaily bump.
GCC Administrator [Mon, 2 Jan 2023 00:16:34 +0000 (00:16 +0000)]
Daily bump.

18 months agoAdd post-reload splitter for extendditi2 on x86_64.
Roger Sayle [Sun, 1 Jan 2023 17:00:28 +0000 (17:00 +0000)]
Add post-reload splitter for extendditi2 on x86_64.

This is another step towards a possible solution for PR 105137.
This patch introduces a define_insn for extendditi2 that allows
DImode to TImode sign-extension to be represented in the early
RTL optimizers, before being split post-reload into the exact
same idiom as currently produced by RTL expansion.

Typically this produces the identical code, so the first new
test case:
__int128 foo(long long x) { return (__int128)x; }

continues to generate:
foo: movq    %rdi, %rax
        cqto
        ret

The "magic" is that this representation allows combine and the
other RTL optimizers to do a better job.  Hence, the second
test case:

__int128 foo(__int128 a, long long b) {
    a += ((__int128)b) << 70;
    return a;
}

which mainline with -O2 currently generates as:

foo: movq    %rsi, %rax
        movq    %rdx, %rcx
        movq    %rdi, %rsi
        salq    $6, %rcx
        movq    %rax, %rdi
        xorl    %eax, %eax
        movq    %rcx, %rdx
        addq    %rsi, %rax
        adcq    %rdi, %rdx
        ret

with this patch now becomes:
foo:    movl    $0, %eax
        salq    $6, %rdx
        addq    %rdi, %rax
        adcq    %rsi, %rdx
        ret

i.e. the same code for the signed and unsigned extension variants.

2023-01-01  Roger Sayle  <roger@nextmovesoftware.com>
    Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog
* config/i386/i386.md (extendditi2): New define_insn.
(define_split): Use DWIH mode iterator to treat new extendditi2
identically to existing extendsidi2_1.
(define_peephole2): Likewise.
(define_peephole2): Likewise.
(define_Split): Likewise.

gcc/testsuite/ChangeLog
* gcc.target/i386/extendditi2-1.c: New test case.
* gcc.target/i386/extendditi2-2.c: Likewise.

18 months agoRotate ChangeLog files.
Jakub Jelinek [Sun, 1 Jan 2023 15:20:13 +0000 (16:20 +0100)]
Rotate ChangeLog files.

Rotate ChangeLog files for ChangeLogs with yearly cadence.

18 months agomodula2: Ensure that module registration constructors are 'extern' [PR108183].
Iain Sandoe [Wed, 21 Dec 2022 09:05:32 +0000 (09:05 +0000)]
modula2: Ensure that module registration constructors are 'extern' [PR108183].

The symbols for module registration constructors need to be external
or we get wrong code generated for targets that allow direct access to
local symbol definitions.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR modula2/108183

gcc/m2/ChangeLog:

* gm2-compiler/M2GCCDeclare.mod: Module registration constructors are
externs to the builder of m2_link.

Co-Authored-By: Gaius Mulley <gaiusmod2@gmail.com>
18 months agoDaily bump.
GCC Administrator [Sun, 1 Jan 2023 00:17:17 +0000 (00:17 +0000)]
Daily bump.

18 months agoconfigure: Do not build the ununsed libffi shared library.
Iain Sandoe [Fri, 30 Dec 2022 12:03:08 +0000 (12:03 +0000)]
configure: Do not build the ununsed libffi shared library.

We do not use the shared libffi libraray, nor do we install it.
However, on at least Darwin, the shared version will be picked
up for testing, so it is preferrable not to build it.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
ChangeLog:

* Makefile.def: Do not build shared libffi.
* Makefile.in: Regenerate.

18 months agomodula-2,libgm2: Add undefined, dynamic_lookup to m2 libs links.
Iain Sandoe [Sat, 17 Dec 2022 14:48:03 +0000 (14:48 +0000)]
modula-2,libgm2: Add undefined, dynamic_lookup to m2 libs links.

The libm2 libraries are cross-linked, which means that we need to allow
symbols to be undefined at link time and then to be found at runtime.

This is implemented on Darwin by adding -undefined, dynamic_lookup to
the link command.

NOTE: It would probably be a better solution to rework the libraries
either to combine those that have inter-dependencies, or to reorder
the layering so the there is a fixed dependency tree.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
libgm2/ChangeLog:

* configure: Regenerate.
* configure.ac: Make a conditional for configurations targeting
Darwin.
* libm2cor/Makefile.am: Use -undefined,dynamic_lookup on Darwin.
* libm2iso/Makefile.am: Likewise.
* libm2log/Makefile.am: Likewise.
* libm2pim/Makefile.am: Likewise
* libm2min/Makefile.am: Likewise
* libm2cor/Makefile.in: Regenerate.
* libm2iso/Makefile.in: Regenerate.
* libm2log/Makefile.in: Regenerate.
* libm2min/Makefile.in: Regenerate.
* libm2pim/Makefile.in: Regenerate.

18 months agomodula-2: Fix building the plugin for Darwin [PR107612].
Rainer Orth [Thu, 15 Dec 2022 10:43:37 +0000 (10:43 +0000)]
modula-2: Fix building the plugin for Darwin [PR107612].

 * Makes the configured value for INCINTL available as a variable so that
it can be used in language makefile fragements.  It is then used in the m2
fragment to make the include path available to the plugin compile.

 * Updates the DSO suffix  to use .dylib for Darwin.

 * Adds '-Wl,-undefined,dynamic_lookup' to the link flags so that symbols can
   be resolved at runtime.

 * Removes the extraneous $(exeext) from the DSO names.

Since the linking is driven by CXX, we also need to supress the addition of
default libraries otherwise:
 (1) we will get a reference to an uninstalled libstdc++
 (2) the process opening the plugin would have two instances 0f libstdc++ -
     one statically linked into gm2 and one dynamically linked into the plugin.

PR modula2/107612

gcc/ChangeLog:

* Makefile.in: Make the configured libintl includes avaiable in INCINTL.
(BUILD_CPPFLAGS): Use INCINTL.

gcc/m2/ChangeLog:

* Make-lang.in (soext): Use .dylib for Darwin.
(PLUGINLDFLAGS): Use dynmic lookup, set the plugin name, and append
-nodefaultlibs to suppress the linking of libstdc++.
Use INCINTL in compile lines for the plugin.

Co-Authored-By: Iain Sandoe <iain@sandoe.co.uk>
18 months agoDaily bump.
GCC Administrator [Sat, 31 Dec 2022 00:17:04 +0000 (00:17 +0000)]
Daily bump.

18 months agocheck hash table insertions
Alexandre Oliva [Fri, 30 Dec 2022 16:44:50 +0000 (13:44 -0300)]
check hash table insertions

I've noticed a number of potential problems in hash tables, of three
kinds: insertion of entries that seem empty, dangling insertions, and
lookups during insertions.

These problems may all have the effect of replacing a deleted entry
with one that seems empty, which may disconnect double-hashing chains
involving that entry, and thus cause entries to go missing.

This patch detects such problems by recording a pending insertion and
checking that it's completed before other potentially-conflicting
operations.  The additional field is only introduced when checking is
enabled.

for  gcc/ChnageLog

* hash-table.h (check_complete_insertion, check_insert_slot):
New hash_table methods.
(m_inserting_slot): New hash_table field.
(begin, hash_table ctors, ~hash_table): Check previous insert.
(expand, empty_slow, clear_slot, find_with_hash): Likewise.
(remote_elt_with_hash, traverse_noresize): Likewise.
(gt_pch_nx): Likewise.
(find_slot_with_hash): Likewise.  Record requested insert.

18 months agoregressions tests for PR103770
Martin Uecker [Fri, 30 Dec 2022 13:51:37 +0000 (14:51 +0100)]
regressions tests for PR103770

This adds tests from bugzilla for PR103770 and duplicates.

gcc/testsuite/
* gcc.dg/pr103770.c: New test.
* gcc.dg/pr103859.c: New test.
* gcc.dg/pr105065.c: New test.

18 months agoFix memory constraint on MVE v[ld/st][2/4] instructions [PR107714]
Stam Markianos-Wright [Fri, 30 Dec 2022 11:25:22 +0000 (11:25 +0000)]
Fix memory constraint on MVE v[ld/st][2/4] instructions [PR107714]

In the M-Class Arm-ARM:

https://developer.arm.com/documentation/ddi0553/bu/?lang=en

these MVE instructions only have '!' writeback variant and at:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107714

we found that the Um constraint would also allow through a
register offset writeback, resulting in an assembler error.

Here I have added a new constraint and predicate for these
instructions, which (uniquely, AFAICT), only support a `!` writeback
increment by the data size (inside the compiler this is a POST_INC).

No regressions in arm-none-eabi with MVE and MVE.FP.

gcc/ChangeLog:
PR target/107714
* config/arm/arm-protos.h (mve_struct_mem_operand): New protoype.
* config/arm/arm.cc (mve_struct_mem_operand): New function.
* config/arm/constraints.md (Ug): New constraint.
* config/arm/mve.md (mve_vst4q<mode>): Change constraint.
(mve_vst2q<mode>): Likewise.
(mve_vld4q<mode>): Likewise.
(mve_vld2q<mode>): Likewise.
* config/arm/predicates.md (mve_struct_operand): New predicate.

gcc/testsuite/ChangeLog:
PR target/107714
* gcc.target/arm/mve/intrinsics/vldst24q_reg_offset.c: New test.

18 months agoModify checks to avoid referencing NULL pointer.
Steve Kargl [Mon, 26 Dec 2022 22:07:04 +0000 (14:07 -0800)]
Modify checks to avoid referencing NULL pointer.

Update test cases with error messages that changed as a result.

gcc/fortran/ChangeLog:

PR fortran/102595
* decl.cc (attr_decl1): Guard against NULL pointer.
* parse.cc (match_deferred_characteristics): Include BT_CLASS in check for
derived being undefined.

gcc/testsuite/ChangeLog:

PR fortran/102595
* gfortran.dg/class_result_4.f90: Update error message check.
* gfortran.dg/pr85779_3.f90: Update error message check.

18 months agoDaily bump.
GCC Administrator [Fri, 30 Dec 2022 00:16:36 +0000 (00:16 +0000)]
Daily bump.

18 months agoprevent hash set/map insertion of deleted entries
Alexandre Oliva [Thu, 29 Dec 2022 17:33:07 +0000 (14:33 -0300)]
prevent hash set/map insertion of deleted entries

Just like the recently-added checks for empty entries, add checks for
deleted entries as well.  This didn't catch any problems, but it might
prevent future accidents.  Suggested by David Malcolm.

for  gcc/ChangeLog

* hash-map.h (put, get_or_insert): Check that added entry
doesn't look deleted either.
* hash-set.h (add): Likewise.

18 months agoparloops: don't request insert that won't be completed
Alexandre Oliva [Thu, 29 Dec 2022 17:33:06 +0000 (14:33 -0300)]
parloops: don't request insert that won't be completed

In take_address_of, we may refrain from completing a decl_address
INSERT if gsi is NULL, so dnn't even ask for an INSERT in this case.

for  gcc/ChangeLog

* tree-parloops.cc (take_address_of): Skip INSERT if !gsi.

18 months agohash-map: reject empty-looking insertions
Alexandre Oliva [Thu, 29 Dec 2022 17:33:04 +0000 (14:33 -0300)]
hash-map: reject empty-looking insertions

Check, after inserting entries, that they don't look empty.

for  gcc/ChangeLog

* hash-map.h (put, get_or_insert): Check that entry does not
look empty after insertion.

18 months agohash set: reject attempts to add empty values
Alexandre Oliva [Thu, 29 Dec 2022 17:33:03 +0000 (14:33 -0300)]
hash set: reject attempts to add empty values

Check, after adding a key to a hash set, that the entry does not look
empty.

for  gcc/ChangeLog

* hash-set.h (add): Check that the inserted entry does not
look empty.

18 months agoada: don't map NULL decl to locus
Alexandre Oliva [Thu, 29 Dec 2022 17:33:02 +0000 (14:33 -0300)]
ada: don't map NULL decl to locus

When decl is NULL, don't record its mapping in the
decl_to_instance_map.

for  gcc/ada/ChangeLog

* gcc-interface/trans.cc (Sloc_to_locus): Don't map NULL decl.

18 months agolto: drop dummy partition mapping
Alexandre Oliva [Thu, 29 Dec 2022 17:33:00 +0000 (14:33 -0300)]
lto: drop dummy partition mapping

When adding a catch-all partition, we map NULL to it.  That mapping is
ineffective and unnecessary.  Drop it.

for  gcc/lto/ChangeLog

* lto-partition.cc (lto_1_to_1_map): Drop NULL partition
mapping.

18 months ago[C++] constexpr: request insert iff depth is ok
Alexandre Oliva [Thu, 29 Dec 2022 17:32:59 +0000 (14:32 -0300)]
[C++] constexpr: request insert iff depth is ok

cxx_eval_call_expression requests an INSERT even in cases when it
would later decide not to insert.  This could break double-hashing
chains.  Arrange for it to use NO_INSERT when the insertion would not
be completed.

for  gcc/cp/ChangeLog

* constexpr.cc (cxx_eval_call_expression): Do not request an
INSERT that would not be completed.

18 months agotm: complete tm_restart insertion
Alexandre Oliva [Thu, 29 Dec 2022 17:32:57 +0000 (14:32 -0300)]
tm: complete tm_restart insertion

Insertion of a tm_restart_node in tm_restart failed to record the
newly-allocated node in the hash table.

for  gcc/ChangeLog

* trans-mem.cc (split_bb_make_tm_edge): Record new node in
tm_restart.

18 months agopostreload-gcse: no insert on mere lookup
Alexandre Oliva [Thu, 29 Dec 2022 17:32:56 +0000 (14:32 -0300)]
postreload-gcse: no insert on mere lookup

lookup_expr_in_table is not used for insertions, but it mistakenly
used INSERT rather than NO_INSERT.

for  gcc/ChangeLog

* postreload-gcse.cc (lookup_expr_in_table): Use NO_INSERT.

18 months agotree-inline decl_map: skip mapping result's NULL default def
Alexandre Oliva [Thu, 29 Dec 2022 17:32:54 +0000 (14:32 -0300)]
tree-inline decl_map: skip mapping result's NULL default def

If a result doesn't have a default def, don't attempt to remap it.

for  gcc/ChangeLog

* tree-inline.cc (declare_return_variable): Don't remap NULL
default def of result.

18 months agossa-loop-niter: skip caching of null operands
Alexandre Oliva [Thu, 29 Dec 2022 17:32:53 +0000 (14:32 -0300)]
ssa-loop-niter: skip caching of null operands

When a TREE_OPERAND is NULL, do not cache it.

for  gcc/ChangeLog

* tree-ssa-loop-niter.cc (expand_simple_operands): Refrain
from caching NULL TREE_OPERANDs.

18 months ago[C++] constraint: insert norm entry once
Alexandre Oliva [Thu, 29 Dec 2022 17:32:51 +0000 (14:32 -0300)]
[C++] constraint: insert norm entry once

Use NO_INSERT to test whether inserting should be attempted.

for  gcc/cp/ChangeLog

* constraint.cc (normalize_concept_check): Use NO_INSERT for
pre-insertion check.

18 months agotree-inline decl_map: skip mapping NULL to itself
Alexandre Oliva [Thu, 29 Dec 2022 17:32:49 +0000 (14:32 -0300)]
tree-inline decl_map: skip mapping NULL to itself

Mapping a NULL key is no use, skip it.

for  gcc/ChangeLog

* tree-inline.cc (insert_decl_map): Skip mapping a NULL decl
as value to itself.

18 months agovarpool: do not add NULL vnodes to referenced
Alexandre Oliva [Thu, 29 Dec 2022 17:32:48 +0000 (14:32 -0300)]
varpool: do not add NULL vnodes to referenced

Avoid adding NULL vnodes to referenced tables.

for  gcc/ChangeLog

* varpool.cc (symbol_table::remove_unreferenced_decls): Do not
add NULL vnodes to referenced table.

18 months agoscoped tables: insert before further lookups
Alexandre Oliva [Thu, 29 Dec 2022 17:32:46 +0000 (14:32 -0300)]
scoped tables: insert before further lookups

Avoid hash table lookups between requesting an insert and storing the
inserted value in avail_exprs_stack.  Lookups before the insert is
completed could fail to find double-hashed elements.

for  gcc/ChangeLog

* tree-ssa-scopedtables.cc
(avail_exprs_stack::lookup_avail_expr): Finish hash table
insertion before further lookups.

18 months agogcc: xtensa: use GP_RETURN_* instead of magic constant
Max Filippov [Wed, 28 Dec 2022 19:27:21 +0000 (11:27 -0800)]
gcc: xtensa: use GP_RETURN_* instead of magic constant

gcc/
* config/xtensa/xtensa.cc (xtensa_return_in_memory): Use
GP_RETURN_* instead of magic constant.

18 months agoxtensa: Check DF availability before use
Takayuki 'January June' Suwa [Thu, 29 Dec 2022 12:14:33 +0000 (21:14 +0900)]
xtensa: Check DF availability before use

Perhaps no problem, but for safety.

gcc/ChangeLog:

* config/xtensa/xtensa.cc (xtensa_expand_prologue): Fix to check
DF availability before use of DF_* macros.

18 months agoDaily bump.
GCC Administrator [Thu, 29 Dec 2022 00:17:39 +0000 (00:17 +0000)]
Daily bump.

18 months agoProvide zero_extend versions/variants of several patterns on x86.
Roger Sayle [Wed, 28 Dec 2022 19:30:17 +0000 (19:30 +0000)]
Provide zero_extend versions/variants of several patterns on x86.

The middle-end doesn't have a preferred canonical form for expressing
zero-extension, sometimes using an AND, sometimes pairs of SHIFTs,
and sometimes using zero_extend.  Pending changes to RTL simplification
will/may alter some of these representations, so a few additional
patterns are required to recognize these alternate representations
and avoid any testsuite regressions.

As an example, *popcountsi2_zext is currently represented as:
  [(set (match_operand:DI 0 "register_operand" "=r")
        (and:DI
          (subreg:DI
            (popcount:SI
              (match_operand:SI 1 "nonimmediate_operand" "rm")) 0)
          (const_int 63)))
   (clobber (reg:CC FLAGS_REG))]

this patch adds an alternate/equivalent pattern that matches:
  [(set (match_operand:DI 0 "register_operand" "=r")
       (zero_extend:DI
         (popcount:SI (match_operand:SI 1 "nonimmediate_operand" "rm"))))
   (clobber (reg:CC FLAGS_REG))]

Another example is *popcounthi2 which is currently represented as:
  [(set (match_operand:SI 0 "register_operand")
        (popcount:SI
          (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand"))))
   (clobber (reg:CC FLAGS_REG))]

this patch adds an alternate/equivalent pattern that matches:
  [(set (match_operand:SI 0 "register_operand")
        (zero_extend:SI
          (popcount:HI (match_operand:HI 1 "nonimmediate_operand"))))
   (clobber (reg:CC FLAGS_REG))]

The contents of the machine description definitions remain the same.
it's just the expected RTL is slightly different but equivalent.
Providing both forms makes the backend more robust to middle-end
changes [and possibly catches some missed optimizations].

2022-12-28  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* config/i386/i386.md (*clzsi2_lzcnt_zext_2): define_insn_and_split
to match ZERO_EXTEND form of *clzsi2_lzcnt_zext.
(*clzsi2_lzcnt_zext_2_falsedep): Likewise, new define_insn to match
ZERO_EXTEND form of *clzsi2_lzcnt_zext_falsedep.
(*bmi2_bzhi_zero_extendsidi_5): Likewise, new define_insn to match
ZERO_EXTEND form of *bmi2_bzhi_zero_extendsidi.
(*popcountsi2_zext_2): Likewise, new define_insn_and_split to match
ZERO_EXTEND form of *popcountsi2_zext.
(*popcountsi2_zext_2_falsedep): Likewise, new define_insn to match
ZERO_EXTEND form of *popcountsi2_zext_falsedep.
(*popcounthi2_2): Likewise, new define_insn_and_split to match
ZERO_EXTEND form of *popcounthi2.
(define_peephole2): ZERO_EXTEND variant of HImode popcount&1 using
parity flag peephole2.

18 months agoUse ix86_expand_clear in ix86_split_ashl.
Roger Sayle [Wed, 28 Dec 2022 19:27:52 +0000 (19:27 +0000)]
Use ix86_expand_clear in ix86_split_ashl.

This patch is a one line change, to call ix86_expand_clear instead of
emit_move_insn with const0_rtx in ix86_split_ashl, allowing the backend
to use an xor instruction to clear a register if appropriate.

The effect is demonstrated with the following function.
__int128 foo(__int128 x, unsigned long long b) {
    return ((__int128)b << 72) + x;
}

previously with -O2, GCC would generate

foo:    movl    $0, %eax
        salq    $8, %rdx
        addq    %rdi, %rax
        adcq    %rsi, %rdx
        ret

with this patch, it now generates

foo:    xorl    %eax, %eax
        salq    $8, %rdx
        addq    %rdi, %rax
        adcq    %rsi, %rdx
        ret

2022-12-28  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* config/i386/i386-expand.cc (ix86_split_ashl): Call
ix86_expand_clear to generate an xor instruction.

gcc/testsuite/ChangeLog
* gcc.target/i386/ashlti3-1.c: New test case.

18 months agocontrib: add contrib to update-copyright.py script
Martin Liska [Wed, 14 Dec 2022 12:51:03 +0000 (13:51 +0100)]
contrib: add contrib to update-copyright.py script

contrib/ChangeLog:

* update-copyright.py: Add contrib folder.