gcc.git
4 years agoc++: QT overload regression with attribute [PR94946]
Nathan Sidwell [Wed, 6 May 2020 19:09:59 +0000 (12:09 -0700)]
c++: QT overload regression with attribute [PR94946]

Jason's fix for 90570 & 79585 was a bit overzealous.  Dependent attribs should still
attach to a parameter decl.

            * decl.c (grokdeclarator): Don't splice template attributes in
            parm context -- they can apply to the parm.

4 years agocoroutines: Remove references to n4849 (NFC).
Iain Sandoe [Wed, 6 May 2020 19:02:51 +0000 (20:02 +0100)]
coroutines: Remove references to n4849 (NFC).

This just strips out references to the draft standard
numbered n4849.  The implementation is now intended to
be applicable to the expected final version.

gcc/cp/ChangeLog:

2020-05-05  Iain Sandoe  <iain@sandoe.co.uk>

* coroutines.cc: Remove references to n4849 throughout.

4 years agox86: Fix vextract* masked patterns [PR93069]
Jakub Jelinek [Wed, 6 May 2020 18:05:02 +0000 (20:05 +0200)]
x86: Fix vextract* masked patterns [PR93069]

The AVX512F documentation clearly states that in instructions where the
destination is a memory only merging-masking is possible, not zero-masking,
and the assembler enforces that.

