platform/upstream/gcc.git
3 years agoFix ICE during dumping in ipa-modref.
Jan Hubicka [Sun, 20 Sep 2020 06:19:56 +0000 (08:19 +0200)]
Fix ICE during dumping in ipa-modref.

2020-09-20  Jan Hubicka  <hubicka@ucw.cz>

* ipa-modref.c (dump_lto_records): Fix ICE.

3 years agoNew modref/ipa_modref optimization passes
Jan Hubicka [Sun, 20 Sep 2020 05:25:16 +0000 (07:25 +0200)]
New modref/ipa_modref optimization passes

2020-09-19  David Cepelik  <d@dcepelik.cz>
    Jan Hubicka  <hubicka@ucw.cz>

* Makefile.in: Add ipa-modref.c and ipa-modref-tree.c.
* alias.c: (reference_alias_ptr_type_1): Export.
* alias.h (reference_alias_ptr_type_1): Declare.
* common.opt (fipa-modref): New.
* gengtype.c (open_base_files): Add ipa-modref-tree.h and ipa-modref.h
* ipa-modref-tree.c: New file.
* ipa-modref-tree.h: New file.
* ipa-modref.c: New file.
* ipa-modref.h: New file.
* lto-section-in.c (lto_section_name): Add ipa_modref.
* lto-streamer.h (enum lto_section_type): Add LTO_section_ipa_modref.
* opts.c (default_options_table): Enable ipa-modref at -O1+.
* params.opt (-param=modref-max-bases, -param=modref-max-refs,
-param=modref-max-tests): New params.
* passes.def: Schedule pass_modref and pass_ipa_modref.
* timevar.def (TV_IPA_MODREF): New timevar.
(TV_TREE_MODREF): New timevar.
* tree-pass.h (make_pass_modref): Declare.
(make_pass_ipa_modref): Declare.
* tree-ssa-alias.c (dump_alias_stats): Include ipa-modref-tree.h
and ipa-modref.h
(alias_stats): Add modref_use_may_alias, modref_use_no_alias,
modref_clobber_may_alias, modref_clobber_no_alias, modref_tests.
(dump_alias_stats): Dump new stats.
(nonoverlapping_array_refs_p): Fix formating.
(modref_may_conflict): New function.
(ref_maybe_used_by_call_p_1): Use it.
(call_may_clobber_ref_p_1): Use it.
(call_may_clobber_ref_p): Update.
(stmt_may_clobber_ref_p_1): Update.
* tree-ssa-alias.h (call_may_clobber_ref_p_1): Update.

3 years agoDaily bump.
GCC Administrator [Sun, 20 Sep 2020 00:16:23 +0000 (00:16 +0000)]
Daily bump.

3 years agoExtend -Warray-bounds to detect out-of-bounds accesses to array parameters.
Martin Sebor [Sat, 19 Sep 2020 23:47:29 +0000 (17:47 -0600)]
Extend -Warray-bounds to detect out-of-bounds accesses to array parameters.

gcc/ChangeLog:

PR middle-end/82608
PR middle-end/94195
PR c/50584
PR middle-end/84051
* gimple-array-bounds.cc (get_base_decl): New function.
(get_ref_size): New function.
(trailing_array): New function.
(array_bounds_checker::check_array_ref): Call them.  Handle arrays
declared in function parameters.
(array_bounds_checker::check_mem_ref):  Same.  Handle references to
dynamically allocated arrays.

gcc/testsuite/ChangeLog:

PR middle-end/82608
PR middle-end/94195
PR c/50584
PR middle-end/84051
* c-c++-common/Warray-bounds.c: Adjust.
* gcc.dg/Wbuiltin-declaration-mismatch-9.c: Adjust.
* gcc.dg/Warray-bounds-63.c: New test.
* gcc.dg/Warray-bounds-64.c: New test.
* gcc.dg/Warray-bounds-65.c: New test.
* gcc.dg/Warray-bounds-66.c: New test.
* gcc.dg/Warray-bounds-67.c: New test.

3 years agoExtend -Wstringop-overflow to detect out-of-bounds accesses to array parameters.
Martin Sebor [Sat, 19 Sep 2020 23:37:05 +0000 (17:37 -0600)]
Extend -Wstringop-overflow to detect out-of-bounds accesses to array parameters.

gcc/ChangeLog:

PR c/50584
* builtins.c (warn_for_access): Add argument.  Distinguish between
reads and writes.
(check_access): Add argument.  Distinguish between reads and writes.
(gimple_call_alloc_size): Set range even on failure.
(gimple_parm_array_size): New function.
(compute_objsize): Call it.
(check_memop_access): Pass check_access an additional argument.
(expand_builtin_memchr, expand_builtin_strcat): Same.
(expand_builtin_strcpy, expand_builtin_stpcpy_1): Same.
(expand_builtin_stpncpy, check_strncat_sizes): Same.
(expand_builtin_strncat, expand_builtin_strncpy): Same.
(expand_builtin_memcmp): Same.
* builtins.h (compute_objsize): Declare a new overload.
(gimple_parm_array_size): Declare.
(check_access): Add argument.
* calls.c (append_attrname): Simplify.
(maybe_warn_rdwr_sizes): Handle internal attribute access.
* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Avoid adding
quotes.

gcc/testsuite/ChangeLog:

PR c/50584
* c-c++-common/Wsizeof-pointer-memaccess1.c: Disable new expected
warnings.
* g++.dg/ext/attr-access.C: Update text of expected warnings.
* gcc.dg/Wstringop-overflow-23.c: Same.
* gcc.dg/Wstringop-overflow-24.c: Same.
* gcc.dg/attr-access-none.c: Same.
* gcc.dg/dfp/composite-type.c: Prune expected warnings.
* gcc.dg/torture/pr57147-1.c: Add a member to an otherwise empty
struct to avoid a warning.
* gcc.dg/torture/pr57147-3.c: Same.
* gcc.dg/Warray-bounds-30.c: Adjust.
* gcc.dg/attr-access-none.c: Same.
* gcc.dg/Wstringop-overflow-40.c: New test.
* gcc.dg/attr-access-2.c: New test.

3 years agoMake use of new attribute access infrastructure in -Wuninitialized (PR 50584).
Martin Sebor [Sat, 19 Sep 2020 23:30:32 +0000 (17:30 -0600)]
Make use of new attribute access infrastructure in -Wuninitialized (PR 50584).

gcc/ChangeLog:

* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Handle attribute
access internal representation of arrays.

gcc/testsuite/ChangeLog:

* gcc.dg/uninit-37.c: New test.

3 years agoInfrastructure & C front end changes for array parameter checking (PR c/50584).
Martin Sebor [Sat, 19 Sep 2020 23:21:52 +0000 (17:21 -0600)]
Infrastructure & C front end changes for array parameter checking (PR c/50584).

gcc/ChangeLog:

PR c/50584
* attribs.c (decl_attributes): Also pass decl along with type
attributes to handlers.
(init_attr_rdwr_indices): Change second argument to attribute chain.
Handle internal attribute representation in addition to external.
(get_parm_access): New function.
(attr_access::to_internal_string): Define new member function.
(attr_access::to_external_string): Define new member function.
(attr_access::vla_bounds): Define new member function.
* attribs.h (struct attr_access): Declare new members.
(attr_access::from_mode_char): Define new member function.
(get_parm_access): Declare new function.
* calls.c (initialize_argument_information): Pass function type
attributes to init_attr_rdwr_indices.
* doc/invoke.texi (-Warray-parameter, -Wvla-parameter): Document.
* tree-pretty-print.c (dump_generic_node): Correct handling of
qualifiers.
* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Same.
* tree.h (access_mode): Add new enumerator.

gcc/c-family/ChangeLog:

PR c/50584
* c-attribs.c (c_common_attribute_table): Add "arg spec" attribute.
(handle_argspec_attribute): New function.
(get_argument, get_argument_type): New functions.
(append_access_attrs): Add overload.  Handle internal attribute
representation in addition to external.
(handle_access_attribute): Handle internal attribute representation
in addition to external.
(build_attr_access_from_parms): New function.

gcc/c-family/ChangeLog:

PR c/50584
* c-common.h (warn_parm_array_mismatch): Declare new function.
(has_attribute): Move declaration of an existing function.
(build_attr_access_from_parms): Declare new function.
* c-warn.c (parm_array_as_string): Define new function.
(plus_one):  Define new function.
(warn_parm_ptrarray_mismatch): Define new function.
(warn_parm_array_mismatch):  Define new function.
(vla_bound_parm_decl): New function.
* c.opt (-Warray-parameter, -Wvla-parameter): New options.
* c-pretty-print.c (pp_c_type_qualifier_list): Don't print array type
qualifiers here...
(c_pretty_printer::direct_abstract_declarator): ...but instead print
them in brackets here.  Also print [static].  Strip extraneous
expressions from VLA bounds.

gcc/c/ChangeLog:

PR c/50584
* c-decl.c (lookup_last_decl): Define new function.
(c_decl_attributes): Call it.
(start_decl): Add argument and use it.
(finish_decl): Call build_attr_access_from_parms and decl_attributes.
(get_parm_array_spec): Define new function.
(push_parm_decl): Call get_parm_array_spec.
(start_function): Call warn_parm_array_mismatch.  Build attribute
access and add it to current function.
* c-parser.c (c_parser_declaration_or_fndef): Diagnose mismatches
in forms of array parameters.
* c-tree.h (start_decl): Add argument.

gcc/testsuite/ChangeLog:

PR c/50584
* gcc.dg/attr-access-read-write-2.c: Adjust text of expected message.
* c-c++-common/Warray-bounds-6.c: Correct C++ declaration, adjust
text of expected diagnostics.
* gcc.dg/Wbuiltin-declaration-mismatch-9.c: Prune expected warning.
* gcc.dg/Warray-parameter-2.c: New test.
* gcc.dg/Warray-parameter-3.c: New test.
* gcc.dg/Warray-parameter-4.c: New test.
* gcc.dg/Warray-parameter-5.c: New test.
* gcc.dg/Warray-parameter.c: New test.
* gcc.dg/Wvla-parameter-2.c: New test.
* gcc.dg/Wvla-parameter-3.c: New test.
* gcc.dg/Wvla-parameter.c: New test.

3 years agoChange C front end to emit structured loop and switch tree nodes.
Sandra Loosemore [Sat, 19 Sep 2020 14:32:35 +0000 (07:32 -0700)]
Change C front end to emit structured loop and switch tree nodes.

2020-08-12  Sandra Loosemore  <sandra@codesourcery.com>

