platform/upstream/gcc.git
2 years agotestsuite: Add testcases for already fixed PR [PR100541]
Jakub Jelinek [Wed, 2 Mar 2022 09:38:39 +0000 (10:38 +0100)]
testsuite: Add testcases for already fixed PR [PR100541]

These testcases started failing with r12-630 and one of them
got fixed with r12-4531 (aka PR102764 fix and r12-4616 further
improved the fix) and the other went latent in r12-2591 (i.e. threader
changes) and I believe was fixed for real by the PR102764 fix too.

2022-03-02  Jakub Jelinek  <jakub@redhat.com>

PR debug/100541
* g++.dg/opt/pr100541-1.C: New test.
* g++.dg/opt/pr100541-2.C: New test.

2 years agostrlen: Comment spelling fixes
Jakub Jelinek [Wed, 2 Mar 2022 09:26:27 +0000 (10:26 +0100)]
strlen: Comment spelling fixes

This fixes some comment spelling bugs in tree-ssa-strlen.cc.

2022-03-02  Jakub Jelinek  <jakub@redhat.com>

* tree-ssa-strlen.cc (strlen_pass::handle_assign,
strlen_pass::before_dom_children): Comment spelling fixes.

2 years agomodref: Comment spelling fixes
Jakub Jelinek [Wed, 2 Mar 2022 09:25:25 +0000 (10:25 +0100)]
modref: Comment spelling fixes

This fixes some spelling mistakes in ipa-modref*.

2022-03-02  Jakub Jelinek  <jakub@redhat.com>

* ipa-modref-tree.cc (modref_access_node::contains,
modref_access_node::closer_pair_p, modref_access_node::insert,
modref_access_node::insert_kill): Comment spelling fixes.
* ipa-modref.cc: Likewise.
(modref_summary::finalize, ignore_nondeterminism_p,
class modref_access_analysis,
modref_access_analysis::set_side_effects,
modref_access_analysis::set_nondeterministic,
modref_access_analysis::record_global_memory_load,
modref_access_analysis::propagate, modref_access_analysis::analyze,
struct escape_point, class modref_lattice, modref_lattice::merge,
modref_lattice::merge_deref, class modref_eaf_analysis,
modref_eaf_analysis::merge_call_lhs_flags,
modref_eaf_analysis::analyze_ssa_name, modref_eaf_analysis::propagate,
modref_eaf_analysis::record_escape_points, remap_kills,
update_escape_summary, remove_useless_summaries,
ipa_merge_modref_summary_after_inlining, pass_ipa_modref::execute):
Likewise.
* ipa-modref.h (struct modref_summary, interposable_eaf_flags):
Likewise.
* ipa-modref-tree.h (enum modref_special_parms,
struct modref_access_node): Likewise.

2 years agoi386: Fix pr104551 testcase for solaris
Hongyu Wang [Tue, 1 Mar 2022 11:59:03 +0000 (19:59 +0800)]
i386: Fix pr104551 testcase for solaris

Use avx2-check mechanism to avoid illegal instrucion on non-avx2 target.

gcc/testsuite/ChangeLog:

PR target/104726
* gcc.target/i386/pr104551.c: Use avx2-check.h.

2 years agoAVX512FP16: Fix vcvt[u]si2sh runtime tests for Solaris
Hongyu Wang [Tue, 1 Mar 2022 09:49:52 +0000 (17:49 +0800)]
AVX512FP16: Fix vcvt[u]si2sh runtime tests for Solaris

Use standard C type instead of __int64_t which doesn't work on Solaris.

gcc/testsuite/ChangeLog:

PR target/104724
* gcc.target/i386/avx512fp16-vcvtsi2sh-1b.c: Use long long
instead of __int64_t.
* gcc.target/i386/avx512fp16-vcvtsi2sh64-1b.c: Ditto.
* gcc.target/i386/avx512fp16-vcvtusi2sh-1b.c: Ditto.
* gcc.target/i386/avx512fp16-vcvtusi2sh64-1b.c: Ditto.

2 years agoDaily bump.
GCC Administrator [Wed, 2 Mar 2022 00:16:32 +0000 (00:16 +0000)]
Daily bump.

2 years agoAdd a test for true positives related to PR104715.
Martin Sebor [Tue, 1 Mar 2022 23:56:06 +0000 (16:56 -0700)]
Add a test for true positives related to PR104715.

Related to:
PR tree-optimization/104715 - false dangling pointer with strstr

gcc/testsuite/ChangeLog:
PR tree-optimization/104715
* gcc.dg/Wdangling-pointer-3.c: New test.

2 years agowarn-access: Fix up check_pointer_uses [PR104715]
Jakub Jelinek [Tue, 1 Mar 2022 20:05:31 +0000 (21:05 +0100)]
warn-access: Fix up check_pointer_uses [PR104715]

The following testcase emits bogus -Wdangling-pointer warnings.
The bug is that when it sees that ptr immediate use is a call that
returns one of its arguments, it will assume that the return value
is based on ptr, but that is the case only if ptr is passed to the
argument that is actually returned (so e.g. for memcpy the first argument,
etc.).  When the builtins guarantee e.g. that the result is based on the
first argument (either ERF_RETURNS_ARG 0 in which case it will always
just returns the first argument as is, or when it is something like
strstr or strpbrk or mempcpy that it returns some pointer based on the
first argument), it means the result is not based on second or following
argument if any.  The second hunk fixes this.

The first hunk just removes an unnecessary TREE_CODE check, the code only
pushes SSA_NAMEs into the pointers vector and if it didn't, it uses
      FOR_EACH_IMM_USE_FAST (use_p, iter, ptr)
a few lines below this, which of course requires that ptr is a SSA_NAME.
Tree checking on SSA_NAME_VERSION will already ensure that if it wasn't
a SSA_NAME, we'd ICE.

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

PR tree-optimization/104715
* gimple-ssa-warn-access.cc (pass_waccess::check_pointer_uses): Don't
unnecessarily test if ptr is a SSA_NAME, it has to be.  Only push lhs
of a call if gimple_call_return_arg is equal to ptr, not just when it
is non-NULL.

* c-c++-common/Wdangling-pointer-7.c: New test.

2 years agowarn-access: Comment spelling fixes
Jakub Jelinek [Tue, 1 Mar 2022 18:43:04 +0000 (19:43 +0100)]
warn-access: Comment spelling fixes

I've noticed various spelling bugs in comments in this file.

There is one spot I haven't fixed:
"Otherwise, VAR is the auto variable
(including an unnamed temporary such as a compound literal) whose
lifetime's rended it dangling."
I'm afraid I don't know what it wanted to say, "lifetime rendered it"
or something else?

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

* gimple-ssa-warn-access.cc (warn_string_no_nul,
maybe_warn_nonstring_arg, fndecl_alloc_p, new_delete_mismatch_p,
matching_alloc_calls_p, maybe_warn_alloc_args_overflow,
pass_waccess::check_alloca, pass_waccess::check_strcat,
memmodel_to_uhwi, fntype_argno_type,
pass_waccess::maybe_check_access_sizes,
pass_waccess::check_call_access,
pass_waccess::maybe_check_dealloc_call, pass_waccess::check_stmt):
Comment spelling fixes.

2 years agod: Remove gdc.test/dhry.d from the testsuite
Iain Buclaw [Tue, 1 Mar 2022 18:25:30 +0000 (19:25 +0100)]
d: Remove gdc.test/dhry.d from the testsuite

This test is not well ported, and doesn't check anything useful.

gcc/testsuite/ChangeLog:

PR d/104736
* gdc.test/runnable/dhry.d: Removed.

2 years agox86: Limit PR 35513 tests to Linux
H.J. Lu [Tue, 1 Mar 2022 15:39:33 +0000 (07:39 -0800)]
x86: Limit PR 35513 tests to Linux

Limit PR 35513 tests to Linux since they fail on 32-bit Solaris/x86 with
Solaris linker.

PR testsuite/104725
* g++.target/i386/pr35513-1.C: Limit to Linux.
* g++.target/i386/pr35513-2.C: Likewise.

2 years agolto-plugin: update comments - remove hardwired gold
Martin Liska [Tue, 1 Mar 2022 15:40:45 +0000 (16:40 +0100)]
lto-plugin: update comments - remove hardwired gold

lto-plugin/ChangeLog:

* lto-plugin.c (process_offload_section): Use a linker as many
comments are connected to gold linker.
(process_option): Likewise.

2 years agolibstdc++: Fix -Wmaybe-uninitialized false positive [PR103984]
Jonathan Wakely [Tue, 1 Mar 2022 09:33:21 +0000 (09:33 +0000)]
libstdc++: Fix -Wmaybe-uninitialized false positive [PR103984]

This fixes a false positive warning seen with LTO:

12/bits/regex_compiler.tcc:443:32: error: '__last_char._M_char' may be used uninitialized [-Werror=maybe-uninitialized]

Given that the std::regex code is not very efficient anyway, the
overhead of initializing this byte should be minimal.

libstdc++-v3/ChangeLog:

PR middle-end/103984
* include/bits/regex_compiler.h (_BracketMatcher::_M_char): Use
default member initializer.

2 years agolibphobos: Fix misspelling of msvcUsesUCRT (PR104659)
Iain Buclaw [Tue, 1 Mar 2022 10:26:41 +0000 (11:26 +0100)]
libphobos: Fix misspelling of msvcUsesUCRT (PR104659)

libphobos/ChangeLog:

PR d/104659
* libdruntime/config/mingw/msvc.c (init_msvc): Fix misspelling of
msvcUsesUCRT.

2 years agotree-optimization/104716 - check if we can copy loop in loop distribution
Richard Biener [Tue, 1 Mar 2022 08:24:26 +0000 (09:24 +0100)]
tree-optimization/104716 - check if we can copy loop in loop distribution

The following checks whether we can copy the loop before attempting
to do so in loop distribution.  In the testcase there's a computed
goto and thus abnormal edges which we cannot redirect.

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

PR tree-optimization/104716
* tree-loop-distribution.cc (find_seed_stmts_for_distribution):
Check if we can copy the loop.

* gfortran.dg/pr104716.f: New testcase.

2 years agotestsuite/104727 - remove XFAIL for gcc.target/i386/pr84101.c
Richard Biener [Tue, 1 Mar 2022 14:23:07 +0000 (15:23 +0100)]
testsuite/104727 - remove XFAIL for gcc.target/i386/pr84101.c

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

PR testsuite/104727
* gcc.target/i386/pr84101.c: Remove XFAIL.

2 years agotestsuite/104728 - constrain gcc.dg/vect/pr81196-2.c
Richard Biener [Tue, 1 Mar 2022 14:20:59 +0000 (15:20 +0100)]
testsuite/104728 - constrain gcc.dg/vect/pr81196-2.c

