platform/upstream/gcc.git
3 years ago[Ada] Accept arrays and scalars as type views that can be validated
Piotr Trojanek [Thu, 8 Apr 2021 07:42:28 +0000 (09:42 +0200)]
[Ada] Accept arrays and scalars as type views that can be validated

gcc/ada/

* exp_attr.adb (Build_Array_VS_Func): Restore uses of
Validated_View.
(Build_Record_VS_Func): Likewise.
(Expand_N_Attribute_Reference): Likewise.
* sem_util.adb (Validated_View): Behave as an identity function
for arrays and scalars.

3 years ago[Ada] tech debt: Parent (Empty) is not allowed
Bob Duff [Fri, 9 Apr 2021 18:53:56 +0000 (14:53 -0400)]
[Ada] tech debt: Parent (Empty) is not allowed

gcc/ada/

* atree.adb, atree.ads (Parent, Set_Parent): Assert node is
Present.
(Copy_Parent, Parent_Kind): New helper routines.
* gen_il-gen.adb: Add with clause.
* nlists.adb (Parent): Assert Parent of list is Present.
* aspects.adb, checks.adb, exp_aggr.adb, exp_ch6.adb,
exp_util.adb, lib-xref-spark_specific.adb, osint.ads,
sem_ch12.adb, sem_ch13.adb, sem_ch3.adb, sem_ch6.adb,
sem_dim.adb, sem_prag.adb, sem_res.adb, sem_util.adb,
treepr.adb: Do not call Parent and Set_Parent on the Empty node.
* libgnat/a-stwiun__shared.adb, libgnat/a-stzunb__shared.adb:
Minor: Fix typos in comments.
* einfo.ads: Minor comment update.
* sinfo-utils.ads, sinfo-utils.adb (Parent_Kind, Copy_Parent):
New functions.

3 years ago[Ada] Fix old typo in comment
Eric Botcazou [Sat, 10 Apr 2021 17:17:54 +0000 (19:17 +0200)]
[Ada] Fix old typo in comment

gcc/ada/

* repinfo-input.adb (Read_JSON_Stream): Fix typo.

3 years ago[Ada] Further adjustment and optimization of System.Value_N
Eric Botcazou [Fri, 9 Apr 2021 11:29:44 +0000 (13:29 +0200)]
[Ada] Further adjustment and optimization of System.Value_N

gcc/ada/

* rtsfind.ads (RE_Id): Change RE_Valid_Enumeration_Value_NN into
RE_Valid_Value_Enumeration_NN.
(RE_Unit_Table): Adjust to above renaming.
* exp_imgv.adb (Expand_Valid_Value_Attribute): Likewise.
* libgnat/s-valuen.ads (Invalid): Remove.
(Value_Enumeration_Pos): Move to...
* libgnat/s-valuen.adb (Value_Enumeration_Pos): ...here.
Return -1 instead of Invalid.
(Value_Enumeration): Compare against 0 instead of Invalid.
(Valid_Enumeration_Value): Likewise.  Rename to...
(Valid_Value_Enumeration): ...this.
* libgnat/s-vaenu8.ads (Valid_Enumeration_Value_8): Rename into...
(Valid_Value_Enumeration_8): ...this.
* libgnat/s-vaen16.ads (Valid_Enumeration_Value_16): Rename into...
(Valid_Value_Enumeration_16): ...this.
* libgnat/s-vaen32.ads (Valid_Enumeration_Value_32): Rename into...
(Valid_Value_Enumeration_32): ...this.

3 years ago[Ada] tech debt: clean up Component_Size
Bob Duff [Fri, 9 Apr 2021 12:56:23 +0000 (08:56 -0400)]
[Ada] tech debt: clean up Component_Size

gcc/ada/

* einfo.ads (Component_Bit_Offset, Component_Size): Update
documentation: Repinfo is the package where these negative
values are documented.
* einfo-utils.adb (Known_Component_Size,
Known_Static_Component_Size, Unknown_Component_Size): Remove
calls to Implementation_Base_Type, because Component_Size is an
Impl_Base_Type_Only field (see Gen_Entities).
* sem_ch13.ads, sem_ch13.adb (Check_Size): Do not set Esize and
RM_Size. This is unnecessary in the case of Size. For
Component_Size, it is wrong, because we would be setting the
Esize and RM_Size of the component type.

3 years ago[Ada] Add some OS constants to control keepalive on TCP connections
Pascal Obry [Wed, 7 Apr 2021 07:05:06 +0000 (09:05 +0200)]
[Ada] Add some OS constants to control keepalive on TCP connections

gcc/ada/

* s-oscons-tmplt.c: Add some OS constants.

3 years ago[Ada] Rewrite Validated_View in recursive style
Piotr Trojanek [Tue, 6 Apr 2021 11:10:40 +0000 (13:10 +0200)]
[Ada] Rewrite Validated_View in recursive style

gcc/ada/

* sem_util.ads (Validated_View): Fix style in comment.
* sem_util.adb (Validated_View): Rewrite in recursive style.

3 years ago[Ada] Ignore again errors when running gen_il-main
Eric Botcazou [Wed, 7 Apr 2021 16:23:44 +0000 (18:23 +0200)]
[Ada] Ignore again errors when running gen_il-main

gcc/ada/

* Make-generated.in (ada/stamp-gen_il): Ignore errors from
running gen_il-main.

3 years ago[Ada] Factor out many fields in entities
Richard Kenner [Wed, 7 Apr 2021 12:15:13 +0000 (08:15 -0400)]
[Ada] Factor out many fields in entities

gcc/ada/

* gen_il-gen-gen_entities.adb (Record_Field_Kind,
Allocatable_Kind): Add new abstract kinds.
(Constant_Or_Variable_Kind): Likewise.
(E_Constant, E_Variable, E_Loop_Parameter): Use them.
(E_Discriminant, E_Component): Likewise.
* gen_il-types.ads (type Opt_Type_Enum): Add them.

3 years ago[Ada] Fix bug in node/entity kind numbers in sinfo/einfo.h
Bob Duff [Wed, 7 Apr 2021 11:52:07 +0000 (07:52 -0400)]
[Ada] Fix bug in node/entity kind numbers in sinfo/einfo.h

gcc/ada/

* gen_il-gen.adb (Put_C_Type_And_Subtypes): Put the correct
numbers.
* gen_il-internals.ads, gen_il-internals.adb: (Pos): Remove this
function. It was assuming that the order of the enumeration
literals in Type_Enum is the same as the order of the generated
types Node_Kind and Entity_Kind, which is not true.

3 years ago[Ada] Consistently use Validated_View for Valid_Scalars on records
Piotr Trojanek [Wed, 7 Apr 2021 08:16:55 +0000 (10:16 +0200)]
[Ada] Consistently use Validated_View for Valid_Scalars on records

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference): Explicitly use
Validated_View for record objects.

3 years agoAdd forward propagation to SLP "any" permutes
Richard Biener [Tue, 29 Jun 2021 13:26:29 +0000 (15:26 +0200)]
Add forward propagation to SLP "any" permutes

This adds a forward propagation phase to the permute optimization
machinery which allows us to handle "any" permute for all kinds of
nodes.  To match previous behavior cost-wise we still do not allow
non-external/constant nodes to be duplicated for multiple permutes
and this is ensured during propagation itself.

2021-06-29  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_optimize_slp): Forward propagate
to "any" permute nodes and relax "any" permute proapgation
during iterative backward propagation.

3 years agoAdd 'default' to -foffload=; document that flag [PR67300]
Tobias Burnus [Tue, 29 Jun 2021 13:58:21 +0000 (15:58 +0200)]
Add 'default' to -foffload=; document that flag [PR67300]

As -foffload={options,targets,targets=options} is very convoluted,
it has been split into -foffload=targets (supporting the old syntax
for backward compatibilty) and -foffload-options={options,target=options}.

Only the new syntax is documented.

Additionally, -foffload=default is supported, which can reset the
devices after -foffload=disable / -foffload=targets to the default,
if needed.

gcc/ChangeLog:

PR other/67300
* common.opt (-foffload=): Update description.
(-foffload-options=): New.
* doc/invoke.texi (C Language Options): Document
-foffload and -foffload-options.
* gcc.c (check_offload_target_name): New, split off from
handle_foffload_option.
(check_foffload_target_names): New.
(handle_foffload_option): Handle -foffload=default.
(driver_handle_option): Update for -foffload-options.
* lto-opts.c (lto_write_options): Use -foffload-options
instead of -foffload.
* lto-wrapper.c (merge_and_complain, append_offload_options):
Likewise.
* opts.c (common_handle_option): Likewise.

libgomp/ChangeLog:

PR other/67300
* testsuite/libgomp.c-c++-common/reduction-16.c: Replace
-foffload=nvptx-none= by -foffload-options=nvptx-none= to
avoid disabling other offload targets.
* testsuite/libgomp.c-c++-common/reduction-5.c: Likewise.
* testsuite/libgomp.c-c++-common/reduction-6.c: Likewise.
* testsuite/libgomp.c/target-44.c: Likewise.

3 years agolibgomp.fortran/defaultmap-8.f90: Fix non-shared memory handling
Tobias Burnus [Tue, 29 Jun 2021 13:50:23 +0000 (15:50 +0200)]
libgomp.fortran/defaultmap-8.f90: Fix non-shared memory handling

Disable some more parts of the test as firstprivate does not work yet
due to PR fortran/90742.

libgomp/
* testsuite/libgomp.fortran/defaultmap-8.f90 (bar): Determine whether
target has shared memory and disable some scalar pointer/allocatable
checks if not as firstprivate does not work.

3 years agodoc/invoke.texi: Sort flags in 'C Language Options'
Tobias Burnus [Tue, 29 Jun 2021 12:40:43 +0000 (14:40 +0200)]
doc/invoke.texi: Sort flags in 'C Language Options'

As discussed during the review of
'[Patch] Add 'default' to -foffload=; document that flag [PR67300]'.

gcc/ChangeLog:

* doc/invoke.texi (C Language Options): Sort options
alphabetically in optlist and also the description itself.
Remove leftover -fallow-single-precision from and add missing
-fgnu-tm to the optlist.

3 years agoRefactor SLP permute opt propagation
Richard Biener [Tue, 29 Jun 2021 09:30:23 +0000 (11:30 +0200)]
Refactor SLP permute opt propagation

This rewrites the SLP permute opt propagation to elide the visited
bit for an incoming permute of -1 as well as allowing the initial
propagation to take more than one iteration before starting on
materialization.  As we still lack propagation in the reverse
direction I've added gcc.dg/vect/bb-slp-71.c and a stopgap to
restrict "any" permute handling to the supported cases.