gcc/c
* c-decl.c (c_break_label, c_cont_label): Delete, and replace
with...
(in_statement): New.
(start_function): Adjust for above change.
(c_push_function_context, c_pop_function_context): Likewise.
* c-lang.h (struct language_function): Likewise.
* c-objc-common.h (LANG_HOOKS_BLOCK_MAY_FALLTHRU): Define.
* c-parser.c (objc_foreach_break_label, objc_foreach_continue_label):
New.
(c_parser_statement_after_labels): Adjust calls to c_finish_bc_stmt.
(c_parser_switch_statement): Adjust break/switch context handling
and calls to renamed functions.
(c_parser_while_statement): Adjust break/switch context handling and
build a WHILE_STMT.
(c_parser_do_statement): Ditto, with DO_STMT respectively.
(c_parser_for_statement): Ditto, with FOR_STMT respectively.
(c_parser_omp_for_loop): Adjust break/switch context handling.
* c-tree.h (c_break_label, c_cont_label): Delete.
(IN_SWITCH_STMT, IN_ITERATION_STMT): Define.
(IN_OMP_BLOCK, IN_OMP_FOR, IN_OBJC_FOREACH): Define.
(in_statement, switch_statement_break_seen_p): Declare.
(c_start_case, c_finish_case): Renamed to...
(c_start_switch, c_finish_switch).
(c_finish_bc_stmt): Adjust arguments.
* c-typeck.c (build_function_call_vec): Don't try to print
statements with %qE format.
(struct c_switch):  Rename switch_expr field to switch_stmt.
Add break_stmt_seen_p field.
(c_start_case): Rename to c_start_switch.  Build a SWITCH_STMT
instead of a SWITCH_EXPR.  Update for changes to struct c_switch.
(do_case): Update for changes to struct c_switch.
(c_finish_case): Rename to c_finish_switch.  Update for changes to
struct c_switch and change of representation from SWITCH_EXPR to
SWITCH_STMT.
(c_finish_loop): Delete.
(c_finish_bc_stmt): Update to reflect changes to break/continue
state representation.  Build a BREAK_STMT or CONTINUE_STMT instead
of a GOTO_EXPR except for objc foreach loops.

gcc/objc
* objc-act.c (objc_start_method_definition): Update to reflect
changes to break/continue state bookkeeping in C front end.

gcc/testsuite/
* gcc.dg/gomp/block-7.c: Update expected error message wording.

3 years agoWork around bootstrap failure in Fortran front end.
Sandra Loosemore [Sat, 19 Sep 2020 14:32:35 +0000 (07:32 -0700)]
Work around bootstrap failure in Fortran front end.

Switching the C++ front end to lower loops the same was as the C front
end triggered this error when bootstrapping the Fortran front end:

/path/to/gcc/fortran/interface.c:3546:12: error: '*new_arg' may be used uninitialized [-Werror=maybe-uninitialized]
 3546 |   new_arg[i]->next = NULL;
      |   ~~~~~~~~~^

Work around this by adding an assertion, which seems appropriate for
documentation and good coding practices anyway.

2020-08-12  Sandra Loosemore  <sandra@codesourcery.com>

gcc/fortran/
* interface.c (gfc_compare_actual_formal): Add assertion after
main processing loop to silence maybe-uninitialized error.

3 years agoUse C-style loop lowering instead of C++-style.
Sandra Loosemore [Sat, 19 Sep 2020 14:32:35 +0000 (07:32 -0700)]
Use C-style loop lowering instead of C++-style.

The C and C++ front ends used to use the same strategy of lowering
loops to gotos with the end test canonicalized to the bottom of the
loop.  In 2014 the C++ front end was changed to emit LOOP_EXPRs
instead (commit 1a45860e7757ee054f6bf98bee4ebe5c661dfb90).

As part of the unification of the C and C++ loop handling, it's
desirable to use the same lowering strategy for both languages.
Applying the C++ strategy to C caused a number of regressions in C
optimization tests, related to flipping the sense of the COND_EXPR for
the exit test and changes in block ordering in the output code.  Many
of these regressions just require updating regexps in the test cases
but a few appear to be genuine optimization failures.  Since it
appears the optimizers handle the C code better than C++ code, let's
go back to using the C strategy for both languages.  The rationale for
the 2014 C++ patch (support for constexpr evaluation) has been solved
in other ways meanwhile.

2020-08-12  Sandra Loosemore  <sandra@codesourcery.com>

gcc/c-family/
* c-gimplify.c (genericize_c_loop): Rewrite to match
c_finish_loop in c-typeck.c.

3 years agoMove loop and switch tree data structures from cp/ to c-family/.
Sandra Loosemore [Sat, 19 Sep 2020 14:32:35 +0000 (07:32 -0700)]
Move loop and switch tree data structures from cp/ to c-family/.

This patch moves the definitions for DO_STMT, FOR_STMT, WHILE_STMT,
SWITCH_STMT, BREAK_STMT, and CONTINUE_STMT from the C++ front end to
c-family.  This includes the genericizers, pretty-printers, and dump
support as well as the tree definitions and accessors.  Some related
code for OMP_FOR and similar OMP constructs is also moved.

2020-08-12  Sandra Loosemore  <sandra@codesourcery.com>

gcc/c-family/
* c-common.c (c_block_may_fallthrough): New, split from
cxx_block_may_fallthrough in the cp front end.
(c_common_init_ts): Move handling of loop and switch-related
statements here from the cp front end.
* c-common.def (FOR_STMT, WHILE_STMT, DO_STMT): Move here from
cp front end.
(BREAK_STMT, CONTINUE_STMT, SWITCH_STMT): Likewise.
* c-common.h (c_block_may_fallthru): Declare.
(bc_state_t): Move here from cp front end.
(save_bc_state, restore_bc_state): Declare.
(c_genericize_control_stmt): Declare.
(WHILE_COND, WHILE_BODY): Likewise.
(DO_COND, DO_BODY): Likewise.
(FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY, FOR_SCOPE): Likewise.
(SWITCH_STMT_COND, SWITCH_STMT_BODY): Likewise.
(SWITCH_STMT_TYPE, SWITCH_STMT_SCOPE): Likewise.
(SWITCH_STMT_ALL_CASES_P, SWITCH_STMT_NO_BREAK_P): Likewise.
(LABEL_DECL_BREAK, LABEL_DECL_CONTINUE): Likewise.
* c-dump.c (dump_stmt): Copy from cp front end.
(c_dump_tree): Move code to handle structured loop and switch
tree nodes here from cp front end.
* c-gimplify.c: Adjust includes.
(enum bc_t, bc_label, begin_bc_block, finish_bc_block): Move from
cp front end.
(save_bc_state, restore_bc_state): New functions using old code
from cp front end.
(get_bc_label, expr_loc_or_loc): Move from cp front end.
(genericize_c_loop): Move from cp front end.
(genericize_for_stmt, genericize_while_stmt): Likewise.
(genericize_do_stmt, genericize_switch_stmt): Likewise.
(genericize_continue_stmt, genericize_break_stmt): Likewise.
(genericize_omp_for_stmt): Likewise.
(c_genericize_control_stmt): New function using code split from
cp front end.
(c_genericize_control_r): New.
(c_genericize): Call walk_tree with c_genericize_control_r.
* c-pretty-print.c (c_pretty_printer::statement): Move code to handle
structured loop and switch tree nodes here from cp front end.

gcc/cp/
* cp-gimplify.c (enum bc_t, bc_label): Move to c-family.
(begin_bc_block, finish_bc_block, get_bc_label): Likewise.
(genericize_cp_loop): Likewise.
(genericize_for_stmt, genericize_while_stmt): Likewise.
(genericize_do_stmt, genericize_switch_stmt): Likewise.
(genericize_continue_stmt, genericize_break_stmt): Likewise.
(genericize_omp_for_stmt): Likewise.
(cp_genericize_r): Call c_genericize_control_stmt instead of
above functions directly.
(cp_genericize): Call save_bc_state and restore_bc_state instead
of manipulating bc_label directly.
* cp-objcp-common.c (cxx_block_may_fallthru): Defer to
c_block_may_fallthru instead of handling SWITCH_STMT here.
(cp_common_init_ts): Move handling of loop and switch-related
statements to c-family.
* cp-tree.def (FOR_STMT, WHILE_STMT, DO_STMT): Move to c-family.
(BREAK_STMT, CONTINUE_STMT, SWITCH_STMT): Likewise.
* cp-tree.h (LABEL_DECL_BREAK, LABEL_DECL_CONTINUE): Likewise.
(WHILE_COND, WHILE_BODY): Likewise.
(DO_COND, DO_BODY): Likewise.
(FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY, FOR_SCOPE): Likewise.
(SWITCH_STMT_COND, SWITCH_STMT_BODY): Likewise.
(SWITCH_STMT_TYPE, SWITCH_STMT_SCOPE): Likewise.
(SWITCH_STMT_ALL_CASES_P, SWITCH_STMT_NO_BREAK_P): Likewise.
* cxx-pretty-print.c (cxx_pretty_printer::statement): Move code
to handle structured loop and switch tree nodes to c-family.
* dump.c (cp_dump_tree): Likewise.

gcc/
* doc/generic.texi (Basic Statements): Document SWITCH_EXPR here,
not SWITCH_STMT.
(Statements for C and C++): Rename node to reflect what
the introduction already says about sharing between C and C++
front ends.  Copy-edit and correct documentation for structured
loops and switch.

3 years agoPR fortran/97036 - [F2018] Allow ELEMENTAL RECURSIVE procedure prefix
Harald Anlauf [Sat, 19 Sep 2020 18:46:38 +0000 (20:46 +0200)]
PR fortran/97036 - [F2018] Allow ELEMENTAL RECURSIVE procedure prefix

gcc/fortran/ChangeLog:

* symbol.c (gfc_check_conflict): Allow ELEMENTAL RECURSIVE
procedure prefix for -std=f2018.

gcc/testsuite/ChangeLog:

* gfortran.dg/pr97036.f90: New test.

3 years agox86: Add a testcase for PR target/96861
H.J. Lu [Sat, 19 Sep 2020 16:57:16 +0000 (09:57 -0700)]
x86: Add a testcase for PR target/96861

Add a testcase to verify that -march=skylake-avx512 -mtune=skylake-avx512
generates desired code sequence.

PR target/96861
* gcc.target/i386/pr96861.c: New test.

3 years agoc++: Fix self-mapping in map_arguments [PR96531, PR97103]
Patrick Palka [Sat, 19 Sep 2020 15:02:46 +0000 (11:02 -0400)]
c++: Fix self-mapping in map_arguments [PR96531, PR97103]

With r10-8077 we stopped passing the argified current_template_parms to
normalize_constraint_expression from finish_nested_requirement, and
instead made map_arguments perform a self-mapping of parameters when
args is NULL.  But we're currently not handling parameter packs and
BOUND_TEMPLATE_TEMPLATE_PARMs properly during this self-mapping, which
leads to ICEs later during satisfaction.

To properly handle self-mapping of a parameter pack, this patch
extends template_parm_to_arg to handle TEMPLATE_PARM_P nodes, and
makes map_arguments use it.  (This change revealed that the call to
template_parm_to_arg in convert_generic_types_to_packs was a no-op
because the argument 't' is never a TREE_LIST, so this patch
additionally removes this call.)

As for bound ttps, map_arguments before r10-8077 would map a
BOUND_TEMPLATE_TEMPLATE_PARM not to itself but to its underlying
TEMPLATE_TEMPLATE_PARM.  We could restore this behavior in
map_arguments, but since a bound ttp is not really a template parameter
it seems better to make keep_template_parm not give us a bound ttp in
the first place.  So this patch makes keep_template_parm return the
underlying ttp when it sees a bound ttp.

gcc/cp/ChangeLog:

PR c++/96531
PR c++/97103
* constraint.cc (map_arguments): Call template_parm_to_arg
in the self-mapping case.
(finish_shorthand_constraint): No need to build a TREE_LIST
before calling template_parm_to_arg.
* pt.c (template_parm_to_arg): Rewrite to handle TEMPLATE_PARM_P
nodes as well as DECL_TEMPLATE_PARM_P nodes, and to make the
overlying TREE_LIST node optional.
(keep_template_parm): Don't record a BOUND_TEMPLATE_TEMPLATE_PARM,
instead record its corresponding TEMPLATE_TEMPLATE_PARM.
(convert_generic_types_to_packs): Don't call
template_parm_to_arg.