We need to be able to reverse a vector for negative strides.

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

PR testsuite/104728
* gcc.dg/vect/pr81196-2.c: Require vect_perm.

2 years agoClear currently_expanding_gimple_stmt properly
H.J. Lu [Mon, 28 Feb 2022 23:18:04 +0000 (15:18 -0800)]
Clear currently_expanding_gimple_stmt properly

commit a5883ba0de68efad36db145e75c86394d8bd44ea
Author: Michael Matz <matz@gcc.gnu.org>
Date:   Tue Nov 24 15:37:32 2009 +0000

introduced currently_expanding_gimple_stmt, which was set and cleared in
expand_gimple_basic_block when expanding gimple statement to RTL.  But it
isn't cleared when expand_gimple_basic_block returns inside the loop.

PR middle-end/104721
* cfgexpand.cc (expand_gimple_basic_block): Clear
currently_expanding_gimple_stmt when returning inside the loop.

2 years agoRestrict new testcase gcc.target/i386/pr80270.c to x86_64.
Roger Sayle [Tue, 1 Mar 2022 10:39:58 +0000 (10:39 +0000)]
Restrict new testcase gcc.target/i386/pr80270.c to x86_64.

Committed as obvious (in hindsight).

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

gcc/testsuite/ChangeLog
* gcc.target/i386/pr80270.c: Don't compile new test case on ia32.

2 years agoipa: Improve error handling for target_clone single value
Martin Liska [Mon, 28 Feb 2022 12:27:22 +0000 (13:27 +0100)]
ipa: Improve error handling for target_clone single value

PR ipa/104533

gcc/c-family/ChangeLog:

* c-attribs.cc (handle_target_clones_attribute): Use
get_target_clone_attr_len and report warning soon.

gcc/ChangeLog:

* multiple_target.cc (get_attr_len): Move to tree.c.
(expand_target_clones): Remove single value checking.
* tree.cc (get_target_clone_attr_len): New fn.
* tree.h (get_target_clone_attr_len): Likewise.

gcc/testsuite/ChangeLog:

* g++.target/i386/pr104533.C: New test.

2 years agodocs: Document more .gcda file name generation.
Martin Liska [Mon, 28 Feb 2022 09:37:15 +0000 (10:37 +0100)]
docs: Document more .gcda file name generation.

PR gcov-profile/104677

gcc/ChangeLog:

* doc/invoke.texi: Document more .gcda file name generation.

2 years ago[nvptx] Handle DCmode in define_expand "omp_simt_xchg_{bfly,idx}"
Tom de Vries [Mon, 28 Feb 2022 15:06:54 +0000 (16:06 +0100)]
[nvptx] Handle DCmode in define_expand "omp_simt_xchg_{bfly,idx}"

For a test-case doing an openmp target simd reduction on a complex double:
...
  DOUBLE COMPLEX :: counter_N0
  ...
  !$OMP TARGET SIMD reduction(+: counter_N0)
...
we run into:
...
during RTL pass: expand
b.f90: In function ‘MAIN__._omp_fn.0’:
b.f90:23:32: internal compiler error: in expand_insn, at optabs.cc:8029
   23 |     counter_N0 = counter_N0 + 1.
      |                                ^
0x10f1cd3 expand_insn(insn_code, unsigned int, expand_operand*)
        gcc/optabs.cc:8029
0xeac435 expand_GOMP_SIMT_XCHG_BFLY
        gcc/internal-fn.cc:375
...

Fix this by handling DCmode and CDImode in define_expand
"omp_simt_xchg_{bfly,idx}".

Tested on x86_64 with nvptx accelerator.

gcc/ChangeLog:

2022-02-28  Tom de Vries  <tdevries@suse.de>

PR target/102429
* config/nvptx/nvptx.cc (nvptx_gen_shuffle): Handle DCmode and CDImode.
* config/nvptx/nvptx.md
(define_predicate "nvptx_register_or_complex_di_df_register_operand"):
New predicate.
(define_expand "omp_simt_xchg_bfly", define_expand "omp_simt_xchg_idx"):
Use nvptx_register_or_complex_di_df_register_operand.

2 years ago[nvptx] Add nvptx-gen.h and nvptx-gen.opt
Tom de Vries [Fri, 25 Feb 2022 10:49:01 +0000 (11:49 +0100)]
[nvptx] Add nvptx-gen.h and nvptx-gen.opt

Use nvptx-sm.def to generate new files nvptx-gen.h and nvptx-gen.opt, and:
- include nvptx-gen.h in nvptx.h, and
- add nvptx-gen.opt to extra_options (before nvptx.opt, in case that matters).

Tested on nvptx.

gcc/ChangeLog:

2022-02-25  Tom de Vries  <tdevries@suse.de>

* config.gcc (nvptx*-*-*): Add nvptx/nvptx-gen.opt to extra_options.
* config/nvptx/gen-copyright.sh: New file.
* config/nvptx/gen-h.sh: New file.
* config/nvptx/gen-opt.sh: New file.
* config/nvptx/nvptx.h (TARGET_SM35, TARGET_SM53, TARGET_SM70)
(TARGET_SM75, TARGET_SM80): Move ...
* config/nvptx/nvptx-gen.h: ... here.  New file, generate.
* config/nvptx/nvptx.opt (Enum ptx_isa): Move ...
* config/nvptx/nvptx-gen.opt: ... here.  New file, generate.
* config/nvptx/t-nvptx ($(srcdir)/config/nvptx/nvptx-gen.h)
($(srcdir)/config/nvptx/nvptx-gen.opt): New make target.

2 years ago[nvptx] Use nvptx-sm.def for t-omp-device
Tom de Vries [Fri, 25 Feb 2022 11:18:17 +0000 (12:18 +0100)]
[nvptx] Use nvptx-sm.def for t-omp-device

Add a script gen-omp-device-properties.sh that uses nvptx-sm.def to generate
omp-device-properties-nvptx.

Tested on x86_64 with nvptx accelerator.

gcc/ChangeLog:

2022-02-25  Tom de Vries  <tdevries@suse.de>

* config/nvptx/gen-omp-device-properties.sh: New file.
* config/nvptx/t-omp-device: Use gen-omp-device-properties.sh.

2 years ago[nvptx] Add nvptx-sm.def
Tom de Vries [Fri, 25 Feb 2022 10:47:12 +0000 (11:47 +0100)]
[nvptx] Add nvptx-sm.def

Add a file gcc/config/nvptx/nvptx-sm.def that lists all sm_xx versions used in
the port, like so:
...
NVPTX_SM(30, NVPTX_SM_SEP)
NVPTX_SM(35, NVPTX_SM_SEP)
NVPTX_SM(53, NVPTX_SM_SEP)
NVPTX_SM(70, NVPTX_SM_SEP)
NVPTX_SM(75, NVPTX_SM_SEP)
NVPTX_SM(80,)
...
and use it in various places using a pattern:
...
  #define NVPTX_SM(XX, SEP) { ... }
  #include "nvptx-sm.def"
  #undef NVPTX_SM
...

Tested on nvptx.

gcc/ChangeLog:

2022-02-25  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx-sm.def: New file.
* config/nvptx/nvptx-c.cc (nvptx_cpu_cpp_builtins): Use nvptx-sm.def.
* config/nvptx/nvptx-opts.h (enum ptx_isa): Same.
* config/nvptx/nvptx.cc (sm_version_to_string)
(nvptx_omp_device_kind_arch_isa): Same.

2 years ago[nvptx, testsuite] Add gcc.target/nvptx/sm*.c
Tom de Vries [Fri, 25 Feb 2022 10:43:55 +0000 (11:43 +0100)]
[nvptx, testsuite] Add gcc.target/nvptx/sm*.c

Add a few test-cases that test passing each -misa=sm_xx version and verify that
the proper __PTX_SM__ is defined.

Tested on nvptx.

gcc/testsuite/ChangeLog:

2022-02-25  Tom de Vries  <tdevries@suse.de>

* gcc.target/nvptx/sm30.c: New test.
* gcc.target/nvptx/sm35.c: New test.
* gcc.target/nvptx/sm53.c: New test.
* gcc.target/nvptx/sm70.c: New test.
* gcc.target/nvptx/sm75.c: New test.
* gcc.target/nvptx/sm80.c: New test.

2 years agoarc: Fix for new ifcvt behavior [PR104154]
Robin Dapp [Mon, 7 Feb 2022 07:39:41 +0000 (08:39 +0100)]
arc: Fix for new ifcvt behavior [PR104154]

ifcvt now passes a CC-mode "comparison" to backends.  This patch
simply returns from gen_compare_reg () in that case since nothing
needs to be prepared anymore.

gcc/ChangeLog:

PR rtl-optimization/104154
* config/arc/arc.cc (gen_compare_reg):  Return the CC-mode
comparison ifcvt passed us.

2 years agoi386: Fix V8HF vector init under -mno-avx [PR 104664]
Hongyu Wang [Mon, 28 Feb 2022 07:09:59 +0000 (15:09 +0800)]
i386: Fix V8HF vector init under -mno-avx [PR 104664]

For V8HFmode vector init with HFmode, do not directly emits V8HF move
with subreg, which may cause reload to assign general register to move
src.

gcc/ChangeLog:

PR target/104664
* config/i386/i386-expand.cc (ix86_expand_vector_init_duplicate):
  Use vec_setv8hf_0 for HF to V8HFmode move instead of subreg.

gcc/testsuite/ChangeLog:

PR target/104664
* gcc.target/i386/pr104664.c: New test.

2 years agoDaily bump.
GCC Administrator [Tue, 1 Mar 2022 00:16:28 +0000 (00:16 +0000)]
Daily bump.

2 years agoPR tree-optimization/91384: peephole2 to eliminate testl after negl.
Roger Sayle [Mon, 28 Feb 2022 22:30:27 +0000 (22:30 +0000)]
PR tree-optimization/91384: peephole2 to eliminate testl after negl.

This patch is my proposed solution to PR tree-optimization/91384 which is
a missed-optimization/code quality regression on x86_64.  The problematic
idiom is "if (r = -a)" which is equivalent to both "r = -a; if (r != 0)"
and alternatively "r = -a; if (a != 0)".  In this particular case, on
x86_64, we prefer to use the condition codes from the negation, rather
than require an explicit testl instruction.

Unfortunately, combine can't help, as it doesn't attempt to merge pairs
of instructions that share the same operand(s), only pairs/triples of
instructions where the result of each instruction feeds the next.  But
I doubt there's sufficient benefit to attempt this kind of "combination"
(that wouldn't already be caught by the tree-ssa passes).

Fortunately, it's relatively easy to fix this up (addressing the
regression) during peephole2 to eliminate the unnecessary testl in:

        movl    %edi, %ebx
        negl    %ebx
        testl   %edi, %edi
        je      .L2

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