2021-06-29  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (slpg_vertex::visited): Remove.
(vect_slp_perms_eq): Handle -1 permutes.
(vect_optimize_slp): Rewrite permute propagation.

* gcc.dg/vect/pr67790.c: Un-XFAIL.
* gcc.dg/vect/bb-slp-71.c: New testcase.

3 years agomatch.pd: Avoid (intptr_t)x eq/ne CST to x eq/ne (typeof x) CST opt in GENERIC when...
Jakub Jelinek [Tue, 29 Jun 2021 09:24:38 +0000 (11:24 +0200)]
match.pd: Avoid (intptr_t)x eq/ne CST to x eq/ne (typeof x) CST opt in GENERIC when sanitizing [PR101210]

When we have (intptr_t) x == cst where x has REFERENCE_TYPE, this
optimization creates x == cst out of it where cst has REFERENCE_TYPE.
If it is done in GENERIC folding, it can results in ubsan failures
where the INTEGER_CST with REFERENCE_TYPE is instrumented.

Fixed by deferring it to GIMPLE folding in this case.

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

PR c++/101210
* match.pd ((intptr_t)x eq/ne CST to x eq/ne (typeof x) CST): Don't
perform the optimization in GENERIC when sanitizing and x has a
reference type.

* g++.dg/ubsan/pr101210.C: New test.

3 years agotree-optimization/101242 - fix reverse graph entry detection
Richard Biener [Tue, 29 Jun 2021 07:33:24 +0000 (09:33 +0200)]
tree-optimization/101242 - fix reverse graph entry detection

This avoids detecting random unrelated nodes as possible entries
to not backwards reachable regions of the SLP graph.  Instead
explicitely add the problematic nodes.

This temporary XFAILs gcc.dg/vect/pr67790.c until I get the
permute propagation adjusted to when it needs more than one
optimistic iteration.

2021-06-29  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101242
* tree-vect-slp.c (vect_slp_build_vertices): Force-add
PHIs with not represented initial values as leafs.

* gcc.dg/vect/bb-slp-pr101242.c: New testcase.
* gcc.dg/vect/pr67790.c: XFAIL scan for zero VEC_PERM_EXPR.

3 years agopdp11: Fix signednedd warnings, remove "register" keywords
Jan-Benedict Glaw [Tue, 29 Jun 2021 07:23:07 +0000 (09:23 +0200)]
pdp11: Fix signednedd warnings, remove "register" keywords

gcc/ChangeLog:
* config/pdp11/pdp11.h (ASM_OUTPUT_SKIP): Fix signedness warning.
* config/pdp11/pdp11.c (pdp11_asm_print_operand_punct_valid_p): Remove
"register" keyword.
(pdp11_initial_elimination_offset) Remove unused variable.
(pdp11_cmp_length) Ditto.
(pdp11_insn_cost): Ditto, and fix signedness warning.

3 years agobootstrap: Include tm_p.h in btfout.c and ctfout.c.
David Edelsohn [Tue, 29 Jun 2021 02:54:42 +0000 (22:54 -0400)]
bootstrap: Include tm_p.h in btfout.c and ctfout.c.

btfout.c and ctfout.c reference target-specific macros that
may reference target-specific functions that are declared in a
target-specific header.  tm_p.h must be included to provide the
target-specific header.

gcc/ChangeLog:

* btfout.c: Include tm_p.h.
* ctfout.c: Same.

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

3 years agoanalyzer: introduce byte_range and use to simplify dumps
David Malcolm [Mon, 28 Jun 2021 23:18:06 +0000 (19:18 -0400)]
analyzer: introduce byte_range and use to simplify dumps

gcc/analyzer/ChangeLog:
* analyzer.h (byte_offset_t): New typedef.
* store.cc (bit_range::dump_to_pp): Dump as a byte range if
possible.
(bit_range::as_byte_range): New.
(byte_range::dump_to_pp): New.
* store.h (class byte_range): New forward decl.
(struct bit_range): Add comment.
(bit_range::as_byte_range): New decl.
(struct byte_range): New.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agoRegression tests for TREE_NO_WARNING enhancement to warning groups [PR74765, PR74762].
Martin Sebor [Mon, 28 Jun 2021 21:14:50 +0000 (15:14 -0600)]
Regression tests for TREE_NO_WARNING enhancement to warning groups [PR74765, PR74762].

PR middle-end/74765 - missing uninitialized warning (parenthesis, TREE_NO_WARNING abuse)
PR middle-end/74762 - [9/10/11/12 Regression] missing uninitialized warning (C++, parenthesized expr, TREE_NO_WARNING)

gcc/testsuite/ChangeLog:

* g++.dg/uninit-pr74762.C: New test.
* g++.dg/warn/uninit-pr74765.C: Same.

3 years agoobjc: Add support for per-location warning groups.
Martin Sebor [Mon, 28 Jun 2021 21:13:17 +0000 (15:13 -0600)]
objc: Add support for per-location warning groups.

gcc/objc/ChangeLog:

* objc-act.c (objc_maybe_build_modify_expr): Replace direct uses
of TREE_NO_WARNING with warning_suppressed_p, and suppress_warning.
(objc_build_incr_expr_for_property_ref): Same.
(objc_build_struct): Same.
(synth_module_prologue): Same.
* objc-gnu-runtime-abi-01.c (gnu_runtime_01_initialize): Same.
* objc-next-runtime-abi-01.c (next_runtime_01_initialize): Same.
* objc-next-runtime-abi-02.c (next_runtime_02_initialize): Same.

3 years agolibcc1: Add support for per-location warning groups.
Martin Sebor [Mon, 28 Jun 2021 21:09:46 +0000 (15:09 -0600)]
libcc1: Add support for per-location warning groups.

libcc1/ChangeLog:

* libcp1plugin.cc (record_decl_address): Replace a direct use
of TREE_NO_WARNING with suppress_warning.

3 years agofortran: Add support for per-location warning groups.
Martin Sebor [Mon, 28 Jun 2021 20:47:21 +0000 (14:47 -0600)]
fortran: Add support for per-location warning groups.

gcc/fortran/ChangeLog:

* trans-array.c (trans_array_constructor): Replace direct uses
of TREE_NO_WARNING with warning_suppressed_p, and suppress_warning.
* trans-decl.c (gfc_build_qualified_array): Same.
(gfc_build_dummy_array_decl): Same.
(generate_local_decl): Same.
(gfc_generate_function_code): Same.
* trans-openmp.c (gfc_omp_clause_default_ctor): Same.
(gfc_omp_clause_copy_ctor): Same.
* trans-types.c (get_dtype_type_node): Same.
(gfc_get_desc_dim_type): Same.
(gfc_get_array_descriptor_base): Same.
(gfc_get_caf_vector_type): Same.
(gfc_get_caf_reference_type): Same.
* trans.c (gfc_create_var_np): Same.

3 years agoada: Add support for per-location warning groups.
Martin Sebor [Mon, 28 Jun 2021 20:18:06 +0000 (14:18 -0600)]
ada: Add support for per-location warning groups.

gcc/ada/ChangeLog:

* gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu):
Replace TREE_NO_WARNING with suppress_warning.
(gnat_gimplify_expr): Same.
* gcc-interface/utils.c (gnat_pushdecl): Same.

3 years agolibbacktrace: improve XCOFF support
Ian Lance Taylor [Mon, 28 Jun 2021 17:34:58 +0000 (10:34 -0700)]
libbacktrace: improve XCOFF support

libbacktrace/ChangeLog:
2021-06-28  Clément Chigot  <clement.chigot@atos.net>

* xcoff.c (SSUBTYP_DWRNGES): New define.
(xcoff_add): Use correct XCOFF DWARF section subtype
for DEBUG_RANGES. Remove lineoff workaround.
Adjust base_address.
(xcoff_initialize_syminfo): Adapt to new base_address.
(xcoff_lookup_pc): Likewise.
(xcoff_initialize_fileline): Likewise.

3 years agolibiberty: copy over .BTF section when using LTO
Indu Bhagat [Fri, 28 May 2021 00:10:56 +0000 (17:10 -0700)]
libiberty: copy over .BTF section when using LTO

libiberty/ChangeLog:

* simple-object.c (handle_lto_debug_sections): Copy over .BTF section.

3 years agoEnable BTF generation in the BPF backend
Indu Bhagat [Thu, 20 May 2021 18:21:39 +0000 (11:21 -0700)]
Enable BTF generation in the BPF backend

This patch changes the BPF GCC backend in order to use the DWARF debug
hooks and therefore enables the user to generate BTF debugging
information with -gbtf.  Generating BTF is crucial when compiling BPF
programs, since the CO-RE (compile-once, run-everwhere) mechanism
used by the kernel BPF loader relies on it.

Note that since in eBPF it is not possible to unwind frames due to the
restrictive nature of the target architecture, we are disabling the
generation of CFA in this target.

2021-06-28  David Faust <david.faust@oracle.com>

* config/bpf/bpf.c (bpf_expand_prologue): Do not mark insns as
frame related.
(bpf_expand_epilogue): Likewise.
* config/bpf/bpf.h (DWARF2_FRAME_INFO): Define to 0.
Do not define DBX_DEBUGGING_INFO.

3 years agoCTF/BTF documentation
Indu Bhagat [Thu, 20 May 2021 18:20:50 +0000 (11:20 -0700)]
CTF/BTF documentation

This commit documents the new command line options introduced by the
CTF and BTF debug formats.

2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>

* doc/invoke.texi: Document the CTF and BTF debug info options.

3 years agoCTF/BTF testsuites
Indu Bhagat [Thu, 20 May 2021 18:19:04 +0000 (11:19 -0700)]
CTF/BTF testsuites

This commit adds a new testsuite for the CTF debug format.

2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
    David Faust  <david.faust@oracle.com>

gcc/testsuite/