gcc/testsuite/ChangeLog:

PR c++/96531
PR c++/97103
* g++.dg/cpp2a/concepts-ttp2.C: New test.
* g++.dg/cpp2a/concepts-variadic1.C: New test.

3 years agoc++: std::is_constant_evaluated inside constraint [PR97051]
Patrick Palka [Sat, 19 Sep 2020 15:17:41 +0000 (11:17 -0400)]
c++: std::is_constant_evaluated inside constraint [PR97051]

According to [expr.const]/14, the result of substitution into an atomic
constraint is manifestly constant-evaluated; this patch adjusts the call
to maybe_constant_value in satisfy_atom to that effect.

gcc/cp/ChangeLog:

PR c++/97051
* constraint.cc (satisfy_atom): Pass true as the
manifestly_const_eval argument to maybe_constant_value.

gcc/testsuite/ChangeLog:

PR c++/97051
* g++.dg/cpp2a/is-constant-evaluated11.C: New test.

3 years agoIncrease rtx cost of sse_to_integer in skylake_cost.
liuhongt [Wed, 16 Sep 2020 02:53:52 +0000 (10:53 +0800)]
Increase rtx cost of sse_to_integer in skylake_cost.

As https://gcc.gnu.org/pipermail/gcc-patches/2019-August/528839.html
indicates, movement between SSE and gpr should be much expensive than
movement inside gpr(which is 2 as default).

gcc/ChangeLog

PR target/96861
* config/i386/x86-tune-costs.h (skylake_cost): increase rtx
cost of sse_to_integer from 2 to 6.

gcc/testsuite

* gcc.target/i386/pr95021-3.c: Add -mtune=generic.

3 years agoDaily bump.
GCC Administrator [Sat, 19 Sep 2020 00:16:29 +0000 (00:16 +0000)]
Daily bump.

3 years agoc++: Add testcase for already fixed PR97105
Jakub Jelinek [Fri, 18 Sep 2020 22:09:11 +0000 (00:09 +0200)]
c++: Add testcase for already fixed PR97105

This has been fixed by the PR bootstrap/97118 fix.

2020-09-19  Jakub Jelinek  <jakub@redhat.com>

PR c++/97105
* g++.dg/template/pr97105.C: New test.

3 years agoanalyzer: fix warning_event::get_desc for global state changes
David Malcolm [Thu, 17 Sep 2020 13:41:29 +0000 (09:41 -0400)]
analyzer: fix warning_event::get_desc for global state changes

When experimenting the a new state_machine with global state I noticed
that the fallback handling in warning_event::get_desc assumes we have
per-value states, and ICEs on global states.  Fixed thusly.

gcc/analyzer/ChangeLog:
* checker-path.cc (warning_event::get_desc): Handle global state
changes.

3 years agoanalyzer: handle strdup and strndup
David Malcolm [Wed, 16 Sep 2020 21:21:32 +0000 (17:21 -0400)]
analyzer: handle strdup and strndup

gcc/analyzer/ChangeLog:
* sm-malloc.cc (malloc_state_machine::on_stmt): Handle strdup and
strndup as being malloc-like allocators.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/strdup-1.c: New test.
* gcc.dg/analyzer/strndup-1.c: New test.

3 years agoc++: Fix bootstrap failure. [PR97118]
Jason Merrill [Fri, 18 Sep 2020 19:34:24 +0000 (15:34 -0400)]
c++: Fix bootstrap failure.  [PR97118]

gcc/cp/ChangeLog:

PR bootstrap/97118
* decl.c (complete_vars): Only call layout_var_decl if completing
the type succeeded.

3 years ago[PATCH 4/5][Arm] New pattern for CSNEG instructions
Sudi Das [Fri, 18 Sep 2020 15:31:12 +0000 (16:31 +0100)]
[PATCH 4/5][Arm] New pattern for CSNEG instructions

This patch adds a new pattern, *thumb2_csneg, for generating CSNEG
instructions. It also restricts *if_neg_move and *thumb2_negscc to only match
if !TARGET_COND_ARITH which prevents undesirable matches during ifcvt.

gcc/ChangeLog:

* config/arm/thumb2.md (*thumb2_csneg): New.
(*thumb2_negscc): Don't match if TARGET_COND_ARITH.
* config/arm/arm.md (*if_neg_move): Don't match if TARGET_COND_ARITH.

gcc/testsuite/ChangeLog:

* gcc.target/arm/csneg.c: New test.

Co-authored-by: Omar Tahir <omar.tahir@arm.com>
3 years ago[PATCH 3/5][Arm] New pattern for CSINC instructions
Sudi Das [Fri, 18 Sep 2020 15:30:11 +0000 (16:30 +0100)]
[PATCH 3/5][Arm] New pattern for CSINC instructions

This patch adds a new pattern, *thumb2_csinc, for generating CSINC
instructions. It also modifies an existing pattern, *thumb2_cond_arith, to
output CINC when the operation is an addition and TARGET_COND_ARITH is true.

gcc/ChangeLog:

* config/arm/thumb2.md (*thumb2_csinc): New.
(*thumb2_cond_arith): Generate CINC where possible.

gcc/testsuite/ChangeLog:

* gcc.target/arm/csinc-1.c: New test.

Co-authored-by: Omar Tahir <omar.tahir@arm.com>
3 years ago[PATCH 2/5][Arm] New pattern for CSINV instructions
Sudi Das [Fri, 18 Sep 2020 14:47:46 +0000 (15:47 +0100)]
[PATCH 2/5][Arm] New pattern for CSINV instructions

This patch adds a new pattern, *thumb2_csinv, for generating CSINV nstructions.

This pattern relies on a few general changes that will be used throughout
the following patches:
- A new macro, TARGET_COND_ARITH, which is only true on 8.1-M Mainline
  and represents the existence of these conditional instructions.
- A change to the cond exec hook, arm_have_conditional_execution, which
  now returns false if TARGET_COND_ARITH before reload. This allows for
  some ifcvt transformations when they would usually be disabled. I've
  written a rather verbose comment (with the risk of over-explaining)
  as it's a bit of a confusing change.
- One new predicate.
- *thumb2_movcond has been restricted to only match if !TARGET_COND_ARITH,
  otherwise it triggers undesirable combines.

gcc/ChangeLog:

* config/arm/arm.h (TARGET_COND_ARITH): New macro.
* config/arm/arm.c (arm_have_conditional_execution): Return false if
TARGET_COND_ARITH before reload.
* config/arm/predicates.md (arm_comparison_operation): Returns true if
comparing CC_REGNUM with constant zero.
* config/arm/thumb2.md (*thumb2_csinv): New.
(*thumb2_movcond): Don't match if TARGET_COND_ARITH.

gcc/testsuite/ChangeLog:

* gcc.target/arm/csinv-1.c: New test.

Co-authored-by: Omar Tahir <omar.tahir@arm.com>
3 years agoira: Fix elimination for global hard FPs [PR91957]
Richard Sandiford [Fri, 18 Sep 2020 15:55:45 +0000 (16:55 +0100)]
ira: Fix elimination for global hard FPs [PR91957]

If the hard frame pointer is being used as a global register,
we should skip the usual handling for eliminations.  As the
comment says, the register cannot in that case be eliminated
(or eliminated to) and is already marked live where appropriate.

Doing this removes the duplicate error for gcc.target/i386/pr82673.c.
The “cannot be used in 'asm' here” message is meant to be for asm
statements rather than register asms, and the function that the
error is reported against doesn't use asm.

gcc/
2020-09-18  Richard Sandiford  <richard.sandiford@arm.com>

PR middle-end/91957
* ira.c (ira_setup_eliminable_regset): Skip the special elimination
handling of the hard frame pointer if the hard frame pointer is fixed.

gcc/testsuite/
2020-09-18  H.J. Lu  <hjl.tools@gmail.com>
    Richard Sandiford  <richard.sandiford@arm.com>

PR middle-end/91957
* g++.target/i386/pr97054.C: New test.
* gcc.target/i386/pr82673.c: Remove redundant extra message.

3 years agoMAINTAINERS: Add myself for write after approval.
Omar Tahir [Fri, 18 Sep 2020 14:30:42 +0000 (15:30 +0100)]
MAINTAINERS: Add myself for write after approval.

ChangeLog:

2020-09-18  Omar Tahir  <omar.tahir@arm.com>

* MAINTAINERS (Write After Approval): Add myself.

3 years agotestsuite: add another test for the rotate vectorization miscompilation
Jakub Jelinek [Fri, 18 Sep 2020 13:05:53 +0000 (15:05 +0200)]
testsuite: add another test for the rotate vectorization miscompilation

This time with short and char where the used mask used to be larger
than it should have been.

2020-09-18  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/97081
* gcc.dg/vect/pr97081-2.c: New test.

3 years agotree-optimization/97081 - fix wrong-code with vectorized shift
Richard Biener [Fri, 18 Sep 2020 11:36:24 +0000 (13:36 +0200)]
tree-optimization/97081 - fix wrong-code with vectorized shift

This corrects the mask for creation of x << s | x >> (-x & mask)
from a rotate x <<r s to use the precision of x.

2020-09-18  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97081
* tree-vect-patterns.c (vect_recog_rotate_pattern): Use the
precision of the shifted operand to determine the mask.

* gcc.dg/vect/pr97081.c: New testcase.

3 years agoMSP430: Add 'd', 'e', 'f' and 'g' asm operand modifiers
Jozef Lawrynowicz [Fri, 18 Sep 2020 12:07:19 +0000 (13:07 +0100)]
MSP430: Add 'd', 'e', 'f' and 'g' asm operand modifiers

The new operand modifiers can be used to select odd-numbered bytes of a memory
reference or constant value.

gcc/ChangeLog:

* config/msp430/msp430.c (msp430_print_operand): Update comment.
Cast to long when printing values formatted as long.
Support 'd', 'e', 'f' and 'g' modifiers.
Extract operand value with a single operation for all modifiers.
* doc/extend.texi (msp430Operandmodifiers): New.

gcc/testsuite/ChangeLog:

* gcc.target/msp430/operand-modifiers.c: Extend test to handle new
modifiers.
* gcc.target/msp430/operand-modifiers-bad.c: New test.

3 years agoMSP430: Fix CFA generation during function epilogues
Jozef Lawrynowicz [Fri, 18 Sep 2020 12:03:13 +0000 (13:03 +0100)]
MSP430: Fix CFA generation during function epilogues

There is no CFA information generated for instructions that manipulate the
stack during function epilogues. This means a debugger cannot determine the
position of variables on the stack whilst the epilogue is in progress.

This can cause the debugger to give erroneous information when printing a
backtrace whilst stepping through the epilogue, or cause software watchpoints
set on stack variables to become invalidated after a function epilogue
is executed.

The patch fixes this by marking stack manipulation insns as
frame_related, and adding reg_note RTXs to stack pop instructions in the
epilogue.

gcc/ChangeLog:

* config/msp430/msp430.c (increment_stack): Mark insns which increment
the stack as frame_related.
(msp430_expand_prologue): Add comments.
(msp430_expand_epilogue): Mark insns which decrement
the stack as frame_related.
Add reg_note to stack pop insns describing position of register
variables on the stack.

3 years agoamdgcn: Remove omp_gcn pass
Andrew Stubbs [Thu, 17 Sep 2020 11:48:21 +0000 (12:48 +0100)]
amdgcn: Remove omp_gcn pass

