Commit Graph

192640 Commits

Author SHA1 Message Date
Thomas W Rodgers
7c21556daf libstdc++: Make atomic notify_one and notify_all non-const
<recording this here for future reference>
PR102994 "atomics: std::atomic<ptr>::wait is not marked const" raises the
issue that the current libstdc++ implementation marks the notify members
const, the implementation strategy used by libstdc++, as well as libc++
and the Microsoft STL, do not require the atomic to be mutable (it is hard
to conceive of a desirable implementation approach that would require it).
The original paper proposing the wait/notify functionality for atomics
(p1185) also had these members marked const for the first three revisions,
but that was changed without explanation in r3 and subsequent revisions of
the paper.

After raising the issue to the authors of p1185 and the author of the
libc++ implementation, the consensus seems to be "meh, it's harmless" so
there seems little appetite for an LWG issue to revisit the subject.

This patch changes the libstdc++ implementation to be in agreement with
the standard by removing const from those notify_one/notify_all members.

libstdc++-v3/ChangeLog:

	PR libstdc++/102994
	* include/bits/atomic_base.h (atomic_flag::notify_one,
	notify_all): Remove const qualification.
	(__atomic_base::notify_one, notify_all): Likewise.
	* include/std/atomic (atomic<bool>::notify_one, notify_all):
	Likewise.
	(atomic::notify_one, notify_all): Likewise.
	(atomic<T*>::notify_one, notify_all): Likewise.
	(atomic_notify_one, atomic_notify_all): Likewise.
	* testsuite/29_atomics/atomic/wait_notify/102994.cc: Adjust test
	to account for change in notify_one/notify_all signature.
2022-04-22 15:53:41 -07:00
Mikael Morin
7964ab6c36 fortran: Use pointer arithmetic to index arrays [PR102043]
The code generated for array references used to be ARRAY_REF trees as
could be expected.  However, the middle-end may conclude from those
trees that the indexes used are non-negative (more precisely not below
the lower bound), which is a wrong assumption in the case of "reversed-
order" arrays.

The problematic arrays are those with a descriptor and having a negative
stride for at least one dimension.  The descriptor data points to the
first element in array order (which is not the first in memory order in
that case), and the negative stride(s) makes walking the array backwards
(towards lower memory addresses), and we can access elements with
negative index wrt data pointer.

With this change, pointer arithmetic is generated by default for array
references, unless we are in a case where negative indexes can’t happen
(array descriptor’s dim element, substrings, explicit shape,
allocatable, or assumed shape contiguous).  A new flag is added to
choose between array indexing and pointer arithmetic, and it’s set
if the context can tell array indexing is safe (descriptor dim
element, substring, temporary array), or a new method is called
to decide on whether the flag should be set for one given array
expression.

	PR fortran/102043

gcc/fortran/ChangeLog:

	* trans.h (gfc_build_array_ref): Add non_negative_offset
	argument.
	* trans.cc (gfc_build_array_ref): Ditto. Use pointer arithmetic
	if non_negative_offset is false.
	* trans-expr.cc (gfc_conv_substring): Set flag in the call to
	gfc_build_array_ref.
	* trans-array.cc (gfc_get_cfi_dim_item,
	gfc_conv_descriptor_dimension): Same.
	(build_array_ref): Decide on whether to set the flag and update
	the call.
	(gfc_conv_scalarized_array_ref): Same.  New argument tmp_array.
	(gfc_conv_tmp_array_ref): Update call to
	gfc_conv_scalarized_ref.
	(non_negative_strides_array_p): New function.

gcc/testsuite/ChangeLog:

	* gfortran.dg/array_reference_3.f90: New.
	* gfortran.dg/negative_stride_1.f90: New.
	* gfortran.dg/vector_subscript_8.f90: New.
	* gfortran.dg/vector_subscript_9.f90: New.
	* gfortran.dg/c_loc_test_22.f90: Update dump patterns.
	* gfortran.dg/finalize_10.f90: Same.

Co-Authored-By: Richard Biener <rguenther@suse.de>
2022-04-22 22:52:50 +02:00
Mikael Morin
761dda5748 fortran: Generate an array temporary reference [PR102043]
This avoids regressing on char_cast_1.f90 and char_cast_2.f90 later in
the patch series when the code generation for array references is
changed to use pointer arithmetic.

The regressing testcases match part of an array reference in the
generated tree dump and it’s not clear how the pattern should be
rewritten to match the equivalent with pointer arithmetic.

