platform/upstream/gcc.git
3 years agoUse moves to eliminate redundant test/compare instructions
Jeff Law [Sun, 6 Jun 2021 04:44:13 +0000 (00:44 -0400)]
Use moves to eliminate redundant test/compare instructions

gcc/

* config/h8300/movepush.md: Change most _clobber_flags
patterns to instead use <cczn> subst.
(movsi_cczn): New pattern with usable CC cases split out.
(movsi_h8sx_cczn): Likewise.

3 years agoReformat target.def for better parsing.
Martin Liska [Fri, 4 Jun 2021 12:28:11 +0000 (14:28 +0200)]
Reformat target.def for better parsing.

gcc/c-family/ChangeLog:

* c-target.def: Split long lines and replace them
with '\n\'.

gcc/ChangeLog:

* common/common-target.def: Split long lines and replace them
with '\n\'.
* target.def: Likewise.
* doc/tm.texi: Re-generated.

3 years agoFor obj-c stage-final re-use the checksum from the previous stage
Bernd Edlinger [Fri, 28 May 2021 04:54:13 +0000 (06:54 +0200)]
For obj-c stage-final re-use the checksum from the previous stage

This silences the stage compare.

gcc/objc:
2021-06-07  Bernd Edlinger  <bernd.edlinger@softing.com>

* Make-lang.in (cc1obj-checksum.c): For stage-final re-use
the checksum from the previous stage.

gcc/objcp:
2021-06-07  Bernd Edlinger  <bernd.edlinger@softing.com>

* Make-lang.in (cc1objplus-checksum.c): For stage-final re-use
the checksum from the previous stage.

3 years agofold-const: Fix up fold_read_from_vector [PR100887]
Jakub Jelinek [Mon, 7 Jun 2021 07:28:31 +0000 (09:28 +0200)]
fold-const: Fix up fold_read_from_vector [PR100887]

The callers of fold_read_from_vector expect that the index they pass is
an index of an element in the vector and the function does that most of the
time.  But we allow CONSTRUCTORs with VECTOR_TYPE to have VECTOR_TYPE
elements and in that case every CONSTRUCTOR element represents not just one
index (with the exception of V1 vectors), but multiple.
So returning zero vector if i >= CONSTRUCTOR_NELTS or returning some
CONSTRUCTOR_ELT's value might not be what the callers expect.

Fixed by punting if the first element has vector type.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

In theory we could instead recurse (and assert that for CONSTRUCTORs of
vector elements we have always all elements specified like tree-cfg.c
verifies?) after adjusting the index appropriately.

2021-06-07  Jakub Jelinek  <jakub@redhat.com>

PR target/100887
* fold-const.c (fold_read_from_vector): Return NULL if trying to
read from a CONSTRUCTOR with vector type elements.

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

3 years agotree-inline: Fix up __builtin_va_arg_pack handling [PR100898]
Jakub Jelinek [Mon, 7 Jun 2021 07:25:37 +0000 (09:25 +0200)]
tree-inline: Fix up __builtin_va_arg_pack handling [PR100898]

The following testcase ICEs, because gimple_call_arg_ptr (..., 0)
asserts that there is at least one argument, while we were using
it even if we didn't copy anything just to get a pointer from/to which
the zero arguments should be copied.

Fixed by guarding the memcpy calls.  Also, the code was calling
gimple_call_num_args too many times - 5 times instead of 2, so the patch
adds two temporaries for those.

2021-06-07  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/100898
* tree-inline.c (copy_bb): Only use gimple_call_arg_ptr if memcpy
should copy any arguments.  Don't call gimple_call_num_args
on id->call_stmt or call_stmt more than once.

* g++.dg/ext/va-arg-pack-3.C: New test.

3 years agoFix ICE of insn does not satisfy its constraints.
liuhongt [Thu, 3 Jun 2021 08:38:32 +0000 (16:38 +0800)]
Fix ICE of insn does not satisfy its constraints.

evex encoding vpmovzxbx needs both AVX512BW and AVX512VL which means
constraint "Yw" should be used instead of constraint "v".

gcc/ChangeLog:

PR target/100885
* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): Refine
constraints.
(<insn>v4siv4di2): Delete constraints for define_expand.

gcc/testsuite/ChangeLog:

PR target/100885
* g++.target/i386/pr100885.C: New test.

3 years agoFix _mm256_zeroupper by representing the instructions as call_insns in which the...
liuhongt [Tue, 1 Jun 2021 01:09:44 +0000 (09:09 +0800)]
Fix _mm256_zeroupper by representing the instructions as call_insns in which the call has a special vzeroupper ABI.

When __builtin_ia32_vzeroupper is called explicitly, the corresponding
vzeroupper pattern does not carry any CLOBBERS or SETs before LRA,
which leads to incorrect optimization in pass_reload. In order to
solve this problem, this patch refine instructions as call_insns in
which the call has a special vzeroupper ABI.

gcc/ChangeLog:

PR target/82735
* config/i386/i386-expand.c (ix86_expand_builtin): Remove
assignment of cfun->machine->has_explicit_vzeroupper.
* config/i386/i386-features.c
(ix86_add_reg_usage_to_vzerouppers): Delete.
(ix86_add_reg_usage_to_vzeroupper): Ditto.
(rest_of_handle_insert_vzeroupper): Remove
ix86_add_reg_usage_to_vzerouppers, add df_analyze at the end
of the function.
(gate): Remove cfun->machine->has_explicit_vzeroupper.
* config/i386/i386-protos.h (ix86_expand_avx_vzeroupper):
Declared.
* config/i386/i386.c (ix86_insn_callee_abi): New function.
(ix86_initialize_callee_abi): Ditto.
(ix86_expand_avx_vzeroupper): Ditto.
(ix86_hard_regno_call_part_clobbered): Adjust for vzeroupper
ABI.
(TARGET_INSN_CALLEE_ABI): Define as ix86_insn_callee_abi.
(ix86_emit_mode_set): Call ix86_expand_avx_vzeroupper
directly.
* config/i386/i386.h (struct GTY(()) machine_function): Delete
has_explicit_vzeroupper.
* config/i386/i386.md (enum unspec): New member
UNSPEC_CALLEE_ABI.
(ABI_DEFAULT,ABI_VZEROUPPER,ABI_UNKNOWN): New
define_constants for insn callee abi index.
* config/i386/predicates.md (vzeroupper_pattern): Adjust.
* config/i386/sse.md (UNSPECV_VZEROUPPER): Deleted.
(avx_vzeroupper): Call ix86_expand_avx_vzeroupper.
(*avx_vzeroupper): Rename to ..
(avx_vzeroupper_callee_abi): .. this, and adjust pattern as
call_insn which has a special vzeroupper ABI.
(*avx_vzeroupper_1): Deleted.

gcc/testsuite/ChangeLog:

PR target/82735
* gcc.target/i386/pr82735-1.c: New test.
* gcc.target/i386/pr82735-2.c: New test.
* gcc.target/i386/pr82735-3.c: New test.
* gcc.target/i386/pr82735-4.c: New test.
* gcc.target/i386/pr82735-5.c: New test.

3 years agoCALL_INSN may not be a real function call.
liuhongt [Tue, 1 Jun 2021 01:00:57 +0000 (09:00 +0800)]
CALL_INSN may not be a real function call.

Use "used" flag for CALL_INSN to indicate it's a fake call. If it's a
fake call, it won't have its own function stack.

gcc/ChangeLog

PR target/82735
* df-scan.c (df_get_call_refs): When call_insn is a fake call,
it won't use stack pointer reg.
* final.c (leaf_function_p): When call_insn is a fake call, it
won't affect caller as a leaf function.
* reg-stack.c (callee_clobbers_any_stack_reg): New.
(subst_stack_regs): When call_insn doesn't clobber any stack
reg, don't clear the arguments.
* rtl.c (shallow_copy_rtx): Don't clear flag used when orig is
a insn.
* shrink-wrap.c (requires_stack_frame_p): No need for stack
frame for a fake call.
* rtl.h (FAKE_CALL_P): New macro.

3 years agoDaily bump.
GCC Administrator [Mon, 7 Jun 2021 00:16:23 +0000 (00:16 +0000)]
Daily bump.

3 years agoReimplement LEAF_REG_REMAP macro for the SPARC
Eric Botcazou [Sun, 6 Jun 2021 21:54:24 +0000 (23:54 +0200)]
Reimplement LEAF_REG_REMAP macro for the SPARC

The current implementation as an array of chars is indeed a bit awkward
so this reimplements it as a function taking and returning an int.

gcc/
* config/sparc/sparc-protos.h (order_regs_for_local_alloc): Rename
to...
(sparc_order_regs_for_local_alloc): ...this.
(sparc_leaf_reg_remap): Declare.
* config/sparc/sparc.h (ADJUST_REG_ALLOC_ORDER): Adjust.
(LEAF_REG_REMAP): Reimplement as call to sparc_leaf_reg_remap.
* config/sparc/sparc.c (leaf_reg_remap): Delete.
(order_regs_for_local_alloc): Rename to...
(sparc_order_regs_for_local_alloc): ...this.
(sparc_leaf_reg_remap): New function.
(sparc_conditional_register_usage): Do not modify leaf_reg_remap.

3 years agoaix: Use assemble_name to output BSS section name.
David Edelsohn [Wed, 2 Jun 2021 17:32:45 +0000 (13:32 -0400)]
aix: Use assemble_name to output BSS section name.

The code to emit BSS CSECT needs to support user assembler name.

* config/rs6000/rs6000.c (rs6000_xcoff_asm_output_aligned_decl_common):
Use assemble_name to output BSS section name.

3 years agoi386: Clean up constraints.md
Uros Bizjak [Sun, 6 Jun 2021 20:07:05 +0000 (22:07 +0200)]
i386: Clean up constraints.md

No functional changes.

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

gcc/
* config/i386/constraints.md (Bs):
Remove boolean operators from match_test RTX.
(Bw): Ditto.
(L): Ditto.
(M): Use "mode" variable instead of GET_MODE (op) in match_test RTX.
(Wz): Ditto.

3 years agoopenmp: Add testcase for scan directive with nested functions
Jakub Jelinek [Sun, 6 Jun 2021 17:38:41 +0000 (19:38 +0200)]
openmp: Add testcase for scan directive with nested functions

> In convert_nonlocal_omp_clauses, the following clauses are
> missing: OMP_CLAUSE_AFFINITY, OMP_CLAUSE_DEVICE_TYPE,
> OMP_CLAUSE_EXCLUSIVE, OMP_CLAUSE_INCLUSIVE.