The testcase in this patch fails to assemble because of
Error: unsupported masking for `vextracti32x8'
on
        vextracti32x8   $0x0, %zmm1, -64(%rsp){%k1}{z}
For the vector extraction patterns, we apparently have 7 *_maskm patterns
that only accept memory destinations and rtx_equal_p merge-masking source
for it, 7 *<mask_name> corresponding patterns that allow memory destination
only for the non-masked cases (through <store_mask_constraint>), then 2
*<mask_name> patterns (lo ssehalf V16FI and lo ssehalf VI8F_256 ones) which
do allow memory destination even for masked cases and are the cause of the
testsuite failure, because we must not allow C constraint if the destination
is m, and finally one pair of patterns (separate * and *_mask, hi ssehalf
VI4F_256), which has another issue (for which I don't have a testcase
though), where if it would match zero-masking with register destination,
it wouldn't emit the needed {z} into assembly.
The attached patch fixes those 3 issues only, perhaps more suitable for
backporting.
But, even with that fixed, we are missing 3 further *_maskm patterns and
more importantly, I find the split into 3 separate patterns after subst,
*_maskm for masking with memory destination, *_mask for masking with
register destination and * for non-masking unnecessarily complex and harder
for reload, so the included patch below (non-attached) instead kills all
*_maskm patterns and splits the *<mask_name> patterns into * and *_mask
by hand instead of subst, where the *_mask ones make sure that with v
destination they use 0C, while with m destination they use 0 and as
condition enforce that either destination is not MEM, or rtx_equal_p between
the destination and corresponding merging-masking operand source.
If we had those 3 missing *_maskm patterns, this patch would actually result
in both shorter sse.md and shorter machine description after subst (e.g.
length of tmp-mddump.md), as we don't have them, the patch is actually 16
lines longer sse.md, but still shorter tmp-mddump.md.

2020-05-06  Jakub Jelinek  <jakub@redhat.com>

PR target/93069
* config/i386/subst.md (store_mask_constraint, store_mask_predicate):
Remove.
(avx512dq_vextract<shuffletype>64x2_1_maskm,
avx512f_vextract<shuffletype>32x4_1_maskm,
vec_extract_lo_<mode>_maskm, vec_extract_hi_<mode>_maskm): Remove.
(<mask_codefor>avx512dq_vextract<shuffletype>64x2_1<mask_name>): Split
into ...
(*avx512dq_vextract<shuffletype>64x2_1,
avx512dq_vextract<shuffletype>64x2_1_mask): ... these new
define_insns.  Even in the masked variant allow memory output but in
that case use 0 rather than 0C constraint on the source of masked-out
elts.
(<mask_codefor>avx512f_vextract<shuffletype>32x4_1<mask_name>): Split
into ...
(*avx512f_vextract<shuffletype>32x4_1,
avx512f_vextract<shuffletype>32x4_1_mask): ... these new define_insns.
Even in the masked variant allow memory output but in that case use
0 rather than 0C constraint on the source of masked-out elts.
(vec_extract_lo_<mode><mask_name>): Split into ...
(vec_extract_lo_<mode>, vec_extract_lo_<mode>_mask): ... these new
define_insns.  Even in the masked variant allow memory output but in
that case use 0 rather than 0C constraint on the source of masked-out
elts.
(vec_extract_hi_<mode><mask_name>): Split into ...
(vec_extract_hi_<mode>, vec_extract_hi_<mode>_mask): ... these new
define_insns.  Even in the masked variant allow memory output but in
that case use 0 rather than 0C constraint on the source of masked-out
elts.

4 years agoadd a new option -flarge-source-files.
qing zhao [Wed, 6 May 2020 17:46:09 +0000 (10:46 -0700)]
add a new option -flarge-source-files.

gcc/ChangeLog:

PR c/94230
* common.opt: Add -flarge-source-files.
* doc/invoke.texi: Document it.
* toplev.c (process_options): set line_table->default_range_bits
to 0 when flag_large_source_files is true.

gcc/c-family/ChangeLog:

PR c/94230
* c-indentation.c (get_visual_column): Add a hint to use the new
-flarge-source-files option.

gcc/testsuite/ChangeLog:

PR c/94230
* gcc.dg/plugin/location-overflow-test-1.c (fn_1): New message to
provide hint to use the new -flarge-source-files option.

4 years agoi386: Use ADD to implement compares with negated operand [PR94913]
Uros Bizjak [Wed, 6 May 2020 15:33:51 +0000 (17:33 +0200)]
i386: Use ADD to implement compares with negated operand [PR94913]

Use carry flag from addition to implement GEU/LTU compares
with negated operand, so e.g.

~x < y

compiles to:

        addq    %rsi, %rdi
        setc    %al

instead of:

        notq    %rdi
        cmpq    %rsi, %rdi
        setb    %al

PR target/94913
* config/i386/predicates.md (add_comparison_operator): New predicate.
* config/i386/i386.md (compare->add splitter): New splitters.

testsuite/ChangeLog:

PR target/94913
* gcc.target/i386/pr94913-1.c: New test.
* gcc.target/i386/pr94913-2.c: Ditto.

4 years ago[AArch64] Use __getauxval instead of getauxval in LSE detection code in libgcc
Kyrylo Tkachov [Wed, 6 May 2020 15:20:38 +0000 (16:20 +0100)]
[AArch64] Use __getauxval instead of getauxval in LSE detection code in libgcc

This version of the fix uses __getauxval instead of getauxval.
The whole thing is guarded simply on __gnu_linux__.
__getauxval was introduced in 2.16 but the aarch64 port was added in 2.17 so in practice I expect all aarch64 glibcs to support __getauxval.

Bootstrapped and tested on aarch64-none-linux-gnu.
Also tested on aarch64-none-elf.

2020-05-06  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/aarch64/lse-init.c (init_have_lse_atomics): Use __getauxval
instead of getauxval.
(AT_HWCAP): Define.
(HWCAP_ATOMICS): Define.
Guard detection on __gnu_linux__.

4 years agoPrepare removal of SLP_INSTANCE_GROUP_SIZE
Richard Biener [Wed, 6 May 2020 11:20:38 +0000 (13:20 +0200)]
Prepare removal of SLP_INSTANCE_GROUP_SIZE

This removes trivial instances of SLP_INSTANCE_GROUP_SIZE and refrains
from using a "SLP instance" which nowadays is just one of the possibly
many entries into the SLP graph.

2020-05-06  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (vect_transform_slp_perm_load): Adjust.
* tree-vect-data-refs.c (vect_slp_analyze_node_dependences):
Remove slp_instance parameter, just iterate over all scalar stmts.
(vect_slp_analyze_instance_dependence): Adjust and likewise.
* tree-vect-slp.c (vect_bb_slp_scalar_cost): Remove unused BB
parameter.
(vect_schedule_slp): Just iterate over all scalar stmts.
(vect_supported_load_permutation_p): Adjust.
(vect_transform_slp_perm_load): Remove slp_instance parameter,
instead use the number of lanes in the node as group size.
* tree-vect-stmts.c (vect_model_load_cost): Get vectorization
factor instead of slp_instance as parameter.
(vectorizable_load): Adjust.

4 years agox32: Update baseline_symbols.txt
H.J. Lu [Wed, 6 May 2020 13:17:31 +0000 (06:17 -0700)]
x32: Update baseline_symbols.txt

* config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Updated.

4 years agoaarch64: fix conflicting declarations
Andreas Schwab [Mon, 4 May 2020 15:29:11 +0000 (17:29 +0200)]
aarch64: fix conflicting declarations

aarch64_get_extension_string_for_isa_flags is declared in
"aarch64-protos.h", use that instead of re-declaring it improperly.

* config/aarch64/driver-aarch64.c: Include "aarch64-protos.h".
(aarch64_get_extension_string_for_isa_flags): Don't declare.

4 years agolibstdc++: Update Solaris baselines for GCC 10.1
Rainer Orth [Wed, 6 May 2020 12:02:34 +0000 (14:02 +0200)]
libstdc++: Update Solaris baselines for GCC 10.1

I just remembered that the libstdc++ ABI baselines haven't been updated
for the GCC 10 release yet.  This patch corrects this for Solaris/SPARC
and x86.

Created on master with make new-abi-baseline on i386-pc-solaris2.11 and
sparc-sun-solaris2.11, bootstrapped on gcc-10 branch without regressions.

* config/abi/post/i386-solaris/baseline_symbols.txt: Regenerate.
* config/abi/post/i386-solaris/amd64/baseline_symbols.txt:
Likewise.
* config/abi/post/sparc-solaris/baseline_symbols.txt: Likewise.
* config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt:
Likewise.

4 years agomiddle-end/94964 - avoid EH loop entry with CP_SIMPLE_PREHEADERS
Richard Biener [Wed, 6 May 2020 08:23:15 +0000 (10:23 +0200)]
middle-end/94964 - avoid EH loop entry with CP_SIMPLE_PREHEADERS

Loop optimizers expect to be able to insert on the preheader
edge w/o splitting it thus avoid ending up with a preheader
that enters the loop via an EH edge (or an abnormal edge).

2020-05-06  Richard Biener  <rguenther@suse.de>

PR middle-end/94964
* cfgloopmanip.c (create_preheader): Require non-complex
preheader edge for CP_SIMPLE_PREHEADERS.

4 years agotree-optimization/94963 - avoid bogus uninit warning with store-motion
Richard Biener [Wed, 6 May 2020 07:39:45 +0000 (09:39 +0200)]
tree-optimization/94963 - avoid bogus uninit warning with store-motion

Eliding the load for store-motion causes an uninitialized variable
flowing into the loop, conditionally initialized and used.  The
uninit warning cannot relate the flag used to guard the initialization
and use with the actual initialization so the following robustifies
the previous approach of marking the conditional store as not to
be warned on by instead initializing the variable on loop entry
from an uninitialized variable we mark as not to be warned for.

2020-05-06  Richard Biener  <rguenther@suse.de>

PR tree-optimization/94963
* tree-ssa-loop-im.c (execute_sm_if_changed): Remove
no-warning marking of the conditional store.
(execute_sm): Instead mark the uninitialized state
on loop entry to be not warned about.

* gcc.dg/pr94963.c: New testcase.

4 years agoRevert "Use const for template argument."
Martin Liska [Wed, 6 May 2020 10:07:12 +0000 (12:07 +0200)]
Revert "Use const for template argument."

This reverts commit 03f9754665b889e0988d0392db1eb35e91b97693.

4 years agoAdd ChangeLog entries for patch TSXLDTRK.
liuhongt [Wed, 6 May 2020 09:56:59 +0000 (17:56 +0800)]
Add ChangeLog entries for patch TSXLDTRK.

4 years agoAdd ENQCMD, AVX512BF16, AVX512_VP2INTERSECT to gcc.target/i386/funcspec-56.inc.
liuhongt [Wed, 6 May 2020 06:06:19 +0000 (14:06 +0800)]
Add ENQCMD, AVX512BF16, AVX512_VP2INTERSECT to gcc.target/i386/funcspec-56.inc.

gcc/testuite/ChangeLog

* gcc.target/i386/funcspec-56.inc: Add enqcmd, avx512bf16,
avx512vp2intersect.

4 years agolibstdc++: Document library versioning for 9.[123] and 10.1
Jonathan Wakely [Wed, 6 May 2020 09:30:15 +0000 (10:30 +0100)]
libstdc++: Document library versioning for 9.[123] and 10.1

* doc/xml/manual/abi.xml (abi.versioning.history): Document library
versions for GCC 9.[123] and 10.1 releases.
* doc/html/*: Regenerate.

4 years agolibstdc++: Update {x86_64,i?86,powerpc64,s390x,aarch64}-linux baselines for GCC 10.1
Jakub Jelinek [Wed, 6 May 2020 09:21:28 +0000 (11:21 +0200)]
libstdc++: Update {x86_64,i?86,powerpc64,s390x,aarch64}-linux baselines for GCC 10.1

On Wed, May 06, 2020 at 10:49:13AM +0200, Rainer Orth wrote:
> I just remembered that the libstdc++ ABI baselines haven't been updated
> for the GCC 10 release yet.  This patch corrects this for Solaris/SPARC
> and x86.

Oops, here are the updates from Fedora packages built during the weekend.

2020-05-06  Jakub Jelinek  <jakub@redhat.com>

* config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Update.
* config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/i486-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/aarch64-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.

4 years agomatch.pd: Optimize ~(~X +- Y) into (X -+ Y) [PR94921]
Jakub Jelinek [Wed, 6 May 2020 09:20:20 +0000 (11:20 +0200)]
match.pd: Optimize ~(~X +- Y) into (X -+ Y) [PR94921]

According to my verification proglet, this transformation for signed types
with undefined overflow doesn't introduce nor remove any UB cases, so should
be valid even for signed integral types.
Not using a for because of the :c on plus which can't be there on minus.

2020-05-06  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94921
* match.pd (~(~X - Y) -> X + Y, ~(~X + Y) -> X - Y): New
simplifications.

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

4 years agotree-optimization/94965 - fix typo in vec_info * passing
Richard Biener [Wed, 6 May 2020 08:46:22 +0000 (10:46 +0200)]
tree-optimization/94965 - fix typo in vec_info * passing

Should have passed vinfo, not loop_vinfo.

2020-05-06  Richard Biener  <rguenther@suse.de>

PR tree-optimization/94965
* tree-vect-stmts.c (vectorizable_load): Fix typo.

4 years agodoc: Update install.texi for GCC 10 on Solaris
Rainer Orth [Wed, 6 May 2020 08:09:11 +0000 (10:09 +0200)]
doc: Update install.texi for GCC 10 on Solaris

This patch updates install.texi for GCC 10 on Solaris.  It includes some
general cleanup and updates and includes a couple of caveats, some of
them found when testing GCC 10.1.0 RC1 with only the bundled tools.

The reference to TGCware on the binaries page is gone because they only
provide binaries up to Solaris 9.

The note about configuring 64-bit Solaris/SPARC compilers with
--build=sparcv9-sun-solaris2.11 became necessary because upstream
config.guess silently reverted my patch to automatically detect this.  We
already had a bug report about a comparison failure caused by this issue.

Tested with make doc/gccinstall.info and doc/gccinstall.pdf and
inspection of the resulting files.

* doc/install.texi: Replace Sun with Solaris as appropriate.
(Tools/packages necessary for building GCC, Perl version between
5.6.1 and 5.6.24): Remove Solaris 8 reference.
(Installing GCC: Binaries, Solaris 2 (SPARC, Intel)): Remove
TGCware reference.
(Specific, i?86-*-solaris2*): Update version references for
Solaris 11.3 and later.  Remove gas 2.26 caveat.
(Specific, *-*-solaris2*): Update version references for
Solaris 11.3 and later.  Remove boehm-gc reference.
Document GMP, MPFR caveats on Solaris 11.3.
(Specific, sparc-sun-solaris2*): Update Solaris 9 references.
(Specific, sparc64-*-solaris2*): Likewise.
Document --build requirement.

4 years agoEnable TARGET_TSXLDTRK for GCC support.
liuhongt [Fri, 14 Feb 2020 07:40:46 +0000 (15:40 +0800)]
Enable TARGET_TSXLDTRK for GCC support.

gcc/
* common/config/i386/i386-common.c (OPTION_MASK_ISA2_TSXLDTRK_SET,
OPTION_MASK_ISA2_TSXLDTRK_UNSET): New macros.
* config.gcc: Add tsxldtrkintrin.h to extra_headers.
* config/i386/driver-i386.c (host_detect_local_cpu): Detect
TSXLDTRK.
* config/i386/i386-builtin.def: Add new builtins.
* config/i386/i386-c.c (ix86_target_macros_internal): Define
__TSXLDTRK__.
* config/i386/i386-options.c (ix86_target_string): Add
-mtsxldtrk.
(ix86_valid_target_attribute_inner_p): Add attribute tsxldtrk.
* config/i386/i386.h (TARGET_TSXLDTRK, TARGET_TSXLDTRK_P):
New.
* config/i386/i386.md (define_c_enum "unspec"): Add
UNSPECV_SUSLDTRK, UNSPECV_RESLDTRK.
(TSXLDTRK): New define_int_iterator.
("<tsxldtrk>"): New define_insn.
* config/i386/i386.opt: Add -mtsxldtrk.
* config/i386/immintrin.h: Include tsxldtrkintrin.h.
* config/i386/tsxldtrkintrin.h: New.
* doc/invoke.texi: Document -mtsxldtrk.

gcc/testsuite/
* g++.dg/other/i386-2.c: Add -mtsxldtrk.
* g++.dg/other/i386-3.c: Likewise.
* gcc.target/i386/sse-12.c: Likewise.
* gcc.target/i386/sse-13.c: Likewise.
* gcc.target/i386/sse-14.c: Likewise.
* gcc.target/i386/sse-22.c: Likewsie.
* gcc.target/i386/sse-23.c: Likewise.
* gcc.target/i386/tsxldtrk-1.c: New test.
* gcc.target/i386/funcspec-56.inc: Add target attribute tests
for tsxldtrk.

4 years agoriscv: Fix up riscv_atomic_assign_expand_fenv [PR94950]
Jakub Jelinek [Wed, 6 May 2020 07:40:33 +0000 (09:40 +0200)]
riscv: Fix up riscv_atomic_assign_expand_fenv [PR94950]

Similarly to the fixes on many other targets, riscv needs to use TARGET_EXPR
to avoid having the create_tmp_var_raw temporaries without proper DECL_CONTEXT
and not mentioned in local decls.

2020-05-06  Jakub Jelinek  <jakub@redhat.com>

PR target/94950
* config/riscv/riscv-builtins.c (riscv_atomic_assign_expand_fenv): Use
TARGET_EXPR instead of MODIFY_EXPR for first assignment to old_flags.

4 years agocombine: Don't replace SET_SRC with REG_EQUAL note content if SET_SRC has side-effect...
Jakub Jelinek [Wed, 6 May 2020 07:31:19 +0000 (09:31 +0200)]
combine: Don't replace SET_SRC with REG_EQUAL note content if SET_SRC has side-effects [PR94873]

There were some discussions about whether REG_EQUAL notes are valid on insns with a single
set which contains auto-inc-dec side-effects in the SET_SRC and the majority thinks that
it should be valid.  So, this patch fixes the combiner to punt in that case, because otherwise
the auto-inc-dec side-effects from the SET_SRC are lost.

2020-05-06  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/94873
* combine.c (combine_instructions): Don't optimize using REG_EQUAL
note if SET_SRC (set) has side-effects.

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

4 years agoEnable GCC support for SERIALIZE
liuhongt [Wed, 4 Mar 2020 06:08:40 +0000 (14:08 +0800)]
Enable GCC support for SERIALIZE

2020-03-04  Hongtao Liu  <hongtao.liu@intel.com>
2020-03-04  Wei Xiao  <wei3.xiao@intel.com>

gcc/Changelog:
* gcc/common/config/i386/i386-common.c (OPTION_MASK_ISA2_SERIALIZE_SET,
OPTION_MASK_ISA2_SERIALIZE_UNSET): New macros.
(ix86_handle_option): Handle -mserialize.
* gcc/config.gcc (serializeintrin.h): New header file.
* gcc/config/i386/cpuid.h (bit_SERIALIZE): New bit.
* gcc/config/i386/driver-i386.c (host_detect_local_cpu): Detect
-mserialize.
* gcc/config/i386/i386-builtin.def: Add new builtin.
* gcc/config/i386/i386-c.c (__SERIALIZE__): New macro.
* gcc/config/i386/i386-options.c (ix86_target_opts_isa2_opts):
  Add -mserialize.
* (ix86_valid_target_attribute_inner_p): Add target attribute
* for serialize.
* gcc/config/i386/i386.h (TARGET_SERIALIZE, TARGET_SERIALIZE_P):
  New macros.
* gcc/config/i386/i386.md (UNSPECV_SERIALIZE): New unspec.
  (serialize): New define_insn.
* gcc/config/i386/i386.opt (mserialize): New option
* gcc/config/i386/immintrin.h: Include serailizeintrin.h.
* gcc/config/i386/serializeintrin.h: New header file.
* gcc/doc/invoke.texi: Add documents for -mserialize.

gcc/testsuite/Changelog
* gcc/testsuite/gcc.target/i386/serialize-1.c: New test.
* gcc/testsuite/g++.dg/other/i386-2.C: Add -mserialize.
* gcc/testsuite/g++.dg/other/i386-3.C: Ditto.
* gcc/testsuite/gcc.target/i386/funcspec-56.inc: Ditto.
* gcc/testsuite/gcc.target/i386/sse-12.c: Ditto.
* gcc/testsuite/gcc.target/i386/sse-13.c: Ditto.
* gcc/testsuite/gcc.target/i386/sse-14.c: Ditto.
* gcc/testsuite/gcc.target/i386/sse-22.c: Ditto.
* gcc/testsuite/gcc.target/i386/sse-23.c: Ditto.

4 years agoAdjust integer <-> pointer conversion IL checking
Richard Biener [Tue, 14 Jan 2020 09:42:47 +0000 (10:42 +0100)]
Adjust integer <-> pointer conversion IL checking

The existing check doesn't reflect the actual reason why it exists,
the patch makes us to use POINTERS_EXTEND_UNSIGNED instead which
is specified for ptr_mode and word_mode/Pmode precision.

2020-05-06  Richard Biener  <rguenther@suse.de>

* tree-cfg.c (verify_gimple_assign_unary): Adjust integer
to/from pointer conversion checking.

4 years agoDaily bump.
GCC Administrator [Wed, 6 May 2020 00:16:15 +0000 (00:16 +0000)]
Daily bump.

4 years agoc++: CWG2235 partial ordering and non-dependent types
Jason Merrill [Tue, 5 May 2020 21:39:19 +0000 (17:39 -0400)]
c++: CWG2235 partial ordering and non-dependent types

Issue 2235 removed the rule previously added for issues 1391/1847 that had
partial ordering completely ignore function parameters with no deducible
template parameters.

gcc/cp/ChangeLog
2020-05-05  Jason Merrill  <jason@redhat.com>

CWG 2235
* pt.c (more_specialized_fn): Do consider parms with no deducible
template parameters.

4 years agoc++: constexpr and lambda capture [PR90212]
Jason Merrill [Tue, 5 May 2020 21:39:19 +0000 (17:39 -0400)]
c++: constexpr and lambda capture [PR90212]

This is the same issue as PR86429, just in potential_constant_expression_1
rather than cxx_eval_constant_expression.  As in that case, when we're
trying to evaluate a constant expression within a lambda, we don't have a
constant closure object to refer to, but we can try to refer directly to the
captured variable.

gcc/cp/ChangeLog
2020-05-05  Jason Merrill  <jason@redhat.com>

PR c++/90212
* constexpr.c (potential_constant_expression_1): In a lambda
function, consider a captured variable directly.

4 years agomatcher-1.m: Change return type to int
H.J. Lu [Tue, 5 May 2020 20:35:36 +0000 (13:35 -0700)]
matcher-1.m: Change return type to int

my_exception_matcher must return int.  Otherwise, this test fails.

PR testsuite/84324
* objc/execute/exceptions/matcher-1.m (my_exception_matcher):
Change return type to int.

4 years agoPR fortran/93366 - ICE on invalid, reject invalid use of NULL() as argument
Harald Anlauf [Tue, 5 May 2020 20:16:50 +0000 (22:16 +0200)]
PR fortran/93366 - ICE on invalid, reject invalid use of NULL() as argument

gcc/fortran/ChangeLog:

2020-05-05  Steve Kargl  <kargl@gcc.gnu.org>
Harald Anlauf  <anlauf@gmx.de>

PR fortran/93366
* check.c (gfc_check_associated, invalid_null_arg): Factorize
check for presence of invalid NULL() argument.
(gfc_check_kind, gfc_check_merge, gfc_check_shape)
(gfc_check_sizeof, gfc_check_spread, gfc_check_transfer): Use this
check for presence of invalid NULL() arguments.

gcc/testsuite/ChangeLog:

2020-05-05  Harald Anlauf  <anlauf@gmx.de>

PR fortran/93366
* gfortran.dg/pr93366.f90: New test.

4 years agolibitm: Disable diagnostic coloring in tests
Nathan Sidwell [Tue, 5 May 2020 19:50:54 +0000 (12:50 -0700)]
libitm: Disable diagnostic coloring in tests

Diagnostic coloring makes the log file hard to read when there's a
problem.  Let's do without it.

            * Testsuite/lib/libitm.exp (libitm_init): Add
            -fdiagnostics-color=never to options.

4 years agocoroutines: Replace extra checks for co_yield with asserts.
Iain Sandoe [Tue, 5 May 2020 19:27:27 +0000 (20:27 +0100)]
coroutines: Replace extra checks for co_yield with asserts.

The lowering of co_yield to a promise method call and a co_await
was moved to the initial analysis phase with the intention of
avoiding the need to handle the two cases later.

Before removing the later checks entirely, this patch replaces
them with checking asserts.

gcc/cp/Changelog:

2020-05-05  Iain Sandoe  <iain@sandoe.co.uk>

* coroutines.cc (transform_await_wrapper): Check that we have
no unlowered co_yields.
(captures_temporary): Likewise.
(register_awaits): Likewise.

4 years agoDelete file meant for a private branch
Michael Meissner [Tue, 5 May 2020 18:08:33 +0000 (14:08 -0400)]
Delete file meant for a private branch

4 years agoRemove files meant for a private branch
Michael Meissner [Tue, 5 May 2020 18:07:46 +0000 (14:07 -0400)]
Remove files meant for a private branch

4 years agoDelete file meant for private branch
Michael Meissner [Tue, 5 May 2020 18:07:02 +0000 (14:07 -0400)]
Delete file meant for private branch

4 years agoDelete file meant for private branch
Michael Meissner [Tue, 5 May 2020 18:05:39 +0000 (14:05 -0400)]
Delete file meant for private branch

4 years agoRemove files meant for private branch
Michael Meissner [Tue, 5 May 2020 18:04:59 +0000 (14:04 -0400)]
Remove files meant for private branch

4 years agoDelete changes meant for a private branch.
Michael Meissner [Tue, 5 May 2020 18:01:48 +0000 (14:01 -0400)]
Delete changes meant for a private branch.

2020-05-05  Michael Meissner  <meissner@linux.ibm.com>

* config/rs6000/rs6000-builtin.def: Delete changes meant for a
private branch.
* config/rs6000/rs6000-c.c: Likewise.
* config/rs6000/rs6000-call.c: Likewise.
* gcc/config/rs6000/rs6000.c: Likewise.

2020-05-05  Michael Meissner  <meissner@linux.ibm.com>

* gcc.dg/nextafter-2.c: Delete changes meant for a private branch.
* gcc.target/powerpc/pr70117.c: Likewise.

2020-05-05  Michael Meissner  <meissner@linux.ibm.com>

* config.host: Delete changes meant for a private branch.
* config/rs6000/t-float128: Likewise.
* configure.ac: Likewise.
* configure: Likewise.

4 years agoPatch ieee128-lib-patch010b
Michael Meissner [Tue, 5 May 2020 17:46:28 +0000 (13:46 -0400)]
Patch ieee128-lib-patch010b

4 years agoNew file
Michael Meissner [Tue, 5 May 2020 17:42:09 +0000 (13:42 -0400)]
New file

4 years agoNew files
Michael Meissner [Tue, 5 May 2020 17:41:30 +0000 (13:41 -0400)]
New files

4 years agoRTEMS: Improve GCC specification
Sebastian Huber [Mon, 6 Apr 2020 14:34:50 +0000 (16:34 +0200)]
RTEMS: Improve GCC specification

Add a start/end file specification if the -qrtems option is present.
Allow targets to customize it.

Support the standard -nodefaultlibs option.

gcc/

* config/rtems.h (RTEMS_STARTFILE_SPEC): Define if undefined.
(RTEMS_ENDFILE_SPEC): Likewise.
(STARTFILE_SPEC): Update comment.  Add RTEMS_STARTFILE_SPEC.
(ENDFILE_SPEC): Add RTEMS_ENDFILE_SPEC.
(LIB_SPECS): Support -nodefaultlibs option.
* config/or1k/rtems.h (RTEMS_STARTFILE_SPEC): Define.
(RTEMS_ENDFILE_SPEC): Likewise.
* config/rs6000/rtems.h (RTEMS_STARTFILE_SPEC): Likewise.
(RTEMS_ENDFILE_SPEC): Likewise.
* config/v850/rtems.h (RTEMS_STARTFILE_SPEC): Likewise.
(RTEMS_ENDFILE_SPEC): Likewise.

4 years agoPRU: Remove TARGET_HARD_REGNO_CALL_PART_CLOBBERED
Dimitar Dimitrov [Sun, 15 Sep 2019 15:01:22 +0000 (18:01 +0300)]
PRU: Remove TARGET_HARD_REGNO_CALL_PART_CLOBBERED

Per clarification in [1], macro is supposed to check for partial
clobbering of single HW registers. Since PRU declares only 8-bit
HW registers, and ABI does not define individual bit clobbering,
it is safe to remove the implementation.

[1] https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00778.html

gcc/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

* config/pru/pru.c (pru_hard_regno_call_part_clobbered): Remove.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Remove.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 years agotestsuite: pru: Add clobber test
Dimitar Dimitrov [Fri, 22 Jun 2018 03:35:42 +0000 (06:35 +0300)]
testsuite: pru: Add clobber test

gcc/testsuite/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

* gcc.target/pru/clobber-sp.c: New test.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 years agoPRU: Fix R3.w0 register class
Dimitar Dimitrov [Fri, 6 Sep 2019 19:15:07 +0000 (22:15 +0300)]
PRU: Fix R3.w0 register class

TI has clarified [1] that R3.w0 is caller saved, so allow compiler to
use it. This is safe change because older GCC versions treat R3.w0 as
fixed register and never use it.

[1] https://e2e.ti.com/support/tools/ccs/f/81/t/849993

gcc/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

* config/pru/pru.h: Mark R3.w0 as caller saved.

gcc/testsuite/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

* gcc.target/pru/lra-framepointer-fragmentation-1.c: Update test to
take into account additional available registers.
* gcc.target/pru/lra-framepointer-fragmentation-2.c: Ditto.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 years agoPRU: Simplify machine description
Dimitar Dimitrov [Mon, 17 Jun 2019 19:39:01 +0000 (22:39 +0300)]
PRU: Simplify machine description

Use the new @insn syntax for simpler gen_* invocation.

gcc/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

* config/pru/pru.c (pru_emit_doloop): Use new gen_doloop_end_internal
and gen_doloop_begin_internal.
(pru_reorg_loop): Use gen_pruloop with mode.
* config/pru/pru.md: Use new @insn syntax.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 years agoPRU: Fix comment to avoid fall through warning
Dimitar Dimitrov [Sun, 15 Sep 2019 11:14:57 +0000 (14:14 +0300)]
PRU: Fix comment to avoid fall through warning

gcc/ChangeLog:

2020-05-05  Dimitar Dimitrov  <dimitar@dinux.eu>

* config/pru/pru.c (pru_print_operand): Fix fall through comment.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 years agoPatch ieee128-lib-patch009b
Michael Meissner [Tue, 5 May 2020 17:39:52 +0000 (13:39 -0400)]
Patch ieee128-lib-patch009b

4 years agoPatch ieee128-lib-patch008b
Michael Meissner [Tue, 5 May 2020 17:38:28 +0000 (13:38 -0400)]
Patch ieee128-lib-patch008b

4 years agoPatch ieee128-lib-patch007b
Michael Meissner [Tue, 5 May 2020 17:37:28 +0000 (13:37 -0400)]
Patch ieee128-lib-patch007b

4 years agoUpdate ChangeLog
Michael Meissner [Tue, 5 May 2020 17:36:17 +0000 (13:36 -0400)]
Update ChangeLog

4 years agoRemove extra newline
Michael Meissner [Tue, 5 May 2020 17:35:40 +0000 (13:35 -0400)]
Remove extra newline

4 years agoPatch ieee128-lib-patch006b
Michael Meissner [Tue, 5 May 2020 17:35:09 +0000 (13:35 -0400)]
Patch ieee128-lib-patch006b

4 years agoPatch ieee128-lib-patch005b
Michael Meissner [Tue, 5 May 2020 17:33:34 +0000 (13:33 -0400)]
Patch ieee128-lib-patch005b

4 years agoPatch ieee128-lib-patch004b
Michael Meissner [Tue, 5 May 2020 17:32:22 +0000 (13:32 -0400)]
Patch ieee128-lib-patch004b

4 years agoPatch ieee128-lib-patch003b
Michael Meissner [Tue, 5 May 2020 17:31:03 +0000 (13:31 -0400)]
Patch ieee128-lib-patch003b

4 years agoPatch ieee128-lib-patch002b
Michael Meissner [Tue, 5 May 2020 17:30:07 +0000 (13:30 -0400)]
Patch ieee128-lib-patch002b

4 years agoPatch ieee128-lib-patch001b
Michael Meissner [Tue, 5 May 2020 16:28:48 +0000 (12:28 -0400)]
Patch ieee128-lib-patch001b

4 years agosetup branch
Michael Meissner [Tue, 5 May 2020 16:24:18 +0000 (12:24 -0400)]
setup branch

4 years agoi386: Use "clobber (scratch)" in expanders
Uros Bizjak [Tue, 5 May 2020 16:01:06 +0000 (18:01 +0200)]
i386: Use "clobber (scratch)" in expanders

Use "clobber (scratch:M)" instad of "clobber (match_scratch:M N)" in expanders.

* config/i386/i386.md (fixuns_trunc<mode>si2): Use
"clobber (scratch:M)" instad of "clobber (match_scratch:M N)".
(addqi3_cconly_overflow): Ditto.
(umulv<mode>4): Ditto.
(<s>mul<mode>3_highpart): Ditto.
(tls_global_dynamic_32): Ditto.
(tls_local_dynamic_base_32): Ditto.
(atanxf2): Ditto.
(asinxf2): Ditto.
(acosxf2): Ditto.
(logxf2): Ditto.
(log10xf2): Ditto.
(log2xf2): Ditto.
(*adddi_4): Remove "m" constraint from scratch operand.
(*add<mode>_4): Ditto.

4 years agoc-attribs.c: Fix warning about use of uninitialized variable nunits
Stefan Schulze Frielinghaus [Sun, 26 Apr 2020 07:42:29 +0000 (09:42 +0200)]
c-attribs.c: Fix warning about use of uninitialized variable nunits

In function handle_vector_size_attribute local variable nunits is
supposed to be initialized by function type_valid_for_vector_size.
However, in case ARGS is null the function may return with a non-null
value and leave nunits uninitialized.  This results in warning/error:

gcc/poly-int.h: In function 'tree_node* handle_vector_size_attribute(tree_node**, tree, tree, int, bool*)':
gcc/poly-int.h:330:3: error: 'nunits' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  330 |   ((void) (&(RES).coeffs[0] == (C *) 0), \
      |   ^
gcc/c-family/c-attribs.c:3695:26: note: 'nunits' was declared here
 3695 |   unsigned HOST_WIDE_INT nunits;
      |

Added attribute nonnull for argument args in order to silence warning
and added an assert statement in order to check the invariant candidate.

gcc/c-family/ChangeLog:

2020-05-05  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>

* c-attribs.c (handle_vector_size_attribute): Add attribute
nonnull for argument args in order to silence warning of
uninitialized variable usage.  Since this is local to the
compilation unit and thus cannot be checked at call sides by the
compiler, added an assert statement in order to verify this.

4 years agoc++: Avoid inconsistency in lambda fn's this pointer name [pr94807]
Nathan Sidwell [Tue, 5 May 2020 14:47:13 +0000 (07:47 -0700)]
c++: Avoid inconsistency in lambda fn's this pointer name [pr94807]

* coroutines.cc (morph_fn_to_coro): Just check for
closure_identifier.
* pt.c (tsubst_function_decl): Update lambda fn's this_ptr name.

4 years agocsa, postreload: Improve csa after recent cselib changes [PR94516]
Jakub Jelinek [Tue, 5 May 2020 14:34:51 +0000 (16:34 +0200)]
csa, postreload: Improve csa after recent cselib changes [PR94516]

This patch addresses a missed optimization caused by the cselib changes.
Already in the past postreload could replace sp = sp + const_int with
sp = regxy if regxy already has the right value, but with the cselib
changes it happens several times more often.  It can result in smaller
code, so it seems undesirable to prevent such optimizations, but
unfortunately it can get into the way of stack adjustment coalescing,
where e.g. if we used to have sp = sp + 32; sp = sp - 8;, previously
we'd turn that into sp = sp + 24;, but now postreload optimizes
into sp = r12; sp = sp - 8; and csa gives up.

The patch just adds a REG_EQUAL note when changing sp = sp + const into
sp = reg, where we remember it was actually a stack adjustment by certain
constant, and the combine-stack-adj changes than make use of those REG_EQUAL
notes, together with LR tracking (csa did enable the note problem, just
didn't simulate each insn) so that we can add the needed clobbers etc.
(taken from the other stack adjustment insn).

2020-05-05  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/94516
* postreload.c (reload_cse_simplify): When replacing sp = sp + const
with sp = reg, add REG_EQUAL note with sp + const.
* combine-stack-adj.c (try_apply_stack_adjustment): Change return
type from int to bool.  Add LIVE and OTHER_INSN arguments.  Undo
postreload sp = sp + const to sp = reg optimization if needed and
possible.
(combine_stack_adjustments_for_block): Add LIVE argument.  Handle
reg = sp insn with sp + const REG_EQUAL note.  Adjust
try_apply_stack_adjustment caller, call
df_simulate_initialize_forwards and df_simulate_one_insn_forwards.
(combine_stack_adjustments): Allocate and free LIVE bitmap,
adjust combine_stack_adjustments_for_block caller.

4 years agoc++: Member template function lookup failure [PR94799]
Marek Polacek [Wed, 29 Apr 2020 02:30:44 +0000 (22:30 -0400)]
c++: Member template function lookup failure [PR94799]

Whew, this took a while.  We fail to parse "p->template A<T>::a()"
(where p is of type A<T> *) because since r249752 we treat the RHS of the ->
as dependent and avoid a lookup in the enclosing context: since that rev
cp_parser_template_name checks parser->context->object_type too, which
here is unknown_type_node, signalling a type-dependent object:

 7756   if (dependent_p)
 7757     /* Tell cp_parser_lookup_name that there was an object, even though it's
 7758        type-dependent.  */
 7759     parser->context->object_type = unknown_type_node;

with which cp_parser_template_name returns identifier 'A', cp_parser_class_name
then creates a TEMPLATE_ID_EXPR A<T>, but then

23735       decl = make_typename_type (scope, decl, tag_type, tf_error);

in cp_parser_class_name fails because scope is NULL.  Then we return
error_mark_node and parse errors ensue.

I've tried various approaches, e.g. keeping TEMPLATE_ID_EXPR around
instead of calling make_typename_type, which didn't work, whereupon I
realized that since we don't want to perform name lookup if we've seen
the template keyword and the scope is dependent, we can adjust
parser->context->object_type and use the type of the object expression
as the scope, even if it's type-dependent.  This should be in line with
[basic.lookup.classref]p4.  If the postfix expression doesn't have a type,
use typeof to carry its type.  This typeof will be processed in
tsubst/TYPENAME_TYPE.

PR c++/94799
* parser.c (cp_parser_postfix_dot_deref_expression): If we have
a type-dependent object of class type, stash it to
parser->context->object_type.  If the postfix expression doesn't have
a type, use typeof.
(cp_parser_class_name): Consider object scope too.
(cp_parser_lookup_name): Remove code dealing with the case when
object_type is unknown_type_node.

* g++.dg/lookup/this1.C: Adjust dg-error.
* g++.dg/template/lookup12.C: New test.
* g++.dg/template/lookup13.C: New test.
* g++.dg/template/lookup14.C: New test.
* g++.dg/template/lookup15.C: New test.

4 years agoRemove __gcov_flush.
Martin Liska [Tue, 5 May 2020 14:15:47 +0000 (16:15 +0200)]
Remove __gcov_flush.

PR gcov-profile/93623
* tree-cfg.c (stmt_can_terminate_bb_p): Update comment to reflect
reality.
PR gcov-profile/93623
* Makefile.in: Remove __gcov_flush.
* gcov.h (__gcov_flush): Remove.
* libgcov-interface.c (__gcov_flush): Remove.
(init_mx): Use renamed mutex.
(__gcov_lock): Likewise.
(__gcov_unlock): Likewise.
(__gcov_fork): Likewise.
(__gcov_flush): Remove.

4 years agoUse __gcov_dump and __gcov_reset in execv and fork context.
Martin Liska [Tue, 5 May 2020 14:15:46 +0000 (16:15 +0200)]
Use __gcov_dump and __gcov_reset in execv and fork context.

PR gcov-profile/93623
* libgcov-interface.c (__gcov_fork): Do not flush
and reset only in child process.
(__gcov_execl): Dump counters only and reset them
only if exec* fails.
(__gcov_execlp): Likewise.
(__gcov_execle): Likewise.
(__gcov_execv): Likewise.
(__gcov_execvp): Likewise.
(__gcov_execve): Likewise.

4 years agoDo locking for __gcov_dump and __gcov_reset as well.
Martin Liska [Tue, 5 May 2020 14:15:45 +0000 (16:15 +0200)]
Do locking for __gcov_dump and __gcov_reset as well.

PR gcov-profile/93623
* Makefile.in: Add _gcov_lock_unlock to LIBGCOV_INTERFACE.
* libgcov-interface.c (ALIAS_void_fn): Remove.
(__gcov_lock): New.
(__gcov_unlock): New.
(__gcov_flush): Use __gcov_lock and __gcov_unlock.
(__gcov_reset): Likewise.
(__gcov_dump): Likewise.
* libgcov.h (__gcov_lock): New declaration.
(__gcov_unlock): Likewise.

4 years agooptgen: make more sanity checks for enums.
Martin Liska [Tue, 5 May 2020 14:13:46 +0000 (16:13 +0200)]
optgen: make more sanity checks for enums.

* opt-functions.awk (opt_args_non_empty): New function.
* opt-read.awk: Use the function for various option arguments.

4 years agoProvide warning for missing jobserver.
Martin Liska [Tue, 5 May 2020 14:11:33 +0000 (16:11 +0200)]
Provide warning for missing jobserver.

PR driver/94330
* lto-wrapper.c (run_gcc): When using -flto=jobserver,
report warning when the jobserver is not detected.

4 years agoAdd missing ChangeLog entries.
Martin Liska [Tue, 5 May 2020 14:10:13 +0000 (16:10 +0200)]
Add missing ChangeLog entries.

4 years agogcov: print total_lines summary for all files.
Martin Liska [Fri, 17 Apr 2020 15:19:12 +0000 (17:19 +0200)]
gcov: print total_lines summary for all files.

gcc/ChangeLog:

2020-04-17  Martin Liska  <mliska@suse.cz>

PR gcov-profile/94636
* gcov.c (main): Print total lines summary at the end.
(generate_results): Expect file_name always being non-null.
Print newline after intermediate file is printed in order to align with
what we do for normal files.

4 years agoProvide hint for misspelled -fdump-foo options.
Martin Liska [Thu, 19 Mar 2020 10:58:53 +0000 (11:58 +0100)]
Provide hint for misspelled -fdump-foo options.

gcc/ChangeLog:

2020-03-19  Martin Liska  <mliska@suse.cz>

* dumpfile.c (dump_switch_p): Change return type
and print option suggestion.
* dumpfile.h: Change return type.
* opts-global.c (handle_common_deferred_options):
Move error into dump_switch_p function.

gcc/testsuite/ChangeLog:

2020-03-19  Martin Liska  <mliska@suse.cz>

* gcc.dg/spellcheck-options-22.c: New test.

4 years agoMerge dg-options and dg-additional-options if len <= 120 chars.
Martin Liska [Wed, 15 Apr 2020 06:49:45 +0000 (08:49 +0200)]
Merge dg-options and dg-additional-options if len <= 120 chars.

gcc/testsuite/ChangeLog:

2020-04-15  Martin Liska  <mliska@suse.cz>

* g++.dg/concepts/diagnostic1.C: Merge dg-options and
dg-additional-options if len <= 120 chars.
* g++.dg/cpp1y/new1.C: Likewise.
* g++.dg/cpp1y/new2.C: Likewise.
* g++.dg/debug/dwarf2/pr61433.C: Likewise.
* g++.dg/init/new18.C: Likewise.
* g++.dg/ipa/devirt-19.C: Likewise.
* g++.dg/ipa/devirt-52.C: Likewise.
* g++.dg/ipa/pr44372.C: Likewise.
* g++.dg/ipa/pr58371.C: Likewise.
* g++.dg/ipa/pr63587-2.C: Likewise.
* g++.dg/ipa/pr78211.C: Likewise.
* g++.dg/opt/dump1.C: Likewise.
* g++.dg/opt/pr44919.C: Likewise.
* g++.dg/opt/pr47615.C: Likewise.
* g++.dg/opt/pr82159-2.C: Likewise.
* g++.dg/other/pr52048.C: Likewise.
* g++.dg/pr57662.C: Likewise.
* g++.dg/pr59510.C: Likewise.
* g++.dg/pr67989.C: Likewise.
* g++.dg/pr81194.C: Likewise.
* g++.dg/template/canon-type-8.C: Likewise.
* g++.dg/template/crash107.C: Likewise.
* g++.dg/template/show-template-tree-3.C: Likewise.
* g++.dg/tm/cgraph_edge.C: Likewise.
* g++.dg/torture/20141013.C: Likewise.
* g++.dg/torture/pr34641.C: Likewise.
* g++.dg/torture/pr34850.C: Likewise.
* g++.dg/torture/pr36745.C: Likewise.
* g++.dg/torture/pr40991.C: Likewise.
* g++.dg/torture/pr48271.C: Likewise.
* g++.dg/torture/pr53602.C: Likewise.
* g++.dg/torture/pr53752.C: Likewise.
* g++.dg/torture/pr54838.C: Likewise.
* g++.dg/torture/pr58252.C: Likewise.
* g++.dg/tree-ssa/pr22444.C: Likewise.
* g++.dg/tree-ssa/pr24351-3.C: Likewise.
* g++.dg/tree-ssa/pr27283.C: Likewise.
* g++.dg/tree-ssa/pr27291.C: Likewise.
* g++.dg/tree-ssa/pr27548.C: Likewise.
* g++.dg/tree-ssa/pr42337.C: Likewise.
* g++.dg/ubsan/pr65583.C: Likewise.
* g++.old-deja/g++.robertl/eb27.C: Likewise.
* gcc.dg/tree-ssa/dse-points-to.c: Likewise.
* gcc.target/arm/simd/vmmla_1.c: Likewise.
* gcc.target/i386/vect-pr67800.c: Likewise.
* gcc.target/mips/cfgcleanup-jalr2.c: Likewise.
* gcc.target/mips/cfgcleanup-jalr3.c: Likewise.

4 years agoUse const for template argument.
Martin Liska [Tue, 4 Feb 2020 13:55:25 +0000 (14:55 +0100)]
Use const for template argument.

libstdc++-v3/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

PR c/92472
* include/parallel/multiway_merge.h:
Use const for _Compare template argument.

4 years agoPut index check before use.
Martin Liska [Tue, 4 Feb 2020 13:57:59 +0000 (14:57 +0100)]
Put index check before use.

liboffloadmic/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

PR other/89860
* runtime/offload_target.cpp: Put index check
before its use.

4 years agoUse const for some function arguments.
Martin Liska [Tue, 4 Feb 2020 13:55:14 +0000 (14:55 +0100)]
Use const for some function arguments.

gcc/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

PR c/92472
* alloc-pool.h: Use const for some arguments.
* bitmap.h: Likewise.
* mem-stats.h: Likewise.
* sese.h (get_entry_bb): Likewise.
(get_exit_bb): Likewise.

4 years agoRemove 2 dead variables in bid_internal.h.
Martin Liska [Tue, 4 Feb 2020 13:54:51 +0000 (14:54 +0100)]
Remove 2 dead variables in bid_internal.h.

libgcc/config/libbid/ChangeLog:

2020-02-04  Martin Liska  <mliska@suse.cz>

PR libgcc/92565
* bid_internal.h (handle_UF_128_rem): Remove unused variable.
(handle_UF_128): Likewise.

4 years agorewrite hybrid SLP detection
Richard Biener [Wed, 25 Mar 2020 13:41:51 +0000 (14:41 +0100)]
rewrite hybrid SLP detection

This rewrites hybrid SLP detection to be simpler and cope with
group size changes in the SLP graph.  In particular detection
works starting from non-SLP stmts following use->def chains
rather than walking the SLP graph and following def->use chains.

It's all temporary of course since non-SLP and thus hybrid SLP
will go away.

2020-05-05  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (struct vdhs_data): New.
(vect_detect_hybrid_slp): New walker.
(vect_detect_hybrid_slp): Rewrite.

4 years agotestsuite/92177 - adjust expected patterns for gcc.dg/vect/bb-slp-22.c
Richard Biener [Tue, 5 May 2020 13:38:24 +0000 (15:38 +0200)]
testsuite/92177 - adjust expected patterns for gcc.dg/vect/bb-slp-22.c

We now always vectorize two BBs, adjust the selector to also scan
for integer multiplication vectorization explicitely.

2020-05-05  Richard Biener  <rguenther@suse.de>

PR testsuite/92177
* gcc.dg/vect/bb-slp-22.c: Adjust.

4 years agoipa/94947 - fix test for externally visible variables for IPA PTA
Richard Biener [Tue, 5 May 2020 11:09:50 +0000 (13:09 +0200)]
ipa/94947 - fix test for externally visible variables for IPA PTA

This fixes lack of an escape point of externally declared variables.

2020-05-05  Richard Biener  <rguenther@suse.de>

PR ipa/94947
* tree-ssa-structalias.c (ipa_pta_execute): Use
varpool_node::externally_visible_p ().
(refered_from_nonlocal_var): Likewise.

* gcc.dg/torture/pr94947-1.c: New testcase.
* gcc.dg/torture/pr94947-2.c: Likewise.

4 years agoSilence warning in LTO mode on VxWorks
Eric Botcazou [Tue, 5 May 2020 10:33:11 +0000 (12:33 +0200)]
Silence warning in LTO mode on VxWorks

The link phase is always partial (-r) for VxWorks in kernel mode, which
means that it uses incremental LTO linking by default (-flinker-output=rel).
But in this mode the LTO plugin outputs a warning if one of the object files
involved in the link does not contain LTO bytecode, before switching to
nolto-rel mode.  We do not do repeated incremental linking for VxWorks so
silence the warning.

lto-plugin/
* lto-plugin.c: Document -linker-output-auto-notlo-rel option.
(linker_output_set): Change type to bool.
(linker_output_known): Likewise.
(linker_output_auto_nolto_rel): New variable.
(all_symbols_read_handler): Take it into account.
<LDPO_REL>: Do not issue the warning if it is set.
(process_option): Process -linker-output-auto-notlo-rel.
(cleanup_handler): Remove unused variable.
(onload) <LDPT_LINKER_OUTPUT>: Adjust to above type change.
gcc/
* gcc.c (LTO_PLUGIN_SPEC): Define if not already.
(LINK_PLUGIN_SPEC): Execute LTO_PLUGIN_SPEC.
* config/vxworks.h (LTO_PLUGIN_SPEC): Define.

4 years agoDo not put incomplete CONSTRUCTORs into static memory
Eric Botcazou [Tue, 5 May 2020 10:31:26 +0000 (12:31 +0200)]
Do not put incomplete CONSTRUCTORs into static memory

The CONSTRUCTOR_NO_CLEARING flag was invented to avoid generating a memset
for  CONSTRUCTORS that lack elements, but it turns out that the gimplifier
can generate a memcpy for them instead, which is worse performance-wise,
so this prevents it from doing that for them.

* gimplify.c (gimplify_init_constructor): Do not put the constructor
into static memory if it is not complete.

4 years agotree-optimization/94949 - fix load eliding in SM
Richard Biener [Tue, 5 May 2020 09:00:09 +0000 (11:00 +0200)]
tree-optimization/94949 - fix load eliding in SM

This fixes the case of not using the multithreaded model when
only conditionally storing to the destination.  We cannot elide
the load in this case.

2020-05-05  Richard Biener  <rguenther@suse.de>

PR tree-optimization/94949
* tree-ssa-loop-im.c (execute_sm): Check whether we use
the multithreaded model or always compute the stored value
before eliding a load.

* gcc.dg/torture/pr94949.c: New testcase.

4 years agoaarch64: eliminate redundant zero extend after bitwise negation
Alex Coplan [Tue, 5 May 2020 09:33:02 +0000 (10:33 +0100)]
aarch64: eliminate redundant zero extend after bitwise negation

The attached patch eliminates a redundant zero extend from the AArch64 backend. Given the following C code:

unsigned long long foo(unsigned a)
{
    return ~a;
}

prior to this patch, AArch64 GCC at -O2 generates:

foo:
        mvn     w0, w0
        uxtw    x0, w0
        ret

but the uxtw is redundant, since the mvn clears the upper half of the x0 register. After applying this patch, GCC at -O2 gives:

foo:
        mvn     w0, w0
        ret

Testing:
    Added regression test which passes after applying the change to aarch64.md.
    Full bootstrap and regression on aarch64-linux with no additional failures.

        * config/aarch64/aarch64.md (*one_cmpl_zero_extend): New.
        * gcc.target/aarch64/mvn_zero_ext.c: New test.

4 years agomatch.pd: Canonicalize (x + (x << cst)) into (x * cst2) [PR94800]
Jakub Jelinek [Tue, 5 May 2020 09:36:47 +0000 (11:36 +0200)]
match.pd: Canonicalize (x + (x << cst)) into (x * cst2) [PR94800]

The popcount* testcases show yet another creative way to write popcount,
but rather than adjusting the popcount matcher to deal with it, I think
we just should canonicalize those (X + (X << C) to X * (1 + (1 << C))
and (X << C1) + (X << C2) to X * ((1 << C1) + (1 << C2)), because for
multiplication we already have simplification rules that can handle nested
multiplication (X * CST1 * CST2), while the the shifts and adds we have
nothing like that.  And user could have written the multiplication anyway,
so if we don't emit the fastest or smallest code for the multiplication by
constant, we should improve that.  At least on the testcases seems the
emitted code is reasonable according to cost, except that perhaps we could
in some cases try to improve expansion of vector multiplication by
uniform constant.

2020-05-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94800
* match.pd (X + (X << C) to X * (1 + (1 << C)),
(X << C1) + (X << C2) to X * ((1 << C1) + (1 << C2))): New
canonicalizations.

* gcc.dg/tree-ssa/pr94800.c: New test.
* gcc.dg/tree-ssa/popcount5.c: New test.
* gcc.dg/tree-ssa/popcount5l.c: New test.
* gcc.dg/tree-ssa/popcount5ll.c: New test.

4 years agox86: Fix *vec_dupv4hi constraints [PR94942]
Jakub Jelinek [Tue, 5 May 2020 09:33:47 +0000 (11:33 +0200)]
x86: Fix *vec_dupv4hi constraints [PR94942]

This insn and split splits into HI->V?HImode broadcast for avx2 and later,
but either the operands need to be %xmm0-%xmm15 (i.e. VEX encoded insn), or
the insn needs both AVX512BW and AVX512VL.
Now, Yv constraint is v for AVX512VL and x otherwise, so for -mavx512vl -mno-avx512bw
we ICE if we end up with a %xmm16+ register from RA.
Yw constraint is v for AVX512VL and AVX512BW and nothing otherwise, so
in this pattern we actually need xYw.

2020-05-05  Jakub Jelinek  <jakub@redhat.com>

PR target/94942
* config/i386/mmx.md (*vec_dupv4hi): Use xYw constraints instead of Yv.

* gcc.target/i386/pr94942.c: New test.

4 years agomatch.pd: Optimize (((type)A * B) >> prec) != 0 into __imag__ .MUL_OVERFLOW [PR94914]
Jakub Jelinek [Tue, 5 May 2020 09:31:43 +0000 (11:31 +0200)]
match.pd: Optimize (((type)A * B) >> prec) != 0 into __imag__ .MUL_OVERFLOW [PR94914]

On x86 (the only target with umulv4_optab) one can use mull; seto to check
for overflow instead of performing wider multiplication and performing
comparison on the high bits.

2020-05-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94914
* match.pd ((((type)A * B) >> prec) != 0 to .MUL_OVERFLOW(A, B) != 0):
New simplification.

* gcc.target/i386/pr94914.c: New test.

4 years agoi386: Use int_nonimmediate_operand more
Uros Bizjak [Tue, 5 May 2020 09:31:52 +0000 (11:31 +0200)]
i386: Use int_nonimmediate_operand more

Pattern explosing and manual mode checks can be avoided by using
int_nonimmediate_operand special predicate.

While there, rewrite *x86_mov<SWI48:mode>cc_0_m1_neg_leu<SWI:mode>
to a combine pass splitter.

* config/i386/i386.md (*testqi_ext_3): Use
int_nonimmediate_operand instead of manual mode checks.
(*x86_mov<SWI48:mode>cc_0_m1_neg_leu<SWI:mode>):
Use int_nonimmediate_operand predicate.  Rewrite
define_insn_and_split pattern to a combine pass splitter.

4 years agofix build of targets not implementing add_stmt_cost
Richard Biener [Tue, 5 May 2020 09:25:00 +0000 (11:25 +0200)]
fix build of targets not implementing add_stmt_cost

C++ makes mismatched prototype and implementation OK.

2020-05-05  Richard Biener  <rguenther@suse.de>

* targhooks.h (default_add_stmt_cost): Add vec_info * parameter.

4 years agobuild: Fix 32-bit TLS detection with 64-bit-default gas on Solaris/x86
Rainer Orth [Tue, 5 May 2020 08:42:23 +0000 (10:42 +0200)]
build: Fix 32-bit TLS detection with 64-bit-default gas on Solaris/x86

I've recently tested i386-pc-solaris2.11 bootstrap on Solaris 11/x86
with only the bundled tools (using /usr/gnu/bin/as from binutils 2.30 in
this case).  It failed compiling libgo/runtime/proc.c, creating invalid
assembly:

proc.s: Assembler messages:
proc.s:2092: Error: junk at end of line, first unrecognized character is `*'

        .globl  __emutls_v.*runtime.g

