]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
2 years agoAvoid valid Coverity warning for comparing array to zero.
Martin Sebor [Tue, 31 Aug 2021 17:16:37 +0000 (11:16 -0600)] 
Avoid valid Coverity warning for comparing array to zero.

* gimple-ssa-warn-access.cc (maybe_warn_alloc_args_overflow): Test
pointer element for equality to zero, not that of the cotaining
array.

2 years agoDisable gcc_rich_location copying and assignment.
Martin Sebor [Tue, 31 Aug 2021 17:15:21 +0000 (11:15 -0600)] 
Disable gcc_rich_location copying and assignment.

gcc/cp/ChangeLog:

* parser.c (cp_parser_selection_statement): Use direct initialization
instead of copy.

gcc/ChangeLog:

* gcc-rich-location.h (gcc_rich_location): Make ctor explicit.

libcpp/ChangeLog:

* include/line-map.h (class rich_location): Disable copying and
assignment.

2 years agoAdd attribute returns nonnull to get_range_query.
Martin Sebor [Tue, 31 Aug 2021 17:13:29 +0000 (11:13 -0600)] 
Add attribute returns nonnull to get_range_query.

gcc/ChangeLog:
* function.h (function): Add comments.
(get_range_query): Same.  Add attribute returns nonnull.

2 years agolibstdc++: Fix broken autoconf check for O_NONBLOCK
Jonathan Wakely [Tue, 31 Aug 2021 16:08:00 +0000 (17:08 +0100)] 
libstdc++: Fix broken autoconf check for O_NONBLOCK

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

* configure.ac: Fix checks for F_GETFL, F_SETFL and O_NONBLOCK.
* configure: Regenerate.

2 years agolibstdc++: Remove redundant noexcept-specifier on definitions
Jonathan Wakely [Tue, 31 Aug 2021 15:30:01 +0000 (16:30 +0100)] 
libstdc++: Remove redundant noexcept-specifier on definitions

These destructors are noexcept anyway. I removed the redundant noexcept
from the error_category destructor's declaration in r0-123475, but
didn't remove it from the defaulted definition in system_error.cc. That
causes warnings if the library is built with Clang.

This removes the redundant noexcept from ~error_category and
~system_error and adds tests to ensure they really are noexcept.

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

* src/c++11/system_error.cc (error_category::~error_category()):
Remove noexcept-specifier.
(system_error::~system_error()): Likewise.
* testsuite/19_diagnostics/error_category/noexcept.cc: New test.
* testsuite/19_diagnostics/system_error/noexcept.cc: New test.

2 years agolibstdc++: Add missing return for atomic timed wait [PR102074]
Jonathan Wakely [Tue, 31 Aug 2021 15:50:17 +0000 (16:50 +0100)] 
libstdc++: Add missing return for atomic timed wait [PR102074]

This adds a missing return statement to the non-futex wait-until
operation.

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

PR libstdc++/102074
* include/bits/atomic_timed_wait.h (__timed_waiter_pool)
[!_GLIBCXX_HAVE_PLATFORM_TIMED_WAIT]: Add missing return.

2 years agolibstdc++: Improve error handling in Net TS name resolution
Jonathan Wakely [Tue, 31 Aug 2021 12:09:26 +0000 (13:09 +0100)] 
libstdc++: Improve error handling in Net TS name resolution

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

* include/experimental/internet (__make_resolver_error_code):
Handle EAI_SYSTEM errors.
(basic_resolver_results): Use __make_resolver_error_code. Use
Glibc NI_MAXHOST and NI_MAXSERV values for buffer sizes.

2 years agolibstdc++: Fix ip::tcp::resolver test failure on Solaris
Jonathan Wakely [Tue, 31 Aug 2021 12:08:23 +0000 (13:08 +0100)] 
libstdc++: Fix ip::tcp::resolver test failure on Solaris

Solaris 11 does not have "http" in /etc/services, which causes this test
to fail. Try some other services until we find one that works.

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

* testsuite/experimental/net/internet/resolver/ops/lookup.cc:
Try other service if "http" fails.

2 years ago[Committed] Fix subreg_promoted_mode breakage on various platforms.
Roger Sayle [Tue, 31 Aug 2021 16:25:58 +0000 (17:25 +0100)] 
[Committed] Fix subreg_promoted_mode breakage on various platforms.

My apologies for the inconvenience.  My recent patch to preserve
SUBREG_PROMOTED_VAR_P on (extend:HI (subreg/s:QI (reg:SI))), and other
places in the middle-end, has broken the build on several targets.

The change to convert_modes inadvertently used the same
subreg_promoted_mode idiom for retrieving the mode of a SUBREG_REG
as the existing code just a few lines earlier.  Alas in the meantime,
the original SUBREG gets replaced by one without SUBREG_PROMOTED_VAR_P,
the whole raison-d'etre for my patch, and I'd not realized/noticed
that subreg_promoted_mode asserts for this.  Alas neither the bootstrap
and regression test on x86_64-pc-linux-gnu nor my testing on nvptx-none
must have hit this particular case.  The logic of this transformation
is sound, it's the implementation that's bitten me.

This patch has been committed, after another "make bootstrap" on
x86_64-pc-linux-gnu (just in case), and confirmation/pre-approval
from Jeff Law that this indeed fixes the build failures seen on
several platforms.

My humble apologies again.

2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* expr.c (convert_modes): Don't use subreg_promoted_mode on a
SUBREG if it can't be guaranteed to a SUBREG_PROMOTED_VAR_P set.
Instead use the standard (safer) is_a <scalar_int_mode> idiom.

2 years agoc++: use iloc_sentinel in another place
Jason Merrill [Sat, 28 Aug 2021 02:59:48 +0000 (22:59 -0400)] 
c++: use iloc_sentinel in another place

Another place we can use iloc_sentinel instead of explicitly saving and
restoring input_location.

gcc/cp/ChangeLog:

* constexpr.c (explain_invalid_constexpr_fn): Use iloc_sentinel.

2 years agoc++: Improve error recovery with constexpr [PR92193]
Jason Merrill [Mon, 30 Aug 2021 22:42:05 +0000 (18:42 -0400)] 
c++: Improve error recovery with constexpr [PR92193]

The compiler tries to limit error cascades in limit_bad_template_recursion
by avoiding triggering a new instantiation from one that has caused errors.
We were exempting constexpr functions from this because they can be needed
for constant evaluation, but as more and more functions get marked
constexpr, this becomes an over-broad category.  So as suggested on IRC,
this patch only exempts functions that are needed for mandatory constant
evaluation.

As noted in the comment, this flag doesn't particularly need to use a bit in
the FUNCTION_DECL, but there were still some free.

PR c++/92193

gcc/cp/ChangeLog:

* cp-tree.h (FNDECL_MANIFESTLY_CONST_EVALUATED): New.
* constexpr.c (cxx_eval_call_expression): Set it.
* pt.c (neglectable_inst_p): Check it.

gcc/testsuite/ChangeLog:

* g++.dg/diagnostic/static_assert4.C: New test.

2 years agoRestore intent of data-sym-multi-pool test
Jeff Law [Tue, 31 Aug 2021 15:08:50 +0000 (11:08 -0400)] 
Restore intent of data-sym-multi-pool test

gcc/testsuite
* gcc.target/mips/mips.exp: Add tree-vrp to mips_option_group.
* gcc.target/mips/data-sym-multi-pool.c: Add -fno-tree-vrp.

2 years agoMore stabs removal.
Jeff Law [Tue, 31 Aug 2021 13:48:02 +0000 (09:48 -0400)] 
More stabs removal.

gcc/

* config.gcc (cris-*-elf, cris-*-none): Remove dbxelf.h from
tm_file.
(m32r-*-elf, m32rle-*-elf, m32r-*-linux): Likewise.
(mn10300-*-*, am33_2.0-*-linux*): Likewise.
(xtensa*-*-elf, xtensa*-*-linux, xtensa*-*-uclinux): Likewise.
(m32c-*-elf*, m32c-*-rtems*): Likewise.
* config/cris/cris.h (DBX_NO_XREFS): Remove.
(DBX_CONTIN_LENGTH, DBX_CONTIN_CHAR): Likewise.
* config/m32r/m32r.h (DBXOUT_SOURCE_LINE): Likewise.
(DBX_DEBUGGING_INFO, DBX_CONTIN_LENGTH): Likewise.
* config/mn10300/mn10300.h (DEFAULT_GDB_EXTENSIONS): Likewise.
* config/mn10300/linux.h (DBX_REGISTER_NAMES): Likewise.

2 years agotestsuite: Fix gcc.dg/vect/pr101145* tests [PR101145]
Jakub Jelinek [Tue, 31 Aug 2021 13:26:14 +0000 (15:26 +0200)] 
testsuite: Fix gcc.dg/vect/pr101145* tests [PR101145]

I'm getting:
FAIL: gcc.dg/vect/pr101145.c scan-tree-dump-times vect "vectorized 1 loops" 7
FAIL: gcc.dg/vect/pr101145_1.c scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_2.c scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_3.c scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 7
FAIL: gcc.dg/vect/pr101145_1.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_2.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
FAIL: gcc.dg/vect/pr101145_3.c -flto -ffat-lto-objects  scan-tree-dump-times vect "vectorized 1 loops" 2
on i686-linux (or x86_64-linux with -m32/-mno-sse).
The problem is that those tests use dg-options, which in */vect/ testsuite
throws away all the carefully added default options to enable vectorization
on each target (and which e.g. vect_int etc. effective targets rely on).
The old way would be to name those tests gcc.dg/vect/O3-pr101145*,
but we can also use dg-additional-options (which doesn't throw the default
options, just appends to them) which is IMO better so that we don't have to
rename the tests.

2021-08-31  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/101145
* gcc.dg/vect/pr101145.c: Use dg-additional-options with just -O3
instead of dg-options with -O3 -fdump-tree-vect-details.
* gcc.dg/vect/pr101145_1.c: Likewise.
* gcc.dg/vect/pr101145_2.c: Likewise.
* gcc.dg/vect/pr101145_3.c: Likewise.