* lib/gcc-dg.exp (gcc-dg-frontend-supports-ctf): New procedure.
(gcc-dg-debug-runtest): Add -gctf support.
* gcc.dg/debug/btf/btf-1.c: New test.
* gcc.dg/debug/btf/btf-2.c: Likewise.
* gcc.dg/debug/btf/btf-anonymous-struct-1.c: Likewise.
* gcc.dg/debug/btf/btf-anonymous-union-1.c: Likewise.
* gcc.dg/debug/btf/btf-array-1.c: Likewise.
* gcc.dg/debug/btf/btf-bitfields-1.c: Likewise.
* gcc.dg/debug/btf/btf-bitfields-2.c: Likewise.
* gcc.dg/debug/btf/btf-bitfields-3.c: Likewise.
* gcc.dg/debug/btf/btf-cvr-quals-1.c: Likewise.
* gcc.dg/debug/btf/btf-enum-1.c: Likewise.
* gcc.dg/debug/btf/btf-forward-1.c: Likewise.
* gcc.dg/debug/btf/btf-function-1.c: Likewise.
* gcc.dg/debug/btf/btf-function-2.c: Likewise.
* gcc.dg/debug/btf/btf-int-1.c: Likewise.
* gcc.dg/debug/btf/btf-pointers-1.c: Likewise.
* gcc.dg/debug/btf/btf-struct-1.c: Likewise.
* gcc.dg/debug/btf/btf-typedef-1.c: Likewise.
* gcc.dg/debug/btf/btf-union-1.c: Likewise.
* gcc.dg/debug/btf/btf-variables-1.c: Likewise.
* gcc.dg/debug/btf/btf.exp: Likewise.
* gcc.dg/debug/ctf/ctf-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-anonymous-struct-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-anonymous-union-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-array-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-array-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-array-3.c: Likewise.
* gcc.dg/debug/ctf/ctf-array-4.c: Likewise.
* gcc.dg/debug/ctf/ctf-attr-mode-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-attr-used-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-bitfields-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-bitfields-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-bitfields-3.c: Likewise.
* gcc.dg/debug/ctf/ctf-bitfields-4.c: Likewise.
* gcc.dg/debug/ctf/ctf-complex-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-cvr-quals-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-cvr-quals-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-cvr-quals-3.c: Likewise.
* gcc.dg/debug/ctf/ctf-cvr-quals-4.c: Likewise.
* gcc.dg/debug/ctf/ctf-enum-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-enum-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-file-scope-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-float-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-forward-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-forward-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-func-index-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-function-pointers-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-function-pointers-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-function-pointers-3.c: Likewise.
* gcc.dg/debug/ctf/ctf-functions-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-int-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-objt-index-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-pointers-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-pointers-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-preamble-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-skip-types-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-skip-types-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-skip-types-3.c: Likewise.
* gcc.dg/debug/ctf/ctf-skip-types-4.c: Likewise.
* gcc.dg/debug/ctf/ctf-skip-types-5.c: Likewise.
* gcc.dg/debug/ctf/ctf-skip-types-6.c: Likewise.
* gcc.dg/debug/ctf/ctf-str-table-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-struct-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-struct-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-struct-array-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-struct-pointer-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-struct-pointer-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-typedef-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-typedef-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-typedef-3.c: Likewise.
* gcc.dg/debug/ctf/ctf-typedef-struct-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-typedef-struct-2.c: Likewise.
* gcc.dg/debug/ctf/ctf-typedef-struct-3.c: Likewise.
* gcc.dg/debug/ctf/ctf-union-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-variables-1.c: Likewise.
* gcc.dg/debug/ctf/ctf-variables-2.c: Likewise.
* gcc.dg/debug/ctf/ctf.exp: Likewise.

3 years agoCTF/BTF debug formats
Indu Bhagat [Thu, 20 May 2021 18:15:52 +0000 (11:15 -0700)]
CTF/BTF debug formats

This commit introduces support for generating CTF debugging
information and BTF debugging information from GCC.

2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
    David Faust  <david.faust@oracle.com>
    Jose E. Marchesi  <jose.marchesi@oracle.com>
    Weimin Pan  <weimin.pan@oracle.com>

gcc/

* Makefile.in: Add ctfc.*, ctfout.c and btfout.c files to
GTFILES.  Add new object files.
* common.opt: Add CTF and BTF debug info options.
* btfout.c: New file.
* ctfc.c: Likewise.
* ctfc.h: Likewise.
* ctfout.c: Likewise.
* dwarf2ctf.c: Likewise.
* dwarf2ctf.h: Likewise.
* dwarf2cfi.c (dwarf2out_do_frame): Acknowledge CTF_DEBUG and
BTF_DEBUG.
* dwarf2out.c (dwarf2out_source_line): Likewise.
(dwarf2out_finish): Skip emitting DWARF if CTF or BTF are to
be generated.
(debug_format_do_cu): New function.
(dwarf2out_early_finish): Traverse DIEs and emit CTF/BTF for
them if requested.
Include dwarf2ctf.c.
* final.c (dwarf2_debug_info_emitted_p): Acknowledge DWARF-based debug
formats.
* flag-types.h (enum debug_info_type): Add CTF_DEBUG and BTF_DEBUG.
(CTF_DEBUG): New bitmask.
(BTF_DEBUG): Likewise.
(enum ctf_debug_info_levels): New enum.
* gengtype.c (open_base_files): Handle ctfc.h.
(main): Handle uint32_t type.
* flags.h (btf_debuginfo_p): New definition.
(dwarf_based_debuginfo_p): Likewise.
* opts.c (debug_type_names): Add entries for CTF and BTF.
(btf_debuginfo_p): New function.
(dwarf_based_debuginfo_p): Likewise.
(common_handle_option): Handle -gctfN and -gbtf options.
(set_debug_level): Set CTF_DEBUG, BTF_DEBUG whenever appropriate.
* toplev.c (process_options): Inform the user and ignore -gctfLEVEL if
frontend is not C.

include/

* ctf.h: New file.
* btf.h: Likewise.

libiberty/

* simple-object.c (handle_lto_debug_sections): Copy over .ctf
sections.

3 years agodejagnu: modularize gcc-dg-debug-runtest a bit
Indu Bhagat [Thu, 20 May 2021 17:32:38 +0000 (10:32 -0700)]
dejagnu: modularize gcc-dg-debug-runtest a bit

Move some functionality into a procedure of its own. This is only so that when
the patch for ctf comes along, the gcc-dg-debug-runtest procedure looks bit
more uniform.

gcc/testsuite/ChangeLog:

* lib/gcc-dg.exp (gcc-dg-target-supports-debug-format): New procedure.

3 years agodwarf: externalize some DWARF internals for needs of CTF/BTF
Indu Bhagat [Thu, 20 May 2021 17:30:13 +0000 (10:30 -0700)]
dwarf: externalize some DWARF internals for needs of CTF/BTF

This patch externalizes some internal DIE structures and their attributes
for the use of DWARF-based debug formats like CTF and BTF.

The following functions which were previously defined as static in
dwarf2out.c are now non-static, and extern prototypes for them have
been added to dwarf2out.h:

- get_AT
- AT_int
- AT_class
- AT_loc
- get_AT_ref
- get_AT_string
- get_AT_class
- AT_unsigned
- get_AT_unsigned
- get_AT_flag
- add_name_attribute
- new_die_raw
- base_type_die
- lookup_decl_die
- get_AT_file

Note how this patch doens't change the names of these functions to
avoid a massive renaming in dwarf2out.c, but in the future we probably
want these functions to sport a dw_* prefix.

Also, some type definitions have been moved from dwarf2out.c to
dwarf2out.h:

- dw_attr_node
- struct dwarf_file_data

Finally, three new accessor functions have been added to dwarf2out.c
with prototypes in dwarf2out.h:

- dw_get_die_child
- dw_get_die_sib
- dw_get_die_tag

2021-06-28  Jose E. Marchesi  <jose.marchesi@oracle.com>

* dwarf2out.c (AT_class): Function is no longer static.
(AT_int): Likewise.
(AT_unsigned): Likewise.
(AT_loc): Likewise.
(get_AT): Likewise.
(get_AT_string): Likewise.
(get_AT_flag): Likewise.
(get_AT_unsigned): Likewise.
(get_AT_ref): Likewise.
(new_die_raw): Likewise.
(lookup_decl_die): Likewise.
(base_type_die): Likewise.
(add_name_attribute): Likewise.
(add_AT_int): Likewise.
(add_AT_unsigned): Likewise.
(add_AT_loc): Likewise.
(dw_get_die_tag): New function.
(dw_get_die_child): Likewise.
(dw_get_die_sib): Likewise.
(struct dwarf_file_data): Move from here to dwarf2out.h
(struct dw_attr_struct): Likewise.
* dwarf2out.h: Analogous changes.

3 years agoipa-sra: Introduce a mini-DCE to tree-inline.c (PR 93385)
Martin Jambor [Mon, 28 Jun 2021 16:20:00 +0000 (18:20 +0200)]
ipa-sra: Introduce a mini-DCE to tree-inline.c (PR 93385)

I was asked by Richi to split my fix for PR 93385 for easier review
into IPA-SRA materialization refactoring and the actual DCE addition.
This is the second part that actually contains the DCE of statements
that IPA-SRA should not leave behind because they can have problematic
side effects, even if they are useless, so that we do not depend on
tree-dce to remove them for correctness.

The patch fixes the problem by doing a def-use walk when materializing
clones, marking which statements should not be copied and which
SSA_NAMEs do not need to be computed because eventually they would be
DCEd.  We do this on the original function body and tree-inline simply
does not copy statements which are "dead."

The only complication is removing dead argument calls because that
needs to be communicated to callee redirection code using the
infrastructure introduced by the previous patch.

I added all testcases of the original patch to this one, although some
probably test behavior introduced in the previous patch.

gcc/ChangeLog:

2021-05-12  Martin Jambor  <mjambor@suse.cz>

PR ipa/93385
* ipa-param-manipulation.h (class ipa_param_body_adjustments): New
members m_dead_stmts and m_dead_ssas.
* ipa-param-manipulation.c
(ipa_param_body_adjustments::mark_dead_statements): New function.
(ipa_param_body_adjustments::common_initialization): Call it on
all removed but not split parameters.
(ipa_param_body_adjustments::ipa_param_body_adjustments): Initialize
new mwmbers.
(ipa_param_body_adjustments::modify_call_stmt): Remove arguments that
are dead.
* tree-inline.c (remap_gimple_stmt): Do not copy dead statements, reset
dead debug statements.
(copy_phis_for_bb): Do not copy dead PHI nodes.

gcc/testsuite/ChangeLog:

2021-03-22  Martin Jambor  <mjambor@suse.cz>

PR ipa/93385
* gcc.dg/ipa/pr93385.c: New test.
* gcc.dg/ipa/ipa-sra-23.c: Likewise.
* gcc.dg/ipa/ipa-sra-24.c: Likewise.
* g++.dg/ipa/ipa-sra-4.C: Likewise.

3 years agoipa-sra: Restructure how cloning and call redirection communicate (PR 93385)
Martin Jambor [Mon, 28 Jun 2021 16:20:00 +0000 (18:20 +0200)]
ipa-sra: Restructure how cloning and call redirection communicate (PR 93385)

I was asked by Richi to split my fix for PR 93385 for easier review
into IPA-SRA materialization refactoring and the actual DCE addition.
Fortunately it was mostly natural except for a temporary weird
condition in ipa_param_body_adjustments::modify_call_stmt.
Additionally.  In addition to the patch I posted previously, this one
also deallocated the newly added summary in toplev::finalize and fixes
a mistakenly uninitialized field.