This change uses a method specific to array temporaries to generate
array-references, so that these array references are flagged as safe
for array indexing and will not be updated to use pointer arithmetic.

	PR fortran/102043

gcc/fortran/ChangeLog:
	* trans-array.cc (gfc_conv_expr_descriptor): Use
	gfc_conv_tmp_array_ref.
2022-04-22 22:52:38 +02:00
Mikael Morin
e72fbb6915 fortran: Update index extraction code. [PR102043]
This avoids a regression on hollerith4.f90 and hollerith6.f90 later in
the patch series when code generation for array references is changed
to use pointer arithmetic.

The problem comes from the extraction of the array index from an
ARRAY_REF tree, which doesn’t work if the tree is not an ARRAY_REF
any more.

This updates the code generated for remaining size evaluation to work
with a source tree that uses either array indexing or pointer
arithmetic.

	PR fortran/102043

gcc/fortran/ChangeLog:

	* trans-io.cc: Add handling for the case where the array
	is referenced using pointer arithmetic.
2022-04-22 22:52:26 +02:00
Mikael Morin
89ca0fffa4 fortran: Pre-evaluate string pointers. [PR102043]
This avoids a regression on deferred_character_23.f90 later in the
patch series when array references are rewritten to use pointer
arithmetic.

The problem is a SAVE_EXPR tree as TYPE_SIZE_UNIT of one array element
type, which is used by the pointer arithmetic expressions.  As these
expressions appear in both branches of an if-then-else block, the tree
is lowered to a variable in one of the branches but it’s used in both
branches, which is invalid middle-end code.

This change pre-evaluates the array references or pointer arithmetics
to variables before the if-then-else block, so that the SAVE_EXPR are
expanded to variables in the parent scope of the if-then-else block,
and expressions referencing the variables remain valid in both
branches.

	PR fortran/102043

gcc/fortran/ChangeLog:
	* trans-expr.cc: Pre-evaluate src and dest to variables
	before using them.

gcc/testsuite/ChangeLog:
	* gfortran.dg/dependency_49.f90: Update variable occurence
	count.
2022-04-22 22:52:12 +02:00
Segher Boessenkool
4938888ae1 rs6000: Fix pack for soft-float (PR105334)
For PR103623 I fixed unpack, but pack is broken as well, as reported in
PR105334.  Fixing that is a bit more code, but it is pretty simple code
nonetheless.

2022-04-22  Segher Boessenkool  <segher@kernel.crashing.org>

	PR target/105334
	* config/rs6000/rs6000.md (pack<mode> for FMOVE128): New expander.
	(pack<mode> for FMOVE128): Rename and split the insn_and_split to...
	(pack<mode>_hard for FMOVE128): ... this...
	(pack<mode>_soft for FMOVE128): ... and this.
2022-04-22 19:29:08 +00:00
Paul A. Clarke
55c17bc75c docs: Correct "This functions" to "These functions"
2022-04-22  Paul A. Clarke  <pc@us.ibm.com>

gcc
	* doc/extend.texi: Correct "This" to "These".
2022-04-22 12:28:30 -05:00
Jakub Jelinek
7092b7aea1 rtlanal: Fix up replace_rtx [PR105333]
The following testcase FAILs, because replace_rtx replaces a REG with
CONST_WIDE_INT inside of a SUBREG, which is an invalid transformation
because a SUBREG relies on SUBREG_REG having non-VOIDmode but
CONST_WIDE_INT has VOIDmode.

replace_rtx already has code to deal with it, but it was doing
it only for CONST_INTs.  The following patch does it also for
VOIDmode CONST_DOUBLE or CONST_WIDE_INT.

2022-04-22  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/105333
	* rtlanal.cc (replace_rtx): Use simplify_subreg or
	simplify_unary_operation if CONST_SCALAR_INT_P rather than just
	CONST_INT_P.

	* gcc.dg/pr105333.c: New test.
2022-04-22 13:38:11 +02:00
GCC Administrator
c1a9cf6791 Daily bump. 2022-04-22 00:16:43 +00:00
Segher Boessenkool
748d46cd04 rs6000/testsuite: xfail bswap-brw.c
This testcase does not generate anywhere near optimal code for 32-bit
code.  For p10 it actually now fails this testcase, after the previous
patch.  Let's xfail it.

2022-04-21  Segher Boessenkool  <segher@kernel.crashing.org>