2 years agoAdd support for device-modifiers for 'omp target device'.
Marcel Vollweiler [Tue, 31 Aug 2021 13:09:40 +0000 (06:09 -0700)] 
Add support for device-modifiers for 'omp target device'.

'device_num' and 'ancestor' are now parsed on target device constructs for C,
C++, and Fortran (see OpenMP specification 5.0, p. 170). When 'ancestor' is
 used, then 'sorry, not supported' is output. Moreover, the restrictions for
'ancestor' are implemented (see OpenMP specification 5.0, p. 174f).

gcc/c/ChangeLog:

* c-parser.c (c_parser_omp_clause_device): Parse device-modifiers 'device_num'
and 'ancestor' in 'target device' clauses.

gcc/cp/ChangeLog:

* parser.c (cp_parser_omp_clause_device): Parse device-modifiers 'device_num'
and 'ancestor' in 'target device' clauses.
* semantics.c (finish_omp_clauses): Error handling. Constant device ids must
evaluate to '1' if 'ancestor' is used.

gcc/fortran/ChangeLog:

* gfortran.h: Add variable for 'ancestor' in struct gfc_omp_clauses.
* openmp.c (gfc_match_omp_clauses): Parse device-modifiers 'device_num'
and 'ancestor' in 'target device' clauses.
* trans-openmp.c (gfc_trans_omp_clauses): Set OMP_CLAUSE_DEVICE_ANCESTOR.

gcc/ChangeLog:

* gimplify.c (gimplify_scan_omp_clauses): Error handling. 'ancestor' only
allowed on target constructs and only with particular other clauses.
* omp-expand.c (expand_omp_target): Output of 'sorry, not supported' if
'ancestor' is used.
* omp-low.c (check_omp_nesting_restrictions): Error handling. No nested OpenMP
structs when 'ancestor' is used.
(scan_omp_1_stmt): No usage of OpenMP runtime routines in a target region when
'ancestor' is used.
* tree-pretty-print.c (dump_omp_clause): Append 'ancestor'.
* tree.h (OMP_CLAUSE_DEVICE_ANCESTOR): Define macro.

gcc/testsuite/ChangeLog:

* c-c++-common/gomp/target-device-1.c: New test.
* c-c++-common/gomp/target-device-2.c: New test.
* c-c++-common/gomp/target-device-ancestor-1.c: New test.
* c-c++-common/gomp/target-device-ancestor-2.c: New test.
* c-c++-common/gomp/target-device-ancestor-3.c: New test.
* c-c++-common/gomp/target-device-ancestor-4.c: New test.
* gfortran.dg/gomp/target-device-1.f90: New test.
* gfortran.dg/gomp/target-device-2.f90: New test.
* gfortran.dg/gomp/target-device-ancestor-1.f90: New test.
* gfortran.dg/gomp/target-device-ancestor-2.f90: New test.
* gfortran.dg/gomp/target-device-ancestor-3.f90: New test.
* gfortran.dg/gomp/target-device-ancestor-4.f90: New test.

2 years agolibstdc++: Fix 17_intro/names.cc failures on Solaris
Jonathan Wakely [Tue, 31 Aug 2021 09:25:53 +0000 (10:25 +0100)] 
libstdc++: Fix 17_intro/names.cc failures on Solaris

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

* testsuite/17_intro/names.cc: Undefine some more names used
by Solaris system headers.

2 years agoPreserve SUBREG_PROMOTED_VAR_P on (extend:HI (subreg/s:QI (reg:SI))).
Roger Sayle [Tue, 31 Aug 2021 10:45:07 +0000 (11:45 +0100)] 
Preserve SUBREG_PROMOTED_VAR_P on (extend:HI (subreg/s:QI (reg:SI))).

SUBREG_PROMOTED_VAR_P is a mechanism for tracking that a partial subreg
is correctly zero-extended or sign-extended in the parent register.  For
example, the RTL (subreg/s/v:QI (reg/v:SI 23 [ x ]) 0) indicates that the
byte x is zero extended in reg:SI 23, which is useful for optimization.
An example is that zero extending the above QImode value to HImode can
simply use a wider subreg, i.e. (subreg:HI (reg/v:SI 23 [ x ]) 0).

This patch addresses the oversight/missed optimization opportunity that
the new HImode subreg above should retain its SUBREG_PROMOTED_VAR_P
annotation as its value is guaranteed to be correctly extended in the
SImode parent.  The code below to preserve SUBREG_PROMOTED_VAR_P is already
present in the middle-end (e.g. simplify-rtx.c:7232-7242) but missing
from one or two (precisely three) places that (accidentally) strip it.

Whilst there I also added another optimization.  If we need to extend
the above QImode value beyond the SImode register holding it, say to
DImode, we can eliminate the SUBREG and simply extend from the SImode
register to DImode.

2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* expr.c (convert_modes): Preserve SUBREG_PROMOTED_VAR_P when
creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
subreg.
* simplify-rtx.c (simplify_unary_operation_1) [SIGN_EXTEND]:
Likewise, preserve SUBREG_PROMOTED_VAR_P when creating a (wider)
partial subreg from a SUBREG_PROMOTED_VAR_P subreg.  Generate
SIGN_EXTEND of the SUBREG_REG when a subreg would be paradoxical.
[ZERO_EXTEND]: Likewise, preserve SUBREG_PROMOTED_VAR_P when
creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
subreg.  Generate ZERO_EXTEND of the SUBREG_REG when a subreg
would be paradoxical.

2 years agoOnly simplify TRUNCATE to SUBREG on TRULY_NOOP_TRUNCATION targets.
Roger Sayle [Tue, 31 Aug 2021 10:41:57 +0000 (11:41 +0100)] 
Only simplify TRUNCATE to SUBREG on TRULY_NOOP_TRUNCATION targets.

As recently remarked by Jeff Law, SUBREGs are the "forever chemicals"
of GCC's RTL; once created they persist in the environment.  The problem,
according to the comment on lines 5428-5438 of combine.c is that
non-tieable SUBREGs interfere with reload/register allocation, so
combine often doesn't touch/clean-up instructions containing a SUBREG.

This is the first and simplest of two patches to tackle that problem,
by teaching combine to avoid converting explicit TRUNCATEs into
SUBREGs that it can't handle.

Consider the following (hypothetical) sequence of instructions on
a STORE_FLAG_VALUE=1 target, which stores a zero or one in an SI
register, then uselessly truncates to QImode, then extends it again.

(set (reg:SI 27) (ne:SI (reg:BI 28) (const_int 0)))
(set (reg:QI 26) (truncate:QI (reg:SI 27)))
(set (reg:SI 0) (zero_extend:SI (reg:QI 26)))

which ideally (i.e. with this patch) combine would simplify to:
(set (reg:SI 0) (ne:SI (reg:BI 28) (const_int 0)))

Alas currently, during combine the middle TRUNCATE is converted into
a lowpart SUBREG, which subst then turns into (clobber (const_int 0)),
abandoning the attempted combination, that then never reaches recog.

2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* combine.c (combine_simplify_rtx): Avoid converting an explicit
TRUNCATE into a lowpart SUBREG on !TRULY_NOOP_TRUNCATION targets.
* simplify-rtx.c (simplify_unary_operation_1): Likewise.

2 years agotree-optimization/102142 - fix typo in loop BB reduc cost adjustment
Richard Biener [Tue, 31 Aug 2021 09:04:51 +0000 (11:04 +0200)] 
tree-optimization/102142 - fix typo in loop BB reduc cost adjustment

This fixes a typo in the condition guarding the cleanup of the
visited flag of costed scalar stmts.

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

PR tree-optimization/102142
* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Fix
condition under which to unset the visited flag.

* g++.dg/torture/pr102142.C: New testcase.

2 years agolibgcc: Add missing runtime exception notices
Richard Sandiford [Tue, 31 Aug 2021 09:56:34 +0000 (10:56 +0100)] 
libgcc: Add missing runtime exception notices

Quoting from https://gcc.gnu.org/pipermail/gcc/2021-July/236716.html:

--------------------------------------------------------------------
It was pointed out to me off-list that config/aarch64/value-unwind.h
is missing the runtime exception.  It looks like a few other files
are too; a fuller list is:

libgcc/config/aarch64/value-unwind.h
libgcc/config/frv/frv-abi.h
libgcc/config/i386/value-unwind.h
libgcc/config/pa/pa64-hpux-lib.h

Certainly for the aarch64 file this was simply a mistake;
it seems to have been copied from the i386 version, both of which
reference the runtime exception but don't actually include it.
--------------------------------------------------------------------

Similarly, frv-abi.h referenced the exception but didn't include it.
pa64-hpux-lib.h was missing any reference to the exception.