This is the first part which basically replaces performed_splits in
clone_info and the code which generates it, keeps it up-to-date and
consumes it with new edge summaries which are much nicer.  It simply
contains 1) a mapping from the original argument indices to the actual
indices in the call statement as it is now, 2) information needed to
identify arguments representing pass-through IPA-SRA splits with which
have been added to the call arguments in place of an original
argument/reference and 3) a delta to the index where va_args may start
- so basically directly all the information that the consumer of
performed_splits had to compute and we also do not need the weird
dummy declarations.

The main disadvantage is that the information has to be created (and
kept up-to-date) for all call graph edges associated with the given
statement from all clones (including inline clones) of the clone where
splitting or removal happened first.  But all of this happens during
clone materialization so the only effect on WPA memory consumption is
the removal of a pointer from clone_info.

The statement modification code also has to know the statement from
the original function in order to be able to locate the edge summaries
which at this point are still keyed to these.  However, the code is
already quite heavily dependant on how things are structured in
tree-inline.c and in order to fix bugs like these it probably has to
be.

The subsequent patch needs this new information to be able to remove
arguments from calls during materialization and communicate this
information to the call redirection.

gcc/ChangeLog:

2021-05-17  Martin Jambor  <mjambor@suse.cz>

PR ipa/93385
* symtab-clones.h (clone_info): Removed member param_adjustments.
* ipa-param-manipulation.h: Adjust initial comment to reflect how we
deal with pass-through splits now.
(ipa_param_performed_split): Removed.
(ipa_param_adjustments::modify_call): Adjusted parameters.
(class ipa_param_body_adjustments): Adjusted parameters of
register_replacement, modify_gimple_stmt and modify_call_stmt.
(ipa_verify_edge_has_no_modifications): Declare.
(ipa_edge_modifications_finalize): Declare.
* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Remove
performed_splits processing, pas only edge to padjs->modify_call,
check that call arguments were not modified if they should not have
been.
* cgraphclones.c (cgraph_node::create_clone): Do not copy performed
splits.
* ipa-param-manipulation.c (struct pass_through_split_map): New type.
(ipa_edge_modification_info): Likewise.
(ipa_edge_modification_sum): Likewise.
(ipa_edge_modifications): New edge summary.
(ipa_verify_edge_has_no_modifications): New function.
(transitive_split_p): Removed.
(transitive_split_map): Likewise.
(init_transitive_splits): Likewise.
(ipa_param_adjustments::modify_call): Adjusted to use the new edge
summary instead of performed_splits.
(ipa_param_body_adjustments::register_replacement): Drop dummy
parameter, set base_index of the created ipa_param_body_replacement.
(phi_arg_will_live_p): New function.
(ipa_param_body_adjustments::common_initialization): Do not create
IPA_SRA dummy decls.
(simple_tree_swap_info): Removed.
(remap_split_decl_to_dummy): Likewise.
(record_argument_state_1): New function.
(record_argument_state): Likewise.
(ipa_param_body_adjustments::modify_call_stmt): New parameter
orig_stmt.  Do not work with dummy decls, save necessary info about
changes to ipa_edge_modifications.
(ipa_param_body_adjustments::modify_gimple_stmt): New parameter
orig_stmt, pass it to modify_call_stmt.
(ipa_param_body_adjustments::modify_cfun_body): Adjust call to
modify_gimple_stmt.
(ipa_edge_modifications_finalize): New function.
* tree-inline.c (remap_gimple_stmt): Pass original statement to
modify_gimple_stmt.
(copy_phis_for_bb): Do not copy dead PHI nodes.
(expand_call_inline): Do not remap performed_splits.
(update_clone_info): Likewise.
* toplev.c: Include ipa-param-manipulation.h.
(toplev::finalize): Call ipa_edge_modifications_finalize.

3 years agolibstdc++: Remove redundant explicit instantiations
Jonathan Wakely [Mon, 28 Jun 2021 14:16:08 +0000 (15:16 +0100)]
libstdc++: Remove redundant explicit instantiations

These function templates are explicitly specialized for char and wchar_t
streambufs, so the explicit instantiations do nothing. Remove them, to
avoid confusion.

libstdc++-v3/ChangeLog:

* include/bits/streambuf.tcc (__copy_streambufs_eof): Remove
explicit instantiation declarations.
* src/c++11/streambuf-inst.cc (__copy_streambufs_eof): Remove
explicit instantiation definitions.

3 years agolibstdc++: Fix backwards logic in 17_intro/names.cc test [PR 97088]
Jonathan Wakely [Mon, 28 Jun 2021 14:13:34 +0000 (15:13 +0100)]
libstdc++: Fix backwards logic in 17_intro/names.cc test [PR 97088]

I meant to undef the names that clash with newlib headers for newlib,
but I only undef'd them for non-newlib targets. This means they still
cause errors for newlib, and aren't tested for other targets.

This fixes the test to check those names for non-newlib targets, and to
undef them to avoid errors for newlib.

libstdc++-v3/ChangeLog:

PR libstdc++/97088
* testsuite/17_intro/names.cc: Fix #if condition for names used
by newlib headers.

3 years agolibstdc++: Allow unique_ptr<Incomplete[]>::operator[] [PR 101236]
Jonathan Wakely [Mon, 28 Jun 2021 11:59:19 +0000 (12:59 +0100)]
libstdc++: Allow unique_ptr<Incomplete[]>::operator[] [PR 101236]

PR libstdc++/101236 shows that LLVM depends on being able to use
unique_ptr<T[]>::operator[] when T is incomplete. This is undefined, but
previously worked with libstdc++. When I added the conditional noexcept
to that operator we started to diagnose the incomplete type.

This change restores support for that case, by making the noexcept
condition check that the type is complete before checking whether
indexing on the pointer can throw.  A workaround for PR c++/101239 is
needed to avoid a bogus error where G++ fails to do SFINAE on the
ill-formed p[n] expression and gets an ICE. Instead of checking that the
p[n] expression is valid in the trailing-return-type, we only check that
the element_type is complete.

libstdc++-v3/ChangeLog:

PR libstdc++/101236
* include/bits/unique_ptr.h (unique_ptr<T[], D>::operator[]):
Fail gracefully if element_type is incomplete.
* testsuite/20_util/unique_ptr/cons/incomplete.cc: Clarify that
the standard doesn't require this test to work for array types.
* testsuite/20_util/unique_ptr/lwg2762.cc: Check that incomplete
types can be used with array specialization.
* testsuite/20_util/unique_ptr/101236.cc: New test.

3 years agolibstdc++: Implement LWG 415 for std::ws
Jonathan Wakely [Fri, 25 Jun 2021 20:33:02 +0000 (21:33 +0100)]
libstdc++: Implement LWG 415 for std::ws

For C++11 std::ws changed to be an unformatted input function, meaning
it constructs a sentry and sets badbit on exceptions.

libstdc++-v3/ChangeLog:

* doc/xml/manual/intro.xml: Document LWG 415 change.
* doc/html/manual/bugs.html: Regenerate.
* include/bits/istream.tcc (ws): Create sentry and catch
exceptions.
* testsuite/27_io/basic_istream/ws/char/lwg415.cc: New test.
* testsuite/27_io/basic_istream/ws/wchar_t/lwg415.cc: New test.

3 years agomklog: Handle correctly long lines.
Martin Liska [Mon, 28 Jun 2021 11:08:10 +0000 (13:08 +0200)]
mklog: Handle correctly long lines.

contrib/ChangeLog:

* mklog.py: Handle correctly long lines.
* test_mklog.py: Test it.

3 years agoDuplicate the range information of the phi onto the new ssa_name
Andrew Pinski [Sat, 19 Jun 2021 17:08:21 +0000 (10:08 -0700)]
Duplicate the range information of the phi onto the new ssa_name

Since match_simplify_replacement uses gimple_simplify, there is a new
ssa name created sometimes and then we go and replace the phi edge with
this new ssa name, the range information on the phi is lost.
Placing this in replace_phi_edge_with_variable is the best option instead
of doing it in each time replace_phi_edge_with_variable is called which is
what is done today.

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

gcc/ChangeLog:

* tree-ssa-phiopt.c (replace_phi_edge_with_variable): Duplicate range
info if we're the only things setting the target PHI.
(value_replacement): Don't duplicate range here.
(minmax_replacement): Likewise.

3 years agotree-optimization/101229 - fix vectorizer SLP hybrid detection with PHIs
Richard Biener [Mon, 28 Jun 2021 09:05:46 +0000 (11:05 +0200)]
tree-optimization/101229 - fix vectorizer SLP hybrid detection with PHIs

This fixes the missing handling of PHIs in gimple_walk_op which causes
the new vectorizer SLP hybrid detection scheme to fail.

2021-06-28  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101229
* gimple-walk.c (gimple_walk_op): Handle PHIs.

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

3 years agov850: silent 2 warnings
Martin Liska [Wed, 23 Jun 2021 13:48:28 +0000 (15:48 +0200)]
v850: silent 2 warnings

Silents:

/home/marxin/Programming/gcc/gcc/config/v850/v850.c: In function ‘char* construct_dispose_instruction(rtx)’:
/home/marxin/Programming/gcc/gcc/config/v850/v850.c:2690:22: warning: ‘%s’ directive writing up to 99 bytes into a region of size between 79 and 89 [-Wformat-overflow=]
 2690 |       sprintf (buff, "dispose %d {%s}, r31", stack_bytes / 4, regs);
      |                      ^~~~~~~~~~~~~~~~~~~~~~                   ~~~~
/home/marxin/Programming/gcc/gcc/config/v850/v850.c:2690:15: note: ‘sprintf’ output between 18 and 127 bytes into a destination of size 100
 2690 |       sprintf (buff, "dispose %d {%s}, r31", stack_bytes / 4, regs);
      |       ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/marxin/Programming/gcc/gcc/config/v850/v850.c: In function ‘char* construct_prepare_instruction(rtx)’:
/home/marxin/Programming/gcc/gcc/config/v850/v850.c:2814:22: warning: ‘%s’ directive writing up to 99 bytes into a region of size 91 [-Wformat-overflow=]
 2814 |       sprintf (buff, "prepare {%s}, %d", regs, (- stack_bytes) / 4);
      |                      ^~~~~~~~~~~~~~~~~~  ~~~~
/home/marxin/Programming/gcc/gcc/config/v850/v850.c:2814:15: note: ‘sprintf’ output between 14 and 123 bytes into a destination of size 100
 2814 |       sprintf (buff, "prepare {%s}, %d", regs, (- stack_bytes) / 4);
      |       ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gcc/ChangeLog:

* config/v850/v850.c (construct_dispose_instruction): Allocate
a bigger buffer.
(construct_prepare_instruction): Likewise.

3 years agov850: add v850_can_inline_p target hook
Martin Liska [Wed, 23 Jun 2021 13:46:22 +0000 (15:46 +0200)]
v850: add v850_can_inline_p target hook

gcc/ChangeLog:

* config/v850/v850.c (v850_option_override): Build default
target node.
(v850_can_inline_p): New.  Allow MASK_PROLOG_FUNCTION to be
ignored for inlining.
(TARGET_CAN_INLINE_P): New.

3 years agotree-optimization/101207 - fix BB reduc permute elide with life stmts
Richard Biener [Mon, 28 Jun 2021 07:42:58 +0000 (09:42 +0200)]
tree-optimization/101207 - fix BB reduc permute elide with life stmts

This fixes breakage of live lane extracts from permuted loads we elide
from BB reduction vectorization by handling the un-permuting the same
as in the regular eliding code - apply the reverse permute to
both the scalar stmts and the load permutation.

2021-06-28  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101207
* tree-vect-slp.c (vect_optimize_slp): Do BB reduction
permute eliding for load permutations properly.

* gcc.dg/vect/bb-slp-pr101207.c: New testcase.

3 years agotree-optimization/101173 - fix interchange dependence checking
Richard Biener [Wed, 23 Jun 2021 07:59:28 +0000 (09:59 +0200)]
tree-optimization/101173 - fix interchange dependence checking

This adjusts the loop interchange dependence checking to disallow
an outer loop dependence distance of zero.

2021-06-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101173
* gimple-loop-interchange.cc
(tree_loop_interchange::valid_data_dependences): Disallow outer
loop dependence distance of zero.

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

3 years agoFor 128/256-bit vec_cond_expr, When mask operands is lt reg const0_rtx, blendv can...
liuhongt [Mon, 24 May 2021 02:57:52 +0000 (10:57 +0800)]
For 128/256-bit vec_cond_expr, When mask operands is lt reg const0_rtx, blendv can be used instead of avx512 mask.

gcc/ChangeLog:

PR target/100648
* config/i386/sse.md (*avx_cmp<mode>3_lt): New
define_insn_and_split.
(*avx_cmp<mode>3_ltint): Ditto.
(*avx2_pcmp<mode>3_3): Ditto.
(*avx2_pcmp<mode>3_4): Ditto.
(*avx2_pcmp<mode>3_5): Ditto.

gcc/testsuite/ChangeLog:

PR target/100648
* g++.target/i386/avx2-pr54700-2.C: Adjust testcase.
* g++.target/i386/avx512vl-pr54700-1a.C: New test.
* g++.target/i386/avx512vl-pr54700-1b.C: New test.
* g++.target/i386/avx512vl-pr54700-2a.C: New test.
* g++.target/i386/avx512vl-pr54700-2b.C: New test.
* gcc.target/i386/avx512vl-pr100648.c: New test.
* gcc.target/i386/avx512vl-blendv-1.c: New test.
* gcc.target/i386/avx512vl-blendv-2.c: New test.

3 years agoFold blendv builtins into gimple.
liuhongt [Fri, 21 May 2021 01:48:18 +0000 (09:48 +0800)]
Fold blendv builtins into gimple.

Fold __builtin_ia32_pblendvb128 (a, b, c) as VEC_COND_EXPR (c < 0, b,
a), similar for float version but with mask operand VIEW_CONVERT_EXPR
to same sized integer vectype.

gcc/ChangeLog:

* config/i386/i386-builtin.def (IX86_BUILTIN_BLENDVPD256,
IX86_BUILTIN_BLENDVPS256, IX86_BUILTIN_PBLENDVB256,
IX86_BUILTIN_BLENDVPD, IX86_BUILTIN_BLENDVPS,
IX86_BUILTIN_PBLENDVB128): Replace icode with
CODE_FOR_nothing.
* config/i386/i386.c (ix86_gimple_fold_builtin): Fold blendv
builtins.
* config/i386/sse.md (*<sse4_1_avx2>_pblendvb_lt_subreg_not):
New pre_reload splitter.

gcc/testsuite/ChangeLog:

* gcc.target/i386/funcspec-8.c: Replace
__builtin_ia32_blendvpd with  __builtin_ia32_roundps_az.
* gcc.target/i386/blendv-1.c: New test.
* gcc.target/i386/blendv-2.c: New test.

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

3 years agoFix PR 101230: ICE in fold_cond_expr_with_comparison
Andrew Pinski [Sun, 27 Jun 2021 20:14:48 +0000 (13:14 -0700)]
Fix PR 101230: ICE in fold_cond_expr_with_comparison

This fixes PR 101230 where I had messed up and forgot that
invert_tree_comparison can return ERROR_MARK if the comparsion
is not invertable (floating point types).

Committed as obvious after a bootstrap/test on x86_64-linux-gnu-gnu

gcc/ChangeLog:

PR middle-end/101230
* fold-const.c (fold_ternary_loc): Check
the return value of invert_tree_comparison.

gcc/testsuite/ChangeLog:

* gcc.dg/torture/pr101230-1.c: New test.

3 years agoaix: Add AIX 7.3 configuration and SPDX License Identifiers.
David Edelsohn [Thu, 24 Jun 2021 19:40:25 +0000 (15:40 -0400)]
aix: Add AIX 7.3 configuration and SPDX License Identifiers.

The anticipated release of AIX 7.3 has been announced.  This
patch adds the configuration bits based on AIX 7.2 configuration.

gcc/ChangeLog:

* config.gcc: Add SPDX License Identifier.
(powerpc-ibm-aix789): Default to aix73.h.
(powerpc-ibm-aix7.2.*.*): New stanza.
* config/rs6000/aix72.h: Add SPDX License Identifier.
* config/rs6000/aix73.h: New file.

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

3 years agoc++: access scope during partial spec matching [PR96204]
Patrick Palka [Sat, 26 Jun 2021 15:05:54 +0000 (11:05 -0400)]
c++: access scope during partial spec matching [PR96204]

Here, when determining whether the partial specialization matches
has_type_member<Child>, we do so from the scope of where the template-id
appears rather than from the scope of the specialization, and this
causes us to select the partial specialization (since Child::type is
accessible from Parent).  When we later instantiate this partial
specialization, we've entered the scope of the specialization and so
substitution into e.g. the DECL_CONTEXT of has_type_member::value fails
with access errors since the friend declaration that we relied on to
choose the partial specialization no longer applies.

It seems the appropriate access scope from which to perform partial
specialization matching is the specialization itself (similar to how
we check access of base-clauses), which is what this patch implements.

PR c++/96204

gcc/cp/ChangeLog:

* pt.c (instantiate_class_template_1): Enter the scope of the
type when calling most_specialized_partial_spec.

gcc/testsuite/ChangeLog:

* g++.dg/template/access40.C: New test.
* g++.dg/template/access40a.C: New test.

3 years agoexcept: remove dwarf2out.h dependency
Jason Merrill [Thu, 24 Jun 2021 14:37:42 +0000 (10:37 -0400)]
except: remove dwarf2out.h dependency

When thinking about the CTF debug patchset dwarf2out.h split, I noticed that
except.c only needs macros from dwarf2.h, nothing from dwarf2out.h.

gcc/ChangeLog:

* except.c: #include "dwarf2.h" instead of "dwarf2out.h".

3 years agoc++: constexpr aggr init of empty class [PR101040]
Jason Merrill [Thu, 24 Jun 2021 21:32:02 +0000 (17:32 -0400)]
c++: constexpr aggr init of empty class [PR101040]

This is basically the aggregate initializer version of PR97566; as in that
bug, we are trying to initialize empty field 'obj' in 'single' when there's
no CONSTRUCTOR entry for the 'single' base class subobject of 'derived'.  As
with that bug, the fix is to stop trying to add entries for empty fields,
this time in cxx_eval_bare_aggregate.

The change to the other function isn't necessary for this version of
the patch, but seems worthwhile for robustness anyway.

PR c++/101040
PR c++/97566

gcc/cp/ChangeLog:

* class.c (is_empty_field): Handle null argument.
* constexpr.c (cxx_eval_bare_aggregate): Discard initializer
for empty field.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/no_unique_address13.C: New test.

3 years agoLower for loops before lowering cond in genmatch
Andrew Pinski [Sun, 13 Jun 2021 01:58:03 +0000 (18:58 -0700)]
Lower for loops before lowering cond in genmatch

While converting some fold_cond_expr_with_comparison
to match, I found that I wanted to use "for cnd (cond vec_cond)"
but that was not causing the lowering of cond to happen.
What was happening was the lowering of the for loop
was happening after the lowering of the cond. So
swapping was the correct thing to do but it also
means we need to copy for_subst_vec in lower_cond.

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

gcc/ChangeLog:

* genmatch.c (lower_cond): Copy for_subst_vec
for the simplify also.
(lower): Swap the order for lower_for and lower_cond.

3 years agoReset the range info on the moved instruction in PHIOPT
Andrew Pinski [Sat, 19 Jun 2021 00:55:51 +0000 (17:55 -0700)]
Reset the range info on the moved instruction in PHIOPT

I had missed this when wrote the patch which allowed the
gimple to be moved from inside the conditional as it.  It
was also missed in the review.  Anyways the range information
needs to be reset for the moved gimple as it was under a
conditional and the flow has changed to be unconditional.
I have not seen any testcase in the wild that produces wrong code
yet which is why there is no testcase but this is similar to what
the other code in phiopt does so after moving those to match, there
might be some.

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

gcc/ChangeLog:

* tree-ssa-phiopt.c (match_simplify_replacement): Reset
flow senatitive info on the moved ssa set.

3 years agoExpand the comparison argument of fold_cond_expr_with_comparison
Andrew Pinski [Sat, 12 Jun 2021 02:52:30 +0000 (19:52 -0700)]
Expand the comparison argument of fold_cond_expr_with_comparison

To make things slightly easiler to convert fold_cond_expr_with_comparison
over to match.pd, expanding the arg0 argument into 3 different arguments
is done. Also this was simple because we don't use arg0 after grabbing
the code and the two operands.
Also since we do this, we don't need to fold the comparison to
get the inverse but just use invert_tree_comparison directly.

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

gcc/ChangeLog:

* fold-const.c (fold_cond_expr_with_comparison):
Exand arg0 into comp_code, arg00, and arg01.
(fold_ternary_loc): Use invert_tree_comparison
instead of fold_invert_truthvalue for the case
where we have A CMP B ? C : A.

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