OMP_CLAUSE_{EXCLUSIVE,INCLUSIVE} isn't needed, because we don't
walk the clauses at all for GIMPLE_OMP_SCAN.  It would be a bug
if we used the exclusive/inclusive operands after gimplification,
but we apparently don't do that, all we check is whether the
OMP_CLAUSE_KIND of the first clause (all should be the same) is
OMP_CLAUSE_EXCLUSIVE or OMP_CLAUSE_INCLUSIVE, nothing else.

That said, I think we should have a testcase.

2021-06-06  Jakub Jelinek  <jakub@redhat.com>

* gcc.dg/gomp/scan-1.c: New test.

3 years agoopenmp: Call c_omp_adjust_map_clauses even for combined target [PR100902]
Jakub Jelinek [Sun, 6 Jun 2021 17:37:06 +0000 (19:37 +0200)]
openmp: Call c_omp_adjust_map_clauses even for combined target [PR100902]

When looking at in_reduction support for target, I've noticed that
c_omp_adjust_map_clauses is not called for the combined target case.

The following patch fixes it.

Unfortunately, there are other issues.

One is (also mentioned in the PR) that currently the pointer attachment
stuff seems to be clause ordering dependent (the standard says that clause
ordering on the same construct does not matter), the baz and qux cases
in the PR are rejected while when swapped it is accepted.
Note, the order of clauses in GCC really is treated as insignificant
initially and only later on the compiler can adjust the ordering (e.g. when
we sort map clauses based on what they refer to etc.) and in particular,
clauses from parsing is reverse of the order in user code, while
c_omp_split_clauses performed for combined/composite constructs typically
reverses that ordering, i.e. makes it follow the user code ordering.

And another one is I'm slightly afraid c_omp_adjust_map_clauses might
misbehave in templates, though haven't tried to verify it with testcases.
When processing_template_decl, the non-dependent clauses will be handled
usually the same as when not in a template, but dependent clauses aren't
processed or only limited processing is done there, and rest is deferred
till later.  From quick skimming of c_omp_adjust_map_clauses, it seems
it might not be very happy about non-processed map clauses that might
still have the TREE_LIST representation of array sections, or might
not have finalized decls or base decls etc.
So, for this I wonder if cp_parser_omp_target (and other cp/parser.c
callers of c_omp_adjust_map_clauses) shouldn't call it only
if (!processing_template_decl) - perhaps you could add
cp_omp_adjust_map_clauses wrapper that would be
if (!processing_template_decl)
  c_omp_adjust_map_clauses (...);
- and call c_omp_adjust_map_clauses from within pt.c after the clauses
are tsubsted and finish_omp_clauses is called again.

2021-06-06  Jakub Jelinek  <jakub@redhat.com>

PR c/100902
* c-parser.c (c_parser_omp_target): Call c_omp_adjust_map_clauses
even when target is combined with other constructs.

* parser.c (cp_parser_omp_target): Call c_omp_adjust_map_clauses
even when target is combined with other constructs.

* c-c++-common/gomp/pr100902-1.c: New test.

3 years agodocs: Add missing @headitem for tables.
Martin Liska [Sun, 6 Jun 2021 15:29:44 +0000 (17:29 +0200)]
docs: Add missing @headitem for tables.

gcc/ChangeLog:

* doc/extend.texi: Add missing @headitem.
* doc/invoke.texi: Likewise.
* doc/objc.texi: Likewise.

3 years agogenhooks: remove dead code
Martin Liska [Fri, 4 Jun 2021 11:12:02 +0000 (13:12 +0200)]
genhooks: remove dead code

gcc/ChangeLog:

* genhooks.c (emit_findices): Remove unused function.
(emit_documentation): Do not call emit_findices
and do not search for @Fcode directives.

3 years agodocs: remove extra character.
Martin Liska [Sun, 6 Jun 2021 14:56:18 +0000 (16:56 +0200)]
docs: remove extra character.

gcc/ChangeLog:

* doc/invoke.texi: Remove extra character.

3 years agoFix thinko in new warning on type punning for storage order purposes
Eric Botcazou [Sun, 6 Jun 2021 09:37:45 +0000 (11:37 +0200)]
Fix thinko in new warning on type punning for storage order purposes

In C, unlike in Ada, the storage order of arrays is that of their component
type, so you need to look at it when deciding to warn.  And the PR complains
about a bogus warning on the assignment of a pointer returned by alloca or
malloc, so this also fixes that.

gcc/c
PR c/100920
* c-decl.c (finish_struct): Fix thinko in previous change.
* c-typeck.c (convert_for_assignment): Do not warn on pointer
assignment and initialization for storage order purposes if the
RHS is a call to a DECL_IS_MALLOC function.
gcc/testsuite/
* gcc.dg/sso-14.c: New test.

3 years agoDaily bump.
GCC Administrator [Sun, 6 Jun 2021 00:16:22 +0000 (00:16 +0000)]
Daily bump.

3 years agoUse libiberty snprintf and vsnprintf on hppa*-*-hpux*.
John David Anglin [Sat, 5 Jun 2021 15:48:04 +0000 (15:48 +0000)]
Use libiberty snprintf and vsnprintf on hppa*-*-hpux*.

libiberty/ChangeLog:

PR target/100734
* configure.ac: Use libiberty snprintf and vsnprintf on
hppa*-*-hpux*.
* configure: Regenerate.

3 years agoFix maintainers-verify.sh
Jeff Law [Sat, 5 Jun 2021 13:53:31 +0000 (09:53 -0400)]
Fix maintainers-verify.sh

* MAINTAINERS: Adjust my entry in the DCO section so that it does
not trigger testsuite failures.

3 years agosh: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:14 +0000 (00:21 -0500)]
sh: Update unexpected empty split condition

gcc/ChangeLog:

* config/sh/sh.md (doloop_end_split): Fix empty split condition.

3 years agosparc: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:18 +0000 (00:21 -0500)]
sparc: Update unexpected empty split condition

gcc/ChangeLog:

* config/sparc/sparc.md (*snedi<W:mode>_zero_vis3,
*neg_snedi<W:mode>_zero_subxc, *plus_snedi<W:mode>_zero,
*plus_plus_snedi<W:mode>_zero, *minus_snedi<W:mode>_zero,
*minus_minus_snedi<W:mode>_zero): Fix empty split condition.

3 years agoor1k: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:11 +0000 (00:21 -0500)]
or1k: Update unexpected empty split condition

gcc/ChangeLog:

* config/or1k/or1k.md (*movdi): Fix empty split condition.

3 years agomips: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:07 +0000 (00:21 -0500)]
mips: Update unexpected empty split condition

gcc/ChangeLog:

* config/mips/mips.md (<anonymous>, bswapsi2, bswapdi2): Fix empty
split condition.

3 years agom68k: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:04 +0000 (00:21 -0500)]
m68k: Update unexpected empty split condition

gcc/ChangeLog:

* config/m68k/m68k.md (*zero_extend_inc, *zero_extend_dec,
*zero_extendsidi2): Fix empty split condition.

3 years agoFortran: Fix some issues with pointers to character.
José Rui Faustino de Sousa [Sat, 5 Jun 2021 11:12:50 +0000 (11:12 +0000)]
Fortran: Fix some issues with pointers to character.

gcc/fortran/ChangeLog:

PR fortran/100120
PR fortran/100816
PR fortran/100818
PR fortran/100819
PR fortran/100821
* trans-array.c (gfc_get_array_span): rework the way character
array "span" was calculated.
(gfc_conv_expr_descriptor): improve handling of character sections
and unlimited polymorphic objects.
* trans-expr.c (gfc_get_character_len): new function to calculate
character string length.
(gfc_get_character_len_in_bytes): new function to calculate
character string length in bytes.
(gfc_conv_scalar_to_descriptor): add call to set the "span".
(gfc_trans_pointer_assignment): set "_len" and antecipate the
initialization of the deferred character length hidden argument.
* trans-intrinsic.c (gfc_conv_associated): set "force_no_tmp" to
avoid the creation of a temporary.
* trans-types.c (gfc_get_dtype_rank_type): rework type detection
so that unlimited polymorphic objects get proper type infomation,
also important for bind(c).
(gfc_get_dtype): add argument to pass the rank if necessary.
(gfc_get_array_type_bounds): cosmetic change to have character
arrays called character instead of unknown.
* trans-types.h (gfc_get_dtype): modify prototype.
* trans.c (get_array_span): rework the way character array "span"
was calculated.
* trans.h (gfc_get_character_len): new prototype.
(gfc_get_character_len_in_bytes): new prototype.
Add "unlimited_polymorphic" flag to "gfc_se" type to signal when
expression carries an unlimited polymorphic object.

libgfortran/ChangeLog:

PR fortran/100120
* intrinsics/associated.c (associated): have associated verify if
the "span" matches insted of the "elem_len".
* libgfortran.h (GFC_DESCRIPTOR_SPAN): add macro to retrive the
descriptor "span".

gcc/testsuite/ChangeLog:

PR fortran/100120
* gfortran.dg/PR100120.f90: New test.
PR fortran/100816
PR fortran/100818
PR fortran/100819
PR fortran/100821
* gfortran.dg/character_workout_1.f90: New test.
* gfortran.dg/character_workout_4.f90: New test.

3 years agolibstdc++: Fix return type of ranges::ssize for 128-bit integer [PR 100824]
Jonathan Wakely [Sat, 5 Jun 2021 10:42:01 +0000 (11:42 +0100)]
libstdc++: Fix return type of ranges::ssize for 128-bit integer [PR 100824]

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

PR libstdc++/100824
* include/bits/ranges_base.h (_SSize): Return signed type.
* testsuite/std/ranges/access/ssize.cc: Check with __int128.

3 years ago * MAINTAINERS: Add myself to DCO section with both email addresses.
Jeff Law [Sat, 5 Jun 2021 05:35:02 +0000 (01:35 -0400)]
* MAINTAINERS: Add myself to DCO section with both email addresses.

3 years agoFix split conditions in H8/300 port
Jeff Law [Sat, 5 Jun 2021 05:27:02 +0000 (01:27 -0400)]
Fix split conditions in H8/300 port

gcc/

* config/h8300/addsub.md: Fix split condition in define_insn_and_split
patterns.
* config/h8300/bitfield.md: Likewise.
* config/h8300/combiner.md: Likewise.
* config/h8300/divmod.md: Likewise.
* config/h8300/extensions.md: Likewise.
* config/h8300/jumpcall.md: Likewise.
* config/h8300/movepush.md: Likewise.
* config/h8300/multiply.md: Likewise.
* config/h8300/other.md: Likewise.
* config/h8300/shiftrotate.md: Likewise.
* config/h8300/logical.md: Likewise.  Fix split pattern to use
code iterator that somehow slipped through.