gcc/testsuite/
	PR target/103197
	PR target/102146
	* gcc.target/powerpc/bswap-brw.c: Add xfail on scan-assembler for -m32.
2022-04-21 21:30:53 +00:00
Segher Boessenkool
26fa464f42 rs6000: Disparage lfiwzx and similar
RA now chooses GEN_OR_VSX_REGS in most cases.  This is great in most
cases, but we often (or always?) use {l,st}{f,xs}iwzx now, which is
problematic because the integer load and store insns can use cheaper
addressing modes.  We can fix that by putting a small penalty on the
instruction alternatives for those.

2022-04-21  Segher Boessenkool  <segher@kernel.crashing.org>

	PR target/103197
	PR target/102146
	* config/rs6000/rs6000.md (zero_extendqi<mode>2 for EXTQI): Disparage
	the "Z" alternatives in {l,st}{f,xs}iwzx.
	(zero_extendhi<mode>2 for EXTHI): Ditto.
	(zero_extendsi<mode>2 for EXTSI): Ditto.
	(*movsi_internal1): Ditto.
	(*mov<mode>_internal1 for QHI): Ditto.
	(movsd_hardfloat): Ditto.
2022-04-21 21:30:45 +00:00
Segher Boessenkool
fc9deca632 rs6000: Add effective target has_arch_ppc64
This is true if we have -mpowerpc64.

2022-04-21  Segher Boessenkool  <segher@kernel.crashing.org>

gcc/testsuite/
	* lib/target-supports.exp (check_effective_target_has_arch_ppc64): New.