gcc/ChangeLog
PR tree-optimization/91384
* config/i386/i386.md (peephole2): Eliminate final testl insn
from the sequence *movsi_internal, *negsi_1, *cmpsi_ccno_1 by
transforming using *negsi_2 for the negation.

gcc/testsuite/ChangeLog
PR tree-optimization/91384
* gcc.target/i386/pr91384.c: New test case.

2 years agoPR middle-end/80270: ICE in extract_bit_field_1
Roger Sayle [Mon, 28 Feb 2022 22:26:43 +0000 (22:26 +0000)]
PR middle-end/80270: ICE in extract_bit_field_1

This patch fixes PR middle-end/80270, an ICE-on-valid regression, where
performing a bitfield extraction on a variable explicitly stored in a
hard register by the user causes a segmentation fault during RTL
expansion.  Nearly identical source code without the "asm" qualifier
compiles fine.  The point of divergence is in simplify_gen_subreg
which tries to avoid creating non-trivial SUBREGs of hard registers,
to avoid problems during register allocation.  This suggests the
simple solution proposed here, to copy hard registers to a new pseudo
in extract_integral_bit_field, just before calling simplify_gen_subreg.

2022-02-28  Roger Sayle  <roger@nextmovesoftware.com>
    Eric Botcazou  <ebotcazou@adacore.com>

gcc/ChangeLog
PR middle-end/80270
* expmed.cc (extract_integral_bit_field): If OP0 is a hard
register, copy it to a pseudo before calling simplify_gen_subreg.

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

2 years ago[PR104637] LRA: Split hard regs as many as possible on one subpass
Vladimir N. Makarov [Mon, 28 Feb 2022 21:43:50 +0000 (16:43 -0500)]
[PR104637] LRA: Split hard regs as many as possible on one subpass

LRA hard reg split subpass is a small subpass used as the last
resort for LRA when it can not assign a hard reg to a reload
pseudo by other ways (e.g. by spilling non-reload pseudos).  For
simplicity the subpass works on one split base (as each split
changes pseudo live range info).  In this case it results in
reaching maximal possible number of subpasses.  The patch
implements as many non-overlapping hard reg splits
splits as possible on each subpass.

gcc/ChangeLog:

PR rtl-optimization/104637
* lra-assigns.cc (lra_split_hard_reg_for): Split hard regs as many
as possible on one subpass.

gcc/testsuite/ChangeLog:

PR rtl-optimization/104637
* gcc.target/i386/pr104637.c: New.

2 years agod: Merge upstream dmd cf63dd8e5, druntime caf14b0f, phobos 41aaf8c26.
Iain Buclaw [Mon, 28 Feb 2022 14:47:52 +0000 (15:47 +0100)]
d: Merge upstream dmd cf63dd8e5, druntime caf14b0f, phobos 41aaf8c26.

D front-end changes:

    - Import dmd v2.099.0-rc.1.
    - The `main' can now return type `noreturn' and supports return
      inference.

D Runtime changes:

    - Import druntime v2.099.0-rc.1.
    - C bindings for stat_t on powerpc-linux has been fixed.

Phobos changes:

    - Import phobos v2.099.0-rc.1.

gcc/d/ChangeLog:

* d-target.cc (Target::_init): Initialize C type size fields.
* dmd/MERGE: Merge upstream dmd cf63dd8e5.
* dmd/VERSION: Update version to v2.099.0-rc.1.

libphobos/ChangeLog:

* libdruntime/MERGE: Merge upstream druntime caf14b0f.
* src/MERGE: Merge upstream phobos 41aaf8c26.

gcc/testsuite/ChangeLog:

* gdc.dg/torture/simd7413a.d: Update.
* gdc.dg/ubsan/pr88957.d: Update.
* gdc.dg/simd18489.d: New test.
* gdc.dg/torture/simd21727.d: New test.

2 years agoc++: Lost deprecated/unavailable attr in class tmpl [PR104682]
Marek Polacek [Fri, 25 Feb 2022 19:56:13 +0000 (14:56 -0500)]
c++: Lost deprecated/unavailable attr in class tmpl [PR104682]

When looking into the other PR I noticed that we fail to give a warning
for a deprecated enumerator when the enum is in a class template.  This
only happens when the attribute doesn't have an argument.  The reason is
that when we tsubst_enum, we create a new enumerator:

      build_enumerator (DECL_NAME (decl), value, newtag,
           DECL_ATTRIBUTES (decl), DECL_SOURCE_LOCATION (decl));

but DECL_ATTRIBUTES (decl) is null when the attribute was provided
without an argument -- in that case it simply melts into a tree flag.
handle_deprecated_attribute has:

      if (!args)
         *no_add_attrs = true;

so the attribute isn't retained and we lose it when tsubsting.  Same
thing when the attribute is on the enum itself.

Attribute unavailable is a similar case, but it's different in that
it can be a late attribute whereas "deprecated" can't:
is_late_template_attribute has

                /* But some attributes specifically apply to templates.  */
                && !is_attribute_p ("abi_tag", name)
                && !is_attribute_p ("deprecated", name)
                && !is_attribute_p ("visibility", name))
         return true;
       else
         return false;

which looks strange, but attr-unavailable-9.C tests that we don't error when
the attribute is applied on a template.

PR c++/104682

gcc/cp/ChangeLog:

* cp-tree.h (build_enumerator): Adjust.
* decl.cc (finish_enum): Make it return the new decl.
* pt.cc (tsubst_enum): Propagate TREE_DEPRECATED and TREE_UNAVAILABLE.

gcc/testsuite/ChangeLog:

* g++.dg/ext/attr-unavailable-10.C: New test.
* g++.dg/ext/attr-unavailable-11.C: New test.
* g++.dg/warn/deprecated-17.C: New test.
* g++.dg/warn/deprecated-18.C: New test.

2 years agoc++: ICE with attribute on enumerator [PR104667]
Marek Polacek [Thu, 24 Feb 2022 21:41:53 +0000 (16:41 -0500)]
c++: ICE with attribute on enumerator [PR104667]

When processing a template, the enumerators we build don't have a type
yet.  But is_late_template_attribute is not prepared to see a _DECL
without a type, so we crash on

  enum tree_code code = TREE_CODE (type);

(I found that we don't give the "is deprecated" warning for the enumerator
'f' in the test.  Reported as PR104682.)

PR c++/104667

gcc/cp/ChangeLog:

* decl2.cc (is_late_template_attribute): Cope with a decl without
a type.

gcc/testsuite/ChangeLog:

* g++.dg/ext/attrib64.C: New test.

2 years agoSuppress uninitialized warnings for new created uses from __builtin_clear_padding...
Qing Zhao [Mon, 28 Feb 2022 15:58:43 +0000 (15:58 +0000)]
Suppress uninitialized warnings for new created uses from __builtin_clear_padding folding [PR104550]

__builtin_clear_padding(&object) will clear all the padding bits of the object.
actually, it doesn't involve any use of an user variable. Therefore, users do
not expect any uninitialized warning from it. It's reasonable to suppress
uninitialized warnings for all new created uses from __builtin_clear_padding
folding.

PR middle-end/104550

gcc/ChangeLog:

* gimple-fold.cc (clear_padding_flush): Suppress warnings for new
created uses.

gcc/testsuite/ChangeLog:

* gcc.dg/auto-init-pr104550-1.c: New test.
* gcc.dg/auto-init-pr104550-2.c: New test.
* gcc.dg/auto-init-pr104550-3.c: New test.

2 years agoFix error recovery in toplev::finalize.
Martin Liska [Mon, 28 Feb 2022 10:58:01 +0000 (11:58 +0100)]
Fix error recovery in toplev::finalize.

PR ipa/104648

gcc/ChangeLog:

* main.cc (main): Use flag_checking instead of CHECKING_P
and run toplev::finalize only if there is not error seen.

gcc/testsuite/ChangeLog:

* g++.dg/pr104648.C: New test.

2 years agoSimplify PRE fix
Richard Biener [Mon, 28 Feb 2022 11:21:19 +0000 (12:21 +0100)]
Simplify PRE fix

The following reverts a part of the PR103037 fix which is no longer necessary
after the fix for PR104700.  That makes the possible cummulative backport
smaller.

2022-02-28  Richard Biener  <rguenther@suse.de>

* tree-ssa-pre.cc (compute_avail): Revert part of last change.

2 years agotree-optimization/104700 - adjust constant handling in PRE
Richard Biener [Mon, 28 Feb 2022 07:36:25 +0000 (08:36 +0100)]
tree-optimization/104700 - adjust constant handling in PRE

The following refactors find_or_generate_expression to more properly
handle constant valued SSA names thereby simplifying the code and
avoiding ICEing after the last change to NARY processing.

2022-02-28  Richard Biener  <rguenther@suse.de>

PR tree-optimization/104700
* tree-ssa-pre.cc (get_or_alloc_expr_for): Remove and inline
into ...
(find_or_generate_expression): ... here, simplifying code.

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

2 years ago[libgomp, testsuite, nvptx] Add -mptx=_ in declare-variant-3-sm*.c
Tom de Vries [Fri, 25 Feb 2022 16:01:34 +0000 (17:01 +0100)]
[libgomp, testsuite, nvptx] Add -mptx=_ in declare-variant-3-sm*.c

When running with target board unix/-foffload=-mptx=3.1, we run into:
...
lto1: error: PTX version (-mptx) needs to be at least 4.2 to support \
  selected -misa (sm_53)^M
mkoffload: fatal error: x86_64-pc-linux-gnu-accel-nvptx-none-gcc returned \
  1 exit status^M
compilation terminated.^M
  ...
FAIL: libgomp.c/declare-variant-3-sm53.c (test for excess errors)
...

Fix this by adding -foffload=-mptx=_ in the libgomp.c/declare-variant-3-sm*.c
test-cases.

Tested on x86_64 with nvptx accelerator.

libgomp/ChangeLog:

2022-02-28  Tom de Vries  <tdevries@suse.de>

* testsuite/libgomp.c/declare-variant-3-sm30.c: Add -foffload=-mptx=_.
* testsuite/libgomp.c/declare-variant-3-sm35.c: Same.
* testsuite/libgomp.c/declare-variant-3-sm53.c: Same.
* testsuite/libgomp.c/declare-variant-3-sm70.c: Same.
* testsuite/libgomp.c/declare-variant-3-sm75.c: Same.
* testsuite/libgomp.c/declare-variant-3-sm80.c: Same.