3 years agoDaily bump.
GCC Administrator [Sat, 5 Jun 2021 00:16:29 +0000 (00:16 +0000)]
Daily bump.

3 years agolibstdc++: Implement LWG 3403 for std::ranges::ssize
Jonathan Wakely [Fri, 4 Jun 2021 19:28:04 +0000 (20:28 +0100)]
libstdc++: Implement LWG 3403 for std::ranges::ssize

I already changed the constraints for ranges::ssize to use ranges::size,
this implements the rest of LWG 3403, so that the returned type is the
signed type corresponding to the result of ranges::size.

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

* include/bits/ranges_base.h (_SSize): Return the result of
ranges::size converted to the wider of make-signed-like-t<S> and
ptrdiff_t, rather than the ranges different type.
* testsuite/std/ranges/access/ssize.cc: Adjust expected result
for an iota_view that uses an integer class type for its
difference_type.

3 years agolibstdc++: Fix helper concept for ranges::data [PR 100824]
Jonathan Wakely [Fri, 4 Jun 2021 19:25:39 +0000 (20:25 +0100)]
libstdc++: Fix helper concept for ranges::data [PR 100824]

We need to decay the result of t.data() before checking if it's a
pointer.

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

PR libstdc++/100824
* include/bits/ranges_base.h (__member_data): Use __decay_copy.
* testsuite/std/ranges/access/data.cc: Add testcase from PR.

3 years agoOpenMP: Handle bind clause in tree-nested.c [PR100905]
Tobias Burnus [Fri, 4 Jun 2021 18:52:33 +0000 (20:52 +0200)]
OpenMP: Handle bind clause in tree-nested.c [PR100905]

PR middle-end/100905

gcc/ChangeLog:

* tree-nested.c (convert_nonlocal_omp_clauses,
convert_local_omp_clauses): Handle OMP_CLAUSE_BIND.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/loop-3.f90: New test.

3 years agod: Fix ICE in gimplify_var_or_parm_decl, at gimplify.c:2755 (PR100882)
Iain Buclaw [Fri, 4 Jun 2021 17:38:26 +0000 (19:38 +0200)]
d: Fix ICE in gimplify_var_or_parm_decl, at gimplify.c:2755 (PR100882)