2022-04-21 21:30:37 +00:00
Iain Buclaw
ae56e2da05 d: Merge upstream dmd eb7bee331, druntime 27834edb, phobos ac296f80c.
D front-end changes:

    - Import dmd v2.100.0-beta.1.
    - Print deprecation messages for scope violations unless
      `-frevert=dip1000' is used.
    - Fixed a missed case of switch case fallthrough not being caught by
      the compiler.

D runtime changes:

    - Import druntime v2.100.0-beta.1.

Phobos changes:

    - Import phobos v2.100.0-beta.1.

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd eb7bee331.
	* dmd/VERSION: Update version to v2.100.0-beta.1.
	* d-lang.cc (d_handle_option): Handle OPT_frevert_dip1000.
	* lang.opt (frevert=dip1000): New option.

libphobos/ChangeLog:

	* libdruntime/MERGE: Merge upstream druntime 27834edb.
	* src/MERGE: Merge upstream phobos ac296f80c.
	* src/Makefile.am (PHOBOS_DSOURCES): Add std/int128.d.
	* src/Makefile.in: Regenerate.
2022-04-21 20:03:08 +01:00
Patrick Palka
93dd7f36f2 libstdc++: Avoid ASCII assumptions in floating_from_chars.cc
In starts_with_ci and in __floating_from_chars_hex's inf/nan handling,
we were assuming that the letters are contiguous and that 'A' + 32 == 'a'
which is true for ASCII but not for other character encodings.

This patch fixes starts_with_ci by using a constexpr lookup table that
maps uppercase letters to lowercase, and fixes __floating_from_chars_hex
by using __from_chars_alnum_to_val.

libstdc++-v3/ChangeLog:

	* include/std/charconv (__from_chars_alnum_to_val_table):
	Simplify initialization of __lower/__upper_letters.
	(__from_chars_alnum_to_val): Default the template parameter to
	false.
	* src/c++17/floating_from_chars.cc (starts_with_ci): Don't
	assume the uppercase and lowercase letters are contiguous.
	(__floating_from_chars_hex): Likewise.
2022-04-21 12:11:01 -04:00
Marek Polacek
605a80bb73 c++: Remove unused parameter
gcc/cp/ChangeLog:

	* constexpr.cc (cxx_eval_logical_expression): Remove unused
	parameter.
	(cxx_eval_constant_expression) <case TRUTH_ANDIF_EXPR>,
	<case TRUTH_OR_EXPR>: Adjust calls to cxx_eval_logical_expression.
2022-04-21 10:29:04 -04:00
Marek Polacek
93b65ed970 c++: wrong error with constexpr COMPOUND_EXPR [PR105321]
Here we issue a bogus error for the first assert in the test.  Therein
we have

<retval> = (void) (VIEW_CONVERT_EXPR<bool>(yes) || handle_error ());, VIEW_CONVERT_EXPR<int>(value);

which has a COMPOUND_EXPR, so we get to cxx_eval_constant_expression
<case COMPOUND_EXPR>.  The problem here is that we call

7044             /* Check that the LHS is constant and then discard it.  */
7045             cxx_eval_constant_expression (ctx, op0,
7046                                           true, non_constant_p, overflow_p,
7047                                           jump_target);

where lval is always true, so the PARM_DECL 'yes' is not evaluated into
its value.

Fixed by always passing false for 'lval' in cxx_eval_logical_expression;
there's no case where we actually expect an lvalue from a TRUTH_*.

	PR c++/105321

gcc/cp/ChangeLog:

	* constexpr.cc (cxx_eval_logical_expression): Always pass false for lval
	to cxx_eval_constant_expression.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/constexpr-105321.C: New test.
2022-04-21 10:18:10 -04:00
Fritz Reese
c049f638da fortran: Fix conv of UNION constructors [PR105310]
This fixes an ICE when a UNION is the (1+8*2^n)-th field in a DEC
STRUCTURE when compiled with -finit-derived -finit-local-zero.
The problem was CONSTRUCTOR_APPEND_ELT from within gfc_conv_union_initializer
modified the vector pointer, but the pointer was passed by-value,
so the old pointer from the caller (gfc_conv_structure) pointed to freed
memory.

	PR fortran/105310

gcc/fortran/ChangeLog:

	* trans-expr.cc (gfc_conv_union_initializer): Pass vec* by reference.

gcc/testsuite/ChangeLog:

	* gfortran.dg/dec_union_12.f90: New test.
2022-04-21 10:13:59 -04:00
Patrick Palka
1e6c0e69af libstdc++: Work around modules ICE in <charconv> [PR105297]
This makes the initializer for __table in __from_chars_alnum_to_val
dependent in an artificial way, which works around the reported modules
testsuite ICE by preventing the compiler from evaluating the initializer
parse time.

Compared to the alternative workaround of using a non-local class type
for __table, this workaround has the advantage of slightly speeding up
compilation of <charconv>, since now the table won't get built (via
constexpr evaluation) until the integer std::from_chars overload is
instantiated.

	PR c++/105297
	PR c++/105322

libstdc++-v3/ChangeLog:

	* include/std/charconv (__from_chars_alnum_to_val): Make
	initializer for __table dependent in an artificial way.
2022-04-21 08:34:59 -04:00
Jonathan Wakely
cf37107522 libstdc++: Remove bogus assertion in std::from_chars [PR105324]
I'm not sure what I was thinking when I added this assertion, maybe it
was supposed to be alignment == 1 (which is what the pmr::string actually
uses). The simplest fix is to just remove the assertion.

The assertion is no longer enabled by default on trunk, but it's still
there for the --enablke-libstdcxx-debug build, and is still wrong. The
fix is needed on the gcc-11 branch.

libstdc++-v3/ChangeLog:

	PR libstdc++/105324
	* src/c++17/floating_from_chars.cc (buffer_resource::do_allocate):
	Remove assertion.
	* testsuite/20_util/from_chars/pr105324.cc: New test.
2022-04-21 11:31:51 +01:00
Martin Liska
811c7fbd14 Support --compress-debug-sections for ld.mold.
gcc/ChangeLog:

	* configure.ac: Enable compressed debug sections for mold
	linker.
	* configure: Regenerate.
2022-04-21 10:18:15 +02:00
Jakub Jelinek
504b02c70a emit-rtl: Fix -fcompare-debug bug with label references in debug insns [PR105203]
When we compute LABEL_NUSES from scratch, mark_all_labels doesn't call
mark_jump_label on DEBUG_INSNs:
              if (NONDEBUG_INSN_P (insn))
                mark_jump_label (PATTERN (insn), insn, 0);
and so doesn't increment LABEL_NUSES from references in DEBUG_INSNs.
But, when we call emit_copy_of_insn_after e.g. when duplicating some
DEBUG_INSNs, we call it even on those, which then results in LABEL_NUSES
differences and -fcompare-debug failures.

The following patch makes sure we don't call it on DEBUG_INSNs.

2022-04-21  Jakub Jelinek  <jakub@redhat.com>

	PR debug/105203
	* emit-rtl.cc (emit_copy_of_insn_after): Don't call mark_jump_label
	on DEBUG_INSNs.

	* gfortran.dg/g77/pr105203.f: New test.
2022-04-21 09:43:30 +02:00
Ian Lance Taylor
6a4e993454 runtime: use correct field name for PPC32 GLIBC registers
One of these days we will get this right.

Fixes PR go/105315

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/401374
2022-04-20 17:49:44 -07:00
GCC Administrator
29a25a6038 Daily bump. 2022-04-21 00:16:32 +00:00
Ed Catmur
5bde80f48b c++: Fall through for arrays of T vs T cv [PR104996]
If two arrays do not have the exact same element type including
qualification, this could be e.g. f(int (&&)[]) vs. f(int const (&)[]),
which can still be distinguished by the lvalue-rvalue tiebreaker.

By tightening this branch (in accordance with the letter of the Standard) we
fall through to the next branch, which tests whether they have different
element type ignoring qualification and returns 0 in that case; thus we only
actually fall through in the T[...] vs. T cv[...] case, eventually
considering the lvalue-rvalue tiebreaker at the end of compare_ics.

Signed-off-by: Ed Catmur <ed@catmur.uk>

	PR c++/104996

gcc/cp/ChangeLog:

	* call.cc (compare_ics): When comparing list-initialization
	sequences, do not return early.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/initlist129.C: New test.
2022-04-20 10:15:21 -04:00
Jonathan Wakely
67ded3a1f5 libstdc++: Fix macro checked by test
The macro being tested here is wrong, but just happens to have the same
value as the one supposed to be tests.

libstdc++-v3/ChangeLog:

	* testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc:
	Check correct feature test macro.
2022-04-20 13:54:57 +01:00
Jonathan Wakely
c644b7df11 libstdc++: Use LTLIBICONV when linking libstdc++.so [PR93602]
This fixes missing libiconv symbols when libstdc++ is built on a system
that has libiconv installed. If the libiconv headers are found then
libstdc++ depends on libiconv_open etc instead of libc's iconv_open. But
without this fix libstdc++ is not linked to the libiconv library that
provides the definitions of those symbols.

As discussed in PR 93602 this changed means that libstdc++.so.6 might
have an rpath pointing to the location of the libiconv.so library. If
that is not desired, then GCC must be configured to link to a static
libiconv.a instead, using either --with-libiconv-type=static or an
in-tree build of libiconv.

libstdc++-v3/ChangeLog:

	PR libstdc++/93602
	* doc/xml/manual/prerequisites.xml: Document libiconv
	workarounds.
	* doc/html/manual/setup.html: Regenerate.
	* src/Makefile.am (CXXLINK): Add $(LTLIBICONV).
	* src/Makefile.in: Regenerate.
2022-04-20 13:54:57 +01:00
Richard Biener
4d4eaa77a7 tree-optimization/104912 - ensure cost model is checked first
The following makes sure that when we build the versioning condition
for vectorization including the cost model check, we check for the
cost model and branch over other versioning checks.  That is what
the cost modeling assumes, since the cost model check is the only
one accounted for in the scalar outside cost.  Currently we emit
all checks as straight-line code combined with bitwise ops which
can result in surprising ordering of checks in the final assembly.

Since loop_version accepts only a single versioning condition
the splitting is done after the fact.

The result is a 1.5% speedup of 416.gamess on x86_64 when compiling
with -Ofast and tuning for generic or skylake.  That's not enough
to recover from the slowdown when vectorizing but it now cuts off
the expensive alias versioning test.

2022-03-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104912
	* tree-vect-loop-manip.cc (vect_loop_versioning): Split
	the cost model check to a separate BB to make sure it is
	checked first and not combined with other version checks.
2022-04-20 13:28:08 +02:00
Richard Biener
36f1de95a6 tree-optimization/105312 - fix ISEL VCOND expansion
The following aligns ISEL VEC_COND_EXPR expansion using VCOND
with the optab query done by vector lowering.  Instead of only
allowing the signed optab to provide EQ/NE compares we allow both
here though since there seems to be no documented canonicalization.

2022-04-20  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/105312
	* gimple-isel.cc (gimple_expand_vec_cond_expr): Query both
	VCOND and VCONDU for EQ and NE.

	* gcc.target/arm/pr105312.c: New testcase.
2022-04-20 13:27:24 +02:00
Jan Hubicka
0707f42809 Fix overflows in ipa-modref-tree.cc
gcc/ChangeLog:

2022-04-20  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/103818

	* ipa-modref-tree.cc (modref_access_node::closer_pair_p): Use
	poly_offset_int to avoid overflow.
	(modref_access_node::update2): likewise.

gcc/testsuite/ChangeLog:

2022-04-20  Jan Hubicka  <hubicka@ucw.cz>

	* gcc.c-torture/compile/103818.c: New test.
2022-04-20 11:00:33 +02:00
Jakub Jelinek
2a6d372ba9 cgraph: Fix up semantic_interposition handling [PR105306]
cgraph_node has a semantic_interposition flag which should mirror
opt_for_fn (decl, flag_semantic_interposition).  But it actually is
initialized not from that, but from flag_semantic_interposition in the
  explicit symtab_node (symtab_type t)
    : type (t), resolution (LDPR_UNKNOWN), definition (false), alias (false),
...
      semantic_interposition (flag_semantic_interposition),
...
      x_comdat_group (NULL_TREE), x_section (NULL)
  {}
ctor.  I think that might be fine for varpool nodes, but since
flag_semantic_interposition is now implied from -Ofast it isn't correct
for cgraph nodes, unless we guarantee that cgraph node for a particular
function decl is always created while that function is
current_function_decl.  That is often the case, but not always as the
following function shows.
Because symtab_node's ctor doesn't know for which decl the cgraph node
is being created, the following patch keeps that as is, but updates it from
opt_for_fn (decl, flag_semantic_interposition) when we know that, or for
clones copies that flag (often it is then overridden in
set_new_clone_decl_and_node_flags, but not always).

2022-04-20  Jakub Jelinek  <jakub@redhat.com>

	PR ipa/105306
	* cgraph.cc (cgraph_node::create): Set node->semantic_interposition
	to opt_for_fn (decl, flag_semantic_interposition).
	* cgraphclones.cc (cgraph_node::create_clone): Copy over
	semantic_interposition flag.

	* g++.dg/opt/pr105306.C: New test.
2022-04-20 09:24:18 +02:00
GCC Administrator
d1d571873c Daily bump. 2022-04-20 00:16:26 +00:00
Ian Lance Taylor
4a1a72a89c libgo: make a couple of sed uses POSIX compliant
Patch from Jonathan Wakely.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/401054
2022-04-19 12:49:42 -07:00
Sergei Trofimovich
90a29845bf gcov-profile: Allow negative counts of indirect calls [PR105282]
TOPN metrics are histograms that contain overall count and per-bucket
count. Overall count can be negative when two profiles merge and some
of per-bucket metrics are disacarded.

Noticed as an ICE on python PGO build where gcc crashes as:

    during IPA pass: modref
    a.c:36:1: ICE: in stream_out_histogram_value, at value-prof.cc:340
       36 | }
          | ^
    stream_out_histogram_value(output_block*, histogram_value_t*)
            gcc/value-prof.cc:340

gcc/ChangeLog:

	PR gcov-profile/105282
	* value-prof.cc (stream_out_histogram_value): Allow negative counts
	on HIST_TYPE_INDIR_CALL.
2022-04-19 20:06:47 +01:00
Richard Henderson
b85abacd90 MAINTAINERS: Update my email address.
2022-04-19  Richard Henderson  <rth@gcc.gnu.org>

	* MAINTAINERS: Update my email address.
2022-04-19 10:29:15 -07:00
Jakub Jelinek
eeca2b8bd0 sparc: Preserve ORIGINAL_REGNO in epilogue_renumber [PR105257]
The following testcase ICEs, because the pic register is
(reg:DI 24 %i0 [109]) and is used in the delay slot of a return.
We invoke epilogue_renumber and that changes it to
(reg:DI 8 %o0) which no longer satisfies sparc_pic_register_p
predicate, so we don't recognize the insn anymore.

The following patch fixes that by preserving ORIGINAL_REGNO if
specified, so we get (reg:DI 8 %o0 [109]) instead.

2022-04-19  Jakub Jelinek  <jakub@redhat.com>

	PR target/105257
	* config/sparc/sparc.cc (epilogue_renumber): If ORIGINAL_REGNO,
	use gen_raw_REG instead of gen_rtx_REG and copy over also
	ORIGINAL_REGNO.  Use return 0; instead of /* fallthrough */.

	* gcc.dg/pr105257.c: New test.
2022-04-19 18:58:59 +02:00
Jakub Jelinek
eb03e42459 c++: Fix up CONSTRUCTOR_PLACEHOLDER_BOUNDARY handling [PR105256]
The CONSTRUCTOR_PLACEHOLDER_BOUNDARY bit is supposed to separate
PLACEHOLDER_EXPRs that should be replaced by one object or subobjects of it
(variable, TARGET_EXPR slot, ...) from other PLACEHOLDER_EXPRs that should
be replaced by different objects or subobjects.
The bit is set when finding PLACEHOLDER_EXPRs inside of a CONSTRUCTOR, not
looking into nested CONSTRUCTOR_PLACEHOLDER_BOUNDARY ctors, and we prevent
elision of TARGET_EXPRs (through TARGET_EXPR_NO_ELIDE) whose initializer
is a CONSTRUCTOR_PLACEHOLDER_BOUNDARY ctor.  The following testcase ICEs
though, we don't replace the placeholders in there at all, because
CONSTRUCTOR_PLACEHOLDER_BOUNDARY isn't set on the TARGET_EXPR_INITIAL
ctor, but on a ctor nested in such a ctor.  replace_placeholders should be
run on the whole TARGET_EXPR slot.

So, the following patch fixes it by moving the CONSTRUCTOR_PLACEHOLDER_BOUNDARY
bit from nested CONSTRUCTORs to the CONSTRUCTOR containing those (but only
if it is closely nested, if there is some other tree sandwiched in between,
it doesn't do it).

2022-04-19  Jakub Jelinek  <jakub@redhat.com>

	PR c++/105256
	* typeck2.cc (process_init_constructor_array,
	process_init_constructor_record, process_init_constructor_union): Move
	CONSTRUCTOR_PLACEHOLDER_BOUNDARY flag from CONSTRUCTOR elements to the
	containing CONSTRUCTOR.

	* g++.dg/cpp0x/pr105256.C: New test.
2022-04-19 18:27:41 +02:00
Richard Biener
353434b65e tree-optimization/104010 - fix SLP scalar costing with patterns
When doing BB vectorization the scalar cost compute is derailed
by patterns, causing lanes to be considered live and thus not
costed on the scalar side.  For the testcase in PR104010 this
prevents vectorization which was done by GCC 11.  PR103941
shows similar cases of missed optimizations that are fixed by
this patch.

2022-04-13  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104010
	PR tree-optimization/103941
	* tree-vect-slp.cc (vect_bb_slp_scalar_cost): When
	we run into stmts in patterns continue walking those
	for uses outside of the vectorized region instead of
	marking the lane live.

	* gcc.target/i386/pr103941-1.c: New testcase.
	* gcc.target/i386/pr103941-2.c: Likewise.
2022-04-19 16:42:04 +02:00
Patrick Palka
cd3964ebd3 libstdc++: Stop defining _GLIBCXX_ASSERTIONS in floating_to_chars.cc
Assertions were originally enabled in the compiled-in floating-point
std::to_chars implementation to help shake out any bugs, but they
apparently impose a significant performance penalty, most notably for
the hex formatting which is around 25% slower with assertions enabled.
This seems too high a cost for unconditionally enabling them.

The newly added calls to __builtin_unreachable work around the compiler
no longer knowing that the set of valid values of 'fmt' is limited (which
was previously upheld by an assert).

libstdc++-v3/ChangeLog:

	* src/c++17/floating_to_chars.cc (_GLIBCXX_ASSERTIONS): Don't
	define.
	(__floating_to_chars_shortest): Add __builtin_unreachable calls to
	squelch false-positive -Wmaybe-uninitialized and -Wreturn-type
	warnings.
	(__floating_to_chars_precision): Likewise.
2022-04-19 10:20:04 -04:00
Philipp Fent
fdb3f82fb3 libstdc++: Add pretty printer for std::span
This improves the debug output for C++20 spans.

Before:
{static extent = 18446744073709551615, _M_ptr = 0x7fffffffb9a8, _M_extent = {_M_extent_value = 2}}
Now with StdSpanPrinter:
std::span of length 2 = {1, 2}

Signed-off-by: Philipp Fent <fent@in.tum.de>

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdSpanPrinter): Define.
	* testsuite/libstdc++-prettyprinters/cxx20.cc: Test it.
2022-04-19 14:18:33 +01:00
Richard Biener
214d2860f4 tree-optimization/104880 - move testcase
This renames the testcase to something picked up by the suites regexp.

2022-04-19  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104880
	* g++.dg/opt/pr104880.cc: Rename to ...
	* g++.dg/opt/pr104880.C: ... this.
2022-04-19 14:30:33 +02:00
Jonathan Wakely
a2a7da1a05 libstdc++: Fix syntax error in libbacktrace configuration
Using == instead of = causes a configuration error with dash as the
shell:

checking whether to build libbacktrace support... /home/devel/building/work/src/gcc-12-20220417/libstdc++-v3/configure: 77471: test: auto: unexpected operator
/home/devel/building/work/src/gcc-12-20220417/libstdc++-v3/configure: 77474: test: auto: unexpected operator
auto

This means we fail to change the value from "auto" to "no" and so this
test passes:
GLIBCXX_CONDITIONAL(ENABLE_BACKTRACE, [test "$enable_libstdcxx_backtrace" != no])

This leads to the libbacktrace directory being included in the build
without being configured properly, and bootstrap fails.

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_ENABLE_BACKTRACE): Fix shell operators.
	* configure: Regenerate.
2022-04-19 11:58:30 +01:00
GCC Administrator
3f7c81ef14 Daily bump. 2022-04-19 00:16:28 +00:00
Hans-Peter Nilsson
d2a0a5d4ad doc/install.texi: CRIS: Remove gone websites. Adjust CRIS targets
That is, support for cris-linux-gnu was removed in gcc-11, but
install.texi wasn't adjusted accordingly.  Also, unfortunately the
developer-related sites are gone with no replacements.  And, CRIS is
used in other chip series as well, but allude rather than list.

The generated manpages, info, pdf and html were sanity-checked.

gcc:
	* doc/install.texi <CRIS>: Remove references to removed websites and
	adjust for cris-*-elf being the only remaining toolchain.
2022-04-19 00:30:43 +02:00
Hans-Peter Nilsson
a897a88c59 doc/invoke.texi: CRIS: Remove references to cris-axis-linux-gnu
...and related options.  These stale bits were overlooked when support
for "Linux/GNU" and CRIS v32 was removed, before the gcc-11 release.

Resulting pdf, html and info inspected for sanity.

gcc:
	* doc/invoke.texi <CRIS>: Remove references to options for removed
	subtarget cris-axis-linux-gnu and tweak wording accordingly.
2022-04-19 00:30:24 +02:00
Sören Tempel
ace4928a29 libgo: only add signum to siglist if it doesn't exist yet
This fixes a build issue on musl libc where the same signal number
is used for SIGIO and SIGPOLL.  This causes a compilation error since
the signal numbers must be unique for the signal table.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/400595
2022-04-18 15:17:16 -07:00
A. Wilcox
208b7d85d7 runtime: add special handling for signal 34
The musl libc uses signal 34 internally for setgid (similar to how glibc
uses signal 32 and signal 33).  For this reason, special handling is
needed for this signal in the runtime. The gc implementation already
handles the signal accordingly.  As such, this commit intends to
simply copy the behavior of the Google Go implementation to libgo.

See https://go.dev/issues/39343

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/400594
2022-04-18 15:16:35 -07:00
Patrick Palka
d210653f39 libstdc++: Micro-optimize __from_chars_pow2_base
In the first iteration of __from_chars_pow2_base's main loop, we need
to remember the value of the leading significant digit for sake of the
overflow check at the end (for base > 2).

This patch manually unrolls this first iteration so as to not encumber
the entire loop with logic that only the first iteration needs.  This
seems to significantly improve performance:

Base  Before  After (seconds, lower is better)
   2    9.36   9.37
   8    3.66   2.93
  16    2.93   1.91
  32    2.39   2.24

libstdc++-v3/ChangeLog:

	* include/std/charconv (__from_chars_pow2_base): Manually
	unroll the first iteration of the main loop and simplify
	accordingly.
2022-04-18 17:22:55 -04:00
Kewen Lin
021b51814d testsuite: Skip pr105250.c for powerpc and s390 [PR105266]
This test case pr105250.c is like its related pr105140.c, which
suffers the error with message like "{AltiVec,vector} argument
passed to unprototyped" on powerpc and s390.  So like commits
r12-8025 and r12-8039, this fix is to add the dg-skip-if for
powerpc*-*-* and s390*-*-*.

gcc/testsuite/ChangeLog:

	PR testsuite/105266
	* gcc.dg/pr105250.c: Skip for powerpc*-*-* and s390*-*-*.
2022-04-17 21:34:51 -05:00
GCC Administrator
53859972b9 Daily bump. 2022-04-18 00:16:32 +00:00
GCC Administrator
000c1b89d2 Daily bump. 2022-04-17 00:16:26 +00:00