2 years ago[nvptx, testsuite] Add -mptx=_ in nvptx.exp test-cases
Tom de Vries [Fri, 25 Feb 2022 15:37:59 +0000 (16:37 +0100)]
[nvptx, testsuite] Add -mptx=_ in nvptx.exp test-cases

When running with target board nvptx-none-run/-mptx=3.1, I run into:
...
cc1: error: PTX version (-mptx) needs to be at least 4.2 to support selected \
  -misa (sm_53)^M
compiler exited with status 1
FAIL: gcc.target/nvptx/atomic-store-1.c (test for excess errors)
...

Fix this and similar cases by adding an explicit -mptx=_ setting.

Tested on nvptx.

gcc/testsuite/ChangeLog:

2022-02-28  Tom de Vries  <tdevries@suse.de>

* gcc.target/nvptx/atomic-store-1.c: Add -mptx=_.
* gcc.target/nvptx/atomic-store-2.c: Same.
* gcc.target/nvptx/float16-1.c: Same.
* gcc.target/nvptx/float16-2.c: Same.
* gcc.target/nvptx/float16-3.c: Same.
* gcc.target/nvptx/float16-4.c: Same.
* gcc.target/nvptx/float16-5.c: Same.
* gcc.target/nvptx/float16-6.c: Same.
* gcc.target/nvptx/tanh-1.c: Same.
* gcc.target/nvptx/uniform-simt-1.c: Same.
* gcc.target/nvptx/uniform-simt-3.c: Same.

2 years ago[nvptx] Add -mptx=_
Tom de Vries [Fri, 25 Feb 2022 15:11:23 +0000 (16:11 +0100)]
[nvptx] Add -mptx=_

Add an -mptx=_ value, that indicates the default ptx version.

It can be used to undo an explicit -mptx setting, so this:
...
$ gcc test.c -mptx=3.1 -mptx=_
...
has the same effect as:
...
$ gcc test.c
...

Tested on nvptx.

gcc/ChangeLog:

2022-02-28  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx-opts.h (enum ptx_version): Add
PTX_VERSION_default.
* config/nvptx/nvptx.cc (handle_ptx_version_option): Handle
PTX_VERSION_default.
* config/nvptx/nvptx.opt: Add EnumValue "_" / PTX_VERSION_default.

2 years ago[nvptx, testsuite] Add -misa=sm_30 in nvptx/atomic-store-3.c
Tom de Vries [Fri, 25 Feb 2022 15:26:19 +0000 (16:26 +0100)]
[nvptx, testsuite] Add -misa=sm_30 in nvptx/atomic-store-3.c

When running with target board nvptx-none-run/-misa=sm_70 I run into:
...
FAIL: gcc.target/nvptx/atomic-store-3.c scan-assembler-times st.global.u32 1
FAIL: gcc.target/nvptx/atomic-store-3.c scan-assembler-times st.global.u64 1
...

Fix this by adding an explicit -misa=sm_30 in the test-case.

Tested on nvptx.

gcc/testsuite/ChangeLog:

2022-02-28  Tom de Vries  <tdevries@suse.de>

* gcc.target/nvptx/atomic-store-3.c: Add -misa=sm_30.

2 years ago[nvptx, testsuite] Add -misa=sm_30 in nvptx/uniform-simt-2.c
Tom de Vries [Fri, 25 Feb 2022 15:21:46 +0000 (16:21 +0100)]
[nvptx, testsuite] Add -misa=sm_30 in nvptx/uniform-simt-2.c

When running with target board nvptx-none-run/-misa=sm_53 we run into:
...
cc1: error: PTX version (-mptx) needs to be at least 4.2 to support selected \
  -misa (sm_53)^M
compiler exited with status 1
FAIL: gcc.target/nvptx/uniform-simt-2.c (test for excess errors)
...

Fix this by adding an explicit -misa=sm_30 in the test-case.

Tested on nvptx.

gcc/testsuite/ChangeLog:

2022-02-28  Tom de Vries  <tdevries@suse.de>

* gcc.target/nvptx/uniform-simt-2.c: Add -misa=sm_30.

2 years ago[nvptx, testsuite] Add -misa=sm_35 in nvptx/rotate.c
Tom de Vries [Fri, 25 Feb 2022 15:13:09 +0000 (16:13 +0100)]
[nvptx, testsuite] Add -misa=sm_35 in nvptx/rotate.c

When running with target board nvptx-none-run/-misa=sm_30 we run into:
...
FAIL: gcc.target/nvptx/rotate.c scan-assembler-times shf.l.wrap.b32 1
FAIL: gcc.target/nvptx/rotate.c scan-assembler-times shf.r.wrap.b32 1
FAIL: gcc.target/nvptx/rotate.c scan-assembler-not and.b32
...

Fix this by adding an explicit -misa=sm_35 in the test-case.

Tested on nvptx.

gcc/testsuite/ChangeLog:

2022-02-28  Tom de Vries  <tdevries@suse.de>

* gcc.target/nvptx/rotate.c: Add -misa=sm_35.

2 years agortl-optimization/104686 - speed up conflict iteration
Richard Biener [Fri, 25 Feb 2022 13:19:44 +0000 (14:19 +0100)]
rtl-optimization/104686 - speed up conflict iteration

The following replaces

       /* Skip bits that are zero.  */
       for (; (word & 1) == 0; word >>= 1)
         bit_num++;

idioms in ira-int.h in the attempt to speedup update_conflict_hard_regno_costs
which we're bound on in PR104686.  The trick is to use ctz_hwi here
which should pay off even with dense bitmaps on architectures that
have HW support for this.

For the PR in question this speeds up compile-time from 31s to 24s for
me.

2022-02-25  Richard Biener  <rguenther@suse.de>

PR rtl-optimization/104686
* ira-int.h (minmax_set_iter_cond): Use ctz_hwi to elide loop
skipping bits that are zero.
(ira_object_conflict_iter_cond): Likewise.

2 years agoAVX512F: Add helper enumeration for ternary logic intrinsics.
Hongyu Wang [Fri, 25 Feb 2022 07:09:03 +0000 (15:09 +0800)]
AVX512F: Add helper enumeration for ternary logic intrinsics.

Sync with llvm change in https://reviews.llvm.org/D120307 to
add enumeration and truncate imm to unsigned char, so users could
use ~ on immediates.

gcc/ChangeLog:

* config/i386/avx512fintrin.h (_MM_TERNLOG_ENUM): New enum.
(_mm512_ternarylogic_epi64): Truncate imm to unsigned
char to avoid error when using ~enum as parameter.
(_mm512_mask_ternarylogic_epi64): Likewise.
(_mm512_maskz_ternarylogic_epi64): Likewise.
(_mm512_ternarylogic_epi32): Likewise.
(_mm512_mask_ternarylogic_epi32): Likewise.
(_mm512_maskz_ternarylogic_epi32): Likewise.
* config/i386/avx512vlintrin.h (_mm256_ternarylogic_epi64):
Adjust imm param type to unsigned char.
(_mm256_mask_ternarylogic_epi64): Likewise.
(_mm256_maskz_ternarylogic_epi64): Likewise.
(_mm256_ternarylogic_epi32): Likewise.
(_mm256_mask_ternarylogic_epi32): Likewise.
(_mm256_maskz_ternarylogic_epi32): Likewise.
(_mm_ternarylogic_epi64): Likewise.
(_mm_mask_ternarylogic_epi64): Likewise.
(_mm_maskz_ternarylogic_epi64): Likewise.
(_mm_ternarylogic_epi32): Likewise.
(_mm_mask_ternarylogic_epi32): Likewise.
(_mm_maskz_ternarylogic_epi32): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512f-vpternlogd-1.c: Use new enum.
* gcc.target/i386/avx512f-vpternlogq-1.c: Likewise.
* gcc.target/i386/avx512vl-vpternlogd-1.c: Likewise.
* gcc.target/i386/avx512vl-vpternlogq-1.c: Likewise.
* gcc.target/i386/testimm-10.c: Remove imm check for vpternlog
insns since the imm has been truncated in intrinsic.

2 years agoDaily bump.
GCC Administrator [Mon, 28 Feb 2022 00:16:17 +0000 (00:16 +0000)]
Daily bump.

2 years agoc++: (*(fn))() [PR104618]
Jason Merrill [Fri, 25 Feb 2022 19:26:17 +0000 (15:26 -0400)]
c++: (*(fn))() [PR104618]

The patch for PR90451 deferred marking to the point of actual use; we missed
this one because of the parens.

PR c++/104618

gcc/cp/ChangeLog:

* typeck.cc (cp_build_addr_expr_1): Also
maybe_undo_parenthesized_ref.

gcc/testsuite/ChangeLog:

* g++.dg/overload/paren1.C: New test.

2 years agoFix declarations of _DINFINITY, _SINFINITY and _SQNAN
John David Anglin [Sun, 27 Feb 2022 19:47:25 +0000 (19:47 +0000)]
Fix declarations of _DINFINITY, _SINFINITY and _SQNAN

The declarations of _DINFINITY, _SINFINITY and _SQNAN need to be constant
expressions.

2022-02-27  John David Anglin  <danglin@gcc.gnu.org>

fixincludes/ChangeLog:
* inclhack.def (hpux_math_constexpr): New hack.
* fixincl.x: Regenerate.
* tests/base/math.h: Update.

2 years agoDaily bump.
GCC Administrator [Sun, 27 Feb 2022 00:16:18 +0000 (00:16 +0000)]
Daily bump.

2 years agoDaily bump.
GCC Administrator [Sat, 26 Feb 2022 00:16:28 +0000 (00:16 +0000)]
Daily bump.

2 years agomatch.pd: Further complex simplification fixes [PR104675]
Jakub Jelinek [Fri, 25 Feb 2022 20:25:12 +0000 (21:25 +0100)]
match.pd: Further complex simplification fixes [PR104675]

Mark mentioned in the PR further 2 simplifications that also ICE
with complex types.
For these, eventually (but IMO GCC 13 materials) we could support it
for vector types if it would be uniform vector constants.
Currently integer_pow2p is true only for INTEGER_CSTs and COMPLEX_CSTs
and we can't use bit_and etc. for complex type.

2022-02-25  Jakub Jelinek  <jakub@redhat.com>
    Marc Glisse  <marc.glisse@inria.fr>

PR tree-optimization/104675
* match.pd (t * 2U / 2 -> t & (~0 / 2), t / 2U * 2 -> t & ~1):
Restrict simplifications to INTEGRAL_TYPE_P.

* gcc.dg/pr104675-3.c : New test.

2 years agors6000: Use rs6000_emit_move in movmisalign<mode> expander [PR104681]
Jakub Jelinek [Fri, 25 Feb 2022 17:58:48 +0000 (18:58 +0100)]
rs6000: Use rs6000_emit_move in movmisalign<mode> expander [PR104681]