3 years agoc++: Failure to delay noexcept parsing with ptr-operator [PR100752]
Marek Polacek [Tue, 8 Jun 2021 21:44:13 +0000 (17:44 -0400)]
c++: Failure to delay noexcept parsing with ptr-operator [PR100752]

We weren't passing 'flags' to the recursive call to cp_parser_declarator
in the ptr-operator case and as an effect, delayed parsing of noexcept
didn't work as advertised.  The following change passes more than just
CP_PARSER_FLAGS_DELAY_NOEXCEPT but that doesn't seem to break anything.

I'm now also passing member_p and static_p, as a consequence, two tests
needed small tweaks.

PR c++/100752

gcc/cp/ChangeLog:

* parser.c (cp_parser_declarator): Pass flags down to
cp_parser_declarator.  Also pass static_p/member_p.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/noexcept69.C: New test.
* g++.dg/parse/saved1.C: Adjust dg-error.
* g++.dg/template/crash50.C: Likewise.

3 years agojit: fix test-vector-* failures
David Malcolm [Fri, 25 Jun 2021 23:07:30 +0000 (19:07 -0400)]
jit: fix test-vector-* failures

Fix failures seen on i686 due to relying on exact floating-point
equality when testing results of vector division.

gcc/testsuite/ChangeLog:
* jit.dg/test-vector-rvalues.cc (check_div): Add specialization
for v4f, to avoid relying on exact floating-point equality.
* jit.dg/test-vector-types.cc (check_div): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agojit: fix test-asm failures on i?86
David Malcolm [Fri, 25 Jun 2021 23:07:25 +0000 (19:07 -0400)]
jit: fix test-asm failures on i?86

On i686, test_i386_basic_asm_4 has:
  error: inconsistent operand constraints in an 'asm'
and test_i386_basic_asm_5 has:
  /tmp/libgccjit-9FsLie/fake.s:9: Error: bad register name `%rdi'
  /tmp/libgccjit-9FsLie/fake.s:10: Error: bad register name `%rsi'

This is only intended as a smoketest of asm support, so only run
it on x86_64.

gcc/testsuite/ChangeLog:
* jit.dg/test-asm.c: Remove i?86-*-* from target specifier.
* jit.dg/test-asm.cc: Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agoPR middle-end/101216 - spurious notes for function calls
Martin Sebor [Fri, 25 Jun 2021 23:01:01 +0000 (17:01 -0600)]
PR middle-end/101216 - spurious notes for function calls

PR middle-end/101216

gcc/ChangeLog:

* calls.c (maybe_warn_rdwr_sizes): Use the no_warning constant.

gcc/testsuite/ChangeLog:

* gcc.dg/Wnonnull-7.c: New test.

3 years agolibstdc++: Avoid intercepting exception in ostream::write
Jonathan Wakely [Fri, 25 Jun 2021 17:31:23 +0000 (18:31 +0100)]
libstdc++: Avoid intercepting exception in ostream::write

Currently if ostream::write fails and sets badbit and that causes an
exception, we will catch the exception, set badbit again, and rethrow
the exception.

This change delays setting badbit until after the try-catch block, so
that if it causes an exception we don't need to catch and rethrow it.

This removes the last remaining use of _M_write, so it can be made
private (or removed entirely for versioned namespace builds, where ABI
compatibility is not required). All other uses of _M_write were replaced
by calls to __ostream_insert, so make _M_write use that too.

libstdc++-v3/ChangeLog:

* include/bits/ostream.tcc (basic_ostream::write): Call sputn
directly instead of using _M_write. Do setstate(__err) all
outside the try-catch block.
* include/std/ostream (basic_ostream::_M_write): Declare
private. Use __ostream_insert. Do not define for the versioned
namespace.

3 years agolibstdc++: Implement LWG 581 for std:ostream::flush()
Jonathan Wakely [Fri, 25 Jun 2021 17:31:23 +0000 (18:31 +0100)]
libstdc++: Implement LWG 581 for std:ostream::flush()

LWG 581 changed ostream::flush() to an unformatted output function for
C++11, but it was never implemented in libstdc++.

libstdc++-v3/ChangeLog:

* doc/xml/manual/intro.xml: Document LWG 581 change.
* doc/html/manual/bugs.html: Regenerate.
* include/bits/basic_ios.tcc: Whitespace.
* include/bits/ostream.tcc (basic_ostream::flush()): Construct
sentry.
* testsuite/27_io/basic_ostream/flush/char/2.cc: Check
additional cases.
* testsuite/27_io/basic_ostream/flush/char/exceptions_badbit_throw.cc:
Likewise.
* testsuite/27_io/basic_ostream/flush/wchar_t/2.cc: Likewise.
* testsuite/27_io/basic_ostream/flush/wchar_t/exceptions_badbit_throw.cc:
Likewise.

3 years agolibstdc++: Fix exception handling in std::ostream seek functions
Jonathan Wakely [Fri, 25 Jun 2021 17:31:23 +0000 (18:31 +0100)]
libstdc++: Fix exception handling in std::ostream seek functions

N3168 added the requirement that the [ostream.seeks] functions create a
sentry object. Nothing in the requirements of those functions says
anything about catching exceptions and setting badbit.

As well as not catching exceptions, this change results in another
observable behaviour change. Previously seeking on a stream with eofbit
set would work (as long as badbit and failbit weren't set). The
construction of a sentry causes failbit to be set when eofbit is set,
which causes the seek to fail. It is necessary to clear the eofbit
before seeking now.

libstdc++-v3/ChangeLog:

* include/bits/ostream.tcc (sentry): Only set failbit if badbit
is set, not if eofbit is set.
(tellp, seekp, seekp): Create sentry object. Do not set badbit
on exceptions.
* testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc:
Adjust expected behaviour.
* testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc:
Likewise.
* testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc:
Likewise.
* testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc:
Likewise.
* testsuite/27_io/basic_ostream/seekp/char/n3168.cc: New test.
* testsuite/27_io/basic_ostream/seekp/wchar_t/n3168.cc: New test.
* testsuite/27_io/basic_ostream/tellp/char/n3168.cc: New test.
* testsuite/27_io/basic_ostream/tellp/wchar_t/n3168.cc: New test.

3 years agolibstdc++: Remove noexcept from syncbuf::swap (LWG 3498)
Jonathan Wakely [Fri, 25 Jun 2021 17:31:22 +0000 (18:31 +0100)]
libstdc++: Remove noexcept from syncbuf::swap (LWG 3498)

The proposed resolution for the inconsistent noexcept-specifiers in the
spec is to remove it from bto hthe assignment operator and swap.

libstdc++-v3/ChangeLog:

* include/std/syncstream (basic_syncbuf::swap()): Remove
noexcept, as per LWG 3498.

3 years agolibstdc++: More workarounds in 17_intro/names.cc test [PR 97088]
Jonathan Wakely [Fri, 25 Jun 2021 17:31:22 +0000 (18:31 +0100)]
libstdc++: More workarounds in 17_intro/names.cc test [PR 97088]

Conditionally #undef some more names that are used in system headers.

libstdc++-v3/ChangeLog:

PR libstdc++/97088
* testsuite/17_intro/names.cc: Undef more names for newlib and
also for arm-none-linux-gnueabi.
* testsuite/experimental/names.cc: Disable PCH.

3 years agotestsuite/101114: Adjust libgomp.c-c++-common/struct-elem-5.c testcase
Chung-Lin Tang [Fri, 25 Jun 2021 16:42:58 +0000 (00:42 +0800)]
testsuite/101114: Adjust libgomp.c-c++-common/struct-elem-5.c testcase

The dg-shouldfail testcase libgomp.c-c++-common/struct-elem-5.c does not
properly fail for non-shared address space offloading. Adjust testcase
to limit testing only for "target offload_device_nonshared_as".

libgomp/ChangeLog:

PR testsuite/101114
* testsuite/libgomp.c-c++-common/struct-elem-5.c:
Add "target offload_device_nonshared_as" condition for enabling test.

3 years agolibstdc++: Make use of __builtin_bit_cast for simd
Matthias Kretz [Thu, 28 Jan 2021 20:04:03 +0000 (21:04 +0100)]
libstdc++: Make use of __builtin_bit_cast for simd

The __bit_cast function was a hack to achieve what __builtin_bit_cast
can do, therefore use __builtin_bit_cast if possible. However,
__builtin_bit_cast cannot be used to cast from/to fixed_size_simd, since
it isn't trivially copyable (in the language sense — in principle it
is). Therefore add __proposed::simd_bit_cast to enable the use case
required in the test framework.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd.h (__bit_cast): Implement via
__builtin_bit_cast #if available.
(__proposed::simd_bit_cast): Add overloads for simd and
simd_mask, which use __builtin_bit_cast (or __bit_cast #if not
available), which return an object of the requested type with
the same bits as the argument.
* include/experimental/bits/simd_math.h: Use simd_bit_cast
instead of __bit_cast to allow casts to fixed_size_simd.
(copysign): Remove branch that was only required if __bit_cast
cannot be constexpr.
* testsuite/experimental/simd/tests/bits/test_values.h: Switch
from __bit_cast to __proposed::simd_bit_cast since the former
will not cast fixed_size objects anymore.

3 years agoMAINTAINERS: Add myself for write after approval and DCO
Matthias Kretz [Fri, 25 Jun 2021 12:40:26 +0000 (14:40 +0200)]
MAINTAINERS: Add myself for write after approval and DCO

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
ChangeLog:

* MAINTAINERS: Add myself for write after approval and DCO

3 years agoUse right shifts to eliminate redundant test/compare insns on the H8
Jeff Law [Fri, 25 Jun 2021 13:22:28 +0000 (09:22 -0400)]
Use right shifts to eliminate redundant test/compare insns on the H8

gcc/
* config/h8300/h8300.c (select_cc_mode): Handle ASHIFTRT and LSHIFTRT.

3 years agotree-optimization/101202 - fix ICE with failed backedge SLP nodes
Richard Biener [Fri, 25 Jun 2021 07:20:56 +0000 (09:20 +0200)]
tree-optimization/101202 - fix ICE with failed backedge SLP nodes

This fixes an ICE with failed backedge SLP nodes still in the graph
while doing permute optimization by explicitely handling those.

2021-06-25  Richard Biener  <rguenther@suse.de>

PR tree-optimization/101202
* tree-vect-slp.c (vect_optimize_slp): Explicitely handle
failed nodes.

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

3 years agoFixup reduction info on addsub SLP pattern
Richard Biener [Fri, 25 Jun 2021 06:54:14 +0000 (08:54 +0200)]
Fixup reduction info on addsub SLP pattern

gcc.dg/vect/pr96854.c shows we need to copy over reduction info
to the SLP pattern as already done for the complex patterns.