Constructor calls for temporaries were reusing the TARGET_EXPR_SLOT of a
TARGET_EXPR for an assignment, which later got passed to `build_assign',
which stripped away the outer TARGET_EXPR, leaving a reference to a lone
temporary with no declaration.

This stripping away of the TARGET_EXPR also discarded any cleanups that
may have been assigned to the expression as well.

So now the reuse of TARGET_EXPR_SLOT has been removed, and
`build_assign' now constructs assignments inside the TARGET_EXPR_INITIAL
slot.  This has also been extended to `return_expr', to deal with
possibility of a TARGET_EXPR being returned.

gcc/d/ChangeLog:

PR d/100882
* d-codegen.cc (build_assign): Construct initializations inside
TARGET_EXPR_INITIAL.
(compound_expr): Remove intermediate expressions that have no
side-effects.
(return_expr): Construct returns inside TARGET_EXPR_INITIAL.
* expr.cc (ExprVisitor::visit (CallExp *)): Remove useless assignment
to TARGET_EXPR_SLOT.

gcc/testsuite/ChangeLog:

PR d/100882
* gdc.dg/pr100882a.d: New test.
* gdc.dg/pr100882b.d: New test.
* gdc.dg/pr100882c.d: New test.
* gdc.dg/torture/pr100882.d: New test.

3 years agoc++: top-level cv-quals on type of NTTP [PR100893]
Patrick Palka [Fri, 4 Jun 2021 18:08:26 +0000 (14:08 -0400)]
c++: top-level cv-quals on type of NTTP [PR100893]

Here, we're rejecting the specialization of g<T,F> with T=A, F=&f in
param4.C below due to a spurious constness mismatch between the type of
the template argument &f and the substituted type of the parm F (the
latter has a top-level const).  Note that this mismatch doesn't occur
with object pointers because in that case a call to
perform_qualification_conversions from convert_nontype_argument
implicitly adds a top-level const to the argument (via a cast) to match.

This however seems to be a manifestation of a more general conformance
issue: we're not dropping top-level cv-quals on the substituted
type of an NTTP as per [temp.param]/6 (we only do so at parse time in
process_template_parm).  So this patch makes convert_template_argument
drop top-level cv-quals accordingly.

PR c++/100893

gcc/cp/ChangeLog:

* pt.c (convert_template_argument): Strip top-level cv-quals
on the substituted type of a non-type template parameter.

gcc/testsuite/ChangeLog:

* g++.dg/template/param4.C: New test.
* g++.dg/template/param5.C: New test.
* g++.dg/cpp1z/nontype-auto19.C: New test.
* g++.dg/cpp2a/concepts-decltype.C: Don't expect that the
deduced type of a decltype(auto) NTTP has top-level cv-quals.

3 years agoc++: tsubst_function_decl and excess arg levels [PR100102]
Patrick Palka [Fri, 4 Jun 2021 17:46:53 +0000 (13:46 -0400)]
c++: tsubst_function_decl and excess arg levels [PR100102]

Here, when instantiating the dependent alias template
duration::__is_harmonic with args={{T,U},{int}}, we find ourselves
substituting the function decl _S_gcd.  Since we have more arg levels
than _S_gcd has parm levels, an old special case in tsubst_function_decl
causes us to unwantedly reduce args to its innermost level, yielding
args={int}, which leads to a nonsensical substitution into the decl
context and eventually a crash.

The comment for this special case refers to three examples for which we
ought to see more arg levels than parm levels here, but none of the
examples actually demonstrate this.  In the first example, when
defining S<int>::f(U) parms_depth is 2 and args_depth is 1, and
later when instantiating say S<int>::f<char> both depths are 2.  In the
second example, when substituting the template friend declaration
parms_depth is 2 and args_depth is 1, and later when instantiating f
both depths are 1.  Finally, the third example is invalid since we can't
specialize a member template of an unspecialized class template like
that.

Given that this reduction code seems no longer relevant for its
documented purpose and that it causes problems as in the PR, this patch
just removes it.  Note that as far as bootstrap/regtest is concerned,
this code is dead; the below two tests would be the first to reach it.

PR c++/100102

gcc/cp/ChangeLog:

* pt.c (tsubst_function_decl): Remove old code for reducing
args when it has excess levels.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/alias-decl-72.C: New test.
* g++.dg/cpp0x/alias-decl-72a.C: New test.

3 years agoFortran - ICE in inline_matmul_assign
Harald Anlauf [Fri, 4 Jun 2021 17:23:48 +0000 (19:23 +0200)]
Fortran - ICE in inline_matmul_assign

Restrict inlining of matmul to those cases where assignment to the
result array does not need special treatment.

gcc/fortran/ChangeLog:

PR fortran/99839
* frontend-passes.c (inline_matmul_assign): Do not inline matmul
if the assignment to the resulting array if it is not of canonical
type (real/integer/complex/logical).

gcc/testsuite/ChangeLog:

PR fortran/99839
* gfortran.dg/inline_matmul_25.f90: New test.

3 years agoPR c/100783 - ICE on -Wnonnull and erroneous type
Martin Sebor [Fri, 4 Jun 2021 17:21:51 +0000 (11:21 -0600)]
PR c/100783 - ICE on -Wnonnull and erroneous type

gcc/c-family/ChangeLog:

PR c/100783
* c-attribs.c (positional_argument): Bail on erroneous types.

gcc/c/ChangeLog:

PR c/100783
* c-objc-common.c (print_type): Handle erroneous types.

gcc/testsuite/ChangeLog:

PR c/100783
* gcc.dg/nonnull-6.c: New test.

3 years agoFortran/OpenMP: Fix -fdump-parse-tree for 'omp loop'
Tobias Burnus [Fri, 4 Jun 2021 16:51:35 +0000 (18:51 +0200)]
Fortran/OpenMP: Fix -fdump-parse-tree for 'omp loop'

gcc/fortran/ChangeLog
* dump-parse-tree.c (show_code_node): Handle
EXEC_OMP_(TARGET_)(,PARALLEL_,TEAMS_)LOOP.

3 years agoPR middle-end/100732 - ICE on sprintf %s with integer argument
Martin Sebor [Fri, 4 Jun 2021 16:49:06 +0000 (10:49 -0600)]
PR middle-end/100732 - ICE on sprintf %s with integer argument

gcc/ChangeLog:

PR middle-end/100732
* gimple-fold.c (gimple_fold_builtin_sprintf): Avoid folding calls
with either source or destination argument of invalid type.
* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Avoid checking
calls with arguments of invalid type.

gcc/testsuite/ChangeLog:

PR middle-end/100732
* gcc.dg/tree-ssa/builtin-snprintf-11.c: New test.
* gcc.dg/tree-ssa/builtin-snprintf-12.c: New test.
* gcc.dg/tree-ssa/builtin-sprintf-28.c: New test.
* gcc.dg/tree-ssa/builtin-sprintf-29.c: New test.
* gcc.dg/uninit-pr100732.c: New test.

3 years agoPR c/100719 - missing -Wvla-parameter on a mismatch in second parameter
Martin Sebor [Fri, 4 Jun 2021 16:35:27 +0000 (10:35 -0600)]
PR c/100719 - missing -Wvla-parameter on a mismatch in second parameter

gcc/ChangeLog:

* attribs.c (init_attr_rdwr_indices): Use VLA bounds in the expected
order.
(attr_access::vla_bounds): Also handle VLA bounds.

gcc/c-family/ChangeLog:

* c-warn.c (warn_parm_array_mismatch): Check TREE_PURPOSE to test
for element presence.

gcc/testsuite/ChangeLog:

* gcc.dg/Wvla-parameter-10.c: New test.
* gcc.dg/Wvla-parameter-11.c: New test.

3 years agoi386: Convert a couple of predicates to use match_code RTXes.
Uros Bizjak [Fri, 4 Jun 2021 15:51:05 +0000 (17:51 +0200)]
i386: Convert a couple of predicates to use match_code RTXes.

No functional changes.

2021-06-04  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
* config/i386/predicates.md (GOT_memory_operand):
Implement using match_code RTXes.
(GOT32_symbol_operand): Ditto.

3 years agoFortran: Fix OpenMP/OpenACC continue-line parsing
Tobias Burnus [Fri, 4 Jun 2021 15:43:59 +0000 (17:43 +0200)]
Fortran: Fix OpenMP/OpenACC continue-line parsing

gcc/fortran/ChangeLog:

* scanner.c (skip_fixed_omp_sentinel): Set openacc_flag if
this is not an (OpenMP) continuation line.
(skip_fixed_oacc_sentinel): Likewise for openmp_flag and OpenACC.
(gfc_next_char_literal): gfc_error_now to force error for mixed OMP/ACC
continuation once per location and return '\n'.

gcc/testsuite/ChangeLog:

* gfortran.dg/goacc/omp-fixed.f: Re-add test item changed in previous
commit in addition - add more dg-errors and '... end ...' due to changed
parsing.
* gfortran.dg/goacc/omp.f95: Likewise.
* gfortran.dg/goacc-gomp/mixed-1.f: New test.

3 years agoi386: Add init pattern for V2HI vectors [PR100637]
Uros Bizjak [Fri, 4 Jun 2021 15:37:15 +0000 (17:37 +0200)]
i386: Add init pattern for V2HI vectors [PR100637]

2021-06-03  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100637
* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
Handle V2HI mode.
(ix86_expand_vector_init_general): Ditto.
Use SImode instead of word_mode for logic operations
when GET_MODE_SIZE (mode) < UNITS_PER_WORD.
(expand_vec_perm_even_odd_1): Assert that V2HI mode should be
implemented by expand_vec_perm_1.
(expand_vec_perm_broadcast_1): Assert that V2HI and V4HI modes
should be implemented using standard shuffle patterns.
(ix86_vectorize_vec_perm_const): Handle V2HImode.  Add V4HI and
V2HI modes to modes, implementable with shuffle for one operand.
* config/i386/mmx.md (*punpckwd): New insn_and_split pattern.
(*pshufw_1): New insn pattern.
(*vec_dupv2hi): Ditto.
(vec_initv2hihi): New expander.

gcc/testsuite/

PR target/100637
* gcc.dg/vect/slp-perm-9.c (dg-final): Adjust dumps for vect32 targets.

3 years agolibstdc++: Fix value categories used by ranges access CPOs [PR 100824]
Jonathan Wakely [Fri, 4 Jun 2021 14:59:38 +0000 (15:59 +0100)]
libstdc++: Fix value categories used by ranges access CPOs [PR 100824]

The implementation of P2091R0 was incomplete, so that some range access
CPOs used perfect forwarding where they should not. This fixes it by
consistently operating on lvalues.

Some additional changes that are not necessary to fix the bug:

Modify the __as_const helper to simplify its usage. Instead of deducing
the value category from its argument, and requiring callers to forward
the argument as the correct category, add a non-deduced template
parameter which is used for the value category and accept the argument
as an lvalue. This means callers say __as_const<T>(t) instead of
__as_const(std::forward<T>(t)).

Always use an lvalue reference type as the template argument for the
_S_noexcept helpers, so that we only instantiate one specialization for
lvalues and rvalues of the same type.

Move some helper concepts and functions from namespace std::__detail
to ranges::__cust_access, to be consistent with the ranges::begin CPO.
This ensures that the __adl_begin concept and the _Begin::operator()
function are in the same namespace, so unqualified lookup is consistent
and the poison pills for begin are visible to both.

Simplified static assertions for arrays, because the expression a+0 is
already ill-formed for an array of incomplete type.

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

PR libstdc++/100824
* include/bits/iterator_concepts.h (__detail::__decay_copy)
(__detail::__member_begin, __detail::__adl_begin): Move to
namespace ranges::__cust_access.
(__detail::__ranges_begin): Likewise, and rename to __begin.
Remove redundant static assertion.
* include/bits/ranges_base.h (_Begin, _End, _RBegin, _REnd):
Use lvalue in noexcept specifier.
(__as_const): Add non-deduced parameter for value category.
(_CBegin, _CEnd, _CRBegin, _CREnd, _CData): Adjust uses of
__as_const.
(__member_size, __adl_size, __member_empty, __size0_empty):
(__eq_iter_empty, __adl_data): Use lvalue objects in
requirements.
(__sentinel_size): Likewise. Add check for conversion to
unsigned-like.
(__member_data): Allow non-lvalue types to satisfy the concept,
but use lvalue object in requirements.
(_Size, _SSize): Remove forwarding to always use an lvalue.
(_Data): Likewise. Add static assertion for arrays.
* testsuite/std/ranges/access/cdata.cc: Adjust expected
behaviour for rvalues. Add negative tests for ill-formed
expressions.
* testsuite/std/ranges/access/data.cc: Likewise.
* testsuite/std/ranges/access/empty.cc: Adjust expected
behaviour for rvalues.
* testsuite/std/ranges/access/size.cc: Likewise.

3 years agolibstdc++: Optimize std::any_cast by replacing indirect call
Tim Adye [Fri, 4 Jun 2021 14:59:38 +0000 (15:59 +0100)]
libstdc++: Optimize std::any_cast by replacing indirect call

This significantly improves the performance of std::any_cast, by
avoiding an indirect call to the _S_manage function through a function
pointer. Before we make that indirect call we've already established
that the contained value has the expected type, which means we also know
the manager type, and so can call one of its members directly.

We also know the precise type in the any::emplace functions, because
we've just constructed that type, so we can use the new member there
too. That doesn't seem to affect performance, but we might as well use
the new _S_access function anyway.

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

* include/std/any (any::_Manager::_S_access): New static
function to access the contained value.
(any::emplace, __any_caster): Use _S_access member of the
manager type.

3 years agolibstdc++: Add feature test macro for heterogeneous lookup in unordered containers
Jonathan Wakely [Fri, 4 Jun 2021 14:59:37 +0000 (15:59 +0100)]
libstdc++: Add feature test macro for heterogeneous lookup in unordered containers

Also update the C++20 status docs.

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

* doc/xml/manual/status_cxx2020.xml:
* doc/html/*: Regenerate.
* include/bits/hashtable.h (__cpp_lib_generic_unordered_lookup):
Define.
* include/std/version (__cpp_lib_generic_unordered_lookup):
Define.
* testsuite/23_containers/unordered_map/operations/1.cc: Check
feature test macro.
* testsuite/23_containers/unordered_set/operations/1.cc:
Likewise.

3 years agogfortran.dg/gomp/pr99928-5.f90: Use proper iteration var
Tobias Burnus [Fri, 4 Jun 2021 11:26:40 +0000 (13:26 +0200)]
gfortran.dg/gomp/pr99928-5.f90: Use proper iteration var

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/pr99928-5.f90: Really use the
proper iteration variable.

3 years agogfortran.dg/gomp/pr99928-*.f90: Use implicit none, remove one xfail
Tobias Burnus [Fri, 4 Jun 2021 11:10:57 +0000 (13:10 +0200)]
gfortran.dg/gomp/pr99928-*.f90: Use implicit none, remove one xfail

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/pr99928-1.f90: Add 'implicit none'.
* gfortran.dg/gomp/pr99928-11.f90: Likewise.
* gfortran.dg/gomp/pr99928-4.f90: Likewise.
* gfortran.dg/gomp/pr99928-6.f90: Likewise.
* gfortran.dg/gomp/pr99928-8.f90: Likewise.
* gfortran.dg/gomp/pr99928-2.f90: Likewise. Add missing decl.
* gfortran.dg/gomp/pr99928-5.f90: Add implicit none;
fix loop-variable and remove xfail.

3 years agoarm: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:20:49 +0000 (00:20 -0500)]
arm: Update unexpected empty split condition

gcc/ChangeLog:

* config/arm/vfp.md (no_literal_pool_df_immediate,
no_literal_pool_sf_immediate): Fix empty split condition.

3 years agoi386: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:00 +0000 (00:21 -0500)]
i386: Update unexpected empty split condition

gcc/ChangeLog:

* config/i386/i386.md (*load_tp_x32_zext, *add_tp_x32_zext,
*tls_dynamic_gnu2_combine_32): Fix empty split condition.
* config/i386/sse.md (*<sse2_avx2>_pmovmskb_lt,
*<sse2_avx2>_pmovmskb_zext_lt, *sse2_pmovmskb_ext_lt,
*<sse4_1_avx2>_pblendvb_lt): Likewise.

3 years agoFortran/OpenMP: omp loop's BIND clause - fix typo
Tobias Burnus [Fri, 4 Jun 2021 10:14:14 +0000 (12:14 +0200)]
Fortran/OpenMP: omp loop's BIND clause - fix typo

Missed a 'git add' after fixing this typo pointed out during review.

PR middle-end/99928

gcc/fortran/ChangeLog:

* openmp.c (gfc_match_omp_clauses): Fix typo in error message.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/loop-2.f90: Update for typo fix.

3 years agoFortran/OpenMP: Add omp loop [PR99928]
Tobias Burnus [Fri, 4 Jun 2021 10:06:59 +0000 (12:06 +0200)]
Fortran/OpenMP: Add omp loop [PR99928]

PR middle-end/99928

gcc/fortran/ChangeLog:

* dump-parse-tree.c (show_omp_clauses): Handle bind clause.
(show_omp_node): Handle loop directive.
* frontend-passes.c (gfc_code_walker): Likewise.
* gfortran.h (enum gfc_statement): Add
ST_OMP_(END_)(TARGET_)(|PARALLEL_|TEAMS_)LOOP.
(enum gfc_omp_bind_type): New.
(gfc_omp_clauses): Use it.
(enum gfc_exec_op): Add EXEC_OMP_(TARGET_)(|PARALLEL_|TEAMS_)LOOP.
* match.h (gfc_match_omp_loop, gfc_match_omp_parallel_loop,
gfc_match_omp_target_parallel_loop, gfc_match_omp_target_teams_loop,
gfc_match_omp_teams_loop): New.
* openmp.c (enum omp_mask1): Add OMP_CLAUSE_BIND.
(gfc_match_omp_clauses): Handle it.
(OMP_LOOP_CLAUSES, gfc_match_omp_loop, gfc_match_omp_teams_loop,
gfc_match_omp_target_teams_loop, gfc_match_omp_parallel_loop,
gfc_match_omp_target_parallel_loop): New.
(resolve_omp_clauses, resolve_omp_do, omp_code_to_statement,
gfc_resolve_omp_directive): Handle omp loop.
* parse.c (decode_omp_directive case_exec_markers, gfc_ascii_statement,
parse_omp_do, parse_executable): Likewise.
(parse_omp_structured_block): Remove ST_ which use parse_omp_do.
* resolve.c (gfc_resolve_blocks): Add omp loop.
* st.c (gfc_free_statement): Likewise.
* trans-openmp.c (gfc_trans_omp_clauses): Handle bind clause.
(gfc_trans_omp_do, gfc_trans_omp_parallel_do, gfc_trans_omp_distribute,
gfc_trans_omp_teams, gfc_trans_omp_target, gfc_trans_omp_directive):
Handle loop directive.
(gfc_split_omp_clauses): Likewise; fix firstprivate/lastprivate
and (in_)reduction for taskloop.
* trans.c (trans_code): Handle omp loop directive.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/pr99928-3.f90: Add 'default(none)', following
C/C++ version of the patch.
* gfortran.dg/gomp/loop-1.f90: New test.
* gfortran.dg/gomp/loop-2.f90: New test.
* gfortran.dg/gomp/pr99928-1.f90: New test; based on C/C++ test.
* gfortran.dg/gomp/pr99928-11.f90: Likewise.
* gfortran.dg/gomp/pr99928-2.f90: Likewise.
* gfortran.dg/gomp/pr99928-4.f90: Likewise.
* gfortran.dg/gomp/pr99928-5.f90: Likewise.
* gfortran.dg/gomp/pr99928-6.f90: Likewise.
* gfortran.dg/gomp/pr99928-8.f90: Likewise.
* gfortran.dg/goacc/omp.f95: Use 'acc kernels loops' instead
of 'acc loops' to hide unrelated bug for now.
* gfortran.dg/goacc/omp-fixed.f: Likewise

3 years agox86: Fix ix86_expand_vector_init for V*TImode [PR100887]
Jakub Jelinek [Fri, 4 Jun 2021 09:20:02 +0000 (11:20 +0200)]
x86: Fix ix86_expand_vector_init for V*TImode [PR100887]

We have vec_initv4tiv2ti and vec_initv2titi patterns which call
ix86_expand_vector_init and assume it works for those modes.  For the
case of construction from two half-sized vectors, the code assumes it
will always succeed, but we have only insn patterns with SImode and DImode
element types.  QImode and HImode element types are already handled
by performing it with same sized vectors with SImode elements and the
following patch extends that to V*TImode vectors.

2021-06-04  Jakub Jelinek  <jakub@redhat.com>

PR target/100887
* config/i386/i386-expand.c (ix86_expand_vector_init): Handle
concatenation from half-sized modes with TImode elements.

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

3 years agoc++: Fix up attribute handling in methods in templates [PR100872]
Jakub Jelinek [Fri, 4 Jun 2021 09:17:05 +0000 (11:17 +0200)]
c++: Fix up attribute handling in methods in templates [PR100872]

The following testcase FAILs because a dependent (late) attribute is never
tsubsted.  While the testcase is OpenMP, I think it is a generic C++ FE problem
that could affect any other dependent attribute.

apply_late_template_attributes documents that it relies on
  /* save_template_attributes puts the dependent attributes at the beginning of
     the list; find the non-dependent ones.  */
The "operator binding" attributes that are sometimes added are added to the
head of DECL_ATTRIBUTES list though and because it doesn't have
ATTR_IS_DEPENDENT set it violates this requirement.

The following patch fixes it by adding that attribute after all
ATTR_IS_DEPENDENT attributes.  I'm not 100% sure if DECL_ATTRIBUTES can't be
shared by multiple functions (e.g. the cdtor clones), but the code uses
later remove_attribute which could break that too.

Other option would be to copy_list the ATTR_IS_DEPENDENT portion of the
DECL_ATTRIBUTES list if we need to do this, that would be the same as this
patch but replace that *ap = op_attr; at the end with
      *ap = NULL_TREE;
      DECL_ATTRIBUTES (cfn) = chainon (copy_list (DECL_ATTRIBUTES (cfn)),
                                       op_attr);
Or perhaps set ATTR_IS_DEPENDENT on the "operator bindings" attribute,
though it would need to be studied what would it try to do with the
attribute during tsubst.

2021-06-04  Jakub Jelinek  <jakub@redhat.com>

PR c++/100872
* name-lookup.c (maybe_save_operator_binding): Add op_attr after all
ATTR_IS_DEPENDENT attributes in the DECL_ATTRIBUTES list rather than
to the start.

* g++.dg/gomp/declare-simd-8.C: New test.

3 years agoarc: Don't allow millicode thunks with reduced register set CPUs.
Claudiu Zissulescu [Fri, 4 Jun 2021 07:12:32 +0000 (10:12 +0300)]
arc: Don't allow millicode thunks with reduced register set CPUs.

The millicode thunks are not reduced register set safe.  Disable them
for CPUs having this option on.

gcc/
2021-06-04  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_override_options): Disable millicode
thunks when RF16 is on.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
3 years agors6000: Disable mode promotion for pseudos
Haochen Gui [Fri, 4 Jun 2021 06:38:53 +0000 (14:38 +0800)]
rs6000: Disable mode promotion for pseudos

rs6000 has instructions that can do almost everything 32 bit
at least as efficiently as corresponding 64 bit things. The
mode promotion can be defered to when a wide mode is necessary.
So it helps a lot not promote mode for pseudos. SPECint test
shows that the overall performance improvement (by geomean) is
more than 2% with this patch.

testsuite/gcc.target/powerpc/not-promote-mode.c illustrates how
the patch eliminates the redundant extensions and do further
optimization by disabling mode promotion for pseduos.

gcc/ChangeLog

* config/rs6000/rs6000.h (PROMOTE_MODE): Remove.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/not-promote-mode.c: New.

3 years agors6000: Expand PROMOTE_MODE marco in rs6000_promote_function_mode
Haochen Gui [Fri, 4 Jun 2021 03:04:31 +0000 (11:04 +0800)]
rs6000: Expand PROMOTE_MODE marco in rs6000_promote_function_mode

This patch prepares for the patch which disables mode
promotion of pseudos on rs6000.

gcc/ChangeLog:
* config/rs6000/rs6000-call.c (rs6000_promote_function_mode):
Replace PROMOTE_MODE marco with its content.

3 years agoDaily bump.
GCC Administrator [Fri, 4 Jun 2021 00:16:24 +0000 (00:16 +0000)]
Daily bump.

3 years agocris: Update unexpected empty split condition
Kewen Lin [Wed, 2 Jun 2021 05:04:54 +0000 (07:04 +0200)]
cris: Update unexpected empty split condition

gcc/ChangeLog:

* config/cris/cris.md (*addi_reload): Fix empty split condition.

3 years agoRISC-V: Enable riscv attributes by default for all riscv targets.
Jim Wilson [Thu, 3 Jun 2021 20:50:34 +0000 (13:50 -0700)]
RISC-V: Enable riscv attributes by default for all riscv targets.

These were only enabled for embedded elf originally because that was
the safe option, and linux had no obvious use for them.  But now that
we have new extensions coming like V that affect process state and ABIs,
the attributes are expected to be useful for linux, and may be required
by the psABI.  clang already emits them for all riscv targets.

gcc/
* config.gcc (riscv*-*-*): If --with-riscv-attribute not used,
turn it on for all riscv targets.

3 years agoi386: Add insert and extract patterns for 4-byte vectors [PR100637]
Uros Bizjak [Thu, 3 Jun 2021 18:05:31 +0000 (20:05 +0200)]
i386: Add insert and extract patterns for 4-byte vectors [PR100637]

The patch introduces insert and extract patterns for 4-byte vectors.
It effectively only emits PINSR and PEXTR instructions when available,
otherwise falls back to generic code that emulates these instructions
via inserts, extracts, logic operations and shifts in integer registers.

Please note that generic fallback produces better code than the current
approach of constructing new vector in memory (due to store forwarding stall)
so also enable QImode 8-byte vector inserts only with TARGET_SSE4_1.

2021-06-03  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100637
* config/i386/i386-expand.c (ix86_expand_vector_set):
Handle V2HI and V4QI modes.
(ix86_expand_vector_extract): Ditto.
* config/i386/mmx.md (*pinsrw): New insn pattern.
(*pinsrb): Ditto.
(*pextrw): Ditto.
(*pextrw_zext): Ditto.
(*pextrb): Ditto.
(*pextrb_zext): Ditto.
(vec_setv2hi): New expander.
(vec_extractv2hihi): Ditto.
(vec_setv4qi): Ditto.
(vec_extractv4qiqi): Ditto.

(vec_setv8qi): Enable only for TARGET_SSE4_1.
(vec_extractv8qiqi): Ditto.

gcc/testsuite/

PR target/100637
* gcc.target/i386/vperm-v2hi.c: New test.
* gcc.target/i386/vperm-v4qi.c: Ditto.

3 years agoFix operand order to subf for p10 fusion.
Aaron Sawdey [Thu, 3 Jun 2021 03:54:08 +0000 (22:54 -0500)]
Fix operand order to subf for p10 fusion.

This certainly causes a bootstrap miscompare, and might also be
responsible for PR/100820. The operands to subf were reversed
in the logical-add/sub fusion patterns, and I screwed up my
bootstrap test which is how it ended up getting committed.

gcc/ChangeLog

* config/rs6000/genfusion.pl (gen_logical_addsubf): Fix input
order to subf instruction.
* config/rs6000/fusion.md: Regenerate.

3 years agolibstdc++: Avoid hard error in ranges::unique_copy [PR100770]
Patrick Palka [Thu, 3 Jun 2021 16:30:29 +0000 (12:30 -0400)]
libstdc++: Avoid hard error in ranges::unique_copy [PR100770]

Here, in the constexpr if condition within ranges::unique_copy, when
input_iterator<_Out> isn't satisfied we must avoid substituting into
iter_value_t<_Out> because the latter isn't necessarily well-formed
then.  To that end, this patch factors out the condition into a concept
and uses it throughout.

This patch also makes the definition of our testsuite
output_iterator_wrapper more minimal by setting its value_type, pointer
and reference member types to void.  This means our existing tests for
unique_copy already exercise the fix for this bug, so we don't need
to add another test.  The only other fallout of this testsuite iterator
change appears in std/ranges/range.cc, where the use of range_value_t
on a test_output_range is now ill-formed.

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h (__detail::__can_reread_output):
Factor out this concept from ...
(__unique_copy_fn::operator()): ... here.  Use the concept
throughout.
* testsuite/std/ranges/range.cc: Remove now ill-formed use
of range_value_t on an output_range.
* testsuite/util/testsuite_iterators.h (output_iterator_wrapper):
Define value_type, pointer and reference member types to void.

3 years agoFix issue for nested record types with -fdump-ada-spec
Eric Botcazou [Thu, 3 Jun 2021 15:54:45 +0000 (17:54 +0200)]
Fix issue for nested record types with -fdump-ada-spec

Ada does not support anonymous record declarations nested in other record
declarations so -fdump-ada-spec needs to unnest them, and this contains a
few fixes for this machinery.

gcc/c-family/
* c-ada-spec.c (dump_ada_macros): Minor tweaks.
(dump_ada_decl_name): Likewise.
(dump_anonymous_type_name): Remove parent parameter and adjust.
(dump_sloc): Minor tweak.
(dump_ada_array_type): Remove type parameter and adjust.
(dump_ada_enum_type): Remove parent parameter and adjust.
(dump_ada_node): Adjust calls to above functions.
(dumped_anonymous_types): New global variable.
(dump_nested_types_1): Rename into...
(dump_nested_types): ...this.
(dump_nested_type): Remove parent and dumped_types parameters.
<ARRAY_TYPE>: Replace dumped_types with dumped_anonymous_types.
Adjust calls to dump_anonymous_type_name and dump_ada_array_type.
(dump_ada_specs): Initialize and free dumped_anonymous_types.

3 years agoFix issue for external subtypes with -fdump-ada-spec
Eric Botcazou [Thu, 3 Jun 2021 15:50:44 +0000 (17:50 +0200)]
Fix issue for external subtypes with -fdump-ada-spec

This works around an irregularity of the language whereby subtypes, unlike
types, are not visible through a limited_with clause.

gcc/c-family/
* c-ada-spec.c (pp_ada_tree_identifier): Tidy up.
(dump_ada_node) <POINTER_TYPE>: Deal specially with external subtypes.

3 years agoFix duplicate name issues in output of -fdump-ada-spec
Eric Botcazou [Thu, 3 Jun 2021 15:46:15 +0000 (17:46 +0200)]
Fix duplicate name issues in output of -fdump-ada-spec

The namespace rules are different in the C family of languages and
in Ada, and a few adjustments are further needed in -fdump-ada-spec
because of them.

gcc/c-family/
* c-ada-spec.c (dump_ada_enum_type): Dump a prefix for constants.
(htable_t): New typedef.
(overloaded_names): Use it.
(add_name): New function.
(init_overloaded_names): Use add_name to populate the table and add
special cases for sigaction and stat.
(overloaded_name_p): Rename into...
(overloading_index): ...this.  Do not initialize overloaded_names table
here.  Return the index or zero.
(dump_ada_declaration): Minor tweaks.  Do not skip overloaded functions
but add an overloading suffix instead.
(dump_ada_specs): Initialize overloaded_names tables here.

3 years agoReplace uses of determine_value_range with range_of_expr.
Aldy Hernandez [Wed, 26 May 2021 06:53:07 +0000 (08:53 +0200)]
Replace uses of determine_value_range with range_of_expr.

The expression evaluator changes to the range_query API provide
everything determine_value_range does.  This patch replaces all uses
with calls into the range_query API.

gcc/ChangeLog:

* calls.c (get_size_range): Use range_of_expr instead of
determine_value_range.
* tree-affine.c (expr_to_aff_combination): Same.
* tree-data-ref.c (split_constant_offset): Same.
* tree-vrp.c (determine_value_range_1): Remove.
(determine_value_range): Remove.
* tree-vrp.h (determine_value_range): Remove.

3 years agoImplement generic expression evaluator for range_query.
Aldy Hernandez [Wed, 26 May 2021 06:40:17 +0000 (08:40 +0200)]
Implement generic expression evaluator for range_query.

Right now, range_of_expr only works with constants, SSA names, and
pointers.  Anything else gets returned as VARYING.  This patch adds the
capability to deal with arbitrary expressions, inasmuch as these
tree codes are implemented in range-ops.cc.

This will give us the ability to ask for the range of any tree expression,
not just constants and SSA names, with range_of_expr().

This is a more generic implementation of determine_value_range in VRP.
A follow-up patch will remove all uses of it in favor of the
range_query API.

gcc/ChangeLog:

* function-tests.c (test_ranges): Call gimple_range_tests.
* gimple-range-cache.cc (ranger_cache::range_of_expr): Pass stmt
to get_tree_range.
* gimple-range.cc (fur_source::get_operand): Do not call
get_tree_range or gimple_range_global.
get_tree_range.
(get_tree_range): Move to value-query.cc.
Call get_arith_expr_range.
(gimple_ranger::range_of_expr): Add argument to get_tree_range.
Include gimple-range-tests.cc.
* gimple-range.h (fold_range): Add argument.
(get_tree_range): Remove.
* selftest.h (gimple_range_tests): New.
* value-query.cc (global_range_query::range_of_expr): Add
stmt argument.
(range_query::get_tree_range): Move from gimple-range.cc.
* value-query.h (class range_query): Add get_tree_range and
get_arith_expr_range.  Make fur_source a friend.
* vr-values.c (vr_values::range_of_expr): Pass stmt to
get_tree_range.
* gimple-range-tests.cc: New file.

3 years agoMAINTAINERS: Add DCO version number.
Jason Merrill [Thu, 3 Jun 2021 04:10:47 +0000 (00:10 -0400)]
MAINTAINERS: Add DCO version number.

ChangeLog:

* MAINTAINERS: Add DCO version number.

3 years agoUse known global ranges in export_global_ranges
Aldy Hernandez [Tue, 1 Jun 2021 15:48:30 +0000 (17:48 +0200)]
Use known global ranges in export_global_ranges

This patch modifies export_global_ranges to take into account current
global ranges.  It also handles enhances said function to export pointer
global ranges as well.

gcc/ChangeLog:

* gimple-range.cc (gimple_ranger::export_global_ranges): Call
  update_global_range.
* value-query.cc (update_global_range): New.
* value-query.h (update_global_range): New.

gcc/testsuite/ChangeLog:

* gcc.dg/pr80776-1.c: XFAIL and document the reason why.

3 years agoanalyzer: remove unused prototypes
David Malcolm [Thu, 3 Jun 2021 14:37:41 +0000 (10:37 -0400)]
analyzer: remove unused prototypes

gcc/analyzer/ChangeLog:
* store.h (store::get_direct_binding): Remove unused decl.
(store::get_default_binding): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agoanalyzer: show types for poisoned_svalue and compound_svalue
David Malcolm [Thu, 3 Jun 2021 14:35:27 +0000 (10:35 -0400)]
analyzer: show types for poisoned_svalue and compound_svalue

gcc/analyzer/ChangeLog:
* svalue.cc (poisoned_svalue::dump_to_pp): Dump type.
(compound_svalue::dump_to_pp): Dump any type.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agodiagnostic-show-locus: tweak rejection logic
David Malcolm [Thu, 3 Jun 2021 14:32:40 +0000 (10:32 -0400)]
diagnostic-show-locus: tweak rejection logic

gcc/ChangeLog:
* diagnostic-show-locus.c (diagnostic_show_locus): Don't reject
printing the same location twice if there are fix-it hints,
multiple locations, or a label.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agolibstdc++: Simplify range adaptors' forwarding of bound args [PR100577]
Patrick Palka [Thu, 3 Jun 2021 13:49:30 +0000 (09:49 -0400)]
libstdc++: Simplify range adaptors' forwarding of bound args [PR100577]

r11-8053 rewrote the range adaptor implementation in conformance with
P2281R1, making partial application act like a SFINAE-friendly perfect
forwarding call wrapper.  Making SFINAE-friendliness coexist with
perfect forwarding here requires adding fallback deleted operator()
overloads (as described in e.g. section 5.5 of P0847R6).  But
unfortunately, as reported in PR100577, this necessary technique of
using of deleted overloads regresses diagnostics for ill-formed calls to
partially applied range adaptors in GCC.

Although GCC's diagnostics can arguably be improved here by having the
compiler explain why the other candidates weren't viable when overload
resolution selects a deleted candidate, we can also largely work around
this on the library side (and achieve more concise diagnostics than by
a frontend-side improvement alone) if we take advantage of the
observation that not all range adaptors need perfect forwarding call
wrapper semantics, in fact only views::split currently needs it, because
all other range adaptors either take no extra arguments or only
arguments that are expected to be freely/cheaply copyable, e.g. function
objects and integer-like types.  (The discussion section in P2281R1 goes
into detail about why views::split is special.)

To that end, this introduces opt-in flags for denoting a range adaptor
as having "simple" extra arguments (in the case of a range adaptor
non-closure) or having a "simple" call operator (in the case of a range
adaptor closure).  These flags are then used to conditionally simplify
the operator() for the generic _Partial and _Pipe class templates, down
from needing three overloads thereof (including one defined as deleted)
to just needing a single overload.  The end result is that diagnostic
quality is restored for all adaptors except for views::split, and
diagnostics for the adaptors are generally made more concise since
there's only a single _Partial/_Pipe overload to diagnose instead of
three of them.

libstdc++-v3/ChangeLog:

PR libstdc++/100577
* include/std/ranges (_RangeAdaptorClosure): Document
_S_has_simple_call_op mechanism.
(_RangeAdaptor): Document _S_has_simple_extra_args mechanism.
(__closure_has_simple_call_op): New concept.
(__adaptor_has_simple_extra_args): Likewise.
(_Partial<_Adaptor, _Args...>): New partial specialization.
(_Partial<_Adaptor, _Arg>): Likewise.
(_Pipe<_Lhs, _Rhs>): Likewise.
(views::_All::_S_has_simple_call_op): Define to true.
(views::_Filter::_S_has_simple_extra_args): Likewise.
(views::_Transform::_S_has_simple_extra_args): Likewise.
(views::_Take::_S_has_simple_extra_args): Likewise.
(views::_TakeWhile::_S_has_simple_extra_args): Likewise.
(views::_Drop::_S_has_simple_extra_args): Likewise.
(views::_DropWhile::_S_has_simple_extra_args): Likewise.
(views::_Join::_S_has_simple_call_op): Likewise.
(views::_Split): Document why we don't define
_S_has_simple_extra_args to true for this adaptor.
(views::_Common::_S_has_simple_call_op): Define to true.
(views::_Reverse::_S_has_simple_call_op): Likewise.
(views::_Elements::_S_has_simple_call_op): Likewise.
* testsuite/std/ranges/adaptors/100577.cc: New test.

3 years agoc++: cv-qualified dependent name of alias tmpl [PR100592]
Patrick Palka [Thu, 3 Jun 2021 13:39:13 +0000 (09:39 -0400)]
c++: cv-qualified dependent name of alias tmpl [PR100592]

Here, the dependent template name in the return type of f() resolves to
an alias of int& after substitution, and we end up complaining about
qualifying this reference type with 'const' from cp_build_qualified_type
rather than just silently dropping the qualification as per [dcl.ref]/1.

The problem is ultimately that make_typename_type ignores the
tf_keep_type_decl flag when the dependent name is a template-id.  This
in turn causes the TYPE_DECL check within tsubst <case TYPENAME_TYPE>
to fail, and so we end up not passing tf_ignore_bad_quals to
cp_build_qualified_type.  This patch fixes this by making
make_typename_type respect the tf_keep_type_decl flag in this situation.

PR c++/100592

gcc/cp/ChangeLog:

* decl.c (make_typename_type): After calling
lookup_template_class, adjust the result to its TYPE_NAME and
then consider the tf_keep_type_decl flag.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/alias-decl-71.C: New test.

3 years agoc++: using-enum and access specifiers [PR100862]
Patrick Palka [Thu, 3 Jun 2021 13:37:11 +0000 (09:37 -0400)]
c++: using-enum and access specifiers [PR100862]

When copying the enumerators imported by a class-scope using-enum
declaration, we need to override current_access_specifier so that
finish_member_declaration gives the copies the same access as the
using-enum decl.  (A class-scope using-enum is processed late, so
current_access_specifier at this point is otherwise set to the last
access specifier within the class.)  To that end, this patch makes
handle_using_decl call set_current_access_from_decl accordingly.

For consistency, this patch makes build_enumerator use
set_current_access_from_decl too.

PR c++/100862

gcc/cp/ChangeLog:

* pt.c (set_current_access_from_decl): Move to ...
* class.c (set_current_access_from_decl): ... here.
(handle_using_decl): Use it to propagate the access of the
using-enum decl to the copy of the imported enumerator.
* cp-tree.h (set_current_access_from_decl): Declare.
* decl.c (build_enumerator): Simplify using make_temp_override
and set_current_access_from_decl.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/using-enum-9.C: New test.

3 years agovect: Use main loop's thresholds and VF to narrow upper_bound of epilogue
Andre Vieira [Thu, 3 Jun 2021 12:55:24 +0000 (13:55 +0100)]
vect: Use main loop's thresholds and VF to narrow upper_bound of epilogue

This patch uses the knowledge of the conditions to enter an epilogue loop to
help come up with a potentially more restricive upper bound.

gcc/ChangeLog:

* tree-vect-loop.c (vect_transform_loop): Use main loop's various'
thresholds to narrow the upper bound on epilogue iterations.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sve/part_vect_single_iter_epilog.c: New test.

3 years agoarm: Auto-vectorization for MVE: vabs
Christophe Lyon [Thu, 3 Jun 2021 12:06:38 +0000 (12:06 +0000)]
arm: Auto-vectorization for MVE: vabs

This patch adds support for auto-vectorization of absolute value
computation using vabs.

We use a similar pattern to what is used in neon.md and extend the
existing neg<mode>2 expander to match both 'neg' and 'abs'.  This
implies renaming the existing abs<mode>2 define_insn in neon.md to
avoid a clash with the new expander with the same name.

2021-06-03  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* config/arm/mve.md (mve_vabsq_f<mode>): Use 'abs' instead of unspec.
(mve_vabsq_s<mode>): Likewise.
* config/arm/neon.md (abs<mode>2): Rename to neon_abs<mode>2.
* config/arm/unspecs.md (VABSQ_F, VABSQ_S): Delete.
* config/arm/vec-common.md (neg<mode>2): Rename to
<absneg_str><mode>2.

gcc/testsuite/
* gcc.target/arm/simd/mve-vabs.c: New test.

3 years agoFix miscompilation of predicate on bit-packed array types
Eric Botcazou [Thu, 3 Jun 2021 11:29:32 +0000 (13:29 +0200)]
Fix miscompilation of predicate on bit-packed array types

This is a regression present on the mainline and 11 branch in the form of a
miscompilation by the new mod/ref IPA pass of code that passes constrained
bit-packed array objets in a call to a subprograms taking unconstrained
bit-packed array parameters, which occurs for predicate on bit-packed array
types for example.

gcc/ada/
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add PAT
local constant and use it throughout.  If it is set, use a ref-all
pointer type for the pointer-to-array field of the fat pointer type.
<E_Array_Subtype>: Add PAT local constant and use it throughout.
gcc/testsuite/
* gnat.dg/bit_packed_array6.adb: New test.
* gnat.dg/bit_packed_array6_pkg.ads: New helper.

3 years agoarc: Remove obsolete options
Claudiu Zissulescu [Thu, 3 Jun 2021 10:44:53 +0000 (13:44 +0300)]
arc: Remove obsolete options

Remove the following obsolete options:
- munalign-prob-threshold
- malign-call
- mmixed-code

The ARC's options are marked as obsolete and ignored for backwards
compatibility.

gcc/
2021-06-03  Claudiu Zissulescu  <claziss@synopsys.com>

* common/config/arc/arc-common.c (arc_option_optimization_table):
Remove malign-call.
* config/arc/arc.c (arc_unalign_branch_p): Remove unused function.
* config/arc/arc.h (TARGET_MIXED_CODE): Remove macro.
(INDEX_REG_CLASS): Only refer to GENERAL_REGS.
* config/arc/arc.md (abssi2_mixed): Remove pattern.
* config/arc/arc.opt (munalign-prob-threshold): Mark it obsolete.
(malign-call): Likewise.
(mmixed-code): Likewise.
* doc/invoke.texi (ARC): Update doc.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
3 years agoSimplify option handling for -fsanitize-coverage
Martin Liska [Thu, 20 May 2021 08:57:49 +0000 (10:57 +0200)]
Simplify option handling for -fsanitize-coverage

gcc/ChangeLog:

* common.opt: Use proper Enum values.
* opts.c (COVERAGE_SANITIZER_OPT): Remove.
(parse_sanitizer_options): Handle only sanitizer_opts.
(common_handle_option): Just assign value.

gcc/testsuite/ChangeLog:

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

3 years agoTame fix for PR ipa/99122
Eric Botcazou [Thu, 3 Jun 2021 10:39:39 +0000 (12:39 +0200)]
Tame fix for PR ipa/99122

The return part has a major performance impact in Ada where variable-sized
types are first-class citizens, but it turns out that it is not exercized
in the testsuite yet, so back it out for now.

gcc/
PR ipa/99122
* tree-inline.c (inline_forbidden_p): Remove test on return type.
gcc/testsuite/
* gnat.dg/inline22.adb: New test.

3 years agoAlso generate DW_OP_GNU_variable_value at file scope
Eric Botcazou [Fri, 28 May 2021 17:40:47 +0000 (19:40 +0200)]
Also generate DW_OP_GNU_variable_value at file scope

But only for the reference variant (dw_val_class_die_ref).  This is needed
for variable-sized types declared at library level in Ada.

gcc/
* dwarf2out.c (loc_list_from_tree_1) <FUNCTION_DECL>: Also generate
DW_OP_GNU_variable_value referencing an existing DIE at file scope.
(type_byte_size): Inline into...
(add_byte_size_attribute): ...this and call add_scalar_info.

3 years agoFix signedness issue in DWARF functions (2)
Eric Botcazou [Fri, 28 May 2021 17:31:18 +0000 (19:31 +0200)]
Fix signedness issue in DWARF functions (2)

The compiler can synthesize DWARF functions to describe the location and
size of components in discriminated record types with variant part in Ada,
but in peculiar cases the compiler drops expressions on the floor, for
example in the divide case:

     case ROUND_DIV_EXPR:
     case TRUNC_DIV_EXPR:
     case EXACT_DIV_EXPR:
      if (TYPE_UNSIGNED (TREE_TYPE (loc)))
        return 0;
       op = DW_OP_div;
       goto do_binop;

Now sizetype and bitsizetype are unsigned types, which means that any divide
expression in them is dropped.

gcc/
* dwarf2out.c (mem_loc_descriptor) <UDIV>: Fix typo.
(typed_binop_from_tree): New function.
(loc_list_from_tree_1) <EXACT_DIV_EXPR>: For an unsigned type,
turn a divide by a power of 2 into a shift.
<CEIL_DIV_EXPR>: For an unsigned type, use a signed divide if the
size of the mode is lower than DWARF2_ADDR_SIZE; otherwise, do a
typed divide by calling typed_binop_from_tree.

3 years agoFix signedness issue in DWARF functions (1)
Eric Botcazou [Fri, 28 May 2021 17:18:37 +0000 (19:18 +0200)]
Fix signedness issue in DWARF functions (1)

The compiler can synthesize DWARF functions to describe the location and
size of components in discriminated record types with variant part in Ada,
but a limitation is that most quantities must have DWARF2_ADDR_SIZE or
else be the result of a zero-extension to DWARF2_ADDR_SIZE of a smaller
quantity, as documented in loc_list_from_tree_1:

  /* ??? Most of the time we do not take proper care for sign/zero
     extending the values properly.  Hopefully this won't be a real
     problem...  */

In Ada discriminants may be either signed or unsigned, so this limitation
is problematic.  Therefore the attached patch adds a strict_signedness
field to the loc_descr_context that is passed around in parts of the DWARF
back-end and changes loc_list_from_tree_1 to act upon it being set to true.
It also contains an optimization to avoid emitting useless comparisons.

gcc/
* dwarf2out.c (scompare_loc_descriptor): Fix head comment.
(is_handled_procedure_type): Likewise.
(struct loc_descr_context): Add strict_signedness field.
(resolve_args_picking_1): Deal with DW_OP_[GNU_]deref_type,
DW_OP_[GNU_]convert and DW_OP_[GNU_]reinterpret.
(resolve_args_picking): Minor tweak.
(function_to_dwarf_procedure): Initialize strict_signedness field.
(type_byte_size): Likewise.
(field_byte_offset): Likewise.
(gen_descr_array_type_die): Likewise.
(gen_variant_part): Likewise.
(loc_list_from_tree_1) <CALL_EXPR>: Tidy up and set strict_signedness
to true when a context is present before evaluating the arguments.
<COND_EXPR>: Do not generate a useless comparison with zero.
When dereferencing an address, if strict_signedness is true and the
type is small and signed, use DW_OP_deref_type to do the dereference
and then DW_OP_convert to convert back to the generic type.

3 years agoAArch64: Fix failing testcase for native cpu detection
Tamar Christina [Thu, 3 Jun 2021 09:26:02 +0000 (10:26 +0100)]
AArch64: Fix failing testcase for native cpu detection

A late change in the patch changed the implemented ID to one that
hasn't been used yet to avoid any ambiguity. Unfortunately the
chosen value of 0xFF matches the value of -1 which is used as an
invalid implementer so the test started failing.

This patch changes it to 0xFE which is the highest usable number.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/cpunative/info_16: Update implementer.
* gcc.target/aarch64/cpunative/info_17: Likewise

3 years agoopenmp: Assorted depend/affinity/iterator related fixes [PR100859]
Jakub Jelinek [Thu, 3 Jun 2021 08:38:08 +0000 (10:38 +0200)]
openmp: Assorted depend/affinity/iterator related fixes [PR100859]

The depend-iterator-3.C testcases shows various bugs.

1) tsubst_omp_clauses didn't handle OMP_CLAUSE_AFFINITY (should be
   handled like OMP_CLAUSE_DEPEND)
2) because locators can be arbitrary lvalue expressions, we need
   to allow for C++ array section base (especially when array section
   is just an array reference) FIELD_DECLs, handle them as this->member,
   but don't need to privatize in any way
3) similarly for this as base
4) depend(inout: this) is invalid, but for different reason than the reported
   one, again this is an expression, but not lvalue expression, so that
   should be reported
5) the ctor/dtor cloning in the C++ FE (which is using walk_tree with
   copy_tree_body_r) didn't handle iterators correctly, walk_tree normally
   doesn't walk TREE_PURPOSE of TREE_LIST, and in the iterator case
   that TREE_VEC contains also a BLOCK that needs special handling during
   copy_tree_body_r

2021-06-03  Jakub Jelinek  <jakub@redhat.com>

PR c++/100859
gcc/
* tree-inline.c (copy_tree_body_r): Handle iterators on
OMP_CLAUSE_AFFINITY or OMP_CLAUSE_DEPEND.
gcc/c/
* c-typeck.c (c_finish_omp_clauses): Move OMP_CLAUSE_AFFINITY
after depend only cases.
gcc/cp/
* semantics.c (handle_omp_array_sections_1): For
OMP_CLAUSE_{AFFINITY,DEPEND} handle FIELD_DECL base using
finish_non_static_data_member and allow this as base.
(finish_omp_clauses): Move OMP_CLAUSE_AFFINITY
after depend only cases.  Let this be diagnosed by !lvalue_p
case for OMP_CLAUSE_{AFFINITY,DEPEND} and remove useless
assert.
* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_AFFINITY.
gcc/testsuite/
* g++.dg/gomp/depend-iterator-3.C: New test.
* g++.dg/gomp/this-1.C: Don't expect any diagnostics for
this as base expression of depend array section, expect a different
error wording for this as depend locator and add testcases
for affinity clauses.

3 years agoarc: Remove define_insn_and_split *bbit_di
Kewen Lin [Thu, 3 Jun 2021 02:15:17 +0000 (21:15 -0500)]
arc: Remove define_insn_and_split *bbit_di

define_insn_and_split *bbit_di has unexpected empty split
condition when its insn condition isn't empty.  But as
Claudiu pointed out, this pattern looks useless and it's
better to remove it.

gcc/ChangeLog:

* config/arc/arc.md (*bbit_di): Remove.

3 years agoDaily bump.
GCC Administrator [Thu, 3 Jun 2021 00:16:23 +0000 (00:16 +0000)]
Daily bump.

3 years agoREE: PR rtl-optimization/100264: Handle more PARALLEL SET expressions
Christoph Muellner [Mon, 10 May 2021 12:39:03 +0000 (14:39 +0200)]
REE: PR rtl-optimization/100264: Handle more PARALLEL SET expressions

Move the check for register targets (i.e. REG_P ()) into the function
get_sub_rtx () and change the restriction of REE to "only one child of
a PARALLEL expression is a SET register expression" (was "only one child of
a PARALLEL expression is a SET expression").

This allows to handle more PARALLEL SET expressions.

gcc/ChangeLog:
PR rtl-optimization/100264
* ree.c (get_sub_rtx): Ignore SET expressions without register
destinations and remove assertion, as it is not valid anymore
with this new behaviour.
(merge_def_and_ext): Eliminate destination check for register
as such SET expressions can't occur anymore.
(combine_reaching_defs): Likewise.

3 years agoxtensa: Fix 2 warnings during xtensa build [PR100841]
Jakub Jelinek [Wed, 2 Jun 2021 20:09:53 +0000 (22:09 +0200)]
xtensa: Fix 2 warnings during xtensa build [PR100841]

When building gcc targetting xtensa-linux, there are 2 warnings the PR
complains about:
../../gcc/dwarf2cfi.c: In function ‘void init_one_dwarf_reg_size(int, machine_mode, rtx, machine_mode, init_one_dwarf_reg_state*)’:
../../gcc/dwarf2cfi.c:291:12: warning: comparison of integer expressions of different signedness: ‘const unsigned int’ and ‘int’ [-Wsign-compare]
  291 |   if (rnum >= DWARF_FRAME_REGISTERS)
../../gcc/function.c: In function ‘void gen_call_used_regs_seq(rtx_insn*, unsigned int)’:
../../gcc/function.c:5897:63: warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits]
 5897 |       if (crtl->uses_only_leaf_regs && LEAF_REG_REMAP (regno) < 0)
which might during bootstrap or when configured with --enable-werror-always
be turned into errors.

The first one is the -Wsign-compare warning, in c-family we do:
2281          /* Do not warn if the signed quantity is an unsuffixed integer
2282             literal (or some static constant expression involving such
2283             literals or a conditional expression involving such literals)
2284             and it is non-negative.  */
2285          if (tree_expr_nonnegative_warnv_p (sop, &ovf))
2286            /* OK */;
and so don't warn if that function determines the expression is
non-negative.  But xtensa defines DWARF_FRAME_REGISTERS as
(16 + (something ? 0 : 1)) and that isn't handled by
tree_expr_nonnegative_warnv_p, VRP can handle it of course, but that is much
later.
The second chunk rewrites it into a form that tree_expr_nonnegative_warnv_p
can handle, in particular (something ? 16 : 16 + 1), where for COND_EXPRs
that function checks both the 2nd and 3rd operand of the ternary operator
and if both are nonnegative, returns true.

The other warning has been introduced fairly recently; LEAF_REG_REMAP is
currently used by 2 targets only, and is documented to yield -1 if a hard
reg number can't be remapped and the remapped register number otherwise.
That means that the type of the expression should be signed (otherwise -1
could never appear), and on SPARC indeed it is defined as
 extern char leaf_reg_remap[];
 #define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO])
so unless the host is -funsigned-char by default it works fine.
I guess sparc.[ch] should be fixed to use signed char of leaf_reg_remap,
Eric?
The argument to LEAF_REG_REMAP is often unsigned int though, hard
register numbers are usually not negative, and thus the warning.
I think xtensa doesn't have 2G hard registers and so it is ok to just cast
it to int.

2021-06-02  Jakub Jelinek  <jakub@redhat.com>

PR target/100841
* config/xtensa/xtensa.h (LEAF_REG_REMAP): Cast REGNO to int to avoid
-Wtype-limits warnings.
(DWARF_FRAME_REGISTER): Rewrite into ternary operator with addition
in operands to avoid -Wsign-compare warnings.

3 years agoMake sure link reg save MEM has frame alias set.
Pat Haugen [Wed, 2 Jun 2021 20:03:40 +0000 (15:03 -0500)]
Make sure link reg save MEM has frame alias set.

gcc/ChangeLog:

* config/rs6000/rs6000-logue.c (rs6000_emit_prologue): Use
gen_frame_store.

3 years agoc++: missing dtor with -fno-elide-constructors [PR100838]
Jason Merrill [Mon, 31 May 2021 16:36:25 +0000 (12:36 -0400)]
c++: missing dtor with -fno-elide-constructors [PR100838]

tf_no_cleanup only applies to the outermost TARGET_EXPR, and we already
clear it for nested calls in build_over_call, but in this case both
constructor calls came from convert_like, so we need to clear it in the
recursive call as well.  This revealed that we were adding an extra
ck_rvalue in direct-initialization cases where it was wrong.

PR c++/100838

gcc/cp/ChangeLog:

* call.c (convert_like_internal): Clear tf_no_cleanup when
recursing.
(build_user_type_conversion_1): Only add ck_rvalue if
LOOKUP_ONLYCONVERTING.

gcc/testsuite/ChangeLog:

* g++.dg/init/no-elide2.C: New test.

3 years agoMAINTAINERS: Add DCO section
Jason Merrill [Tue, 1 Jun 2021 13:58:21 +0000 (09:58 -0400)]
MAINTAINERS: Add DCO section

ChangeLog:

* MAINTAINERS: Add DCO section.

3 years agolibstdc++: Value-initialize objects held by EBO helpers [PR 100863]
Jonathan Wakely [Wed, 2 Jun 2021 11:34:48 +0000 (12:34 +0100)]
libstdc++: Value-initialize objects held by EBO helpers [PR 100863]

The allocator, hash function and equality function should all be
value-initialized by the default constructor of an unordered container.
Do it in the EBO helper, so we don't have to get it right in multiple
places.

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

PR libstdc++/100863
PR libstdc++/65816
* include/bits/hashtable_policy.h (_Hashtable_ebo_helper):
Value-initialize subobject.
* testsuite/23_containers/unordered_map/allocator/default_init.cc:
Remove XFAIL.
* testsuite/23_containers/unordered_set/allocator/default_init.cc:
Remove XFAIL.

3 years agolibstdc++: Fix tests for COW std::string [PR 96088]
Jonathan Wakely [Wed, 2 Jun 2021 11:33:38 +0000 (12:33 +0100)]
libstdc++: Fix tests for COW std::string [PR 96088]

The expected number of allocations is different when copying COW
strings.

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

PR libstdc++/96088
* testsuite/23_containers/unordered_map/96088.cc: Adjust
expected number of allocations.
* testsuite/23_containers/unordered_set/96088.cc: Likewise.

3 years agoARC: gcc driver default to hs38_linux
Claudiu Zissulescu [Wed, 2 Jun 2021 11:31:00 +0000 (14:31 +0300)]
ARC: gcc driver default to hs38_linux

arc700 is legacy and there's no active development for it, so switch to
latest hs38_linux as default

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
gcc/
2021-06-02  Vineet Gupta  <vgupta@synopsys.com>

* config/arc/arc.h (TARGET_CPU_DEFAULT): Change to hs38_linux.

3 years agolibstdc++: Improve punctuation in implementation status docs
Jonathan Wakely [Wed, 2 Jun 2021 11:31:04 +0000 (12:31 +0100)]
libstdc++: Improve punctuation in implementation status docs

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

* doc/xml/manual/status_cxxis29124.xml: Improve punctuation.
* doc/xml/manual/status_cxxtr1.xml: Likewise.
* doc/xml/manual/status_cxxtr24733.xml: Likewise.
* doc/html/*: Regenerate.