This pass only had an optimization for obtaining team/thread numbers in it,
and that turns out to be invalid in the presence of nested parallel regions,
so we can simply delete the whole thing.

Of course, it would be nice to apply the optimization where it is valid, but
that will take more effort than I have to spend right now.

gcc/ChangeLog:

* config/gcn/gcn-tree.c (execute_omp_gcn): Delete.
(make_pass_omp_gcn): Delete.
* config/gcn/t-gcn-hsa (PASSES_EXTRA): Delete.
* config/gcn/gcn-passes.def: Removed.

3 years agocfgloop.h: Reword comment describing is_exit flag
Alex Coplan [Fri, 18 Sep 2020 09:43:53 +0000 (10:43 +0100)]
cfgloop.h: Reword comment describing is_exit flag

This simple change rewords a comment in cfgloop.h to improve the grammar
and readability.

gcc/ChangeLog:

* cfgloop.h (nb_iter_bound): Reword comment describing is_exit.

3 years agotree-optimization/97095 - fix typo in vectorizable_live_operation
Richard Biener [Fri, 18 Sep 2020 09:34:31 +0000 (11:34 +0200)]
tree-optimization/97095 - fix typo in vectorizable_live_operation

This fixes a typo introduced with the last change and not noticed
because those vectorizer access macros are not type safe ...

2020-09-18  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97095
* tree-vect-loop.c (vectorizable_live_operation): Get
the SLP vector type from the correct object.

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

3 years agotree-optimization/97089 - fix bogus unsigned division replacement
Richard Biener [Fri, 18 Sep 2020 07:22:57 +0000 (09:22 +0200)]
tree-optimization/97089 - fix bogus unsigned division replacement

This fixes bogus replacing of an unsigned (-x)/y division by
-(x/y).

2020-09-18  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97089
* tree-ssa-sccvn.c (visit_nary_op): Do not replace unsigned
divisions.

3 years agotree-optimization/97098 - fix compile-time hog in SLP live
Richard Biener [Fri, 18 Sep 2020 07:00:12 +0000 (09:00 +0200)]
tree-optimization/97098 - fix compile-time hog in SLP live

This fixes a missed early-out in SLP live stmt marking when
all scalar stmts were already visited (oops).

2020-09-18  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97098
* tree-vect-slp.c (vect_bb_slp_mark_live_stmts): Do not
recurse to children when all stmts were already visited.

3 years agoc++: Layout decls with newly-complete type.
Jason Merrill [Fri, 4 Sep 2020 16:14:19 +0000 (12:14 -0400)]
c++: Layout decls with newly-complete type.

Martin's -Wplacement-new patch ran into a problem with DECL_SIZE not being
set on an extern variable for which the type was not complete until after
its declaration.  complete_vars was deliberately not calling layout_decl for
some reason, instead leaving that for expand_expr_real_1 much later in the
compilation.  But if we layout decls at declaration time, I don't see any
reason we shouldn't lay them out here, when their type is newly complete.

gcc/cp/ChangeLog:

* decl.c (complete_vars): Call layout_var_decl.

3 years agoDaily bump.
GCC Administrator [Fri, 18 Sep 2020 00:16:24 +0000 (00:16 +0000)]
Daily bump.

3 years ago[testsuite] Introduce effective target non_strict_prototype
Tom de Vries [Thu, 10 Sep 2020 11:23:43 +0000 (13:23 +0200)]
[testsuite] Introduce effective target non_strict_prototype

Consider test-case gcc.c-torture/compile/pr71109.c.

It contains a prototype-less declaration of foo:
...
static void foo ();
...
followed by a call to foo
...
      foo (bar, a);
...
followed by the definition of foo:
...
static inline void
foo (int x, struct S y, struct T z)
...

The test-case has undefined behaviour, but for the nvptx target it doesn't even
assemble:
...
$ gcc src/gcc/testsuite/gcc.c-torture/compile/pr71109.c -c
ptxas pr71109.o, line 196; error   : Type of argument does not match \
  formal parameter '%in_ar0'
ptxas pr71109.o, line 196; error   : Alignment of argument does not match \
  formal parameter '%in_ar0'
ptxas pr71109.o, line 196; error   : Call has wrong number of parameters
ptxas fatal   : Ptx assembly aborted due to errors
nvptx-as: ptxas returned 255 exit status
...

The problem is that this call:
...
   191  {
   192  .param .u64 %out_arg1;
   193  st.param.u64 [%out_arg1],%r23;
   194  .param .u64 %out_arg2;
   195  st.param.u64 [%out_arg2],%r32;
   196  call foo,(%out_arg1,%out_arg2);
   197  }
...
does not match the preceding declaration:
...
     6  // BEGIN FUNCTION DECL: foo
     7  .func foo (.param .u32 %in_ar0, .param .u64 %in_ar1, .param .u64 %in_ar2);
...
which is a PTX error.

Introduce an effective target non_strict_prototype that returns 0 for nvptx,
and use it in this and similar test-cases.

Tested on nvptx.

gcc/testsuite/ChangeLog:

* lib/target-supports.exp (check_effective_target_non_strict_prototype):
New proc.
* gcc.c-torture/compile/pr71109.c: Require effective target
non_strict_prototype.
* gcc.c-torture/compile/pr83051-2.c: Same.
* gcc.c-torture/compile/pr89663-1.c: Same.
* gcc.c-torture/compile/pr89663-2.c: Same.
* gcc.c-torture/compile/pr96796.c: Same.

3 years agoprofile: clarify comment around histogram format
Sergei Trofimovich [Fri, 4 Sep 2020 21:20:57 +0000 (22:20 +0100)]
profile: clarify comment around histogram format

gcc/ChangeLog:

* profile.c (sort_hist_values): Clarify hist format:
start with a value, not counter.

3 years agoRISC-V: fix a typo in riscv.h
Yeting Kuo [Thu, 17 Sep 2020 21:29:27 +0000 (15:29 -0600)]
RISC-V: fix a typo in riscv.h

gcc/ChangeLog:
* config/riscv/riscv.h (CSW_MAX_OFFSET): Fix typo.

gcc/testsuite/ChangeLog:
* gcc.target/riscv/shorten-memrefs-8.c: New test.

3 years agoAutodetect C++ dialect in use for clang-format
Dimitrij Mojoski [Thu, 17 Sep 2020 21:22:33 +0000 (15:22 -0600)]
Autodetect C++ dialect in use for clang-format

PR other//97076
* clang-format: Autodetect C++ standard in use rather than
forcing C++03.

3 years agoc++: Add tests for fixed PRs.
Marek Polacek [Thu, 17 Sep 2020 19:31:50 +0000 (15:31 -0400)]
c++: Add tests for fixed PRs.

Bugzilla inspection turned up a bunch of old(er) PRs that have been
fixed.  Let's include them not to regress in the future.

gcc/testsuite/ChangeLog:

PR c++/87530
PR c++/58156
PR c++/68828
PR c++/86002
PR c++/91525
PR c++/96223
PR c++/87032
PR c++/35098
* g++.dg/cpp0x/move-return4.C: New test.
* g++.dg/cpp0x/vt-58156.C: New test.
* g++.dg/cpp2a/concepts-pr68828.C: New test.
* g++.dg/cpp2a/concepts-pr86002.C: New test.
* g++.dg/cpp2a/concepts-pr91525.C: New test.
* g++.dg/cpp2a/constexpr-indeterminate1.C: New test.
* g++.dg/cpp2a/desig17.C: New test.
* g++.dg/ext/attrib62.C: New test.

3 years agolibgo: fix ptrace syscall hooks into glibc
Paul E. Murphy [Tue, 15 Sep 2020 19:18:28 +0000 (14:18 -0500)]
libgo: fix ptrace syscall hooks into glibc

ptrace is actually declared as a variadic function.  On ppc64le
the ABI requires to the caller to allocate space for the parameters
and allows the caller to modify them.

On ppc64le, depending on how and what version of GCC is used,
it will save to parameter save area.  This happened to clobber
a saved LR, and caused syscall.TestExecPtrace to fail with a timeout
when the tracee segfaults, and waits for the parent process to inspect.

Wrap this function to avoid directly calling glibc's ptrace from go.

Fixes golang/go#36698
Fixes go/92567

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

3 years agoc-family: Macro support in -Wmisleading-indentation [PR80076]
Patrick Palka [Thu, 17 Sep 2020 18:27:22 +0000 (14:27 -0400)]
c-family: Macro support in -Wmisleading-indentation [PR80076]

Currently the -Wmisleading-indentation warning doesn't do any analysis
when the guarded statement or the statement after it is produced by a
macro.  This means we warn for:

  if (flag)
    foo ();
    bar ();

but not for:

  #define BAR bar
  if (flag)
    foo ();
    BAR ();

This patch extends the -Wmisleading-indentation implementation to
support analyzing such statements and their tokens.  This is done in the
"natural" way by resolving the location of each of the three tokens to
the token's macro expansion point.  (Additionally, if the tokens all
resolve to the same macro expansion point then we instead use their
locations within the macro definition.)  When these resolved locations
are all different, then we can proceed with applying the warning
heuristics to them as if no macros were involved.

gcc/c-family/ChangeLog:

PR c/80076
* c-indentation.c (should_warn_for_misleading_indentation): Move
declarations of local variables closer to their first use.
Handle virtual token locations by resolving them to their
respective macro expansion points.  If all three tokens are
produced from the same macro expansion, then instead use their
loci within the macro definition.

gcc/objc/ChangeLog:

PR c/80076
* objc-gnu-runtime-abi-01.c
(gnu_runtime_abi_01_get_class_super_ref): Reduce indentation of
misleadingly indented return statements.
* objc-next-runtime-abi-01.c
(next_runtime_abi_01_get_class_super_ref): Likewise.

gcc/ChangeLog:

PR c/80076
* gensupport.c (alter_attrs_for_subst_insn) <case SET_ATTR>:
Reduce indentation of misleadingly indented code fragment.
* lra-constraints.c (multi_block_pseudo_p): Likewise.
* sel-sched-ir.c (merge_fences): Likewise.

libcpp/ChangeLog:

PR c/80076
* include/line-map.h (first_map_in_common): Declare.
* line-map.c (first_map_in_common): Remove static.

gcc/testsuite/ChangeLog:

PR c/80076
* c-c++-common/Wmisleading-indentation-5.c: New test.

3 years agoAdd DWARF5 variants of assembly scan tests that use DW_FORM_implicit_const
Mark Wielaard [Sun, 23 Aug 2020 14:21:08 +0000 (16:21 +0200)]
Add DWARF5 variants of assembly scan tests that use DW_FORM_implicit_const

Some DWARF tests scan the assembly output looking for constant values.
When using DWARF5 those constants might use DW_FORM_implicit_const,
which are output (in the comments) after the attribute instead of
before. To make sure these tests work introduce a -gdwarf-5 variant
of these tests and explicitly use -gdwarf-2 for the original.

gcc/testsuite/ChangeLog:

* gcc.dg/debug/dwarf2/inline2.c: Add -gdwarf-2.
* g++.dg/debug/dwarf2/inline-var-1.C: Likewise.
* gcc.dg/debug/dwarf2/pr41445-5.c: Likewise.
* gcc.dg/debug/dwarf2/pr41445-6.c: Likewise.
* gcc.dg/debug/dwarf2/inline6.c: New variant with -gdwarf-5.
* g++.dg/debug/dwarf2/inline-var-3.C: Likewise.
* gcc.dg/debug/dwarf2/pr41445-7.c: Likewise.
* gcc.dg/debug/dwarf2/pr41445-8.c: Likewise.