and several more errors.  This is completely unexpected since Solaris
does support TLS.  It turned out that 32-bit TLS detection in
gcc/configure had failed:

configure:25145: checking assembler for thread-local storage support
configure:25158: /usr/gnu/bin/as   --fatal-warnings -o conftest.o conftest.s >&5
conftest.s: Assembler messages:
conftest.s:6: Error: relocated field and relocation type differ in signedness
conftest.s:7: Error: @TLSLDM reloc is not supported with 64-bit output format
conftest.s:7: Error: junk `@tlsldm' after expression

which isn't unexpected given that the bundled gas has been configured
for x86_64-pc-solaris2.11, i.e. 64-bit-default.

This is easily fixed by explicitly passing --32 for the 32-bit case,
matching what is done for the 64-bit test.

Tested on i386-pc-solaris2.11 with 32-bit-default and 64-bit-default gas
as well as with /usr/bin/as, always correctly detecting TLS support.

* configure.ac <i[34567]86-*-*>: Add --32 to tls_as_opt on Solaris.
* configure: Regenerate.

4 years agoadd vec_info * parameters where needed
Richard Biener [Mon, 16 Mar 2020 10:47:00 +0000 (11:47 +0100)]
add vec_info * parameters where needed

Soonish we'll get SLP nodes which have no corresponding scalar
stmt and thus not stmt_vec_info and thus no way to get back to
the associated vec_info.  This patch makes the vec_info available
as part of the APIs instead of putting in that back-pointer into
the leaf data structures.

2020-05-05  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (_stmt_vec_info::vinfo): Remove.
(STMT_VINFO_LOOP_VINFO): Likewise.
(STMT_VINFO_BB_VINFO): Likewise.
* tree-vect-data-refs.c: Adjust for the above, adding vec_info *
parameters and adjusting calls.
* tree-vect-loop-manip.c: Likewise.
* tree-vect-loop.c: Likewise.
* tree-vect-patterns.c: Likewise.
* tree-vect-slp.c: Likewise.
* tree-vect-stmts.c: Likewise.
* tree-vectorizer.c: Likewise.

* target.def (add_stmt_cost): Add vec_info * parameter.
* target.h (stmt_in_inner_loop_p): Likewise.
* targhooks.c (default_add_stmt_cost): Adjust.
* doc/tm.texi: Re-generate.

* config/aarch64/aarch64.c (aarch64_extending_load_p): Add
vec_info * parameter and adjust.
(aarch64_sve_adjust_stmt_cost): Likewise.
(aarch64_add_stmt_cost): Likewise.
* config/arm/arm.c (arm_add_stmt_cost): Likewise.
* config/i386/i386.c (ix86_add_stmt_cost): Likewise.
* config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.

4 years agoi386: Simplify {,v}ph{add,sub{,s}{w,d} insn patterns [PR94460]
Jakub Jelinek [Tue, 5 May 2020 07:01:37 +0000 (09:01 +0200)]
i386: Simplify {,v}ph{add,sub{,s}{w,d} insn patterns [PR94460]

As mentioned in the previous PR94460 patch, the RTL patterns look too
large/complicated, we can simplify them by just performing two 2 arg
permutations to move the arguments into the right spots and then just
doing the plus/minus (or signed saturation version thereof).

2020-05-05  Jakub Jelinek  <jakub@redhat.com>

PR target/94460
* config/i386/sse.md (avx2_ph<plusminus_mnemonic>wv16hi3,
ssse3_ph<plusminus_mnemonic>wv8hi3, ssse3_ph<plusminus_mnemonic>wv4hi3,
avx2_ph<plusminus_mnemonic>dv8si3, ssse3_ph<plusminus_mnemonic>dv4si3,
ssse3_ph<plusminus_mnemonic>dv2si3): Simplify RTL patterns.

4 years agoDaily bump.
GCC Administrator [Tue, 5 May 2020 00:16:17 +0000 (00:16 +0000)]
Daily bump.

4 years agoc++: Avoid unnecessary copying in cp_fold [PR94038]
Patrick Palka [Mon, 4 May 2020 22:30:32 +0000 (18:30 -0400)]
c++: Avoid unnecessary copying in cp_fold [PR94038]

When folding a CALL_EXPR, we can avoid copying it until folding changes
one of its arguments.  And when folding a TREE_VEC, we can avoid using
an intermediate releasing_vec by copying the TREE_VEC as soon as folding
changes one of its arguments, like we do in the CALL_EXPR case.

Incidentally, the CALL_EXPR change also fixes the testcase in PR94038.
The reason is that the call to maybe_constant_value from cp_fold on
the call 'bar<int>()' now reuses the result of the earlier call to
maybe_constant_value from fold_for_warn, via the cv_cache.  This earlier
call passes uid_sensitive=true, whereas the call from cp_fold passes
uid_sensitive=false, and so by reusing the cached result of the earlier
call we now avoid instantiating bar<int> at all.

gcc/cp/ChangeLog:

PR c++/94038
* cp-gimplify.c (cp_fold) <case CALL_EXPR>: Move some variable
declarations closer to their uses.  Copy the CALL_EXPR only
when one of its arguments has changed.
<case TREE_VEC>: Instead of first collecting the folded
arguments into a releasing_vec, just make a copy of the TREE_VEC
as soon as folding changes one of its arguments.

gcc/testsuite/ChangeLog:

PR c++/94038
* g++.dg/warn/pr94038.C: New test.

4 years agolibstdc++: Fix the return type of __cxa_finalize
Fangrui Song [Mon, 4 May 2020 22:07:19 +0000 (23:07 +0100)]
libstdc++: Fix the return type of __cxa_finalize

This should return void according to the Itanium C++ ABI.

2020-05-04  Fangrui Song  <maskray@google.com>

* libsupc++/cxxabi.h (__cxa_finalize): Fix return type.

4 years agolibstdc++: Fix broken link to SGI STL FAQ
Jonathan Wakely [Mon, 4 May 2020 21:54:25 +0000 (22:54 +0100)]
libstdc++: Fix broken link to SGI STL FAQ

The previous URL to an entry in the wayback machine now redirects to a
page saying "SGI.com Tech Archive Resources now retired" so use an older
entry from the archive.

* doc/xml/faq.xml: Use working link for SGI STL FAQ.
* doc/html/*: Regenerate.

4 years agolibstdc++: Fix incorrect size calculation in PMR resource (PR 94906)
Jonathan Wakely [Mon, 4 May 2020 20:13:28 +0000 (21:13 +0100)]
libstdc++: Fix incorrect size calculation in PMR resource  (PR 94906)

Calculating the size of a chunk being returned to the upstream allocator
was done with a 32-bit type, so it wrapped if the chunk was 4GB or
larger.

I don't know how to test this without allocating 4GB, so there's no test
in the testsuite. It has been tested manually with allocations sizes and
alignments exceeding 4GB.

PR libstdc++/94906
* src/c++17/memory_resource.cc
(monotonic_buffer_resource::_Chunk::release): Use size_t for shift
operands.

4 years agoFix Ada bootstrap on Cygwin64
Eric Botcazou [Mon, 4 May 2020 21:32:39 +0000 (23:32 +0200)]
Fix Ada bootstrap on Cygwin64

This fixes two compilation errors preventing bootstrap with Ada
on x86_64-pc-cygwin.

2020-05-04  Mikael Pettersson  <mikpelinux@gmail.com>

PR bootstrap/94918
* mingw32.h: Prevent windows.h from including emmintrin.h on Cygw64.
* s-oscons-tmplt.c (Serial_Port_Descriptor): Use System.Win32.HANDLE
also on Cygwin.

4 years agors6000: AIX long double builtins for 64 bit long double.
David Edelsohn [Thu, 30 Apr 2020 15:29:32 +0000 (11:29 -0400)]
rs6000: AIX long double builtins for 64 bit long double.

When long doubles are 64 bit, the AIX C library overrides the definitions
but GCC builtins point to 128 bit names.  This patch overrides the
builtins for fmodl, frexpl, ldexpl and modfl to refer to the 64 bit symbols.

2020-05-04  Clement Chigot  <clement.chigot@atos.net>
    David Edelsohn  <dje.gcc@gmail.com>

* config/rs6000/rs6000-call.c (rs6000_init_builtins): Override explicit
for fmodl, frexpl, ldexpl and modfl builtins.

4 years agointernal-fn: Avoid dropping the lhs of some calls [PR94941]
Richard Sandiford [Mon, 4 May 2020 20:21:16 +0000 (21:21 +0100)]
internal-fn: Avoid dropping the lhs of some calls [PR94941]

create_output_operand coerces an output operand to the insn's
predicates, using a suggested rtx location if convenient.
But if that rtx location is actually required rather than
optional, the builder of the insn has to emit a move afterwards.

(We could instead add a new interface that does this automatically,
but that's future work.)

This PR shows that we were failing to emit the move for some of the
vector load internal functions.  I think there are other routines in
internal-fn.c that potentially have the same problem, but this patch is
supposed to be a conservative subset suitable for backporting to GCC 10.

2020-05-04  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR middle-end/94941
* internal-fn.c (expand_load_lanes_optab_fn): Emit a move if the
chosen lhs is different from the gcall lhs.
(expand_mask_load_optab_fn): Likewise.
(expand_gather_load_optab_fn): Likewise.

gcc/testsuite/
PR middle-end/94941
* gcc.target/aarch64/sve/acle/general/unoptimized_1.c: New test.