The decision was that this was simply a mistake
[https://gcc.gnu.org/pipermail/gcc/2021-July/236717.html]:

--------------------------------------------------------------------
[…] It generally is
considered a textual omission.  The runtime library components of GCC
are intended to be licensed under the runtime exception, which was
granted and approved at the time of introduction.
--------------------------------------------------------------------

and that we should simply change all of the files above
[https://gcc.gnu.org/pipermail/gcc/2021-July/236719.html]:

--------------------------------------------------------------------
Please correct the text in the files. The files in libgcc used in the
GCC runtime are intended to be licensed with the runtime exception and
GCC previously was granted approval for that licensing and purpose.

[…]

The runtime exception explicitly was intended for this purpose and
usage at the time that GCC received approval to apply the exception.
--------------------------------------------------------------------

libgcc/
* config/aarch64/value-unwind.h: Add missing runtime exception
paragraph.
* config/frv/frv-abi.h: Likewise.
* config/i386/value-unwind.h: Likewise.
* config/pa/pa64-hpux-lib.h: Likewise.

2 years agomiddle-end/102129 - avoid TER of possibly trapping expressions
Richard Biener [Tue, 31 Aug 2021 07:13:20 +0000 (09:13 +0200)] 
middle-end/102129 - avoid TER of possibly trapping expressions

The following avoids applying TER to possibly trapping expressions,
preventing a trapping FP multiplication to be moved across a call
that should not be executed.

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

PR middle-end/102129
* tree-ssa-ter.c (find_replaceable_in_bb): Do not move
possibly trapping expressions across calls.

2 years agogdb: Add a dependency between gdb and libbacktrace
Andrew Burgess [Mon, 30 Aug 2021 20:16:50 +0000 (21:16 +0100)] 
gdb: Add a dependency between gdb and libbacktrace

GDB is going to start using libbacktrace, so add a build dependency
between the two modules.  This change needs to be added into the GCC
toplevel files, and then back-ported to the binutils-gdb repository.

2021-08-31  Andrew Burgess  <andrew.burgess@embecosm.com>

ChangeLog:

* Makefile.def: Add all-gdb dependency on all-libbacktrace.
* Makefile.in: Regenerate.

2 years agotree-ssa-ccp: Fix up bit_value_binop on RSHIFT_EXPR [PR102134]
Jakub Jelinek [Tue, 31 Aug 2021 08:29:23 +0000 (10:29 +0200)] 
tree-ssa-ccp: Fix up bit_value_binop on RSHIFT_EXPR [PR102134]

As mentioned in the PR, this hunk is guarded with !wi::neg_p (r1val | r1mask, sgn)
which means if sgn is UNSIGNED, it is always true, but r1val | r1mask in
widest_int is still sign-extended.  That means wi::clz (arg) returns 0,
wi::get_precision (arg) returns some very large number
(WIDE_INT_MAX_PRECISION, on x86_64 576 bits) and width is 64, so we end up
with lzcount of -512 where the code afterwards expects a non-negative
lzcount.  For arg without the sign bit set the code works right, those
numbers are zero extended and so wi::clz must return wi::get_precision (arg) - width
plus number of leading zero bits within the width precision.
The patch fixes it by handling the sign-extension specially, either it could
be done through wi::neg_p (arg) check, but lzcount == 0 works identically.

2021-08-31  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/102134
* tree-ssa-ccp.c (bit_value_binop) <case RSHIFT_EXPR>: If sgn is
UNSIGNED and r1val | r1mask has MSB set, ensure lzcount doesn't
become negative.

* gcc.c-torture/execute/pr102134.c: New test.

2 years agoarm: Adjust test for soft fp targets.
prathamesh.kulkarni [Tue, 31 Aug 2021 07:25:19 +0000 (12:55 +0530)] 
arm: Adjust test for soft fp targets.

gcc/testsuite/ChangeLog:
* gcc.target/arm/pr51534.c: Adjust test-case for soft fp targets.

2 years agoFix gcc.dg/ipa/inline-8.c for -fPIC
Andrew Pinski [Tue, 31 Aug 2021 05:36:47 +0000 (05:36 +0000)] 
Fix gcc.dg/ipa/inline-8.c for -fPIC

The problem here is with -fPIC, both cmp and move
don't bind locally so they are not even tried to be
inlined.  This fixes the issue by marking both
functions as static and now the testcase passes
for both -fPIC and -fno-PIC cases.

OK? Tested on x86_64-linux-gnu.

gcc/testsuite/ChangeLog:

* gcc.dg/ipa/inline-8.c: Mark cmp and move as
static so they both bind local and available for
inlinine.

2 years agoFix PR driver/79181 (and others), not deleting some /tmp/cc* files for LTO.
Andrew Pinski [Mon, 30 Aug 2021 22:43:16 +0000 (22:43 +0000)] 
Fix PR driver/79181 (and others), not deleting some /tmp/cc* files for LTO.

So the main issue here is that some signals are not setup unlike collect2.
So this merges the setting up of the signal handlers to one function in
collect-utils and has collect2 and lto-wrapper call that function.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

PR driver/79181
* collect-utils.c (setup_signals): New declaration.
* collect-utils.h (setup_signals): New function.
* collect2.c (handler): Delete.
(main): Instead of manually setting up the signals,
just call setup_signals.
* lto-wrapper.c (main): Likewise.

2 years agoFix x86/56337 : 1<<28 alignment is broken
Andrew Pinski [Fri, 23 Jul 2021 17:21:06 +0000 (17:21 +0000)] 
Fix x86/56337 : 1<<28 alignment is broken

The problem here is the x86_64 back-end uses a signed integer
for alignment and then divides by BITS_PER_UNIT so if we had
INT_MIN (which is what 1<<28*8 is), we would get the wrong result.

This fixes the problem by using unsigned for the argument to
x86_output_aligned_bss and x86_output_aligned_bss.

OK? Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

PR target/56337
* config/i386/i386-protos.h (x86_output_aligned_bss):
Change align argument to unsigned type.
(x86_elf_aligned_decl_common): Likewise.
* config/i386/i386.c (x86_elf_aligned_decl_common): Likewise.
(x86_output_aligned_bss): Likewise.

2 years agoMIPS: add .module mipsREV to all output asm file
YunQiang Su [Sat, 28 Aug 2021 11:39:04 +0000 (07:39 -0400)] 
MIPS: add .module mipsREV to all output asm file

Currently, the asm output file for MIPS has no rev info.
It can make some trouble, for example:
  assembler is mips1 by default,
  gcc is fpxx by default.
To assemble the output of gcc -S, we have to pass -mips2
to assembler.

gcc/ChangeLog:

* config/mips/mips.c (mips_module_isa_name): New.
  mips_file_start: add .module mipsREV to all asm output

2 years agoMIPS: use mips_isa enum instead hardcoded numbers
YunQiang Su [Sat, 28 Aug 2021 11:28:55 +0000 (07:28 -0400)] 
MIPS: use mips_isa enum instead hardcoded numbers

Currently mips-cpu.defs, mips.h, netbsd.h and config.gcc are
using hardcoded numbers for isa level.

Let's replace them with more readable enum mips_isa.

gcc/ChangeLog:
* config/mips/mips.h (struct mips_cpu_info): define enum mips_isa;
  use enum instead of int for 'isa' member.
* config.gcc, config/mips/mips.c, config/mips/mips-cpus.def,
  config/mips/netbsd.h: replace hardcoded numbers with enum.

2 years agoUnify UNSPEC_MASKED_EQ/GT to the form of UNSPEC_PCMP.
liuhongt [Mon, 30 Aug 2021 07:05:14 +0000 (15:05 +0800)] 
Unify UNSPEC_MASKED_EQ/GT to the form of UNSPEC_PCMP.

Currently for evex vpcmpeqb instruction, we have two forms of rtl
template representation, one is (unspec [op1 op2] UNSPEC_MASK_EQ), the
other is (unspec [op1, op2, const_int 0] UNSPEC_PCMP), which increases
the maintenance burden, such as optimization (not: vpcmpeqb)
to (vpcmpneqb) requires two define_insn_and_split to match the two
forms respectively, this patch removes UNSPEC_MASK_EQ/GT, unifying
them into the form of UNSPEC_PCMP.

gcc/ChangeLog:

* config/i386/sse.md (*<avx512>_ucmp<mode>3_1): Change from
define_split to define_insn_and_split.
(*avx2_eq<mode>3): Removed.
(<avx512>_eq<mode>3<mask_scalar_merge_name>): Adjust pattern
(<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Rename to ..
(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): .. this, and
adjust pattern.
(*avx2_gt<mode>3): Removed.
(<avx512>_gt<mode>3<mask_scalar_merge_name>): Change from
define_insn to define_expand, and adjust pattern.
(UNSPEC_MASKED_EQ, UNSPEC_MASKED_GT): Removed.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512bw-vpcmpeqb-1.c: Adjust testcase.
* gcc.target/i386/avx512bw-vpcmpeqw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtw-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpeqd-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpeqq-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpgtd-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpgtq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpeqd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpeqq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtq-1.c: Ditto.
* gcc.target/i386/bitwise_mask_op-1.c: Ditto.
* gcc.target/i386/bitwise_mask_op-2.c: Ditto.

2 years agoDaily bump.
GCC Administrator [Tue, 31 Aug 2021 00:16:50 +0000 (00:16 +0000)] 
Daily bump.

2 years agoanalyzer: support "bifurcation"; reimplement realloc [PR99260]
David Malcolm [Mon, 30 Aug 2021 22:36:31 +0000 (18:36 -0400)] 
analyzer: support "bifurcation"; reimplement realloc [PR99260]

Most of the state-management code in the analyzer involves
modifying state objects in-place, which implies a single outcome.
(I originally implemented in-place modification because I wanted
to avoid having to create copies of state objects, and it's now
very difficult to change this aspect of the analyzer's design)

However, there are various special-cases such as "realloc" for which
it's best to split the state into multiple outcomes.

This patch adds a mechanism for "bifurcating" the analysis in places
where there isn't a split in the CFG, and uses it to implement realloc,
in this case treating it as having 3 possible outcomes:
- failure, returning NULL
- success, growing the buffer in-place without moving it
- success, allocating a new buffer, copying the content of the old
  buffer to it, and freeing the old buffer.

gcc/ChangeLog:
PR analyzer/99260
* Makefile.in (ANALYZER_OBJS): Add analyzer/call-info.o.

gcc/analyzer/ChangeLog:
PR analyzer/99260
* analyzer.h (class custom_edge_info): New class, adapted from
exploded_edge::custom_info_t.  Make member functions const.
Make update_model return bool, converting edge param from
reference to a pointer, and adding a ctxt param.
(class path_context): New class.
* call-info.cc: New file.
* call-info.h: New file.
* engine.cc: Include "analyzer/call-info.h" and <memory>.
(impl_region_model_context::impl_region_model_context): Update for
new m_path_ctxt field.
(impl_region_model_context::bifurcate): New.
(impl_region_model_context::terminate_path): New.
(impl_region_model_context::get_malloc_map): New.
(impl_sm_context::impl_sm_context): Update for new m_path_ctxt
field.
(impl_sm_context::get_fndecl_for_call): Likewise.
(impl_sm_context::set_next_state): Likewise.
(impl_sm_context::warn): Likewise.
(impl_sm_context::is_zero_assignment): Likewise.
(impl_sm_context::get_path_context): New.
(impl_sm_context::m_path_ctxt): New.
(impl_region_model_context::on_condition): Update for new
path_ctxt param.  Handle m_enode_for_diag being NULL.
(impl_region_model_context::on_phi): Update for new path_ctxt
param.
(exploded_node::on_stmt): Add path_ctxt param, updating ctor calls
to use it as necessary.  Use it to bail out after sm-handling,
if needed.
(exploded_node::detect_leaks): Update for new path_ctxt param.
(dynamic_call_info_t::update_model): Update for conversion of
exploded_edge::custom_info_t to custom_edge_info.
(dynamic_call_info_t::add_events_to_path): Likewise.
(rewind_info_t::update_model): Likewise.
(rewind_info_t::add_events_to_path): Likewise.
(exploded_edge::exploded_edge): Likewise.
(exploded_graph::add_edge): Likewise.
(exploded_graph::maybe_process_run_of_before_supernode_enodes):
Update for new path_ctxt param.
(class impl_path_context): New.
(exploded_graph::process_node): Update for new path_ctxt param.
Create an impl_path_context and pass it to exploded_node::on_stmt.
Use it to terminate iterating stmts if terminate_path is called
on it.  After processing a run of stmts, query path_ctxt to
potentially terminate the analysis path, and/or to "bifurcate" the
analysis into multiple additional paths.
(feasibility_state::maybe_update_for_edge): Update for new
update_model ctxt param.
* exploded-graph.h
(impl_region_model_context::impl_region_model_context): Add
path_ctxt param.
(impl_region_model_context::bifurcate): New.
(impl_region_model_context::terminate_path): New
(impl_region_model_context::get_ext_state): New.
(impl_region_model_context::get_malloc_map): New.
(impl_region_model_context::m_path_ctxt): New field.
(exploded_node::on_stmt): Add path_ctxt param.
(class exploded_edge::custom_info_t): Move to analyzer.h, renaming
to custom_edge_info, and making the changes as noted in analyzer.h
above.
(exploded_edge::exploded_edge): Update for these changes to
exploded_edge::custom_info_t.
(exploded_edge::m_custom_info): Likewise.
(class dynamic_call_info_t): Likewise.
(class rewind_info_t): Likewise.
(exploded_graph::add_edge): Likewise.
* program-state.cc (program_state::on_edge): Update for new
path_ctxt param.
(program_state::push_call): Likewise.
(program_state::returning_call): Likewise.
(program_state::prune_for_point): Likewise.
* region-model-impl-calls.cc: Include "analyzer/call-info.h".
(call_details::get_fndecl_for_call): New.
(region_model::impl_call_realloc): Reimplement.
* region-model.cc (region_model::on_call_pre): Move call to
impl_call_realloc to...
(region_model::on_call_post): ...here.  Consolidate creation
of call_details instance.
(noop_region_model_context::bifurcate): New.
(noop_region_model_context::terminate_path): New.
* region-model.h (call_details::get_call_stmt): New.
(call_details::get_fndecl_for_call): New.
(region_model::on_realloc_with_move): New.
(region_model_context::bifurcate): New.
(region_model_context::terminate_path): New.
(region_model_context::get_ext_state): New.
(region_model_context::get_malloc_map): New.
(noop_region_model_context::bifurcate): New.
(noop_region_model_context::terminate_path): New.
(noop_region_model_context::get_ext_state): New.
(noop_region_model_context::get_malloc_map): New.
* sm-malloc.cc: Include "analyzer/program-state.h".
(malloc_state_machine::on_realloc_call): Reimplement.
(malloc_state_machine::on_realloc_with_move): New.
(region_model::on_realloc_with_move): New.
* sm-signal.cc (class signal_delivery_edge_info_t): Update for
conversion from exploded_edge::custom_info_t to custom_edge_info.
* sm.h (sm_context::get_path_context): New.
* svalue.cc (svalue::maybe_get_constant): Call
unwrap_any_unmergeable.

gcc/testsuite/ChangeLog:
PR analyzer/99260
* gcc.dg/analyzer/capacity-2.c: Update for changes to realloc
analysis.
* gcc.dg/analyzer/pr99193-1.c: Likewise.
* gcc.dg/analyzer/pr99193-3.c: Likewise.
* gcc.dg/analyzer/realloc-1.c: Likewise.  Add test coverage for
realloc of non-heap pointer, realloc from mismatching allocator,
and realloc on a freed pointer.
* gcc.dg/analyzer/realloc-2.c: New test.

2 years agoc++: limit instantiation with ill-formed class [PR96286]
Jason Merrill [Sun, 29 Aug 2021 22:17:22 +0000 (18:17 -0400)] 
c++: limit instantiation with ill-formed class [PR96286]

I noticed that after the static_assert failures in lwg3466.cc, we got
various follow-on errors because we went ahead and tried to instantiate the
promise<T> member functions even after instantiating the class itself ran
into problems.  Interrupting instantiation of the class itself seems likely
to cause error-recovery problems, but preventing instantiation of member
functions seems strictly better for error-recovery.

This doesn't fix any of the specific testcases in PR96286, but addresses
part of that problem space.

PR c++/96286

gcc/cp/ChangeLog:

* cp-tree.h (struct lang_type): Add erroneous bit-field.
(CLASSTYPE_ERRONEOUS): New.
* pt.c (limit_bad_template_recursion): Check it.
(instantiate_class_template_1): Set it.

libstdc++-v3/ChangeLog:

* testsuite/30_threads/promise/requirements/lwg3466.cc:
Remove dg-prune-outputs.

gcc/testsuite/ChangeLog:

* g++.dg/template/access2.C: Split struct A.

2 years agoc++: preserve location through constexpr
Jason Merrill [Sat, 28 Aug 2021 04:40:29 +0000 (00:40 -0400)] 
c++: preserve location through constexpr

While working on the patch for PR101460, I noticed that we were losing the
expression location when folding class prvalue expressions.  The final patch
doesn't fold class prvalues, but this still seems a worthwhile change.  I
don't add location wrappers for scalar prvalues because many callers are
trying to fold them away.

gcc/cp/ChangeLog:

* constexpr.c (cxx_eval_outermost_constant_expr): Copy
expr location to result.

2 years agoc++: fold function template args sooner [PR101460]
Jason Merrill [Mon, 30 Aug 2021 13:44:28 +0000 (09:44 -0400)] 
c++: fold function template args sooner [PR101460]

As discussed in the PR, we were giving a lot of unnecessary errors for this
testcase because we didn't try to do constant evaluation until
convert_nontype_argument, which happens for each of the candidates.  But
when looking at a template-id as the function operand of a call, we can try
to fold arguments before we get into overload resolution.

PR c++/101460

gcc/cp/ChangeLog:

* cp-tree.h (cxx_constant_value_sfinae): Declare.
* constexpr.c (cxx_constant_value_sfinae): New.
* pt.c (fold_targs_r, maybe_fold_fn_template_args): New.
(tsubst_copy_and_build) [CALL_EXPR]: Call
maybe_fold_fn_template_args.

gcc/testsuite/ChangeLog:

* g++.dg/template/explicit-args6.C: New test.

2 years agoFortran - fix whitespace issue during parsing of assigned goto
Harald Anlauf [Mon, 30 Aug 2021 21:07:56 +0000 (23:07 +0200)] 
Fortran - fix whitespace issue during parsing of assigned goto

gcc/fortran/ChangeLog:

PR fortran/102113
* match.c (gfc_match_goto): Allow for whitespace in parsing list
of labels.

gcc/testsuite/ChangeLog:

PR fortran/102113
* gfortran.dg/goto_9.f90: New test.

2 years agoFix PR 90142: contrib/download_prerequisites uses test ==
Andrew Pinski [Mon, 30 Aug 2021 20:30:41 +0000 (20:30 +0000)] 
Fix PR 90142: contrib/download_prerequisites uses test ==

Since == is not portable, it is better to use = in contrib/
download_prerequisites.  The only place == was used is inside
the function md5_check which is used only on Mac OS X.

Tested on Mac OS X as:
./contrib/download_prerequisites --md5
Both with all files having the correct checksum and one with a broken one.

contrib/ChangeLog:

* download_prerequisites (md5_check): Replace == inside
test with = to be more portable.

2 years agoc++: Add warning about missing 'requires'
Jason Merrill [Fri, 27 Aug 2021 21:28:28 +0000 (17:28 -0400)] 
c++: Add warning about missing 'requires'

I noticed that concepts-lambda14.C had two useless requires-expressions:

  static_assert(requires { C<T>; });

always succeeds, because C<T> is always a valid expression for any type,
regardless of whether C is satisfied for a particular type.  Presumably the
user means

  static_assert(requires { requires C<T>; });

to make the C<T> a nested-requirement.  Of course,

  static_assert(C<T>);

is much simpler and means the same thing; this is more relevant in the
middle of a longer requires-expression, such as the bug this warning found
in cmcstl2:

  template<class I>
  META_CONCEPT input_iterator =
  input_or_output_iterator<I> &&
  readable<I> &&
  requires(I& i, const I& ci) {
  typename iterator_category_t<I>;
  derived_from<iterator_category_t<I>, input_iterator_tag>;
  i++;
  };

where 'requires' is missing before 'derived_from'.

gcc/ChangeLog:

* doc/invoke.texi: Document -Wmissing-requires.

gcc/c-family/ChangeLog:

* c.opt: Add -Wmissing-requires.

gcc/cp/ChangeLog:

* parser.c (cp_parser_simple_requirement): Warn about missing
requires.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-lambda14.C: Add expected warnings.

2 years agoFortran - correct check for constraint F2008:C628 / F2018:C932
Harald Anlauf [Mon, 30 Aug 2021 20:41:01 +0000 (22:41 +0200)] 
Fortran - correct check for constraint F2008:C628 / F2018:C932

gcc/fortran/ChangeLog:

PR fortran/101349
* resolve.c (resolve_allocate_expr): An unlimited polymorphic
argument to ALLOCATE must be ALLOCATABLE or a POINTER.  Fix the
corresponding check.

gcc/testsuite/ChangeLog:

PR fortran/101349
* gfortran.dg/unlimited_polymorphic_33.f90: New test.

2 years agors6000: Always initialize vector_pair and vector_quad nodes
Bill Schmidt [Tue, 24 Aug 2021 17:10:19 +0000 (12:10 -0500)] 
rs6000: Always initialize vector_pair and vector_quad nodes

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

gcc/
* config/rs6000/rs6000-call.c (rs6000_init_builtins): Remove
TARGET_EXTRA_BUILTINS guard.

2 years agors6000: Add sanity to V2DI_type_node definitions
Bill Schmidt [Mon, 30 Aug 2021 19:55:11 +0000 (14:55 -0500)] 
rs6000: Add sanity to V2DI_type_node definitions

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

gcc/
* config/rs6000/rs6000-call.c (rs6000_init_builtins): Change
initialization of V2DI_type_node and unsigned_V2DI_type_node.

2 years agors6000: Darwin builtin support
Bill Schmidt [Fri, 5 Mar 2021 01:54:00 +0000 (19:54 -0600)] 
rs6000: Darwin builtin support

2021-03-04  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): Use the new
decl when new_builtins_are_live.
* config/rs6000/rs6000-builtin-new.def (__builtin_cfstring): New
built-in.

2 years agoFix libgfortran build on hppa*-hp-hpux[01]*
John David Anglin [Mon, 30 Aug 2021 19:31:40 +0000 (19:31 +0000)] 
Fix libgfortran build on hppa*-hp-hpux[01]*

Add include hack to define PRIdPTR, PRIiPTR, PRIoPTR, PRIuPTR, PRIxPTR
and PRIXPTR in inttypes.h.

2021-08-30  John David Anglin  <danglin@gcc.gnu.org>

fixincludes/ChangeLog:
* inclhack.def (hpux_c99_inttypes5): New hack to define PRIdPTR, etc.
* fixincl.x: Regenerate.
* tests/base/inttypes.h: Update.

2 years agoUpdate gcc sv.po.
Joseph Myers [Mon, 30 Aug 2021 19:10:08 +0000 (19:10 +0000)] 
Update gcc sv.po.

* sv.po: Update.

2 years agoEnable store fusion on Power10.
Pat Haugen [Mon, 30 Aug 2021 15:58:21 +0000 (10:58 -0500)] 
Enable store fusion on Power10.

gcc/ChangeLog:

* config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER): Add
OPTION_MASK_P10_FUSION_2STORE.
(POWERPC_MASKS): Likewise.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
store fusion for Power10.
(is_fusable_store): New.
(power10_sched_reorder): Likewise.
(rs6000_sched_reorder): Do Power10 specific reordering.
(rs6000_sched_reorder2): Likewise.
* config/rs6000/rs6000.opt: Add new option.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/fusion-p10-stst.c: New test.
* gcc.target/powerpc/fusion-p10-stst2.c: New test.

2 years agolibphobos: Compile configure tests with -fno-druntime
Iain Buclaw [Mon, 30 Aug 2021 10:12:25 +0000 (12:12 +0200)] 
libphobos: Compile configure tests with -fno-druntime

libphobos/ChangeLog:

* configure: Regenerate.
* m4/autoconf.m4 (AC_LANG_PROGRAM): Declare module name 'object'.
* m4/gcc_support.m4 (WITH_LOCAL_DRUNTIME): Compile tests with
-fno-druntime.

2 years agotree-optimization/102128 - rework if-converted BB vect heuristic
Richard Biener [Mon, 30 Aug 2021 10:56:26 +0000 (12:56 +0200)] 
tree-optimization/102128 - rework if-converted BB vect heuristic

This reworks the previous attempt to avoid leaving around if-converted
scalar code in BB vectorized loop bodies to keep costing independent
subgraphs which should address the observed regression with 519.lbm_r.

For this to work we now first cost all subgraphs and only after
doing that proceed to emit vectorized code.

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

PR tree-optimization/102128
* tree-vect-slp.c (vect_bb_vectorization_profitable_p):
Move scanning for if-converted scalar code to the caller
and instead delay clearing the visited flag for profitable
subgraphs.
(vect_slp_region): Cost all subgraphs before scheduling.
For if-converted BB vectorization scan for scalar COND_EXPRs
and do not vectorize if any found and the cost model is
very-cheap.

2 years agoMake sure -fexceptions is enabled when -fnon-call-exceptions is
Richard Biener [Mon, 30 Aug 2021 07:55:59 +0000 (09:55 +0200)] 
Make sure -fexceptions is enabled when -fnon-call-exceptions is

This makes -fexceptions enabled by -fnon-call-exceptions, removing
the odd state of !flag_exceptions && flag_non_call_exceptions from
middle-end consideration.

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

* common.opt (fexceptions): Mark
EnabledBy(fnon-call-exceptions).
* doc/invoke.texi (fnon-call-exceptions): Document this
enables -fexceptions.

2 years agoUse __builtin_trap() for abort() if inhibit_libc
Sebastian Huber [Tue, 17 Aug 2021 07:53:43 +0000 (09:53 +0200)] 
Use __builtin_trap() for abort() if inhibit_libc

abort() is used in gcc_assert() and gcc_unreachable() which is used by target
libraries such as libgcov.a.  This patch changes the abort() definition under
certain conditions.  If inhibit_libc is defined and abort is not already
defined, then abort() is defined to __builtin_trap().

The inhibit_libc define is usually defined if GCC is built for targets running
in embedded systems which may optionally use a C standard library.  If
inhibit_libc is defined, then there may be still a full featured abort()
available.  abort() is a heavy weight function which depends on signals and
file streams.  For statically linked applications, this means that a dependency
on gcc_assert() pulls in the support for signals and file streams.  This could
prevent using gcov to test low end targets for example.  Using __builtin_trap()
avoids these dependencies if the target implements a "trap" instruction.  The
application or operating system could use a trap handler to react to failed GCC
runtime checks which caused a trap.

gcc/

* tsystem.h (abort): Define abort() if inhibit_libc is defined and it
is not already defined.

2 years agolibffi: Fix MIPS r6 support
YunQiang Su [Sat, 28 Aug 2021 12:17:18 +0000 (08:17 -0400)] 
libffi: Fix MIPS r6 support

for some instructions, MIPS r6 uses different encoding other than
the previous releases.

1. mips/n32.S disable .set mips4: since it casuses old insn encoding
   is used.
   https://github.com/libffi/libffi/pull/396 has been accepted as:
     94c102aa69b04337f63498e0e6551fcdce549ae5
2. mips/ffi.c: the encoding for JR is hardcoded: we need to use
   different value for r6 and pre-r6.
   https://github.com/libffi/libffi/pull/401 has been accpeted as:
     746dbe3a6a79a41931c03b51df2972be4d5e5028

libffi/
PR libffi/83636
* src/mips/n32.S: disable .set mips4
* src/mips/ffi.c: use different JR encoding for r6.

2 years agoMake sure we're playing with integral modes before call extract_integral_bit_field.
liuhongt [Fri, 6 Aug 2021 02:18:43 +0000 (10:18 +0800)] 
Make sure we're playing with integral modes before call extract_integral_bit_field.

gcc/ChangeLog:

* expmed.c (extract_bit_field_1): Make sure we're playing with
integral modes before call extract_integral_bit_field.
(extract_integral_bit_field): Add a parameter of type
scalar_int_mode which corresponds to of tmode.
And call extract_and_convert_fixed_bit_field instead of
extract_fixed_bit_field and convert_extracted_bit_field.
(extract_and_convert_fixed_bit_field): New function, it's a
combination of extract_fixed_bit_field and
convert_extracted_bit_field.

2 years agoDaily bump.
GCC Administrator [Mon, 30 Aug 2021 00:16:44 +0000 (00:16 +0000)] 
Daily bump.

2 years agolibiberty: Add support for demangling local D template declarations
Iain Buclaw [Sun, 29 Aug 2021 18:26:06 +0000 (20:26 +0200)] 
libiberty: Add support for demangling local D template declarations

The D language now allows multiple different template declarations in
the same function that have the same mangled name.  To make the mangled
names unique, a fake parent in the form `__Sddd' is added to the symbol.
This information is not important for the user, so the demangler now
handles and ignores it.

libiberty/ChangeLog:

* d-demangle.c (dlang_identifier): Skip over fake parent manglings.
* testsuite/d-demangle-expected: Add tests.

2 years agolibiberty: Add support for demangling D function literals as template value parameters
Iain Buclaw [Sun, 29 Aug 2021 18:04:24 +0000 (20:04 +0200)] 
libiberty: Add support for demangling D function literals as template value parameters

The D language now allows instantiating templates using struct literals
that have function literal fields as a value argument.

libiberty/ChangeLog:

* d-demangle.c (dlang_parse_arrayliteral): Add 'info' parameter.
(dlang_parse_assocarray): Likewise.
(dlang_parse_structlit): Likewise.
(dlang_value): Likewise.  Handle function literal symbols.
(dlang_template_args): Pass 'info' to dlang_value.
* testsuite/d-demangle-expected: Add new test.

2 years agolibiberty: Add support for D `typeof(*null)' types
Iain Buclaw [Sun, 29 Aug 2021 17:00:33 +0000 (19:00 +0200)] 
libiberty: Add support for D `typeof(*null)' types

The D language has a new bottom type `typeof(*null)'.  Null types were
also incorrectly being demangled as `none', this has been fixed to be
`typeof(null)'.

libiberty/ChangeLog:

* d-demangle.c (dlang_attributes): Handle typeof(*null).
(dlang_type): Likewise.  Demangle 'n' as typeof(null).
* testsuite/d-demangle-expected: Update tests.

2 years agoDarwin: Fixes for darwin_libc_has_function.
Iain Sandoe [Fri, 27 Aug 2021 18:49:05 +0000 (19:49 +0100)] 
Darwin: Fixes for darwin_libc_has_function.

Firstly, the checks for availability need not be run for any
currently supported Darwin version (or for any version of
Darwin on x86).  In fact, the only test that is needed that
differs from the default is for the availbaility of sincos.
Test that and then fall back to the default implementation.

Secondly, the funtion appears to be called from the Jit library
before the value of darwin_macosx_version_min has been set up -
at present we work around this by guarding the checks on having
a non-null pointer for darwin_macosx_version_min.

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

* config/darwin.c (darwin_libc_has_function): Do not run
the checks for x86 or modern Darwin.  Make sure that there
is a value set for darwin_macosx_version_min before testing.

2 years agod: Call the assertp and boundsp variants for assert and array contract failures.
Iain Buclaw [Sat, 28 Aug 2021 22:50:38 +0000 (00:50 +0200)] 
d: Call the assertp and boundsp variants for assert and array contract failures.

gcc/d/ChangeLog:

* d-codegen.cc: Include dmd/module.h.
(build_filename_from_loc): New function.
(d_assert_call): Rename to...
(build_assert_call): ...this.
(build_array_bounds_call): Call arrayboundsp variant of the array
bounds failure callback.
(build_bounds_condition): Rename to...
(build_bounds_index_condition): ...this.  Update signature.
(build_bounds_slice_condition): New function.
(checkaction_trap_p): New function.
(d_assert_call): Call assertp variant of assert failure callback.
* d-tree.h (class IndexExp): Declare.
(class SliceExp): Declare.
(build_bounds_condition): Remove.
(build_assert_call): Declare.
(build_bounds_index_condition): Declare.
(build_bounds_slice_condition): Declare.
(checkaction_trap_p): Declare.
(d_assert_call): Remove.
* expr.cc (ExprVisitor::visit(IndexExp *)): Call
build_bounds_index_condition.
(ExprVisitor::visit(SliceExp *)): Call build_bounds_slice_condition.
(ExprVisitor::visit(AssertExp *)): Update setting of libcall.
* runtime.cc (enum d_libcall_type): Add LCT_IMMUTABLE_CHARPTR.
(get_libcall_type): Handle LCT_IMMUTABLE_CHARPTR.
* runtime.def (ASSERT): Rename to...
(ASSERTP): ...this.  Update signature.
(UNITTEST): Rename to...
(UNITTESTP): ...this.  Update signature.
(ARRAY_BOUNDS): Rename to...
(ARRAYBOUNDSP): ...this.  Updates signature.
* toir.cc (IRVisitor::visit(SwitchErrorStatement *)): Update call.

2 years agod: Update comment for TypeInfoVisitor::layout_base
Iain Buclaw [Sat, 28 Aug 2021 18:37:25 +0000 (20:37 +0200)] 
d: Update comment for TypeInfoVisitor::layout_base

gcc/d/ChangeLog:

* typeinfo.cc (class TypeInfoVisitor::layout_base): Update comment.

2 years agod: Use `int` to store class and struct flags
Iain Buclaw [Sat, 28 Aug 2021 18:28:02 +0000 (20:28 +0200)] 
d: Use `int` to store class and struct flags

gcc/d/ChangeLog:

* typeinfo.cc (TypeInfoVisitor::visit(TypeInfoClassDeclaration *)):
Use int to store type flags.
(TypeInfoVisitor::visit(TypeInfoStructDeclaration *)): Likewise.

2 years agod: Get __c_wchar_t type from build_frontend_type
Iain Buclaw [Sat, 28 Aug 2021 18:22:22 +0000 (20:22 +0200)] 
d: Get __c_wchar_t type from build_frontend_type

gcc/d/ChangeLog:

* types.cc (TypeVisitor::visit(TypeEnum*)): Get wchar_t type from
build_frontend_type.

2 years agod: Convert convert_for_rvalue switch statement into if condition
Iain Buclaw [Sat, 28 Aug 2021 18:21:21 +0000 (20:21 +0200)] 
d: Convert convert_for_rvalue switch statement into if condition

gcc/d/ChangeLog:

* d-convert.cc (convert_for_rvalue): Convert switch statement into if
condition.

2 years agod: Use POINTER_SIZE for testing whether to predefine D_LP64
Iain Buclaw [Sat, 28 Aug 2021 18:20:28 +0000 (20:20 +0200)] 
d: Use POINTER_SIZE for testing whether to predefine D_LP64

gcc/d/ChangeLog:

* d-builtins.cc (d_init_versions): Use POINTER_SIZE for testing
whether to predefine D_LP64.

2 years agod: ICE in gimple_register_canonical_type_1, at lto/lto-common.c:430 (PR102094)
Iain Buclaw [Sat, 28 Aug 2021 14:57:03 +0000 (16:57 +0200)] 
d: ICE in gimple_register_canonical_type_1, at lto/lto-common.c:430 (PR102094)

User defined types have the TYPE_CXX_ODR_P flag set, but closure frames
did not.  This mismatch led to an ICE in the conflict detection for ODR
and interoperable non-ODR types.  As a given closure frame is tied
explicitly to a function, it already conforms to ODR.

PR d/102094

gcc/d/ChangeLog:

* d-codegen.cc (build_frame_type): Set TYPE_CXX_ODR_P.

gcc/testsuite/ChangeLog:

* gdc.dg/lto/pr102094_0.d: New test.

2 years agotestsuite, Darwin : Skip a test requiring strndup in libc.
Iain Sandoe [Mon, 15 Mar 2021 21:40:40 +0000 (21:40 +0000)] 
testsuite, Darwin : Skip a test requiring strndup in libc.

Before Darwin11 there is no strndup in libc. This test fails with
warning output because of that - so skip it on these versions (since
they are not able to use strndup anyway).

gcc/testsuite/ChangeLog:

* gcc.dg/analyzer/strndup-1.c: Skip for Darwin versions
without strndup support in libc.

2 years agoDarwin, X86 : Implement __cache_clear.
Iain Sandoe [Fri, 4 Sep 2020 13:05:12 +0000 (14:05 +0100)] 
Darwin, X86 : Implement __cache_clear.

We had a NOP cache clear, but there is a suitable mechanism provided
by a system call.  This connects it up.

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

* config/i386/darwin.h (CLEAR_INSN_CACHE): New.

2 years agoDaily bump.
GCC Administrator [Sun, 29 Aug 2021 00:16:41 +0000 (00:16 +0000)] 
Daily bump.

2 years agoImprove handling of table overflows in modref_ref_node
Jan Hubicka [Sat, 28 Aug 2021 18:57:08 +0000 (20:57 +0200)] 
Improve handling of table overflows in modref_ref_node

gcc/ChangeLog:

* ipa-modref-tree.h (modref_access_node::merge): Break out
logic combining offsets and logic merging ranges to ...
(modref_access_node::combined_offsets): ... here
(modref_access_node::update2): ... here
(modref_access_node::closer_pair_p): New member function.
(modref_access_node::forced_merge): New member function.
(modre_ref_node::insert): Do merging when table is full.

gcc/testsuite/ChangeLog:

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

2 years agoFortran - reject function entries with mismatched characteristics
Harald Anlauf [Sat, 28 Aug 2021 18:09:44 +0000 (20:09 +0200)] 
Fortran - reject function entries with mismatched characteristics

gcc/fortran/ChangeLog:

PR fortran/87737
* resolve.c (resolve_entries): For functions of type CHARACTER
tighten the checks for matching characteristics.

gcc/testsuite/ChangeLog:

PR fortran/87737
* gfortran.dg/entry_24.f90: New test.

2 years agolibstdc++: Fix std::allocator<void> for versioned namespace
Jonathan Wakely [Sat, 28 Aug 2021 10:05:58 +0000 (11:05 +0100)] 
libstdc++: Fix std::allocator<void> for versioned namespace

Removing the allocator<void> specialization for the versioned namespace
breaks _Extptr_allocator<void> because the allocator<void>
specialization was still declared in <bits/memoryfwd.h>, making it an
incomplete type.  It wrong to remove that specialization anyway, because
it is still needed pre-C++20.

This removes the #if ! _GLIBCXX_INLINE_VERSION check, so that
allocator<void> is still explicitly specialized for the versioned
namespace, consistent with the normal unversioned namespace mode.

To make _Extptr_allocator<void> usable as a ProtoAllocator, this change
adds a default constructor and converting constructor. That is
consistent with std::allocator<void> since C++20 (and harmless to do for
earlier standards).

I'm also explicitly specializing allocator_traits<allocator<void>> so
that it doesn't need to use allocator<void>::construct and destroy.
Doing that allows those members to be removed, further simplifying
allocator<void>.  That new explicit specialization can delete the
allocate, deallocate and max_size members, which are always ill-formed
for allocator<void>.

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

* include/bits/alloc_traits.h (allocator_traits): Add explicit
specialization for allocator<void>. Improve doxygen comments.
* include/bits/allocator.h (allocator<void>): Restore for the
versioned namespace.
(allocator<void>::construct, allocator<void>::destroy): Remove.
* include/ext/extptr_allocator.h (_Extptr_allocator<void>):
Add default constructor and converting constructor.

2 years agolibstdc++: Fix comment typo
Jonathan Wakely [Fri, 27 Aug 2021 21:10:43 +0000 (22:10 +0100)] 
libstdc++: Fix comment typo

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

* include/bits/stl_uninitialized.h: Fix typo in comment.

2 years agolibstdc++: Fix inefficiency in filesystem::absolute [PR99876]
Jonathan Wakely [Fri, 27 Aug 2021 09:59:54 +0000 (10:59 +0100)] 
libstdc++: Fix inefficiency in filesystem::absolute [PR99876]

When the path is already absolute, the call to current_path() is
wasteful, because operator/ will ignore the left operand anyway.

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

PR libstdc++/99876
* src/c++17/fs_ops.cc (fs::absolute): Call non-throwing form,
to avoid unnecessary current_path() call.

2 years agolibstdc++: Name std::function template parameter
Jonathan Wakely [Thu, 26 Aug 2021 23:20:31 +0000 (00:20 +0100)] 
libstdc++: Name std::function template parameter

This avoids "<template-parameter-2-2>" being shown in the diagnostics
for ill-formed uses of std::function constructor:

In instantiation of 'std::function<_Res(_ArgTypes ...)>::function(_Functor&&)
[with _Functor = f(f()::_Z1fv.frame*)::<lambda()>;
<template-parameter-2-2> = void; _Res = void; _ArgTypes = {}]'

Instead we get:

In instantiation of 'std::function<_Res(_ArgTypes ...)>::function(_Functor&&)
[with _Functor = f(f()::_Z1fv.frame*)::<lambda()>;
_Constraints = void; _Res = void; _ArgTypes = {}]'

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

* include/bits/std_function.h (function::function(F&&)): Give
name to defaulted template parameter, to improve diagnostics.
Use markdown for more doxygen comments.

2 years agoMIPS: use N64 ABI by default if the triple end with -gnuabi64
YunQiang Su [Fri, 27 Aug 2021 03:56:58 +0000 (23:56 -0400)] 
MIPS: use N64 ABI by default if the triple end with -gnuabi64

gcc/ChangeLog:

PR target/102089
* config.gcc: MIPS: use N64 ABI by default if the triple end
  with -gnuabi64, which is used by Debian since 2013.

2 years agofix latent bootstrap-debug issue
Alexandre Oliva [Sat, 28 Aug 2021 03:40:14 +0000 (00:40 -0300)] 
fix latent bootstrap-debug issue

I've hit a bootstrap-debug error involving large subprograms in
gcc/ada/sem_ch12.adb.  I'm afraid I couldn't narrow it down to a
reasonable testcase.

thread1 made different decisions about a block containing a
builtin_eh_filter call because in one compilation, estimate_num_insns
found a cgraph_node for the builtin and could thus get to the
is_simple_builtin test, but in the other it didn't.  With different
insn counts, one stage jump-threaded and the other didn't, and the
resulting code diverged quite a bit.

The reason the builtin had a cgraph_node in one case but not the other
was that modref got a chance to analyze the builtin call when it was
the first stmt in the block, and that created the cgraph_node.
However, when it was preceded by debug stmts, the loop in
analyze_function was cut short after the first debug stmt, because the
summary so far was not useful.

This patch fixes both issues: skip debug stmts in the analyze_function
loop, so as to prevent them from affecting any decisions in the loop,
and enable the insn count estimator to get to the is_simple_builtin
test when a cgraph_node has not been created for the builtin.

for  gcc/ChangeLog

* ipa-modref.c (analyze_function): Skip debug stmts.
* tree-inline.c (estimate_num_insn): Consider builtins even
without a cgraph_node.

2 years agoDaily bump.
GCC Administrator [Sat, 28 Aug 2021 00:16:42 +0000 (00:16 +0000)] 
Daily bump.

2 years agoc++: Set type on dependent ARROW_EXPR
Jason Merrill [Fri, 27 Aug 2021 14:00:49 +0000 (10:00 -0400)] 
c++: Set type on dependent ARROW_EXPR

Even if the operand of -> has dependent type, if it's a pointer we know
that the result will be the target type of that pointer.  This should avoid
some unnecessary TYPEOF_EXPR when looking up a name after ->.

gcc/cp/ChangeLog:

* typeck2.c (build_x_arrow): Do set TREE_TYPE when operand is
a dependent pointer.

2 years agoSupport limited setcc for H8
Jeff Law [Fri, 27 Aug 2021 21:01:37 +0000 (17:01 -0400)] 
Support limited setcc for H8

gcc/

* config/h8300/bitfield.md (cstore<mode>4): Remove expander.
* config/h8300/h8300.c (h8300_expand_branch): Remove function.
* config/h8300/h8300-protos.h (h8300_expadn_branch): Remove prototype.
* config/h8300/h8300.md (eqne): New code iterator.
(geultu, geultu_to_c): Similarly.
* config/h8300/testcompare.md (cstore<mode>4): Dummy expander.
(store_c_<mode>, store_c_i_<mode>): New define_insn_and_splits
(cmp<mode>_c): New pattern

2 years agoUpdate comments in float128-call.c test.
Michael Meissner [Fri, 27 Aug 2021 20:07:50 +0000 (16:07 -0400)] 
Update comments in float128-call.c test.

Segher asked that I update the comments to include the d-form vector stores
(even though they wouldn't be generated by this test).

2021-08-25  Michael Meissner  <meissner@linux.ibm.com>

gcc/testsuite/
* gcc.target/powerpc/float128-call.c: Update comments.

2 years agoReduce vector comparison of uniform vectors to a scalar comparison
Jeff Law [Fri, 27 Aug 2021 19:27:38 +0000 (15:27 -0400)] 
Reduce vector comparison of uniform vectors to a scalar comparison

gcc/
* tree-ssa-dom.c (reduce_vector_comparison_to_scalar_comparison): New
function.
(dom_opt_dom_walker::optimize_stmt): Use it.

2 years agoFix float128-call.c test for power8 IEEE 128 and power10.
Michael Meissner [Fri, 27 Aug 2021 17:19:54 +0000 (13:19 -0400)] 
Fix float128-call.c test for power8 IEEE 128 and power10.

I built a compiler on a little endian power8 system where the default long
double was IEEE 128-bit instead of IBM 128-bit.  I discovered that on
power8, we would generate a lxvd2x and xxpermdi to deal with the endianess
instead of the Altivec lxv.

In addition, I noticed the constant that was being loaded (1.0q) could be
loaded by the lxvkq instruction.

I rewrote the test to handle all forms of vector load and store that can
be generated.

2021-08-27  Michael Meissner  <meissner@linux.ibm.com>

gcc/testsuite/
* gcc.target/powerpc/float128-call.c: Fix test for IEEE 128-bit
long double and power10.

2 years agoDarwin : Mark the mod init/term section starts with a linker-visible sym.
Iain Sandoe [Sat, 29 Aug 2020 21:05:30 +0000 (22:05 +0100)] 
Darwin : Mark the mod init/term section starts with a linker-visible sym.

Some newer assemblers emit section start temp symbols for mod init and term
sections if there is no suitable symbol present already.
The temp symbols are linker visible and therefore appear in the symbol tables.
Since the temp symbol number can vary when debug is enabled, that causes
compare-debug fails.  The solution is to provide a stable linker-visible
symbol.

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

* config/darwin.c (finalize_ctors): Add a section-start linker-
visible symbol.
(finalize_dtors): Likewise.
* config/darwin.h (MIN_LD64_INIT_TERM_START_LABELS): New.

2 years agors6000: Execute the automatic built-in initialization code
Bill Schmidt [Fri, 27 Aug 2021 14:55:29 +0000 (09:55 -0500)] 
rs6000: Execute the automatic built-in initialization code

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

gcc/
* config/rs6000/rs6000-call.c (rs6000-builtins.h): New #include.
(rs6000_init_builtins): Call rs6000_init_generated_builtins.  Skip the
old initialization logic when new builtins are enabled.
* config/rs6000/rs6000-gen-builtins.c (write_decls): Rename
rs6000_autoinit_builtins to rs6000_init_generated_builtins.
(write_init_file): Likewise.

2 years agolibgfortran: Use the libtool macro to determine libm availability.
Iain Sandoe [Sun, 28 Mar 2021 14:39:33 +0000 (15:39 +0100)] 
libgfortran: Use the libtool macro to determine libm availability.

We recently had a report of build failure against a Darwin branch on
the latest OS release.  This was because (temporarily) the symlink
from libm.dylib => libSystem.dylib had been removed/omitted.

libm is not needed on Darwin, and should not be added unconditionally
even if that is (mostly) harmless since it is a symlink to libc.

There could be cases where the addition was not completely harmless
because the presentation of the symlink would cause the symbols exposed
in libSystem to be considered ahead of ones presented in convenience
libraries.

libgfortran/ChangeLog:

* Makefile.am: Use configured libm availability.
* Makefile.in: Regenerate.
* configure: Regenerate.
* configure.ac: Use libtool macro to find libm availability.
* libgfortran.spec.in: Use configured libm availability.

2 years agotestsuite, Darwin : Do not claim 'GAS' for cctools assembler.
Iain Sandoe [Mon, 15 Mar 2021 21:38:31 +0000 (21:38 +0000)] 
testsuite, Darwin : Do not claim 'GAS' for cctools assembler.

Although the cctools assembler is based of GNU GAS, it is from a
very old version (1.38) which does not support many of the features
that the target supports test is expecting.

gcc/testsuite/ChangeLog:

* lib/target-supports.exp: Exclude cctools assembler based on
GAS 1.38.

2 years agoconfigure: Adjust several assembler checks to remove an unused parm.
Iain Sandoe [Thu, 26 Aug 2021 10:32:52 +0000 (11:32 +0100)] 
configure: Adjust several assembler checks to remove an unused parm.

In r12-3048-ge0b6d0b39c6, the GAS version parameter was removed from
the gcc_GAS_CHECK_FEATURE macro.  It seems that overlapping comit/test
cycles resulted in several AMDGCN and one Darwin commit with the now
extra parameter still present.

This causes wrong configure code to be generated when autoreconf is
used in the gcc directory.

Fixed by removing the extraneous parm from the AMDGCN and Darwin cases.

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

* configure.ac (darwin2[[0-9]]* | darwin19*): Alter use of
gcc_GAS_CHECK_FEATURE to remove an extraneous parameter.
(amdgcn-* | gcn-*) Likewise.

2 years agocall_summary: add missing template keyword
Anthony Sharp [Fri, 27 Aug 2021 14:02:42 +0000 (10:02 -0400)] 
call_summary: add missing template keyword

Without the 'template', this function template compares 'traverse' to 'f',
and then compares the result to 'a'.  Evidently it hasn't been instantiated
yet.

gcc/ChangeLog:

* symbol-summary.h: Added missing template keyword.

2 years agotree-optimization/45178 - DCE of dead control flow in infinite loop
Richard Biener [Fri, 27 Aug 2021 07:47:49 +0000 (09:47 +0200)] 
tree-optimization/45178 - DCE of dead control flow in infinite loop

This fixes DCE to be able to elide dead control flow in an
infinite loop without an exit edge.  This special situation is
handled well by the code finding an edge to preserve since there's
no chance it will find the exit edge and make the loop finite.

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

PR tree-optimization/45178
* tree-ssa-dce.c (find_obviously_necessary_stmts): For
infinite loops without exit do not mark control dependent
edges of the latch necessary.

* gcc.dg/tree-ssa/ssa-dce-3.c: Adjust testcase.

2 years agoi386: Fix wrong optimization for consecutive masked scatters [PR 101472]
konglin1 [Mon, 9 Aug 2021 03:37:52 +0000 (11:37 +0800)] 
i386: Fix wrong optimization for consecutive masked scatters [PR 101472]

gcc/ChangeLog:

PR target/101472
* config/i386/sse.md: (<avx512>scattersi<mode>): Add mask operand to
UNSPEC_VSIBADDR.
(<avx512>scattersi<mode>): Likewise.
(*avx512f_scattersi<VI48F:mode>): Merge mask operand to set_dest.
(*avx512f_scatterdi<VI48F:mode>): Likewise

gcc/testsuite/ChangeLog:

PR target/101472
* gcc.target/i386/avx512f-pr101472.c: New test.
* gcc.target/i386/avx512vl-pr101472.c: New test.

2 years agors6000: Make some BIFs vectorized on P10
Kewen Lin [Fri, 27 Aug 2021 01:23:58 +0000 (20:23 -0500)] 
rs6000: Make some BIFs vectorized on P10

This patch is to add the support to make vectorizer able to
vectorize some built-in function scalar versions on Power10.

gcc/ChangeLog:

* config/rs6000/rs6000.c (rs6000_builtin_md_vectorized_function): Add
support for built-in functions MISC_BUILTIN_DIVWE, MISC_BUILTIN_DIVWEU,
MISC_BUILTIN_DIVDE, MISC_BUILTIN_DIVDEU, P10_BUILTIN_CFUGED,
P10_BUILTIN_CNTLZDM, P10_BUILTIN_CNTTZDM, P10_BUILTIN_PDEPD and
P10_BUILTIN_PEXTD on Power10.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/dive-vectorize-1.c: New test.
* gcc.target/powerpc/dive-vectorize-1.h: New test.
* gcc.target/powerpc/dive-vectorize-2.c: New test.
* gcc.target/powerpc/dive-vectorize-2.h: New test.
* gcc.target/powerpc/dive-vectorize-run-1.c: New test.
* gcc.target/powerpc/dive-vectorize-run-2.c: New test.
* gcc.target/powerpc/p10-bifs-vectorize-1.c: New test.
* gcc.target/powerpc/p10-bifs-vectorize-1.h: New test.
* gcc.target/powerpc/p10-bifs-vectorize-run-1.c: New test.

2 years agors6000: Add missing unsigned info for some P10 bifs
Kewen Lin [Fri, 27 Aug 2021 01:23:17 +0000 (20:23 -0500)] 
rs6000: Add missing unsigned info for some P10 bifs

This patch is to make prototypes of some Power10 built-in
functions consistent with what's in the documentation, as
well as the vector version.  Otherwise, useless conversions
can be generated in gimple IR, and the vectorized versions
will have inconsistent types.

gcc/ChangeLog:

* config/rs6000/rs6000-call.c (builtin_function_type): Add unsigned
signedness for some Power10 bifs.

2 years agoaix: packed struct alignment [PR102068]
David Edelsohn [Thu, 26 Aug 2021 21:14:18 +0000 (17:14 -0400)] 
aix: packed struct alignment [PR102068]

Further fixes to structure alignment when the structure is packed
and contains double.  This patch checks for packed attribute
at the top level.

gcc/ChangeLog:

PR target/102068
* config/rs6000/rs6000.c (rs6000_adjust_field_align): Use
computed alignment if the entire struct has attribute packed.

2 years agoFold more shuffle builtins to VEC_PERM_EXPR.
liuhongt [Fri, 11 Dec 2020 11:02:43 +0000 (19:02 +0800)] 
Fold more shuffle builtins to VEC_PERM_EXPR.

A follow-up to https://gcc.gnu.org/pipermail/gcc-patches/2019-May/521983.html

gcc/
PR target/98167
PR target/43147
* config/i386/i386.c (ix86_gimple_fold_builtin): Fold
IX86_BUILTIN_SHUFPD512, IX86_BUILTIN_SHUFPS512,
IX86_BUILTIN_SHUFPD256, IX86_BUILTIN_SHUFPS,
IX86_BUILTIN_SHUFPS256.
(ix86_masked_all_ones): New function.

gcc/testsuite/
* gcc.target/i386/avx512f-vshufpd-1.c: Adjust testcase.
* gcc.target/i386/avx512f-vshufps-1.c: Adjust testcase.
* gcc.target/i386/pr43147.c: New test.

2 years agoDaily bump.
GCC Administrator [Fri, 27 Aug 2021 00:16:22 +0000 (00:16 +0000)] 
Daily bump.

2 years agolibstdc:: Use markdown for Doxygen comments in std::function
Jonathan Wakely [Thu, 26 Aug 2021 15:55:31 +0000 (16:55 +0100)] 
libstdc:: Use markdown for Doxygen comments in std::function

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

* include/bits/std_function.h (function): Adjust doxygen
comments.
* include/bits/unique_ptr.h (make_unique_for_overwrite):
Change parameter name to match doxygen comment.

2 years agolibstdc++: Avoid a move in std::function construction (LWG 2447)
Jonathan Wakely [Thu, 26 Aug 2021 13:01:36 +0000 (14:01 +0100)] 
libstdc++: Avoid a move in std::function construction (LWG 2447)

This makes the std::function constructor use perfect forwarding, to
avoid an unnecessary move-construction of the target. This means we need
to rewrite the _Function_base::_Base_manager::_M_init_functor function
to use a forwarding reference, and so can reuse it for the clone
operation.

Also simplify the SFINAE constraints on the constructor, by combining
the !is_same_v<remove_cvref_t<F>, function> constraint into the
_Callable trait.

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

* include/bits/std_function.h (_function_base::_Base_manager):
Replace _M_init_functor with a function template using a
forwarding reference, and a pair of _M_create function
templates. Reuse _M_create for the clone operation.
(function::_Decay_t): New alias template.
(function::_Callable): Simplify by using _Decay.
(function::function(F)): Change parameter to forwarding
reference, as per LWG 2447. Add noexcept-specifier. Simplify
constraints.
(function::operator=(F&&)): Add noexcept-specifier.
* testsuite/20_util/function/cons/lwg2774.cc: New test.
* testsuite/20_util/function/cons/noexcept.cc: New test.

2 years agolibstdc++: Add static assertions for std::function requirements
Jonathan Wakely [Thu, 26 Aug 2021 12:13:27 +0000 (13:13 +0100)] 
libstdc++: Add static assertions for std::function requirements

Add static assertions to std::function, so that more user-friendly
diagnostics are given when trying to store a non-copyable target object.

These preconditions were added as "Mandates:" by LWG 2447, but I'm
committing them separately from implementing that, to allow just this
change to be backported more easily.

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

* include/bits/std_function.h (function::function(F)): Add
static assertions to check constructibility requirements.

2 years agors6000: inline ldouble __gcc_qsub
David Edelsohn [Wed, 25 Aug 2021 21:41:50 +0000 (17:41 -0400)] 
rs6000: inline ldouble __gcc_qsub

While performing some tests of IEEE 128 float for PPC64LE, Michael
Meissner noticed that __gcc_qsub is substantially slower than
__gcc_qadd.  __gcc_qsub calls __gcc_add with the second operand
negated.  Because the functions normally are invoked through
libgcc shared object, the extra PLT overhead has a large impact
on the overall time of the function.  This patch converts
__gcc_qadd to a static inline function invoked by __gcc_qadd
and __gcc_qsub.

libgcc/ChangeLog:

* config/rs6000/ibm-ldouble.c (ldouble_qadd_internal): Rename from
__gcc_qadd.
(__gcc_qadd): Call ldouble_qadd_internal.
(__gcc_qsub): Call ldouble_qadd_internal with second long double
argument negated.

2 years ago[i386] Call force_reg unconditionally.
Uros Bizjak [Thu, 26 Aug 2021 20:08:25 +0000 (22:08 +0200)] 
[i386] Call force_reg unconditionally.

There is no point to check RTXes before calling force_reg,
force_reg checks for REG RTX by itself.

2021-08-26  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
* config/i386/i386.md (*btr<mode>_1): Call force_reg unconditionally.
(conditional moves with memory inputs splitters): Ditto.
* config/i386/sse.md (one_cmpl<mode>2): Simplify.

2 years agoFix ipa-modref verification ices
Jan Hubicka [Thu, 26 Aug 2021 19:37:46 +0000 (21:37 +0200)] 
Fix ipa-modref verification ices

* ipa-modref-tree.h (modref_access_node::try_merge_with): Restart
search after merging.

2 years agors6000: Add remaining overloads
Bill Schmidt [Thu, 26 Aug 2021 19:34:00 +0000 (14:34 -0500)] 
rs6000: Add remaining overloads

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

gcc/
* config/rs6000/rs6000-overload.def: Add remaining overloads.