3 years agoaarch64: Fix dejaGNU directive in clastb_8.c testcase
Andrea Corallo [Thu, 17 Sep 2020 13:36:22 +0000 (15:36 +0200)]
aarch64: Fix dejaGNU directive in clastb_8.c testcase

gcc/testsuite/ChangeLog

2020-09-17  Andre Corallo  <andrea.corallo@arm.com>

* gcc.target/aarch64/sve/clastb_8.c: Fix a dg-final scan
directive.

3 years agoDocument -Wuninitialized for allocated objects.
Martin Sebor [Thu, 17 Sep 2020 15:07:09 +0000 (09:07 -0600)]
Document -Wuninitialized for allocated objects.

gcc/ChangeLog:

* doc/invoke.texi (-Wuninitialized): Document -Wuninitialized for
allocated objects.
 (-Wmaybe-uninitialized): Same.

3 years agoaix: apply socket.h extern "C++" more narrowly.
David Edelsohn [Wed, 16 Sep 2020 18:56:00 +0000 (18:56 +0000)]
aix: apply socket.h extern "C++" more narrowly.

Recent Technology Levels of AIX 7.2 have made sys/socket.h more C++-aware,
which causes the fix to be applied in too many locations.  This patch adds
more context for the selection to apply the fix more narrowly.

fixincludes/ChangeLog:

2020-09-17  David Edelsohn  <dje.gcc@gmail.com>

* inclhack.def (aix_externcpp1): Add more context to select.
(aix_externcpp2): Same.
* fixincl.x: Regenerate.
* tests/base/sys/socket.h: Update expected results.

3 years agoc++: requires-expressions and partial instantiation [PR96410]
Patrick Palka [Thu, 17 Sep 2020 13:16:02 +0000 (09:16 -0400)]
c++: requires-expressions and partial instantiation [PR96410]

This patch makes tsubst_requires_expr avoid substituting into a
requires-expression when partially instantiating a generic lambda.
This is necessary in general to ensure that we always check requirements
in lexical order (as in the first testcase below).  A mechanism similar
to PACK_EXPANSION_EXTRA_ARGS is added to remember template arguments and
defer substitution of requires-expressions.

Incidentally, this change also fixes the two mentioned PRs -- the
problem there is that tsubst_requires_expr was performing semantic
checks on template trees, and some of the checks are not prepared to
handle such trees.  With this patch, tsubst_requires_expr no longer
does any semantic checking at all when processing_template_decl.

gcc/cp/ChangeLog:

PR c++/96409
PR c++/96410
* constraint.cc (tsubst_requires_expr): Use REQUIRES_EXPR_PARMS
and REQUIRES_EXPR_REQS.  Use REQUIRES_EXPR_EXTRA_ARGS,
add_extra_args and build_extra_args to defer substitution until
we have all the template arguments.
(finish_requires_expr): Adjust the call to build_min so that
REQUIRES_EXPR_EXTRA_ARGS gets set to NULL_TREE.
* cp-tree.def (REQUIRES_EXPR): Give it a third operand.
* cp-tree.h (REQUIRES_EXPR_PARMS, REQUIRES_EXPR_REQS,
REQUIRES_EXPR_EXTRA_ARGS): Define.
(add_extra_args, build_extra_args): Declare.

gcc/testsuite/ChangeLog:

PR c++/96409
PR c++/96410
* g++.dg/cpp2a/concepts-lambda13.C: New test.
* g++.dg/cpp2a/concepts-lambda14.C: New test.

3 years agolibgcc/config/arm/fp16.c: Make _internal functions static inline
Christophe Lyon [Fri, 11 Sep 2020 11:43:56 +0000 (11:43 +0000)]
libgcc/config/arm/fp16.c: Make _internal functions static inline

This patch makes the *_internal functions 'static inline' to avoid these warnings during the build:
/libgcc/config/arm/fp16.c:169:1: warning: no previous prototype for '__gnu_h2f_internal' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:194:1: warning: no previous prototype for '__gnu_f2h_ieee' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:200:1: warning: no previous prototype for '__gnu_h2f_ieee' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:206:1: warning: no previous prototype for '__gnu_f2h_alternative' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:212:1: warning: no previous prototype for '__gnu_h2f_alternative' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:218:1: warning: no previous prototype for '__gnu_d2h_ieee' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:224:1: warning: no previous prototype for '__gnu_d2h_alternative' [-Wmissing-prototypes]

2020-09-11  Torbjörn SVENSSON  <torbjorn.svensson@st.com>
    Christophe Lyon  <christophe.lyon@linaro.org>

libgcc/
* config/arm/fp16.c (__gnu_h2f_internal): Add 'static inline'
qualifier.
(__gnu_f2h_ieee, __gnu_h2f_ieee, __gnu_f2h_alternative)
(__gnu_h2f_alternative,__gnu_d2h_ieee, __gnu_d2h_alternative): Add
missing prototypes.

3 years agoFortran: Avoid double-free with parse error (PR96041, PR93423)
Tobias Burnus [Thu, 17 Sep 2020 12:01:09 +0000 (14:01 +0200)]
Fortran: Avoid double-free with parse error (PR96041, PR93423)

gcc/fortran/

PR fortran/96041
PR fortran/93423
* decl.c (gfc_match_submod_proc): Avoid later double-free
in the error case.

3 years agoCSE negated multiplications and divisions
Richard Biener [Thu, 17 Sep 2020 09:48:36 +0000 (11:48 +0200)]
CSE negated multiplications and divisions

This adds the capability to look for available negated multiplications
and divisions, replacing them with cheaper negates.

2020-09-17  Richard Biener  <rguenther@suse.de>

* tree-ssa-sccvn.c (visit_nary_op): Value-number multiplications
and divisions to negates of available negated forms.

* gcc.dg/tree-ssa/ssa-fre-88.c: New testcase.

3 years agoFix assertion checking failure with tail call
Eric Botcazou [Thu, 17 Sep 2020 10:58:02 +0000 (12:58 +0200)]
Fix assertion checking failure with tail call

gcc/ChangeLog:
PR middle-end/97078
* function.c (use_register_for_decl): Test cfun->tail_call_marked
for a parameter here instead of...
(assign_parm_setup_reg): ...here.

gcc/testsuite/ChangeLog:
* gcc.dg/pr97078.c: New test.

3 years agoAllow copying of symbolic ranges to an irange.
Aldy Hernandez [Tue, 15 Sep 2020 15:33:48 +0000 (17:33 +0200)]
Allow copying of symbolic ranges to an irange.

This fixes an ICE when trying to copy a legacy value_range containing
a symbolic to a multi-range:

min = make_ssa_name (type);
max = build_int_cst (type, 55);
value_range vv (min, max);
int_range<2> vr = vv;

gcc/ChangeLog:

* range-op.cc (multi_precision_range_tests): Normalize symbolics when copying to a
multi-range.
* value-range.cc (irange::copy_legacy_range): Add test.

3 years agoFix availability of functions in other partitions
Jan Hubicka [Thu, 17 Sep 2020 10:41:07 +0000 (12:41 +0200)]
Fix availability of functions in other partitions

* cgraph.c (cgraph_node::get_availability): Fix availability of
functions in other partitions
* varpool.c (varpool_node::get_availability): Likewise.

3 years agoaarch64: Fixed unused variable warning in aarch64-unwind.h
Wei Wentao [Thu, 17 Sep 2020 09:40:23 +0000 (10:40 +0100)]
aarch64: Fixed unused variable warning in aarch64-unwind.h

libgcc/
* config/aarch64/aarch64-unwind.h (aarch64_demangle_return_addr): Fix
unused variable warning.

3 years agofixincludes/fixfixes.c: Fix 'set but not used' warning.
Christophe Lyon [Fri, 11 Sep 2020 11:58:59 +0000 (11:58 +0000)]
fixincludes/fixfixes.c: Fix 'set but not used' warning.

pz_tmp_base and pz_tmp_dot are always set, but used only when
_PC_NAME_MAX is defined.

This patch moves their declaration and definition undef #ifdef
_PC_NAME_MAX to avoid this warning.

2020-09-11  Torbjörn SVENSSON  <torbjorn.svensson@st.com>
    Christophe Lyon  <christophe.lyon@linaro.org>

fixincludes/
* fixfixes.c (pz_tmp_base, pz_tmp_dot): Define only with
_PC_NAME_MAX.

3 years agoC-SKY: Add -msim option
Jojo R [Wed, 16 Sep 2020 11:47:41 +0000 (19:47 +0800)]
C-SKY: Add -msim option

gcc/ChangeLog:

* config/csky/csky.opt (msim): New.
* doc/invoke.texi (C-SKY Options): Document -msim.
* config/csky/csky-elf.h (LIB_SPEC): Add simulator runtime.

3 years agodoc: use @code{} instead of @samp{@command{}} around 'date %s'
Sergei Trofimovich [Fri, 11 Sep 2020 22:33:01 +0000 (23:33 +0100)]
doc: use @code{} instead of @samp{@command{}} around 'date %s'

Before the change 'man gcc' rendered "SOURCE_DATE_EPOCH" section as:
    ... the output of @command{date +%s} on GNU/Linux ...
After the change it renders as:
    ... the output of "date +%s" on GNU/Linux ...

gcc/ChangeLog:

* doc/cppenv.texi: Use @code{} instead of @samp{@command{}}
around 'date %s'.

3 years agoIf -mavx implies -mxsave, then -mno-xsave should imply -mno-avx.
liuhongt [Wed, 16 Sep 2020 05:56:30 +0000 (13:56 +0800)]
If -mavx implies -mxsave, then -mno-xsave should imply -mno-avx.

Current status is -mno-avx implies -mno-xsave which should be wrong.

gcc/ChangeLog

* common/config/i386/i386-common.c
(OPTION_MASK_ISA_AVX_UNSET): Remove OPTION_MASK_ISA_XSAVE_UNSET.
(OPTION_MASK_ISA_XSAVE_UNSET): Add OPTION_MASK_ISA_AVX_UNSET.

gcc/testsuite/ChangeLog

* gcc.target/i386/xsave-avx-1.c: New test.

3 years agoDaily bump.
GCC Administrator [Thu, 17 Sep 2020 00:16:31 +0000 (00:16 +0000)]
Daily bump.

3 years agolibbacktrace: use ELF symbol table if no debug info available
Ian Lance Taylor [Thu, 17 Sep 2020 00:03:52 +0000 (17:03 -0700)]
libbacktrace: use ELF symbol table if no debug info available

PR libbacktrace/97080
* fileline.c (backtrace_syminfo_to_full_callback): New function.
(backtrace_syminfo_to_full_error_callback): New function.
* elf.c (elf_nodebug): Call syminfo_fn if possible.
* internal.h (struct backtrace_call_full): Define.
(backtrace_syminfo_to_full_callback): Declare.
(backtrace_syminfo_to_full_error_callback): Declare.
* mtest.c (f3): Only check all[i] if data.index permits.

3 years agoanalyzer: fix state explosions due to SCC bug
David Malcolm [Wed, 16 Sep 2020 13:22:06 +0000 (09:22 -0400)]
analyzer: fix state explosions due to SCC bug