2021-06-25  Richard Biener  <rguenther@suse.de>

* tree-vect-slp-patterns.c (addsub_pattern::build): Copy
STMT_VINFO_REDUC_DEF from the original representative.

3 years agoadd -ltrans-objects lto-plugin debug option
Richard Biener [Tue, 22 Jun 2021 06:43:15 +0000 (08:43 +0200)]
add -ltrans-objects lto-plugin debug option

This adds a -ltrans-objects option to lto-plugin that by-passes
lto-wrapper invocation and instead feeds LD the final LTRANS objects
directly from the response file given as argument to the option.
This allows LD issues involving the linker-plugin path to be
debugged in an easier way with just the IR objects (their symtab)
and the LTRANS objects as testcase.

I've tested the path re-building stage2 build/genmatch from an
LTO bootstrap and got a bit-identical executable by adding
-plugin-opt=-ltrans-objects=y to the original collect2 invocation,
seeding y with the final objects as printed by building genmatch
with -save-temps -v.

2021-06-22  Richard Biener  <rguenther@suse.de>

lto-plugin/
* lto-plugin.c (ltrans_objects): New global.
(all_symbols_read_handler): If -ltrans-objects was specified,
add the output files from the specified file directly.
(process_option): Handle -ltrans-objects.

3 years agotestsuite: avoid no-stack-protector-attr-3 fail on mips*-*-*
Xi Ruoyao [Tue, 22 Jun 2021 06:57:47 +0000 (14:57 +0800)]
testsuite: avoid no-stack-protector-attr-3 fail on mips*-*-*

On MIPS a call to __stack_chk_fail needs an additional .reloc pseudo-op,
so "stack_chk_fail" will appear two times.

gcc/testsuite/

* g++.dg/no-stack-protector-attr-3.C (dg-final): Adjust for MIPS.

3 years agomiddle-end: add support for per-location warning groups.
Martin Sebor [Fri, 25 Jun 2021 01:22:06 +0000 (19:22 -0600)]
middle-end: add support for per-location warning groups.

gcc/ChangeLog:

* builtins.c (warn_string_no_nul): Replace uses of TREE_NO_WARNING,
gimple_no_warning_p and gimple_set_no_warning with
warning_suppressed_p, and suppress_warning.
(c_strlen): Same.
(maybe_warn_for_bound): Same.
(warn_for_access): Same.
(check_access): Same.
(expand_builtin_strncmp): Same.
(fold_builtin_varargs): Same.
* calls.c (maybe_warn_nonstring_arg): Same.
(maybe_warn_rdwr_sizes): Same.
* cfgexpand.c (expand_call_stmt): Same.
* cgraphunit.c (check_global_declaration): Same.
* fold-const.c (fold_undefer_overflow_warnings): Same.
(fold_truth_not_expr): Same.
(fold_unary_loc): Same.
(fold_checksum_tree): Same.
* gimple-array-bounds.cc (array_bounds_checker::check_array_ref): Same.
(array_bounds_checker::check_mem_ref): Same.
(array_bounds_checker::check_addr_expr): Same.
(array_bounds_checker::check_array_bounds): Same.
* gimple-expr.c (copy_var_decl): Same.
* gimple-fold.c (gimple_fold_builtin_strcpy): Same.
(gimple_fold_builtin_strncat): Same.
(gimple_fold_builtin_stxcpy_chk): Same.
(gimple_fold_builtin_stpcpy): Same.
(gimple_fold_builtin_sprintf): Same.
(fold_stmt_1): Same.
* gimple-ssa-isolate-paths.c (diag_returned_locals): Same.
* gimple-ssa-nonnull-compare.c (do_warn_nonnull_compare): Same.
* gimple-ssa-sprintf.c (handle_printf_call): Same.
* gimple-ssa-store-merging.c (imm_store_chain_info::output_merged_store): Same.
* gimple-ssa-warn-restrict.c (maybe_diag_overlap): Same.
* gimple-ssa-warn-restrict.h: Adjust declarations.
(maybe_diag_access_bounds): Replace uses of TREE_NO_WARNING,
gimple_no_warning_p and gimple_set_no_warning with
warning_suppressed_p, and suppress_warning.
(check_call): Same.
(check_bounds_or_overlap): Same.
* gimple.c (gimple_build_call_from_tree): Same.
* gimplify.c (gimplify_return_expr): Same.
(gimplify_cond_expr): Same.
(gimplify_modify_expr_complex_part): Same.
(gimplify_modify_expr): Same.
(gimple_push_cleanup): Same.
(gimplify_expr): Same.
* omp-expand.c (expand_omp_for_generic): Same.
(expand_omp_taskloop_for_outer): Same.
* omp-low.c (lower_rec_input_clauses): Same.
(lower_lastprivate_clauses): Same.
(lower_send_clauses): Same.
(lower_omp_target): Same.
* tree-cfg.c (pass_warn_function_return::execute): Same.
* tree-complex.c (create_one_component_var): Same.
* tree-inline.c (remap_gimple_op_r): Same.
(copy_tree_body_r): Same.
(declare_return_variable): Same.
(expand_call_inline): Same.
* tree-nested.c (lookup_field_for_decl): Same.
* tree-sra.c (create_access_replacement): Same.
(generate_subtree_copies): Same.
* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Same.
* tree-ssa-forwprop.c (combine_cond_expr_cond): Same.
* tree-ssa-loop-ch.c (ch_base::copy_headers): Same.
* tree-ssa-loop-im.c (execute_sm): Same.
* tree-ssa-phiopt.c (cond_store_replacement): Same.
* tree-ssa-strlen.c (maybe_warn_overflow): Same.
(handle_builtin_strcpy): Same.
(maybe_diag_stxncpy_trunc): Same.
(handle_builtin_stxncpy_strncat): Same.
(handle_builtin_strcat): Same.
* tree-ssa-uninit.c (get_no_uninit_warning): Same.
(set_no_uninit_warning): Same.
(uninit_undefined_value_p): Same.
(warn_uninit): Same.
(maybe_warn_operand): Same.
* tree-vrp.c (compare_values_warnv): Same.
* vr-values.c (vr_values::extract_range_for_var_from_comparison_expr): Same.
(test_for_singularity): Same.

* gimple.h (warning_suppressed_p): New function.
(suppress_warning): Same.
(copy_no_warning): Same.
(gimple_set_block): Call gimple_set_location.
(gimple_set_location): Call copy_warning.

3 years agocp: add support for per-location warning groups.
Martin Sebor [Thu, 24 Jun 2021 23:29:34 +0000 (17:29 -0600)]
cp: add support for per-location warning groups.

gcc/cp/ChangeLog:

* call.c (build_over_call): Replace direct uses of TREE_NO_WARNING
with warning_suppressed_p, suppress_warning, and copy_no_warning, or
nothing if not necessary.
(set_up_extended_ref_temp): Same.
* class.c (layout_class_type): Same.
* constraint.cc (constraint_satisfaction_value): Same.
* coroutines.cc (finish_co_await_expr): Same.
(finish_co_yield_expr): Same.
(finish_co_return_stmt): Same.
(build_actor_fn): Same.
(coro_rewrite_function_body): Same.
(morph_fn_to_coro): Same.
* cp-gimplify.c (genericize_eh_spec_block): Same.
(gimplify_expr_stmt): Same.
(cp_genericize_r): Same.
(cp_fold): Same.
* cp-ubsan.c (cp_ubsan_instrument_vptr): Same.
* cvt.c (cp_fold_convert): Same.
(convert_to_void): Same.
* decl.c (wrapup_namespace_globals): Same.
(grokdeclarator): Same.
(finish_function): Same.
(require_deduced_type): Same.
* decl2.c (no_linkage_error): Same.
(c_parse_final_cleanups): Same.
* except.c (expand_end_catch_block): Same.
* init.c (build_new_1): Same.
(build_new): Same.
(build_vec_delete_1): Same.
(build_vec_init): Same.
(build_delete): Same.
* method.c (defaultable_fn_check): Same.
* parser.c (cp_parser_fold_expression): Same.
(cp_parser_primary_expression): Same.
* pt.c (push_tinst_level_loc): Same.
(tsubst_copy): Same.
(tsubst_omp_udr): Same.
(tsubst_copy_and_build): Same.
* rtti.c (build_if_nonnull): Same.
* semantics.c (maybe_convert_cond): Same.
(finish_return_stmt): Same.
(finish_parenthesized_expr): Same.
(cp_check_omp_declare_reduction): Same.
* tree.c (build_cplus_array_type): Same.
* typeck.c (build_ptrmemfunc_access_expr): Same.
(cp_build_indirect_ref_1): Same.
(cp_build_function_call_vec): Same.
(warn_for_null_address): Same.
(cp_build_binary_op): Same.
(unary_complex_lvalue): Same.
(cp_build_modify_expr): Same.
(build_x_modify_expr): Same.
(convert_for_assignment): Same.

3 years agoc-family: add support for per-location warning groups.
Martin Sebor [Thu, 24 Jun 2021 22:09:20 +0000 (16:09 -0600)]
c-family: add support for per-location warning groups.

gcc/c-family/ChangeLog:

* c-common.c (c_wrap_maybe_const): Remove TREE_NO_WARNING.
(c_common_truthvalue_conversion): Replace direct uses of
TREE_NO_WARNING with warning_suppressed_p, suppress_warning, and
copy_no_warning.
(check_function_arguments_recurse): Same.
* c-gimplify.c (c_gimplify_expr): Same.
* c-warn.c (overflow_warning): Same.
(warn_logical_operator): Same.
(warn_if_unused_value): Same.
(do_warn_unused_parameter): Same.

3 years agoc: add support for per-location warning groups.
Martin Sebor [Thu, 24 Jun 2021 21:35:20 +0000 (15:35 -0600)]
c: add support for per-location warning groups.

gcc/ChangeLog:
* tree.h (warning_suppressed_at, copy_warning,
warning_suppressed_p, suppress_warning): New functions.

gcc/c/ChangeLog:

* c-decl.c (pop_scope): Replace direct uses of TREE_NO_WARNING with
warning_suppressed_p, suppress_warning, and copy_no_warning.
(diagnose_mismatched_decls): Same.
(duplicate_decls): Same.
(grokdeclarator): Same.
(finish_function): Same.
(c_write_global_declarations_1): Same.
* c-fold.c (c_fully_fold_internal): Same.
* c-parser.c (c_parser_expr_no_commas): Same.
(c_parser_postfix_expression): Same.
* c-typeck.c (array_to_pointer_conversion): Same.
(function_to_pointer_conversion): Same.
(default_function_array_conversion): Same.
(convert_lvalue_to_rvalue): Same.
(default_conversion): Same.
(build_indirect_ref): Same.
(build_function_call_vec): Same.
(build_atomic_assign): Same.
(build_unary_op): Same.
(c_finish_return): Same.
(emit_side_effect_warnings): Same.
(c_finish_stmt_expr): Same.
(c_omp_clause_copy_ctor): Same.