The following testcase ICEs, because for some strange reason it decides to use
movmisaligntf during expansion where the destination is MEM and source is
CONST_DOUBLE.  For normal mov<mode> expanders the rs6000 backend uses
rs6000_emit_move to ensure that if one operand is a MEM, the other is a REG
and a few other things, but for movmisalign<mode> nothing enforced this.
The middle-end documents that movmisalign<mode> shouldn't fail, so we can't
force that through predicates or condition on the expander.

2022-02-25  Jakub Jelinek  <jakub@redhat.com>

PR target/104681
* config/rs6000/vector.md (movmisalign<mode>): Use rs6000_emit_move.

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

2 years agotestsuite: Move pr104540.C test to g++.target/i386/
Jakub Jelinek [Fri, 25 Feb 2022 17:03:57 +0000 (18:03 +0100)]
testsuite: Move pr104540.C test to g++.target/i386/

Both -mforce-drap and -mstackrealign options are x86 specific.

2022-02-25  Jakub Jelinek  <jakub@redhat.com>

* g++.dg/pr104540.C: Move to ...
* g++.target/i386/pr104540.C: ... here.

2 years agotestsuite: Fix ASAN error [PR104687]
Martin Liska [Fri, 25 Feb 2022 14:08:44 +0000 (15:08 +0100)]
testsuite: Fix ASAN error [PR104687]

PR testsuite/104687

gcc/testsuite/ChangeLog:

* gcc.dg/lto/20090717_0.c: Fix asan error.

2 years agoarc: Fail conditional move expand patterns
Claudiu Zissulescu [Fri, 25 Feb 2022 11:39:22 +0000 (13:39 +0200)]
arc: Fail conditional move expand patterns

If the movcc comparison is not valid it triggers an assert in the
current implementation.  This behavior is not needed as we can FAIL
the movcc expand pattern.

gcc/
* config/arc/arc.cc (gen_compare_reg): Return NULL_RTX if the
comparison is not valid.
* config/arc/arc.md (movsicc): Fail if comparison is not valid.
(movdicc): Likewise.
(movsfcc): Likewise.
(movdfcc): Likewise.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2 years agotree-optimization/103037 - PRE simplifying valueized expressions
Richard Biener [Thu, 24 Feb 2022 12:04:29 +0000 (13:04 +0100)]
tree-optimization/103037 - PRE simplifying valueized expressions

This fixes a long-standing issue in PRE where we track valueized
expressions in our expression sets that we use for PHI translation,
code insertion but also feed into match-and-simplify via
vn_nary_simplify.  But that's not what is expected from vn_nary_simplify
or match-and-simplify which assume we are simplifying with operands
available at the point of the expression so they can use contextual
information on the SSA names like ranges.  While the VN side was
updated to ensure this with the rewrite to RPO VN, thereby removing
all workarounds that nullified such contextual info on all SSA names,
the PRE side still suffers from this.

The following patch tries to apply minimal surgery at this point
and makes PRE track un-valueized expressions in the expression sets
but only for the NARY kind (both NAME and CONSTANT do not suffer
from this issue), leaving the REFERENCE kind alone.  The REFERENCE
kind is important when trying to remove the workarounds still in
place in compute_avail for code hoisting, but that's a separate issue
and we have a working workaround in place.

Doing this comes at the cost of duplicating the VN IL on the PRE side
for NARY and eventually some extra overhead for translated expressions
that is difficult to assess.

2022-02-25  Richard Biener  <rguenther@suse.de>

PR tree-optimization/103037
* tree-ssa-sccvn.h (alloc_vn_nary_op_noinit): Declare.
(vn_nary_length_from_stmt): Likewise.
(init_vn_nary_op_from_stmt): Likewise.
(vn_nary_op_compute_hash): Likewise.
* tree-ssa-sccvn.cc (alloc_vn_nary_op_noinit): Export.
(vn_nary_length_from_stmt): Likewise.
(init_vn_nary_op_from_stmt): Likewise.
(vn_nary_op_compute_hash): Likewise.
* tree-ssa-pre.cc (pre_expr_obstack): New obstack.
(get_or_alloc_expr_for_nary): Pass in the value-id to use,
(re-)compute the hash value and if the expression is not
found allocate it from pre_expr_obstack.
(phi_translate_1): Do not insert the NARY found in the
VN tables but build a PRE expression from the valueized
NARY with the value-id we eventually found.
(find_or_generate_expression): Assert we have an entry
for constant values.
(compute_avail): Insert not valueized expressions into
EXP_GEN using the value-id from the VN tables.
(init_pre): Allocate pre_expr_obstack.
(fini_pre): Free pre_expr_obstack.

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

2 years agoi386: Use a new temp slot kind for splitter to floatdi<mode>2_i387_with_xmm [PR104674]
Jakub Jelinek [Fri, 25 Feb 2022 11:06:52 +0000 (12:06 +0100)]
i386: Use a new temp slot kind for splitter to floatdi<mode>2_i387_with_xmm [PR104674]

As mentioned in the PR, the following testcase is miscompiled for similar
reasons as the already fixed PR78791 - we use SLOT_TEMP slots in various
places during expansion and during expansion we can guarantee that the
lifetime of those temporary slot doesn't overlap.  But the following
splitter uses SLOT_TEMP too and in between expansion and split1 there is
a possibility that something extends the lifetime of SLOT_TEMP created
slots across an instruction that will be split by this splitter.

The following patch fixes it by using a new temp slot kind to make sure
it doesn't reuse a SLOT_TEMP that could be live across the instruction.

2022-02-25  Jakub Jelinek  <jakub@redhat.com>

PR target/104674
* config/i386/i386.h (enum ix86_stack_slot): Add SLOT_FLOATxFDI_387.
* config/i386/i386.md (splitter to floatdi<mode>2_i387_with_xmm): Use
SLOT_FLOATxFDI_387 rather than SLOT_TEMP.

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

2 years agowarning-control: Comment spelling fix
Jakub Jelinek [Fri, 25 Feb 2022 10:00:39 +0000 (11:00 +0100)]
warning-control: Comment spelling fix

This fixes a spelling mistake I found while looking at warning-control
implementation.

2022-02-25  Jakub Jelinek  <jakub@redhat.com>

* warning-control.cc (get_nowarn_spec): Comment spelling fix.

2 years agointernal-fn: Call do_pending_stack_adjust in expand_SPACESHIP [PR104679]
Jakub Jelinek [Fri, 25 Feb 2022 09:56:46 +0000 (10:56 +0100)]
internal-fn: Call do_pending_stack_adjust in expand_SPACESHIP [PR104679]