Debugging the state explosion of the very large switch statement in
gcc.dg/analyzer/pr96653.c showed that the worklist was failing to
order the exploded nodes correctly; the in-edges at the join point
after the switch were not getting processed together, but were instead
being rocessed in smaller batches, bloating the exploded graph until the
per-point limit was reached.

The root cause turned out to be a bug in creating the strongly-connected
components for the supergraph: the code was considering interprocedural
edges as well as intraprocedural edges, leading to unpredictable
misorderings of the SCC and worklist, leading to bloating of the
exploded graph.

This patch fixes the SCC creation so it only considers intraprocedural
edges within the supergraph.  It also tweaks worklist::key_t::cmp to
give higher precedence to call_string over differences within a
supernode, since enodes with different call_strings can't be merges.
In practise, none of my test cases were affected by this latter change,
though it seems to be the right thing to do.

With this patch, the very large switch statement in
gcc.dg/analyzer/pr96653.c is handled in a single call to
exploded_graph::maybe_process_run_of_before_supernode_enodes:
   merged 358 in-enodes into 2 out-enode(s) at SN: 402
and that testcase no longer hits the per-program-point limits.

gcc/analyzer/ChangeLog:
* engine.cc (strongly_connected_components::strong_connect): Only
consider intraprocedural edges when creating SCCs.
(worklist::key_t::cmp): Add comment.  Treat call_string
differences as more important than differences of program_point
within a supernode.

gcc/testsuite/ChangeLog:
PR analyzer/96653
* gcc.dg/analyzer/loop-0-up-to-n-by-1-with-iter-obj.c: Update
expected number of exploded nodes.
* gcc.dg/analyzer/malloc-vs-local-1a.c: Update expected number
of exploded nodes.
* gcc.dg/analyzer/pr96653.c: Remove -Wno-analyzer-too-complex.

3 years agoanalyzer: show SCC ids in .dot dumps
David Malcolm [Wed, 16 Sep 2020 13:12:45 +0000 (09:12 -0400)]
analyzer: show SCC ids in .dot dumps

gcc/analyzer/ChangeLog:
* engine.cc (supernode_cluster::dump_dot): Show the SCC id
in the per-supernode clusters in FILENAME.eg.dot output.
(exploded_graph_annotator::add_node_annotations):
Show the SCC of the supernode in FILENAME.supernode.eg.dot output.
* exploded-graph.h (worklist::scc_id): New.
(exploded_graph::get_scc_id): New.

3 years agoanalyzer: bulk merger/processing of runs of nodes at CFG join points
David Malcolm [Tue, 18 Aug 2020 22:52:17 +0000 (18:52 -0400)]
analyzer: bulk merger/processing of runs of nodes at CFG join points

Prior to this patch the analyzer worklist considered only one node or
two nodes at a time, processing and/or merging state individually or
pairwise.

This could lead to explosions of merger nodes at CFG join points,
especially after switch statements, which could have large numbers
of in-edges, and thus large numbers of merger exploded_nodes could
be created, exceeding the per-point limit and thus stopping analysis
with -Wanalyzer-too-complex.

This patch special-cases the handling for runs of consecutive
nodes in the worklist at a CFG join point, processing and merging
them all together.

The patch fixes a state explosion seen in bzip2.c seen when attempting
to reproduce PR analyzer/95188, in a switch statement in a loop for
argument parsing.  With this patch, the analyzer successfully
consolidates the state after the argument parsing to a single exploded
node.

In gcc.dg/analyzer/pr96653.c there is a switch statement with over 300
cases which leads to hitting the per-point limit.  With this patch
the consolidation code doesn't manage to merge all of them due to other
worklist-ordering bugs, and it still hits the per-point limits, but it
does manage some very long consolidations:
  merged 2 in-enodes into 2 out-enode(s) at SN: 403
  merged 2 in-enodes into 2 out-enode(s) at SN: 403
  merged 2 in-enodes into 1 out-enode(s) at SN: 11
  merged 29 in-enodes into 1 out-enode(s) at SN: 35
  merged 6 in-enodes into 1 out-enode(s) at SN: 41
  merged 31 in-enodes into 1 out-enode(s) at SN: 35
and with a followup patch to fix an SCC issue it manages:
  merged 358 in-enodes into 2 out-enode(s) at SN: 402

The patch appears to fix the failure on non-x86_64 of:
  gcc.dg/analyzer/pr93032-mztools.c (test for excess errors)
which is PR analyzer/96616.

Unfortunately, the patch introduces a memory leak false positive in
gcc.dg/analyzer/pr94851-1.c, but this appears to be a pre-existing bug
that was hidden by state-merging failures.

gcc/analyzer/ChangeLog:
* engine.cc (exploded_node::dump_dot): Show STATUS_BULK_MERGED.
(exploded_graph::process_worklist): Call
maybe_process_run_of_before_supernode_enodes.
(exploded_graph::maybe_process_run_of_before_supernode_enodes):
New.
(exploded_graph_annotator::print_enode): Show STATUS_BULK_MERGED.
* exploded-graph.h (enum exploded_node::status): Add
STATUS_BULK_MERGED.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/bzip2-arg-parse-1.c: New test.
* gcc.dg/analyzer/loop-n-down-to-1-by-1.c: Remove xfail.
* gcc.dg/analyzer/pr94851-1.c: Add xfail.

3 years agoanalyzer: add program_point::get_next
David Malcolm [Tue, 15 Sep 2020 18:25:52 +0000 (14:25 -0400)]
analyzer: add program_point::get_next

Avoid some future copy-and-paste by introducing a function.

gcc/analyzer/ChangeLog:
* engine.cc
(exploded_graph::process_node) <case PK_BEFORE_SUPERNODE>:
Simplify by using program_point::get_next.
* program-point.cc (program_point::get_next): New.
* program-point.h (program_point::get_next): New decl.

3 years agoanalyzer: show program point in -Wanalyzer-too-complex
David Malcolm [Tue, 15 Sep 2020 13:57:36 +0000 (09:57 -0400)]
analyzer: show program point in -Wanalyzer-too-complex

I found this useful when debugging.

gcc/analyzer/ChangeLog:
* engine.cc (exploded_graph::get_or_create_node): Show the
program point when issuing -Wanalyzer-too-complex due to hitting
the per-program-point limit.

3 years agoanalyzer: getchar has no side-effects
David Malcolm [Wed, 16 Sep 2020 17:12:39 +0000 (13:12 -0400)]
analyzer: getchar has no side-effects

Seen whilst debugging another issue, where the analyzer was assuming
conservatively that a call to getchar could clobber a global.

This is handled for most of the other stdio functions by the list
in sm-file.cc

gcc/analyzer/ChangeLog:
* region-model.cc (region_model::on_call_pre): Treat getchar as
having no side-effects.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/getchar-1.c: New test.

3 years agouse E_*mode instead of just *mode
Alexandre Oliva [Wed, 16 Sep 2020 21:15:01 +0000 (18:15 -0300)]
use E_*mode instead of just *mode

g++ 4.8.5 rejected cases with SFmode and DFmode, presumably due to
some bug in the constexpr implementation.

for  gcc/ChangeLog

* config/rs6000/rs6000.c (have_compare_and_set_mask): Use
E_*mode in cases.

3 years agors6000: Add rs6000_cfun_pcrel_p
Bill Schmidt [Wed, 16 Sep 2020 21:12:35 +0000 (16:12 -0500)]
rs6000: Add rs6000_cfun_pcrel_p

Most uses of rs6000_pcrel_p are called for the current function.
A specialized version for cfun is more efficient for these uses.

2020-09-16  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/predicates.md (current_file_function_operand):
Remove argument from rs6000_pcrel_p call.
* config/rs6000/rs6000-logue.c (rs6000_decl_ok_for_sibcall):
Likewise.
(rs6000_global_entry_point_prologue_needed_p): Likewise.
(rs6000_output_function_prologue): Likewise.
* config/rs6000/rs6000-protos.h (rs6000_function_pcrel_p): New
prototype.
(rs6000_pcrel_p): Remove argument.
* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Remove
argument from rs6000_pcrel_p call.
(rs6000_call_template_1): Likewise.
(rs6000_indirect_call_template_1): Likewise.
(rs6000_longcall_ref): Likewise.
(rs6000_call_aix): Likewise.
(rs6000_sibcall_aix): Likewise.
(rs6000_function_pcrel_p): Rename from rs6000_pcrel_p.
(rs6000_pcrel_p): Rewrite.
* config/rs6000/rs6000.md (*pltseq_plt_pcrel<mode>): Remove
argument from rs6000_pcrel_p call.
(*call_local<mode>): Likewise.
(*call_value_local<mode>): Likewise.
(*call_nonlocal_aix<mode>): Likewise.
(*call_value_nonlocal_aix<mode>): Likewise.
(*call_indirect_pcrel<mode>): Likewise.
(*call_value_indirect_pcrel<mode>): Likewise.

3 years agoDetect conflicts between incompatible uses of the same attribute (PR c/78666).
Martin Sebor [Wed, 16 Sep 2020 20:04:01 +0000 (14:04 -0600)]
Detect conflicts between incompatible uses of the same attribute (PR c/78666).

Resolves:
PR c/78666 - conflicting attribute alloc_size accepted
PR c/96126 - conflicting attribute section accepted on redeclaration

gcc/c-family/ChangeLog:

PR c/78666
PR c/96126
* c-attribs.c (validate_attr_args): New function.
(validate_attr_arg): Same.
(handle_section_attribute): Call it.  Introduce a local variable.
(handle_alloc_size_attribute):  Same.
(handle_alloc_align_attribute): Same.

gcc/testsuite/ChangeLog:

PR c/78666
PR c/96126
* gcc.dg/attr-alloc_align-5.c: New test.
* gcc.dg/attr-alloc_size-13.c: New test.
* gcc.dg/attr-section.c: New test.
* c-c++-common/builtin-has-attribute-3.c: Add xfails due to expected
warnings to be cleaned up.

3 years agopreprocessor: Fix ICE with too long line in fmtwarn [PR96935]
Marek Polacek [Wed, 16 Sep 2020 13:27:29 +0000 (09:27 -0400)]
preprocessor: Fix ICE with too long line in fmtwarn [PR96935]

Here we ICE in char_span::subspan because the offset it gets is -1.
It's -1 because get_substring_ranges_for_loc gets a location whose
column was 0.  That only happens in testcases like the attached where
we're dealing with extremely long lines (at least 4065 chars it seems).
This does happen in practice, though, so it's not just a theoretical
problem (e.g. when building the SU2 suite).

Fixed by checking that the column get_substring_ranges_for_loc gets is
sane, akin to other checks in that function.

gcc/ChangeLog:

PR preprocessor/96935
* input.c (get_substring_ranges_for_loc): Return if start.column
is less than 1.

gcc/testsuite/ChangeLog:

PR preprocessor/96935
* gcc.dg/format/pr96935.c: New test.