3 years agoAdd support for per-location warning groups.
Martin Sebor [Thu, 24 Jun 2021 17:11:00 +0000 (11:11 -0600)]
Add support for per-location warning groups.

gcc/ChangeLog:

* Makefile.in (OBJS-libcommon): Add diagnostic-spec.o.
* gengtype.c (open_base_files): Add diagnostic-spec.h.
* diagnostic-spec.c: New file.
* diagnostic-spec.h: New file.
* tree.h (no_warning, all_warnings, suppress_warning_at): New
declarations.
* warning-control.cc: New file.

3 years agoRevert x86_order_regs_for_local_alloc changes in r12-1669.
liuhongt [Thu, 24 Jun 2021 08:14:13 +0000 (16:14 +0800)]
Revert x86_order_regs_for_local_alloc changes in r12-1669.

Still put general regs as first alloca order.

gcc/ChangeLog:

PR target/101185
* config/i386/i386.c (x86_order_regs_for_local_alloc):
Revert r12-1669.

gcc/testsuite/ChangeLog

PR target/101185
* gcc.target/i386/bitwise_mask_op-3.c: Add xfail to
temporarily avoid regression, eventually xfail should be
removed.

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

3 years agoAdd a testcase to confirm the equivalence's are being checked by EVRP.
Andrew MacLeod [Thu, 24 Jun 2021 17:49:51 +0000 (13:49 -0400)]
Add a testcase to confirm the equivalence's are being checked by EVRP.

* gcc.dg/tree-ssa/evrp30.c: New.

3 years agoOnly register relations on live edges
Andrew MacLeod [Thu, 24 Jun 2021 17:35:21 +0000 (13:35 -0400)]
Only register relations on live edges

Register a relation on a conditional edge only if the LHS supports
this edge being taken.

gcc/
PR tree-optimization/101189
* gimple-range-fold.cc (fold_using_range::range_of_range_op): Pass
LHS range of condition to postfold routine.
(fold_using_range::postfold_gcond_edges): Only process the TRUE or
FALSE edge if the LHS range supports it being taken.
* gimple-range-fold.h (postfold_gcond_edges): Add range parameter.

gcc/testsuite/
* gcc.dg/tree-ssa/pr101189.c: New.

3 years agoFix relation query of equivalences.
Andrew MacLeod [Thu, 24 Jun 2021 15:13:47 +0000 (11:13 -0400)]
Fix relation query of equivalences.

When looking for relations between equivalencies, a typo was causing
the wrong bitmap to be checked. Effect was is missed them.
Plus don't dump blocks which don't exist.

* value-relation.cc (equiv_oracle::dump): Do not dump NULL blocks.
(relation_oracle::find_relation_block): Check correct bitmap.
(relation_oracle::dump): Do not dump NULL blocks.

3 years agoCorrectly unify recomputation with existing range.
Andrew MacLeod [Wed, 23 Jun 2021 19:25:45 +0000 (15:25 -0400)]
Correctly unify recomputation with existing range.

When propagating the on-entry cache, new block ranges are calculated
by combining all the incoming edges and comparing to the old value.
When a recomputation was performed on an edge, it didn't take into account
that the value in the block may already be better than a potential
recompuation... Thus a worse values was sometimes propagated.
Fixed by simply calling the now correct range_on_edge the cache provides.

* gimple-range-cache.cc (ranger_cache::propagate_cache): Call
range_on_edge instead of manually calculating.

3 years agoFix comment typo.
Andrew MacLeod [Wed, 23 Jun 2021 16:14:37 +0000 (12:14 -0400)]
Fix comment typo.

* range-op.cc: Fix comment.

3 years agoc++: alias CTAD and aggregate deduction cand [PR98832]
Patrick Palka [Thu, 24 Jun 2021 17:11:44 +0000 (13:11 -0400)]
c++: alias CTAD and aggregate deduction cand [PR98832]

During alias CTAD, we're accidentally ignoring the aggregate deduction
candidate for the underlying template because this guide is added
separately via maybe_aggr_guide (which doesn't yet handle alias
templates) instead of via deduction_guides_for (which does).  This patch
makes maybe_aggr_guide handle alias templates in a manner similar to
deduction_guides_for.

PR c++/98832

gcc/cp/ChangeLog:

* pt.c (maybe_aggr_guide): Handle alias templates appropriately.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/class-deduction-alias9.C: New test.

3 years agoc++: requires-expression folding [PR101182]
Patrick Palka [Thu, 24 Jun 2021 15:29:02 +0000 (11:29 -0400)]
c++: requires-expression folding [PR101182]

Here we're crashing because cp_fold_function walks into the (templated)
requirements of a requires-expression outside a template, but the
folding routines aren't prepared to handle templated trees.  This patch
fixes this by making cp_fold use evaluate_requires_expr to fold a
requires-expression as a whole, which also means we no longer need to
explicitly do so during gimplification.  (Note that we delay folding
of such requires-expressions for sake of better diagnostics when one is
used as the condition of a failed static_assert.)

PR c++/101182

gcc/cp/ChangeLog:

* constraint.cc (evaluate_requires_expr): Adjust function comment.
* cp-gimplify.c (cp_genericize_r) <case REQUIRES_EXPR>: Move to ...
(cp_fold) <case REQUIRES_EXPR>: ... here.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-requires25.C: New test.

3 years agoc: Fix up c_parser_has_attribute_expression [PR101176]
Jakub Jelinek [Thu, 24 Jun 2021 13:58:02 +0000 (15:58 +0200)]
c: Fix up c_parser_has_attribute_expression [PR101176]

This function keeps src_range member of the result uninitialized, which at
least under valgrind can show up later when those uninitialized location_t's
can make it into the IL or location_t hash tables.

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

PR c/101176
* c-parser.c (c_parser_has_attribute_expression): Set source range for
the result.

3 years agoc: Fix C cast error-recovery [PR101171]
Jakub Jelinek [Thu, 24 Jun 2021 13:55:28 +0000 (15:55 +0200)]
c: Fix C cast error-recovery [PR101171]

The following testcase ICEs during error-recovery, as build_c_cast calls
note_integer_operands on error_mark_node and that wraps it into
C_MAYBE_CONST_EXPR which is unexpected and causes ICE later on.
Seems most other callers of note_integer_operands check early if something
is error_mark_node and return before calling note_integer_operands on it.

The following patch fixes it by not calling on error_mark_node, another
possibility would be to handle error_mark_node in note_integer_operands and
just return it.

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

PR c/101171
* c-typeck.c (build_c_cast): Don't call note_integer_operands on
error_mark_node.

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

3 years agoi386: Add pack/unpack patterns for 64bit vectors [PR89021]
Uros Bizjak [Thu, 24 Jun 2021 13:39:26 +0000 (15:39 +0200)]
i386: Add pack/unpack patterns for 64bit vectors [PR89021]

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

gcc/
PR target/89021
* config/i386/i386-expand.c (ix86_expand_sse_unpack):
Handle V8QI and V4HI modes.
* config/i386/mmx.md (sse4_1_<any_extend:code>v4qiv4hi2):
New insn pattern.
(sse4_1_<any_extend:code>v4qiv4hi2): Ditto.
(mmxpackmode): New mode attribute.
(vec_pack_trunc_<mmxpackmode:mode>): New expander.
(mmxunpackmode): New mode attribute.
(vec_unpacks_lo_<mmxunpackmode:mode>): New expander.
(vec_unpacks_hi_<mmxunpackmode:mode>): Ditto.
(vec_unpacku_lo_<mmxunpackmode:mode>): Ditto.
(vec_unpacku_hi_<mmxunpackmode:mode>): Ditto.
* config/i386/i386.md (extsuffix): Move from ...
* config/i386/sse.md: ... here.

gcc/testsuite/

PR target/89021
* gcc.dg/vect/vect-nb-iter-ub-3.c (dg-additional-options):
Add --param vect-epilogues-nomask=0.
* gcc.target/i386/pr97249-1.c (foo): Add #pragma GCC unroll
to avoid loop vectorization.
(foo1): Ditto.
(foo2): Ditto.

3 years agolibstdc++: Fix internal names: add missing underscores
Matthias Kretz [Thu, 24 Jun 2021 13:20:15 +0000 (14:20 +0100)]
libstdc++: Fix internal names: add missing underscores

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd_math.h
(_GLIBCXX_SIMD_MATH_CALL2_): Rename arg2_ to __arg2.
(_GLIBCXX_SIMD_MATH_CALL3_): Rename arg2_ to __arg2 and arg3_ to
__arg3.

3 years agolibstdc++: Ensure unrolled loops inline the lambda
Matthias Kretz [Thu, 24 Jun 2021 13:20:15 +0000 (14:20 +0100)]
libstdc++: Ensure unrolled loops inline the lambda

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd.h (__execute_on_index_sequence)
(__execute_on_index_sequence_with_return)
(__call_with_n_evaluations, __call_with_subscripts): Add flatten
attribute.

3 years agolibstdc++: Avoid raising fp exceptions in trunc, floor, and ceil
Matthias Kretz [Thu, 24 Jun 2021 13:20:15 +0000 (14:20 +0100)]
libstdc++: Avoid raising fp exceptions in trunc, floor, and ceil

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd_x86.h (_S_trunc, _S_floor)
(_S_ceil): Set bit 8 (_MM_FROUND_NO_EXC) on AVX and SSE4.1
roundp[sd] calls.

3 years agolibstdc++: Fix condition when AVX512F ldexp implementation is used
Matthias Kretz [Thu, 24 Jun 2021 13:20:15 +0000 (14:20 +0100)]
libstdc++: Fix condition when AVX512F ldexp implementation is used

This improves codegen of ldexp if AVX512VL is available.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd_x86.h (_S_ldexp): The AVX512F
implementation doesn't require a _VecBltnBtmsk ABI tag, it
requires either a 64-Byte input (in which case AVX512F must be
available) or AVX512VL.

3 years agolibstdc++: Minor simd_math cleanups
Matthias Kretz [Thu, 24 Jun 2021 13:20:15 +0000 (14:20 +0100)]
libstdc++: Minor simd_math cleanups

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd_math.h: Undefine internal
macros after use.
(frexp): Move #if to a more sensible position and reformat
preceding code.
(logb): Call _SimdImpl::_S_logb for fixed_size instead of
duplicating the code here.
(modf): Simplify condition.