The following testcase is miscompiled on ia32 at -O2, because
when expand_SPACESHIP is called, we have pending stack adjustment
from the foo call right before it.
Now, ix86_expand_fp_spaceship uses emit_jump_insn several times
but then emit_jump also several times.  While emit_jump_insn doesn't
do do_pending_stack_adjust (), emit_jump does, so we end up with:
...
    8: call [`_Z3foodl'] argc:0x10
      REG_CALL_DECL `_Z3foodl'
    9: r88:DF=[`a']
   10: r89:HI=unspec[cmp(r88:DF,0.0)] 25
   11: flags:CC=unspec[r89:HI] 26
   12: pc={(unordered(flags:CCFP,0))?L27:pc}
      REG_BR_PROB 536868
   66: NOTE_INSN_BASIC_BLOCK 4
   13: pc={(uneq(flags:CCFP,0))?L19:pc}
      REG_BR_PROB 214748364
   67: NOTE_INSN_BASIC_BLOCK 5
   14: pc={(flags:CCFP>0)?L23:pc}
      REG_BR_PROB 536870916
   68: NOTE_INSN_BASIC_BLOCK 6
   15: r86:SI=0xffffffffffffffff
   16: {sp:SI=sp:SI+0x10;clobber flags:CC;}
      REG_ARGS_SIZE 0
   17: pc=L29
   18: barrier
   19: L19:
   69: NOTE_INSN_BASIC_BLOCK 7
...
The sp += 16 pending stuck adjust was emitted in the middle of the
sequence and is effective only for the single case of the 4 possibilities
where .SPACESHIP returns -1, in all other cases the stack isn't adjusted
and so we ICE during dwarf2cfi.

Now, we could either call do_pending_stack_adjust in
ix86_expand_fp_spaceship, or use there calls that actually don't call
do_pending_stack_adjust (but having the stack adjustment across branches is
generally undesirable), or we can call it in expand_SPACESHIP for all
targets (note, just i386 currently implements it).
I chose the generic code because e.g. expand_{addsub,neg,mul}_overflow
in the same file also call do_pending_stack_adjust in internal-fn.cc for the
same reasons, that it is expected that most if not all targets will expand
those through jumps and we don't want all of the targets to need to deal
with that.

2022-02-25  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/104679
* internal-fn.cc (expand_SPACESHIP): Call do_pending_stack_adjust.

* g++.dg/torture/pr104679.C: New test.

2 years agomatch.pd: Don't create BIT_NOT_EXPRs for COMPLEX_TYPE [PR104675]
Jakub Jelinek [Fri, 25 Feb 2022 09:55:17 +0000 (10:55 +0100)]
match.pd: Don't create BIT_NOT_EXPRs for COMPLEX_TYPE [PR104675]

We don't support BIT_{AND,IOR,XOR,NOT}_EXPR on complex types,
&/|/^ are just rejected for them, and ~ is parsed as CONJ_EXPR.
So, we should avoid simplifications which turn valid complex type
expressions into something that will ICE during expansion.

2022-02-25  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/104675
* match.pd (-A - 1 -> ~A, -1 - A -> ~A): Don't simplify for
COMPLEX_TYPE.

* gcc.dg/pr104675-1.c: New test.
* gcc.dg/pr104675-2.c: New test.

2 years agoRevert commit r12-5852-g50e8b0c9bca6cdc57804f860ec5311b641753fbb
Alexandre Oliva [Fri, 25 Feb 2022 01:03:40 +0000 (22:03 -0300)]
Revert commit r12-5852-g50e8b0c9bca6cdc57804f860ec5311b641753fbb

The patch for PR103302 caused PR104121, and extended the live ranges
of LRA reloads.

for gcc/ChangeLog

PR target/104121
PR target/103302
* expr.cc (emit_move_multi_word): Restore clobbers during LRA.

2 years agoAdd testcase from PR103845
Alexandre Oliva [Fri, 25 Feb 2022 01:03:38 +0000 (22:03 -0300)]
Add testcase from PR103845

This problem was already fixed as part of PR104263: the abnormal edge
that remained from before inlining didn't make sense after inlining.
So this patch adds only the testcase.

for  gcc/testsuite/ChangeLog

PR tree-optimization/103845
PR tree-optimization/104263
* gcc.dg/pr103845.c: New.

2 years agoCope with NULL dw_cfi_cfa_loc
Alexandre Oliva [Fri, 25 Feb 2022 01:03:34 +0000 (22:03 -0300)]
Cope with NULL dw_cfi_cfa_loc

In def_cfa_0, we may set the 2nd operand's dw_cfi_cfa_loc to NULL, but
then cfi_oprnd_equal_p calls cfa_equal_p with a NULL dw_cfa_location*.
This patch aranges for us to tolerate NULL dw_cfi_cfa_loc.

for  gcc/ChangeLog

PR middle-end/104540
* dwarf2cfi.cc (cfi_oprnd_equal_p): Cope with NULL
dw_cfi_cfa_loc.

for  gcc/testsuite/ChangeLog

PR middle-end/104540
* g++.dg/pr104540.C: New.

2 years agoCopy EH phi args for throwing hardened compares
Alexandre Oliva [Fri, 25 Feb 2022 01:03:32 +0000 (22:03 -0300)]
Copy EH phi args for throwing hardened compares

When we duplicate a throwing compare for hardening, the EH edge from
the original compare gets duplicated for the inverted compare, but we
failed to adjust any PHI nodes in the EH block.  This patch adds the
needed adjustment, copying the PHI args from those of the preexisting
edge.

for  gcc/ChangeLog

PR tree-optimization/103856
* gimple-harden-conditionals.cc (non_eh_succ_edge): Enable the
eh edge to be requested through an extra parameter.
(pass_harden_compares::execute): Copy PHI args in the EH dest
block for the new EH edge added for the inverted compare.

for  gcc/testsuite/ChangeLog

PR tree-optimization/103856
* g++.dg/pr103856.C: New.

2 years agoDaily bump.
GCC Administrator [Fri, 25 Feb 2022 00:16:20 +0000 (00:16 +0000)]
Daily bump.

2 years agolibstdc++: Fix cast in source_location::current() [PR104602]
Jonathan Wakely [Thu, 24 Feb 2022 21:33:44 +0000 (21:33 +0000)]
libstdc++: Fix cast in source_location::current() [PR104602]

This fixes a problem for Clang, which is going to return a non-void
pointer from __builtin_source_location(). The current definition of
std::source_location::current() converts that to void* and then has to
cast it back again in the body (which makes it invalid in a constant
expression). By using the actual type of the returned pointer, we avoid
the problematic cast for Clang.

libstdc++-v3/ChangeLog:

PR libstdc++/104602
* include/std/source_location (source_location::current): Use
deduced type of __builtin_source_location().

2 years agoFix attr-retain-* tescases for 32-bit PowerPC.
Pat Haugen [Thu, 24 Feb 2022 21:33:42 +0000 (15:33 -0600)]
Fix attr-retain-* tescases for 32-bit PowerPC.

PR testsuite/100407

gcc/testsuite/
* gcc.c-torture/compile/attr-retain-1.c: Add -G0 for 32-bit PowerPC.
* gcc.c-torture/compile/attr-retain-2.c: Likewise.

2 years agoFortran: frontend code for F2018 QUIET specifier to STOP and ERROR STOP
Harald Anlauf [Wed, 23 Feb 2022 22:08:29 +0000 (23:08 +0100)]
Fortran: frontend code for F2018 QUIET specifier to STOP and ERROR STOP

Fortran 2018 allows for a QUIET specifier to the STOP and ERROR STOP
statements.  Whilst the gfortran library code provides support for this
specifier for quite some time, the frontend implementation was missing.

gcc/fortran/ChangeLog:

PR fortran/84519
* dump-parse-tree.cc (show_code_node): Dump QUIET specifier when
present.
* match.cc (gfc_match_stopcode): Implement parsing of F2018 QUIET
specifier.  F2018 stopcodes may have non-default integer kind.
* resolve.cc (gfc_resolve_code): Add checks for QUIET argument.
* trans-stmt.cc (gfc_trans_stop): Pass QUIET specifier to call of
library function.

gcc/testsuite/ChangeLog:

PR fortran/84519
* gfortran.dg/stop_1.f90: New test.
* gfortran.dg/stop_2.f: New test.
* gfortran.dg/stop_3.f90: New test.
* gfortran.dg/stop_4.f90: New test.

2 years agoRISC-V: Document the degree of position independence that medany affords
Palmer Dabbelt [Fri, 14 Jan 2022 02:10:19 +0000 (18:10 -0800)]
RISC-V: Document the degree of position independence that medany affords

The code generated by -mcmodel=medany is defined to be
position-independent, but is not guaranteed to function correctly when
linked into position-independent executables or libraries.  See the
recent discussion at the psABI specification [1] for more details.

It would be better to reject these invalid sequences when linking, but
as pointed out in a recent LD bug [2] there may be some compatibility
issues related to the PCREL_HI20 relocations used to initialize GP.
Given the complexity here it's unlikely we'll be able to reject these
sequences any time soon, so instead just document that these may not
work.

[1]: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/245
[2]: https://sourceware.org/bugzilla/show_bug.cgi?id=28789

gcc/ChangeLog:

* doc/invoke.texi (RISC-V -mcmodel=medany): Document the degree
of position independence that -mcmodel=medany affords.

Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2 years agolibgcc: fix a warning calling find_fde_tail
Xi Ruoyao [Thu, 24 Feb 2022 17:45:57 +0000 (01:45 +0800)]
libgcc: fix a warning calling find_fde_tail

The third parameter of find_fde_tail is an _Unwind_Ptr (which is an
integer type instead of a pointer), but we are passing NULL to it.  This
causes a -Wint-conversion warning.

libgcc/

* unwind-dw2-fde-dip.c (_Unwind_Find_FDE): Call find_fde_tail
with 0 instead of NULL.

2 years agoFix clang warning in pt.cc
Martin Liska [Mon, 21 Feb 2022 16:07:17 +0000 (17:07 +0100)]
Fix clang warning in pt.cc

Fixes:

gcc/cp/pt.cc:13755:23: warning: suggest braces around initialization of subobject [-Wmissing-braces]
  tree_vec_map in = { fn, nullptr };

gcc/cp/ChangeLog:

* pt.cc (defarg_insts_for): Use braces for subobject.

2 years agobpf: do not --enable-gcov for bpf-*-* targets
Jose E. Marchesi [Wed, 23 Feb 2022 19:48:30 +0000 (20:48 +0100)]
bpf: do not --enable-gcov for bpf-*-* targets

This patch changes the build machinery in order to disable the build
of GCOV (both compiler and libgcc) in bpf-*-* targets.  The reason for
this change is that BPF is (currently) too restricted in order to
support the coverage instrumentalization.

Tested in bpf-unknown-none and x86_64-linux-gnu targets.

2022-02-23  Jose E. Marchesi  <jose.marchesi@oracle.com>

gcc/ChangeLog

PR target/104656
* configure.ac: --disable-gcov if targetting bpf-*.
* configure: Regenerate.

libgcc/ChangeLog

PR target/104656
* configure.ac: --disable-gcov if targetting bpf-*.
* configure: Regenerate.

2 years agotree-optimization/104676 - free nb_iterations after loop distribution
Richard Biener [Thu, 24 Feb 2022 13:34:52 +0000 (14:34 +0100)]
tree-optimization/104676 - free nb_iterations after loop distribution

Loop distribution can release SSA names used in nb_iterations, make
sure to release those.

2022-02-24  Richard Biener  <rguenther@suse.de>

PR tree-optimization/104676
* tree-loop-distribution.cc (loop_distribution::execute):
Do a full scev_reset.

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

2 years agosccvn: Fix visit_reference_op_call value numbering of vdefs [PR104601]
Jakub Jelinek [Thu, 24 Feb 2022 14:29:02 +0000 (15:29 +0100)]
sccvn: Fix visit_reference_op_call value numbering of vdefs [PR104601]

The following testcase is miscompiled, because -fipa-pure-const discovers
that bar is const, but when sccvn during fre3 sees
  # .MEM_140 = VDEF <.MEM_96>
  *__pred$__d_43 = _50 (_49);
where _50 value numbers to &bar, it value numbers .MEM_140 to
vuse_ssa_val (gimple_vuse (stmt)).  For const/pure calls that return
a SSA_NAME (or don't have lhs) that is fine, those calls don't store
anything, but if the lhs is present and not an SSA_NAME, value numbering
the vdef to anything but itself means that e.g. walk_non_aliased_vuses
won't consider the call, but the call acts as a store to its lhs.
When it is ignored, sccvn will return whatever has been stored to the
lhs earlier.

I've bootstrapped/regtested an earlier version of this patch, which did the
if (!lhs && gimple_call_lhs (stmt))
  changed |= set_ssa_val_to (vdef, vdef);
part before else if (vnresult->result_vdef), and that regressed
+FAIL: gcc.dg/pr51879-16.c scan-tree-dump-times pre "foo \\\\(" 1
+FAIL: gcc.dg/pr51879-16.c scan-tree-dump-times pre "foo2 \\\\(" 1
so this updated patch uses result_vdef there as before and only otherwise
(which I think must be the const/pure case) decides based on whether the
lhs is non-SSA_NAME.

2022-02-24  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/104601
* tree-ssa-sccvn.cc (visit_reference_op_call): For calls with
non-SSA_NAME lhs value number vdef to itself instead of e.g. the
vuse value number.

* g++.dg/torture/pr104601.C: New test.

2 years ago[libgomp, testsuite, nvptx] Add libgomp.c/declare-variant-3-sm*.c
Tom de Vries [Thu, 24 Feb 2022 10:26:27 +0000 (11:26 +0100)]
[libgomp, testsuite, nvptx] Add libgomp.c/declare-variant-3-sm*.c

Add openmp test-cases that test the omp declare variant construct:
...
  #pragma omp declare variant (f30) match (device={isa("sm_30")})
...
using the available nvptx isas.

Only the one for sm_30 is a dg-do run test-case, the other ones are dg-do
link.

Tested on x86_64 with nvptx accelerator.

libgomp/ChangeLog:

2022-02-24  Tom de Vries  <tdevries@suse.de>

* testsuite/libgomp.c/declare-variant-3-sm30.c: New test.
* testsuite/libgomp.c/declare-variant-3-sm35.c: New test.
* testsuite/libgomp.c/declare-variant-3-sm53.c: New test.
* testsuite/libgomp.c/declare-variant-3-sm70.c: New test.
* testsuite/libgomp.c/declare-variant-3-sm75.c: New test.
* testsuite/libgomp.c/declare-variant-3-sm80.c: New test.
* testsuite/libgomp.c/declare-variant-3.h: New header file.

2 years ago[nvptx] Add missing t-omp-device isas
Tom de Vries [Wed, 23 Feb 2022 14:58:59 +0000 (15:58 +0100)]
[nvptx] Add missing t-omp-device isas

In t-omp-device we list isas that can be used in omp declare variant like so:
...
  #pragma omp declare variant (f30) match (device={isa("sm_30")})
...
and in nvptx_omp_device_kind_arch_isa we handle them.

Update both to reflect the current list of isas.

Tested on x86_64-linux with nvptx accelerator.

gcc/ChangeLog:

2022-02-23  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.cc (nvptx_omp_device_kind_arch_isa): Handle
sm_70, sm_75 and sm_80.
* config/nvptx/t-omp-device: Add sm_53, sm_70, sm_75 and sm_80.

Co-Authored-By: Tobias Burnus <tobias@codesourcery.com>
2 years ago[nvptx] Add shf.{l,r}.wrap insn
Tom de Vries [Wed, 23 Feb 2022 08:39:53 +0000 (09:39 +0100)]
[nvptx] Add shf.{l,r}.wrap insn

Ptx contains funnel shift operations shf.l.wrap and shf.r.wrap that can be
used to implement 32-bit left or right rotate.

Add define_insns rotlsi3 and rotrsi3.

Tested on nvptx.

gcc/ChangeLog:

2022-02-23  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.md (define_insn "rotlsi3", define_insn
"rotrsi3"): New define_insn.

gcc/testsuite/ChangeLog:

2022-02-23  Tom de Vries  <tdevries@suse.de>

* gcc.target/nvptx/rotate-run.c: New test.
* gcc.target/nvptx/rotate.c: New test.

2 years ago[nvptx] Fix dummy location in gen_comment
Tom de Vries [Wed, 23 Feb 2022 08:33:33 +0000 (09:33 +0100)]
[nvptx] Fix dummy location in gen_comment

I committed "[nvptx] Add -mptx-comment", but tested it in combination with the
proposed "[final] Handle compiler-generated asm insn" (
https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590721.html ), so
by itself the commit introduced some regressions:
...
FAIL: gcc.dg/20020426-2.c (internal compiler error: Segmentation fault)
FAIL: gcc.dg/analyzer/zlib-3.c (internal compiler error: Segmentation fault)
FAIL: gcc.dg/pr101223.c (internal compiler error: Segmentation fault)
FAIL: gcc.dg/torture/pr80764.c   -O2  (internal compiler error: Segmentation fault)
...

There are due to cfun->function_start_locus == 0.

Fix these by using DECL_SOURCE_LOCATION (cfun->decl) instead.

Tested on nvptx.

gcc/ChangeLog:

2022-02-23  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.cc (gen_comment): Use
DECL_SOURCE_LOCATION (cfun->decl) instead of cfun->function_start_locus.

2 years agoFix typo in <code>v1ti3.
liuhongt [Wed, 23 Feb 2022 06:32:29 +0000 (14:32 +0800)]
Fix typo in <code>v1ti3.

For evex encoding vp{xor,or,and}, suffix is needed.

Or there would be an error for
vpxor %xmm0, %xmm31, %xmm1

Error: unsupported instruction `vpxor'

gcc/ChangeLog:

* config/i386/sse.md (<code>v1ti3): Add suffix and replace
isa attr of alternative 2 from avx to avx512vl.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512vl-logicsuffix-1.c: New test.

2 years agoDaily bump.
GCC Administrator [Thu, 24 Feb 2022 00:16:22 +0000 (00:16 +0000)]
Daily bump.

2 years agoanalyzer: handle __attribute__((const)) [PR104434]
David Malcolm [Wed, 23 Feb 2022 14:14:58 +0000 (09:14 -0500)]
analyzer: handle __attribute__((const)) [PR104434]

When testing -fanalyzer on openblas-0.3, I noticed slightly over 2000
false positives from -Wanalyzer-malloc-leak on code like this:

        if( LAPACKE_lsame( vect, 'b' ) || LAPACKE_lsame( vect, 'p' ) ) {
            pt_t = (lapack_complex_float*)
                LAPACKE_malloc( sizeof(lapack_complex_float) *
                                ldpt_t * MAX(1,n) );
            [...snip...]
        }

        [...snip lots of code...]

        if( LAPACKE_lsame( vect, 'b' ) || LAPACKE_lsame( vect, 'q' ) ) {
            LAPACKE_free( pt_t );
        }

where LAPACKE_lsame is a char-comparison function implemented in a
different TU.
The analyzer naively considers the execution path where:
  LAPACKE_lsame( vect, 'b' ) || LAPACKE_lsame( vect, 'p' )
is true at the malloc guard, but then false at the free guard, which
is thus a memory leak.

This patch makes -fanalyer respect __attribute__((const)), so that the
analyzer treats such functions as returning the same value when given
the same inputs.

I've filed https://github.com/xianyi/OpenBLAS/issues/3543 suggesting that
LAPACKE_lsame be annotated with __attribute__((const)); with that, and
with this patch, the false positives seem to be fixed.

gcc/analyzer/ChangeLog:
PR analyzer/104434
* analyzer.h (class const_fn_result_svalue): New decl.
* region-model-impl-calls.cc (call_details::get_manager): New.
* region-model-manager.cc
(region_model_manager::get_or_create_const_fn_result_svalue): New.
(region_model_manager::log_stats): Log
m_const_fn_result_values_map.
* region-model.cc (const_fn_p): New.
(maybe_get_const_fn_result): New.
(region_model::on_call_pre): Handle fndecls with
__attribute__((const)) by calling the above rather than making
a conjured_svalue.
* region-model.h (visitor::visit_const_fn_result_svalue): New.
(region_model_manager::get_or_create_const_fn_result_svalue): New
decl.
(region_model_manager::const_fn_result_values_map_t): New typedef.
(region_model_manager::m_const_fn_result_values_map): New field.
(call_details::get_manager): New decl.
* svalue.cc (svalue::cmp_ptr): Handle SK_CONST_FN_RESULT.
(const_fn_result_svalue::dump_to_pp): New.
(const_fn_result_svalue::dump_input): New.
(const_fn_result_svalue::accept): New.
* svalue.h (enum svalue_kind): Add SK_CONST_FN_RESULT.
(svalue::dyn_cast_const_fn_result_svalue): New.
(class const_fn_result_svalue): New.
(is_a_helper <const const_fn_result_svalue *>::test): New.
(template <> struct default_hash_traits<const_fn_result_svalue::key_t>):
New.

gcc/testsuite/ChangeLog:
PR analyzer/104434
* gcc.dg/analyzer/attr-const-1.c: New test.
* gcc.dg/analyzer/attr-const-2.c: New test.
* gcc.dg/analyzer/attr-const-3.c: New test.
* gcc.dg/analyzer/pr104434-const.c: New test.
* gcc.dg/analyzer/pr104434-nonconst.c: New test.
* gcc.dg/analyzer/pr104434.h: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2 years agoc++: Add new test [PR79493]
Marek Polacek [Wed, 23 Feb 2022 17:46:21 +0000 (12:46 -0500)]
c++: Add new test [PR79493]

A nice side effect of r12-1822 was improving the diagnostic
we emit for the following test.

PR c++/79493

gcc/testsuite/ChangeLog:

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

2 years agoc++: Add fixed test [PR70077]
Marek Polacek [Wed, 23 Feb 2022 17:37:43 +0000 (12:37 -0500)]
c++: Add fixed test [PR70077]

Fixed with r10-1280.

PR c++/70077

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/noexcept76.C: New test.

2 years agomiddle-end/104644 - recursion with bswap match.pd pattern
Richard Biener [Wed, 23 Feb 2022 12:47:01 +0000 (13:47 +0100)]
middle-end/104644 - recursion with bswap match.pd pattern

The following patch avoids infinite recursion during generic folding.
The (cmp (bswap @0) INTEGER_CST@1) simplification relies on
(bswap @1) actually being simplified, if it is not simplified, we just
move the bswap from one operand to the other and if @0 is also INTEGER_CST,
we apply the same rule next.

The reason why bswap @1 isn't folded to INTEGER_CST is that the INTEGER_CST
has TREE_OVERFLOW set on it and fold-const-call.cc predicate punts in
such cases:
static inline bool
integer_cst_p (tree t)
{
  return TREE_CODE (t) == INTEGER_CST && !TREE_OVERFLOW (t);
}
The patch uses ! modifier to ensure the bswap is simplified and
extends support to GENERIC by means of requiring !EXPR_P which
is not perfect but a conservative approximation.

2022-02-22  Richard Biener  <rguenther@suse.de>

PR tree-optimization/104644
* doc/match-and-simplify.texi: Amend ! documentation.
* genmatch.cc (expr::gen_transform): Code-generate ! support
for GENERIC.
(parser::parse_expr): Allow ! for GENERIC.
* match.pd (cmp (bswap @0) INTEGER_CST@1): Use ! modifier on
bswap.

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

Co-Authored-by: Jakub Jelinek <jakub@redhat.com>
2 years agoSupport SSA name declarations with pointer type
Richard Biener [Wed, 23 Feb 2022 10:05:50 +0000 (11:05 +0100)]
Support SSA name declarations with pointer type

Currently we fail to parse

  int * _3;

as SSA name and instead get a VAR_DECL because of the way the C
frontends declarator specs work.  That causes havoc if those
supposed SSA names are used in PHIs or in other places where
VAR_DECLs are not allowed.  The following fixes the pointer case
in an ad-hoc way - for more complex type declarators we probably
have to find a way to re-use the C frontend grokdeclarator without
actually creating a VAR_DECL there (or maybe make it create an
SSA name).

Pointers appear too often to be neglected though, thus the following
ad-hoc fix for this.  This also adds verification that we do not
end up with SSA names without definitions as can happen when
reducing a GIMPLE testcase.  Instead of working through segfaults
one-by-one we emit errors for all of those at once now.

2022-02-23  Richard Biener  <rguenther@suse.de>

gcc/c
* gimple-parser.cc (c_parser_parse_gimple_body): Diagnose
SSA names without definition.
(c_parser_gimple_declaration): Handle pointer typed SSA names.

gcc/testsuite/
* gcc.dg/gimplefe-49.c: New testcase.
* gcc.dg/gimplefe-error-13.c: Likewise.

2 years agotree-optimization/101636 - CTOR vectorization ICE
Richard Biener [Wed, 23 Feb 2022 10:15:38 +0000 (11:15 +0100)]
tree-optimization/101636 - CTOR vectorization ICE

The following fixes an ICE when vectorizing the defs of a CTOR
results in a different vector type than expected.  That can happen
with AARCH64 SVE and a fixed vector length as noted in r10-5979
and on x86 with AVX512 mask CTORs and trying to re-vectorize
using SSE as shown in this bug.

The fix is simply to reject the vectorization when it didn't
produce the desired type.

2022-02-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101636
* tree-vect-slp.cc (vect_print_slp_tree): Dump the
vector type of the node.
(vect_slp_analyze_operations): Make sure the CTOR
is vectorized with an expected type.
(vectorize_slp_instance_root_stmt): Revert r10-5979 fix.

* gcc.target/i386/pr101636.c: New testcase.
* c-c++-common/torture/pr101636.c: Likewise.

2 years agowarn-recursion: Don't warn for __builtin_calls in gnu_inline extern inline functions...
Jakub Jelinek [Wed, 23 Feb 2022 11:03:55 +0000 (12:03 +0100)]
warn-recursion: Don't warn for __builtin_calls in gnu_inline extern inline functions [PR104633]

The first two testcases show different ways how e.g. the glibc
_FORTIFY_SOURCE wrappers are implemented, and on Winfinite-recursion-3.c
the new -Winfinite-recursion warning emits a false positive warning.

It is a false positive because when a builtin with 2 names is called
through the __builtin_ name (but not all builtins have a name prefixed
exactly like that) from extern inline function with gnu_inline semantics,
it doesn't mean the compiler will ever attempt to use the user inline
wrapper for the call, the __builtin_ just does what the builtin function
is expected to do and either expands into some compiler generated code,
or if the compiler decides to emit a call it will use an actual definition
of the function, but that is not the extern inline gnu_inline function
which is never emitted out of line.
Compared to that, in Winfinite-recursion-5.c the extern inline gnu_inline
wrapper calls the builtin by the same name as the function's name and in
that case it is infinite recursion, we actuall try to inline the recursive
call and also error because the recursion is infinite during inlining;
without always_inline we wouldn't error but it is still infinite recursion,
the user has no control on how many recursive calls we actually inline.

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

PR c/104633
* gimple-warn-recursion.cc (pass_warn_recursion::find_function_exit):
Don't warn about calls to corresponding builtin from extern inline
gnu_inline wrappers.

* gcc.dg/Winfinite-recursion-3.c: New test.
* gcc.dg/Winfinite-recursion-4.c: New test.
* gcc.dg/Winfinite-recursion-5.c: New test.

2 years agonvptx: Back-end portion of a fix for PR target/104489.
Roger Sayle [Wed, 23 Feb 2022 07:24:50 +0000 (07:24 +0000)]
nvptx: Back-end portion of a fix for PR target/104489.

This one line fix/tweak is the back-end specific change for a fix for
PR target/104489, that allows the ISA for GCC's nvptx backend to be bumped
to sm_53.  The machine-independent middle-end pieces were posted here:
https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590139.html

2022-02-23  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
PR target/104489
* config/nvptx/nvptx.md (*movhf_insn): Add subregs_ok attribute.

2 years agoarm: Fix typo in auto-vectorized MVE comparisons
Christophe Lyon [Wed, 23 Feb 2022 06:44:12 +0000 (06:44 +0000)]
arm: Fix typo in auto-vectorized MVE comparisons

I made a last minute renaming of mve_const_bool_vec_to_hi () into
mve_bool_vec_to_const () and forgot to update the call sites in vfp.md
accordingly.

Committed as obvious.

2022-02-23  Christophe Lyon <christophe.lyon@arm.com>

gcc/
PR target/100757
PR target/101325
* config/arm/vfp.md (thumb2_movhi_vfp, thumb2_movhi_fp16): Fix
typo.

2 years agox86: Update Intel architectures ISA support in documentation.
Cui,Lili [Tue, 22 Feb 2022 02:20:20 +0000 (10:20 +0800)]
x86: Update Intel architectures ISA support in documentation.

Since the ISA supported by Intel architectures in the documentation
are inconsistent with the actual, modify them all.

gcc/Changelog:

* doc/invoke.texi: Update documents for Intel architectures.

2 years agoDaily bump.
GCC Administrator [Wed, 23 Feb 2022 00:16:24 +0000 (00:16 +0000)]
Daily bump.

2 years agolibgo: update README.gcc
Ian Lance Taylor [Tue, 22 Feb 2022 23:04:06 +0000 (15:04 -0800)]
libgo: update README.gcc

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/387514

2 years agors6000: Move g++.dg/ext powerpc tests to g++.target
Paul A. Clarke [Mon, 21 Feb 2022 17:55:01 +0000 (11:55 -0600)]
rs6000: Move g++.dg/ext powerpc tests to g++.target

Also adjust DejaGnu directives, as specifically requiring "powerpc*-*-*" is no
longer required.

2021-02-22  Paul A. Clarke  <pc@us.ibm.com>

gcc/testsuite
* g++.dg/ext/altivec-1.C: Move to g++.target/powerpc, adjust dg
directives.
* g++.dg/ext/altivec-2.C: Likewise.
* g++.dg/ext/altivec-3.C: Likewise.
* g++.dg/ext/altivec-4.C: Likewise.
* g++.dg/ext/altivec-5.C: Likewise.
* g++.dg/ext/altivec-6.C: Likewise.
* g++.dg/ext/altivec-7.C: Likewise.
* g++.dg/ext/altivec-8.C: Likewise.
* g++.dg/ext/altivec-9.C: Likewise.
* g++.dg/ext/altivec-10.C: Likewise.
* g++.dg/ext/altivec-11.C: Likewise.
* g++.dg/ext/altivec-12.C: Likewise.
* g++.dg/ext/altivec-13.C: Likewise.
* g++.dg/ext/altivec-14.C: Likewise.
* g++.dg/ext/altivec-15.C: Likewise.
* g++.dg/ext/altivec-16.C: Likewise.
* g++.dg/ext/altivec-17.C: Likewise.
* g++.dg/ext/altivec-18.C: Likewise.
* g++.dg/ext/altivec-cell-1.C: Likewise.
* g++.dg/ext/altivec-cell-2.C: Likewise.
* g++.dg/ext/altivec-cell-3.C: Likewise.
* g++.dg/ext/altivec-cell-4.C: Likewise.
* g++.dg/ext/altivec-cell-5.C: Likewise.
* g++.dg/ext/altivec-types-1.C: Likewise.
* g++.dg/ext/altivec-types-2.C: Likewise.
* g++.dg/ext/altivec-types-3.C: Likewise.
* g++.dg/ext/altivec-types-4.C: Likewise.
* g++.dg/ext/undef-bool-1.C: Likewise.

2 years agoFortran: skip compile-time shape check if constructor shape is not known
Harald Anlauf [Mon, 21 Feb 2022 21:49:05 +0000 (22:49 +0100)]
Fortran: skip compile-time shape check if constructor shape is not known

gcc/fortran/ChangeLog:

PR fortran/104619
* resolve.cc (resolve_structure_cons): Skip shape check if shape
of constructor cannot be determined at compile time.

gcc/testsuite/ChangeLog:

PR fortran/104619
* gfortran.dg/derived_constructor_comps_7.f90: New test.

2 years agoRestore bootstrap on x86_64-pc-linux-gnu
Roger Sayle [Tue, 22 Feb 2022 18:17:24 +0000 (18:17 +0000)]
Restore bootstrap on x86_64-pc-linux-gnu

This patch resolves the bootstrap failure on x86_64-pc-linux-gnu.

2022-02-22  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* config/i386/i386-expand.cc (ix86_expand_cmpxchg_loop): Restore
bootstrap.

2 years agoGet rid of 'gcc/omp-oacc-neuter-broadcast.cc:oacc_build_component_ref'
Thomas Schwinge [Fri, 30 Jul 2021 14:15:25 +0000 (16:15 +0200)]
Get rid of 'gcc/omp-oacc-neuter-broadcast.cc:oacc_build_component_ref'

Clean-up for commit e2a58ed6dc5293602d0d168475109caa81ad0f0d
"openacc: Middle-end worker-partitioning support":
as of commit 2a3f9f6532bb21d8ab6f16fbe9ee603f6b1405f2
"openacc: Shared memory layout optimisation", we're no longer
running into the vectorizer ICEs for '!ADDR_SPACE_GENERIC_P'.

gcc/
* omp-low.cc (omp_build_component_ref): Move function...
* omp-general.cc (omp_build_component_ref): ... here.  Remove
'static'.
* omp-general.h (omp_build_component_ref): Declare function.
* omp-oacc-neuter-broadcast.cc (oacc_build_component_ref): Remove
function.
(build_receiver_ref, build_sender_ref): Call
'omp_build_component_ref' instead.

2 years agoFurther simplify 'gcc/omp-oacc-neuter-broadcast.cc:record_field_map_t'
Thomas Schwinge [Fri, 13 Aug 2021 19:17:55 +0000 (21:17 +0200)]
Further simplify 'gcc/omp-oacc-neuter-broadcast.cc:record_field_map_t'

Now that I've resolved GCC 'hash_map' issues (a while ago already), we may
further simplify this after commit 049eda8274b7394523238b17ab12c3e2889f253e
"Avoid 'GTY' use for 'gcc/omp-oacc-neuter-broadcast.cc:field_map'": as
'hash_map' Value, directly store 'field_map_t' objects, not pointers to
manually allocated 'field_map_t' objects.

gcc/
* omp-oacc-neuter-broadcast.cc (record_field_map_t): Further
simplify.  Adjust all users.

2 years agoFix OpenACC gang-redundant execution in 'libgomp.oacc-fortran/privatized-ref-2.f90'
Thomas Schwinge [Fri, 21 Jan 2022 13:58:23 +0000 (14:58 +0100)]
Fix OpenACC gang-redundant execution in 'libgomp.oacc-fortran/privatized-ref-2.f90'

This was a latent problem, and this commit here now resolves a regression that
after recent commit a78b1ab1df9ca44acc5638e8f9d0ae2e62bd65ed
"amdgcn: Tune default OpenMP/OpenACC GPU utilization" we had (only) seen on a
GCN offloading '-march=gfx908' system:

    {+WARNING: program timed out.+}
    [-PASS:-]{+FAIL:+} libgomp.oacc-fortran/privatized-ref-2.f90 -DACC_DEVICE_TYPE_radeon=1 -DACC_MEM_SHARED=0 -foffload=amdgcn-amdhsa  -O0  execution test

Same for other optimization levels.

Make sure that we're not executing non-parallelized code in gang-redundant
mode, by putting these parts into their own 'parallel' constructs, which then
default to 'num_gangs(1)'.

libgomp/
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Fix OpenACC
gang-redundant execution.