3 years agoWork harder to avoid -Wuninitialized for objects of empty structs (PR middle-end...
Martin Sebor [Wed, 16 Sep 2020 19:23:31 +0000 (13:23 -0600)]
Work harder to avoid -Wuninitialized for objects of empty structs (PR middle-end/96295).

Resolves:
PR middle-end/96295 - -Wmaybe-uninitialized warning for range operator with
reference to an empty struct

gcc/ChangeLog:

PR middle-end/96295
* tree-ssa-uninit.c (maybe_warn_operand): Work harder to avoid
warning for objects of empty structs

gcc/testsuite/ChangeLog:

PR middle-end/96295
* g++.dg/warn/Wuninitialized-11.C: New test.

3 years agoc++: local-scope OMP UDR reductions have no template head
Nathan Sidwell [Wed, 16 Sep 2020 18:04:19 +0000 (11:04 -0700)]
c++: local-scope OMP UDR reductions have no template head

This corrects the earlier problems with removing the template header
from local omp reductions.  And it uncovered a latent bug.  When we
tsubst such a decl, we immediately tsubst its body.
cp_check_omp_declare_reduction gets a success return value to gate
that instantiation.

udr-2.C got a further error, as the omp checking machinery doesn't
appear to turn the reduction into an error mark when failing.  I
didn't dig into that further.  udr-3.C appears to have been invalid
and accidentally worked.

gcc/cp/
* cp-tree.h (cp_check_omp_declare_reduction): Return bool.
* semantics.c (cp_check_omp_declare_reduction): Return true on for
success.
* pt.c (push_template_decl_real): OMP reductions do not get a
template header.
(tsubst_function_decl): Remove special casing for local decl omp
reductions.
(tsubst_expr): Call instantiate_body for a local omp reduction.
(instantiate_body): Add nested_p parm, and deal with such
instantiations.
(instantiate_decl): Reject FUNCTION_SCOPE entities, adjust
instantiate_body call.
gcc/testsuite/
* g++.dg/gomp/udr-2.C: Add additional expected error.
libgomp/
* testsuite/libgomp.c++/udr-3.C: Add missing ctor.

3 years agolibbacktrace, Mach-O : Support PowerPC archs.
Iain Sandoe [Wed, 16 Sep 2020 07:03:05 +0000 (08:03 +0100)]
libbacktrace, Mach-O : Support PowerPC archs.

This adds the PPC architecture variants for Mach-O libbacktrace.

With this (as for X86 and Arm) when dsymutil is run on the binary
we get a basic usable backtrace.

Testsuite results on powerpc-apple-darwin9 are the same as for X86:
 * btest fails (TBC why)
 * dwarf5 tests fail because dsymutil does not handle that so far.

libbacktrace/ChangeLog:

* macho.c (MACH_O_CPU_TYPE_PPC): New.
(MACH_O_CPU_TYPE_PPC64): New.
Add compile-tests for powerpc to the Mach-O variants.

3 years agoFix pessimization in EH cleanup pass
Eric Botcazou [Wed, 16 Sep 2020 11:06:34 +0000 (13:06 +0200)]
Fix pessimization in EH cleanup pass

This restores the post-order traversal done by cleanup_all_empty_eh in
order to eliminate empty landing pads and also contains a small tweak
to the line debug info to avoid a problematic inheritance for coverage
measurement.

gcc/ChangeLog:
* tree-eh.c (lower_try_finally_dup_block): Backward propagate slocs
to stack restore builtin calls.
(cleanup_all_empty_eh): Do again a post-order traversal of the EH
region tree.

gcc/testsuite/ChangeLog:
* gnat.dg/concat4.adb: New test.

3 years agoc++: Avoid confusing 'nested' name
Nathan Sidwell [Wed, 16 Sep 2020 15:05:26 +0000 (08:05 -0700)]
c++: Avoid confusing 'nested' name

instantiate_body has a local var call 'nested', which indicates that
this instantiation was caused during the body of some function -- not
necessarily its containing scope.  That's confusing, let's just use
'current_function_decl' directly.  Then we can also simplify the
push_to_top_level logic, which /does/ indicate whether this is an
actual nested function.  (C++ does not have nested functions, but OMP
ODRs fall into that category.  A follow up patch will use that more
usual meaning of 'nested' wrt to functions.)

gcc/cp/
* pt.c (instantiate_body): Remove 'nested' var, simplify
push_to_top logic.

3 years agoFortran: OpenMP - fix simd with (last)private (PR97061)
Tobias Burnus [Wed, 16 Sep 2020 14:23:13 +0000 (16:23 +0200)]
Fortran: OpenMP - fix simd with (last)private (PR97061)

gcc/fortran/ChangeLog:

PR fortran/97061
* trans-openmp.c (gfc_trans_omp_do): Handle simd with (last)private.

gcc/testsuite/ChangeLog:

PR fortran/97061
* gfortran.dg/gomp/openmp-simd-6.f90: New test.

3 years agoc++: Break out actual instantiation from instantiate_decl
Nathan Sidwell [Wed, 16 Sep 2020 14:14:14 +0000 (07:14 -0700)]
c++: Break out actual instantiation from instantiate_decl

This refactors instantiate_decl, breaking out the actual instantiation
work to instantiate_body.  That'll allow me to address the OMP UDR
issue, but it also means we have slightly neater code in
instantiate_decl anyway.

gcc/cp/
* pt.c (instantiate_body): New, broken out of ..
(instantiate_decl): ... here.  Call it.

3 years agovec: don't select partial vectors when unnecessary
Andrea Corallo [Fri, 28 Aug 2020 15:01:15 +0000 (16:01 +0100)]
vec: don't select partial vectors when unnecessary

gcc/ChangeLog

2020-09-09  Andrea Corallo  <andrea.corallo@arm.com>

* tree-vect-loop.c (vect_need_peeling_or_partial_vectors_p): New
function.
(vect_analyze_loop_2): Make use of it not to select partial
vectors if no peel is required.
(determine_peel_for_niter): Move out some logic into
'vect_need_peeling_or_partial_vectors_p'.

gcc/testsuite/ChangeLog

2020-09-09  Andrea Corallo  <andrea.corallo@arm.com>

* gcc.target/aarch64/sve/cost_model_10.c: New test.
* gcc.target/aarch64/sve/clastb_8.c: Update test for new
vectorization strategy.
* gcc.target/aarch64/sve/cost_model_5.c: Likewise.
* gcc.target/aarch64/sve/struct_vect_14.c: Likewise.
* gcc.target/aarch64/sve/struct_vect_15.c: Likewise.
* gcc.target/aarch64/sve/struct_vect_16.c: Likewise.
* gcc.target/aarch64/sve/struct_vect_17.c: Likewise.

3 years agortl_data: Add sp_is_clobbered_by_asm
H.J. Lu [Mon, 14 Sep 2020 15:52:27 +0000 (08:52 -0700)]
rtl_data: Add sp_is_clobbered_by_asm

Add sp_is_clobbered_by_asm to rtl_data to inform backends that the stack
pointer is clobbered by asm statement.

gcc/

PR target/97032
* cfgexpand.c (asm_clobber_reg_kind): Set sp_is_clobbered_by_asm
to true if the stack pointer is clobbered by asm statement.
* emit-rtl.h (rtl_data): Add sp_is_clobbered_by_asm.
* config/i386/i386.c (ix86_get_drap_rtx): Set need_drap to true
if the stack pointer is clobbered by asm statement.

gcc/testsuite/

PR target/97032
* gcc.target/i386/pr97032.c: New test.

3 years agotestsuite/97066 - minor change to bypass plusminus-with-convert rule
Feng Xue [Wed, 16 Sep 2020 08:21:14 +0000 (16:21 +0800)]
testsuite/97066 - minor change to bypass plusminus-with-convert rule

The following testcases will be simplified by the new rule
(T)(A) +- (T)(B) -> (T)(A +- B), so could not keep code pattern
expected by test-check. Adjust test code to suppress simplification.

2020-09-16  Feng Xue  <fxue@os.amperecomputing.com>

gcc/testsuite/
PR testsuite/97066
* gcc.dg/ifcvt-3.c: Modified to suppress simplification.
* gcc.dg/tree-ssa/20030807-10.c: Likewise.

3 years agoIBM Z: Fix *vec_tf_to_v1tf constraints
Ilya Leoshkevich [Wed, 2 Sep 2020 16:00:35 +0000 (18:00 +0200)]
IBM Z: Fix *vec_tf_to_v1tf constraints

Certain alternatives of *vec_tf_to_v1tf use "v" constraint for its
TFmode source operand.  Therefore it is assigned to VEC_REGS class,
and when it is reloaded using *movtf_64, whose relevant alternatives
need FP_REGS, LRA loops and ICE happens.  The reason is that register
class mismatch causes LRA to emit another reload, which triggers this
issue again.

Fix by using "f" constraint, which is more appropriate for FP register
pairs anyway.

gcc/ChangeLog:

2020-09-02  Ilya Leoshkevich  <iii@linux.ibm.com>

* config/s390/vector.md(*vec_tf_to_v1tf): Use "f" instead of "v"
  for the source operand.

3 years agoC-SKY: Refine target name for elf target test
Jojo R [Wed, 16 Sep 2020 10:34:43 +0000 (18:34 +0800)]
C-SKY: Refine target name for elf target test

gcc/testsuite/ChangeLog:

* lib/target-supports.exp (check_profiling_available): Refine name of elf target.

3 years agoC-SKY: Set use_gcc_stdint=wrap for elf target
Jojo R [Wed, 16 Sep 2020 10:34:42 +0000 (18:34 +0800)]
C-SKY: Set use_gcc_stdint=wrap for elf target

gcc/ChangeLog:

* config.gcc (C-SKY): Set use_gcc_stdint=wrap for elf target.

3 years agoC-SKY: Enable crtbegin/crtend.o of libgcc for elf target
Jojo R [Wed, 16 Sep 2020 10:34:41 +0000 (18:34 +0800)]
C-SKY: Enable crtbegin/crtend.o of libgcc for elf target

libgcc/ChangeLog:

* config.host (C-SKY): Enable crtbegin/crtend.o of libgcc for elf target.

3 years agoremove STMT_VINFO_NUM_SLP_USES
Richard Biener [Wed, 16 Sep 2020 09:24:23 +0000 (11:24 +0200)]
remove STMT_VINFO_NUM_SLP_USES

This removes STMT_VINFO_NUM_SLP_USES by pushing the setting of
the shared stmt_vec_info vector type to where we actually need it
which is alignment analysis and vectorizable_* analysis (where
we could eventually elide it for non-load/store operations).

In particular "uses" in the cache and in disqualified SLP
subgraphs should no longer provide conflicting vector types
this way.

2020-09-16  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (_stmt_vec_info::num_slp_uses): Remove.
(STMT_VINFO_NUM_SLP_USES): Likewise.
(vect_free_slp_instance): Adjust.
(vect_update_shared_vectype): Declare.
* tree-vectorizer.c (vec_info::~vec_info): Adjust.
* tree-vect-loop.c (vect_analyze_loop_2): Likewise.
(vectorizable_live_operation): Use vector type from
SLP_TREE_REPRESENTATIVE.
(vect_transform_loop): Adjust.
* tree-vect-data-refs.c (vect_slp_analyze_node_alignment):
Set the shared vector type.
* tree-vect-slp.c (vect_free_slp_tree): Remove final_p
parameter, remove STMT_VINFO_NUM_SLP_USES updating.
(vect_free_slp_instance): Adjust.
(vect_create_new_slp_node): Remove STMT_VINFO_NUM_SLP_USES
updating.
(vect_update_shared_vectype): Always compare with the
present vector type, update if NULL.
(vect_build_slp_tree_1): Do not update the shared vector
type here.
(vect_build_slp_tree_2): Adjust.
(slp_copy_subtree): Likewise.
(vect_attempt_slp_rearrange_stmts): Likewise.
(vect_analyze_slp_instance): Likewise.
(vect_analyze_slp): Likewise.
(vect_slp_analyze_node_operations_1): Update the shared
vector type.
(vect_slp_analyze_operations): Adjust.
(vect_slp_analyze_bb_1): Likewise.

3 years agoC-SKY: Support multilib for mfloat-abi=.
Jojo R [Wed, 16 Sep 2020 07:29:18 +0000 (15:29 +0800)]
C-SKY: Support multilib for mfloat-abi=.

gcc/ChangeLog:

* config/csky/t-csky-linux (CSKY_MULTILIB_OSDIRNAMES): Use mfloat-abi.
(MULTILIB_OPTIONS): Likewise.
* config/csky/t-csky-elf (MULTILIB_OPTIONS): Likewise.
(MULTILIB_EXCEPTIONS): Likewise.

3 years agoarm: Avoid unused parameter warning
Jakub Jelinek [Wed, 16 Sep 2020 08:11:53 +0000 (10:11 +0200)]
arm: Avoid unused parameter warning

2020-09-16  Jakub Jelinek  <jakub@redhat.com>

* config/arm/arm.c (arm_option_restore): Comment out opts argument
name to avoid unused parameter warnings.

3 years agooptions, lto: Optimize streaming of optimization nodes
Jakub Jelinek [Wed, 16 Sep 2020 08:04:32 +0000 (10:04 +0200)]
options, lto: Optimize streaming of optimization nodes

When working on the previous patch, I've noticed that all cl_optimization
fields appart from strings are streamed with bp_pack_value (..., 64); so we
waste quite a lot of space, given that many of the options are just booleans
or char options and there are 450-ish of them.

Fixed by streaming the number of bits the corresponding fields have.
While for char fields we have also range information, except for 3
it is either -128, 127 or 0, 255, so it didn't seem worth it to bother
with using range-ish packing.

2020-09-16  Jakub Jelinek  <jakub@redhat.com>

* optc-save-gen.awk: In cl_optimization_stream_out use
bp_pack_var_len_{int,unsigned} instead of bp_pack_value.  In
cl_optimization_stream_in use bp_unpack_var_len_{int,unsigned}
instead of bp_unpack_value.  Formatting fix.

3 years agostore-merging: Consider also overlapping stores earlier in the by bitpos sorting...
Jakub Jelinek [Wed, 16 Sep 2020 07:42:33 +0000 (09:42 +0200)]
store-merging: Consider also overlapping stores earlier in the by bitpos sorting [PR97053]

As the testcases show, if we have something like:
  MEM <char[12]> [&b + 8B] = {};
  MEM[(short *) &b] = 5;
  _5 = *x_4(D);
  MEM <long long unsigned int> [&b + 2B] = _5;
  MEM[(char *)&b + 16B] = 88;
  MEM[(int *)&b + 20B] = 1;
then in sort_by_bitpos the stores are almost like in the given order,
except the first store is after the = _5; store.
We can't coalesce the = 5; store with = _5;, because the latter is MEM_REF,
while the former INTEGER_CST, and we can't coalesce the = _5 store with
the = {} store because the former is MEM_REF, the latter INTEGER_CST.
But we happily coalesce the remaining 3 stores, which is wrong, because the
= _5; store overlaps those and is in between them in the program order.
We already have code to deal with similar cases in check_no_overlap, but we
deal only with the following stores in sort_by_bitpos order, not the earlier
ones.

The following patch checks also the earlier ones.  In coalesce_immediate_stores
it computes the first one that needs to be checked (all the ones whose
bitpos + bitsize is smaller or equal to merged_store->start don't need to be
checked and don't need to be checked even for any following attempts because
of the sort_by_bitpos sorting) and the end of that (that is the first store
in the merged_store).

2020-09-16  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/97053
* gimple-ssa-store-merging.c (check_no_overlap): Add FIRST_ORDER,
START, FIRST_EARLIER and LAST_EARLIER arguments.  Return false if
any stores between FIRST_EARLIER inclusive and LAST_EARLIER exclusive
has order in between FIRST_ORDER and LAST_ORDER and overlaps the to
be merged store.
(imm_store_chain_info::try_coalesce_bswap): Add FIRST_EARLIER argument.
Adjust check_no_overlap caller.
(imm_store_chain_info::coalesce_immediate_stores): Add first_earlier
and last_earlier variables, adjust them during iterations.  Adjust
check_no_overlap callers, call check_no_overlap even when extending
overlapping stores by extra INTEGER_CST stores.

* gcc.dg/store_merging_31.c: New test.
* gcc.dg/store_merging_32.c: New test.

3 years agoC-SKY: Fix wrong ld name with option -mfloat-abi=hard.
Jojo R [Wed, 16 Sep 2020 03:28:30 +0000 (11:28 +0800)]
C-SKY: Fix wrong ld name with option -mfloat-abi=hard.

gcc/ChangeLog:

* config/csky/csky-linux-elf.h (GLIBC_DYNAMIC_LINKER): Use mfloat-abi.

3 years agors6000: Remove useless insns fed into lvx/stvx [PR97019]
Kewen Lin [Wed, 16 Sep 2020 03:32:55 +0000 (22:32 -0500)]
rs6000: Remove useless insns fed into lvx/stvx [PR97019]

This patch is to extend the existing function find_alignment_op to
check all defintions of base_reg are AND operations with mask -16B
to force the alignment.  If all are satifised, it passes all AND
operations and instructions to function recombine_lvx_pattern
and recombine_stvx_pattern, they can remove all useless ANDs
further.

Bootstrapped/regtested on powerpc64le-linux-gnu P8.

gcc/ChangeLog:

PR target/97019
* config/rs6000/rs6000-p8swap.c (find_alignment_op): Adjust to
support multiple defintions which are all AND operations with
the mask -16B.
(recombine_lvx_pattern): Adjust to handle multiple AND operations
from find_alignment_op.
(recombine_stvx_pattern): Likewise.

gcc/testsuite/ChangeLog:

PR target/97019
* gcc.target/powerpc/pr97019.c: New test.

3 years agoC-SKY: Support -mfloat-abi=hard.
Jojo R [Tue, 15 Sep 2020 08:08:01 +0000 (16:08 +0800)]
C-SKY: Support -mfloat-abi=hard.

gcc/ChangeLog:

* config/csky/csky.md (CSKY_NPARM_FREGS): New.
(call_value_internal_vs/d): New.
(untyped_call): New.
* config/csky/csky.h (TARGET_SINGLE_FPU): New.
(TARGET_DOUBLE_FPU): New.
(FUNCTION_VARG_REGNO_P): New.
(CSKY_VREG_MODE_P): New.
(FUNCTION_VARG_MODE_P): New.
(CUMULATIVE_ARGS): Add extra regs info.
(INIT_CUMULATIVE_ARGS): Use csky_init_cumulative_args.
(FUNCTION_ARG_REGNO_P): Use FUNCTION_VARG_REGNO_P.
* config/csky/csky-protos.h (csky_init_cumulative_args): Extern.
* config/csky/csky.c (csky_cpu_cpp_builtins): Support TARGET_HARD_FLOAT_ABI.
(csky_function_arg): Likewise.
(csky_num_arg_regs): Likewise.
(csky_function_arg_advance): Likewise.
(csky_function_value): Likewise.
(csky_libcall_value): Likewise.
(csky_function_value_regno_p): Likewise.
(csky_arg_partial_bytes): Likewise.
(csky_setup_incoming_varargs): Likewise.
(csky_init_cumulative_args): New.

gcc/testsuite/ChangeLog:

* gcc.dg/builtin-apply2.c : Skip if CSKY.
* gcc.dg/torture/stackalign/builtin-apply-2.c : Likewise.

3 years agors6000: Fix misnamed built-in
Bill Schmidt [Wed, 16 Sep 2020 01:34:22 +0000 (20:34 -0500)]
rs6000: Fix misnamed built-in

The description in rs6000-builtin.def provides for a builtin named
__builtin_altivec_xst_len_r.  However, it is hand-defined in
altivec_init_builtins as __builtin_xst_len_r, against the usual naming
practice.  Fix that.

2020-09-15  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (altivec_init_builtins): Fix name
of __builtin_altivec_xst_len_r.

3 years agolibgo: additional type/const references in sysinfo.c
Than McIntosh [Tue, 15 Sep 2020 12:31:30 +0000 (08:31 -0400)]
libgo: additional type/const references in sysinfo.c

Add a few more explicit references to enumeration constants
(RUSAGE_SELF, DT_UNKNOWN) in sysinfo.c to insure that their hosting enums
are emitted into DWARF, when using a clang host compiler during
the gollvm build.

Updates golang/go#41382.
Updates golang/go#41404.

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

3 years agoDaily bump.
GCC Administrator [Wed, 16 Sep 2020 00:16:37 +0000 (00:16 +0000)]
Daily bump.

3 years agoanalyzer: fix ICE when merging constraints w/o transitivity [PR96650]
David Malcolm [Tue, 15 Sep 2020 09:51:04 +0000 (05:51 -0400)]
analyzer: fix ICE when merging constraints w/o transitivity [PR96650]

PR analyzer/96650 reports an assertion failure when merging the
intersection of two sets of constraints, due to the resulting
constraints being infeasible.

It turns out that the two input sets were each infeasible if
transitivity were considered, but -fanalyzer-transitivity was off.
However for this case, the merging code was "discovering" the
transitive infeasibility of the intersection of the constraints even
when -fanalyzer-transitivity is off, triggering an assertion failure.

I attempted various fixes for this, but each of them would have
introduced O(N^2) logic into the constraint-handling code into the
-fno-analyzer-transitivity case (with N == the number of constraints).

This patch fixes the ICE by tweaking the assertion, so that we
silently drop such constraints if -fanalyzer-transitivity is off.

gcc/analyzer/ChangeLog:
PR analyzer/96650
* constraint-manager.cc (merger_fact_visitor::on_fact): Replace
assertion that add_constraint succeeded with an assertion that
if it fails, -fanalyzer-transitivity is off.

gcc/testsuite/ChangeLog:
PR analyzer/96650
* gcc.dg/analyzer/pr96650-1-notrans.c: New test.
* gcc.dg/analyzer/pr96650-1-trans.c: New test.
* gcc.dg/analyzer/pr96650-2-notrans.c: New test.
* gcc.dg/analyzer/pr96650-2-trans.c: New test.

3 years agolibgomp/target.c: Silence -Wuninitialized warning
Tobias Burnus [Tue, 15 Sep 2020 19:28:40 +0000 (21:28 +0200)]
libgomp/target.c: Silence -Wuninitialized warning

libgomp/ChangeLog:

PR fortran/96668
* target.c (gomp_map_vars_internal): Initialize has_nullptr.

3 years agortlanal: fix subreg handling in set_noop_p ()
Ilya Leoshkevich [Tue, 8 Sep 2020 23:23:51 +0000 (01:23 +0200)]
rtlanal: fix subreg handling in set_noop_p ()

The following s390 rtx is errneously considered a no-op:

(set (subreg:DF (reg:TF %f0) 8) (subreg:DF (reg:V1TF %f0) 8))

Here, SET_DEST is a second register in a floating-point register pair,
and SET_SRC is the second half of a vector register, so they refer to
different bits.

Fix by treating subregs of registers in different modes conservatively.

gcc/ChangeLog:

2020-09-11  Ilya Leoshkevich  <iii@linux.ibm.com>

* rtlanal.c (set_noop_p): Treat subregs of registers in
different modes conservatively.