aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-06-11prepare-commit-hook: Use gcc-config.diff-file.Martin Liska1-2/+3
contrib/ChangeLog: * prepare-commit-msg: Replace ENV variable with a git config value.
2020-06-11contrib: Avoid redundant 'git diff' in prepare-commit-msg hookJonathan Wakely1-2/+4
contrib/ChangeLog: * prepare-commit-msg: Use 'tee' to save the diff to a file instead of running 'git diff' twice.
2020-06-11Fix -Wformat-diag in options-save.cMartin Liska1-1/+1
The patch removes bunch of warnings: options-save.c:12004:29: warning: unquoted identifier or keyword ‘global_options’ in format [-Wformat-diag] 12004 | internal_error ("Error: global_options are modified in local context\n"); gcc/ChangeLog: * optc-save-gen.awk: Quote error string.
2020-06-10slim up mem exprs to avoid line breaks in -fverbose-asmAlexandre Oliva1-1/+2
An asm operand with a "VIEW_CONVERT_EXPR<struct { [...] }>" will output the definition of the struct as asm code. Oops. Enable TDF_SLIM in print_mem_expr to avoid such line breaks. for gcc/ChangeLog * print-rtl.c (print_mem_expr): Enable TDF_SLIM in dump_flags.
2020-06-10RISC-V: Unify the output asm pattern between gpr_save and gpr_restore pattern.Kito Cheng4-18/+3
gcc/ChangeLog: * config/riscv/riscv-protos.h (riscv_output_gpr_save): Remove. * config/riscv/riscv-sr.c (riscv_sr_match_prologue): Update value. * config/riscv/riscv.c (riscv_output_gpr_save): Remove. * config/riscv/riscv.md (gpr_save): Update output asm pattern.
2020-06-10RISC-V: Describe correct USEs for gpr_save pattern [PR95252]Kito Cheng6-5/+156
- Verified on rv32emc/rv32gc/rv64gc bare-metal target and rv32gc/rv64gc linux target with qemu. gcc/ChangeLog: * config/riscv/predicates.md (gpr_save_operation): New. * config/riscv/riscv-protos.h (riscv_gen_gpr_save_insn): New. (riscv_gpr_save_operation_p): Ditto. * config/riscv/riscv-sr.c (riscv_remove_unneeded_save_restore_calls): Ignore USEs for gpr_save patter. * config/riscv/riscv.c (gpr_save_reg_order): New. (riscv_expand_prologue): Use riscv_gen_gpr_save_insn to gen gpr_save. (riscv_gen_gpr_save_insn): New. (riscv_gpr_save_operation_p): Ditto. * config/riscv/riscv.md (S3_REGNUM): New. (S4_REGNUM): Ditto. (S5_REGNUM): Ditto. (S6_REGNUM): Ditto. (S7_REGNUM): Ditto. (S8_REGNUM): Ditto. (S9_REGNUM): Ditto. (S10_REGNUM): Ditto. (S11_REGNUM): Ditto. (gpr_save): Model USEs correctly. gcc/testsuite/ChangeLog: * gcc.target/riscv/pr95252.c: New.
2020-06-11Daily bump.GCC Administrator8-1/+582
2020-06-10libstdc++: Fix some ranges algos optimizations [PR95578]Patrick Palka8-45/+465
ranges::copy and a number of other ranges algorithms have unwrapping optimizations for iterators of type __normal_iterator, move_iterator and reverse_iterator. But in the checks that guard these optimizations we currently only test that the iterator of the iterator/sentinel pair has the appropriate type before proceeding with the corresponding optimization, and do not also test the sentinel type. This breaks the testcase in this PR because this testcase constructs via range adaptors a range whose begin() is a __normal_iterator and whose end() is a custom sentinel type, and then performs ranges::copy on it. From there we bogusly perform the __normal_iterator unwrapping optimization on this iterator/sentinel pair, which immediately leads to a constraint failure since the custom sentinel type does not model sentinel_for<int*>. This patch fixes this issue by refining each of the problematic checks to also test that the iterator and sentinel types are the same before applying the corresponding unwrapping optimization. Along the way, some code simplifications are made. libstdc++-v3/ChangeLog: PR libstdc++/95578 * include/bits/ranges_algo.h (__lexicographical_compare_fn): Also check that the iterator and sentinel have the same type before applying the unwrapping optimization for __normal_iterator. Split the check into two, one for the first iterator/sentinel pair and another for second iterator/sentinel pair. Remove uses of __niter_base, and remove uses of std::move on a __normal_iterator. * include/bits/ranges_algobase.h (__equal_fn): Likewise. (__copy_or_move): Likewise. Perform similar adjustments for the reverse_iterator and move_iterator optimizations. Inline the checks into the if-constexprs, and use using-declarations to make them less visually noisy. Remove uses of __niter_wrap. (__copy_or_move_backward): Likewise. * testsuite/25_algorithms/copy/95578.cc: New test. * testsuite/25_algorithms/copy_backward/95578.cc: New test. * testsuite/25_algorithms/equal/95578.cc: New test. * testsuite/25_algorithms/lexicographical_compare/95578.cc: New test. * testsuite/25_algorithms/move/95578.cc: New test. * testsuite/25_algorithms/move_backward/95578.cc: New test.
2020-06-10[PR51447] restore the global reg var before returning from mainAlexandre Oliva1-0/+6
A runtime system might legitimately hold in rbx a value expected to be preserved across the call to main, but its use as a global register variable stops main from preserving it. for gcc/testsuite/ChangeLog PR rtl-optimization/51447 * gcc.c-torture/execute/pr51447.c (main): Preserve call-saved register.
2020-06-10coroutines: Make call argument handling more robust [PR95440]Iain Sandoe2-2/+41
build_new_method_call is supposed to be able to handle a null arguments list pointer (when the method has no parms). There were a couple of places where uses of the argument list pointer were not defended against NULL. gcc/cp/ChangeLog: PR c++/95440 * call.c (add_candidates): Use vec_safe_length() for testing the arguments list. (build_new_method_call_1): Use vec_safe_is_empty() when checking for an empty args list. gcc/testsuite/ChangeLog: PR c++/95440 * g++.dg/coroutines/pr95440.C: New test.
2020-06-10PR middle-end/95353 - spurious -Wstringop-overflow writing to a trailing ↵Martin Sebor20-361/+1188
array plus offset Also resolves: PR middle-end/92939 - missing -Wstringop-overflow on negative index from the end of array gcc/ChangeLog: PR middle-end/95353 PR middle-end/92939 * builtins.c (inform_access): New function. (check_access): Call it. Add argument. (addr_decl_size): Remove. (get_range): New function. (compute_objsize): New overload. Only use compute_builtin_object_size with raw memory function. (check_memop_access): Pass new argument to compute_objsize and check_access. (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 (check_nul_terminated_array): Declare extern. (check_access): Add argument. (struct access_ref, struct access_data): New structs. * gimple-ssa-warn-restrict.c (clamp_offset): New helper. (builtin_access::overlap): Call it. * tree-object-size.c (decl_init_size): Declare extern. (addr_object_size): Correct offset computation. * tree-object-size.h (decl_init_size): Declare. * tree-ssa-strlen.c (handle_integral_assign): Remove a call to maybe_warn_overflow when assigning to an SSA_NAME. gcc/testsuite/ChangeLog: PR middle-end/95353 PR middle-end/92939 * c-c++-common/Wstringop-truncation.c: Remove an xfail. * gcc.dg/Warray-bounds-46.c: Remove a bogus warning. * gcc.dg/Wrestrict-9.c: Disable -Wstringop-overflow. * gcc.dg/Wstringop-overflow-12.c: Remove xfails. * gcc.dg/Wstringop-overflow-28.c: Same. * gcc.dg/builtin-stringop-chk-4.c: Same. * gcc.dg/builtin-stringop-chk-5.c: Same. * gcc.dg/builtin-stringop-chk-8.c: Same. * gcc.dg/strlenopt-74.c: Avoid buffer overflow. * gcc.dg/Wstringop-overflow-34.c: New test. * gcc.dg/Wstringop-overflow-35.c: New test. * gcc.dg/Wstringop-overflow-36.c: New test. * gcc.dg/Wstringop-overflow-37.c: New test. * gcc.dg/Wstringop-overflow-38.c: New test.
2020-06-10libstdc++: Extend memcmp optimization in std::lexicographical_compareFrançois Dumont5-18/+606
Make the memcmp optimization work for std::deque iterators and safe iterators. Co-authored-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: 2020-06-08 François Dumont <fdumont@gcc.gnu.org> Jonathan Wakely <jwakely@redhat.com> * include/bits/deque.tcc (__lex_cmp_dit): New. (__lexicographical_compare_aux1): Define overloads for deque iterators. * include/bits/stl_algobase.h (__lexicographical_compare::__3way): New static member function. (__lexicographical_compare<true>::__3way): Likewise. (__lexicographical_compare<true>::__lc): Use __3way. (__lexicographical_compare_aux): Rename to __lexicographical_compare_aux1 and declare overloads for deque iterators. (__lexicographical_compare_aux): Define new forwarding function that calls __lexicographical_compare_aux1 and declare new overloads for safe iterators. (lexicographical_compare): Do not use __niter_base on parameters. * include/debug/safe_iterator.tcc (__lexicographical_compare_aux): Define overloads for safe iterators. * testsuite/25_algorithms/lexicographical_compare/1.cc: Add checks with random access iterators. * testsuite/25_algorithms/lexicographical_compare/deque_iterators/1.cc: New test.
2020-06-10avoid stmt-info allocation for debug stmtsRichard Biener4-4/+24
The following avoids allocating stmt info structs for debug stmts. 2020-06-10 Richard Biener <rguenther@suse.de> * tree-vect-loop.c (vect_determine_vectorization_factor): Skip debug stmts. (_loop_vec_info::_loop_vec_info): Likewise. (vect_update_vf_for_slp): Likewise. (vect_analyze_loop_operations): Likewise. (update_epilogue_loop_vinfo): Likewise. * tree-vect-patterns.c (vect_determine_precisions): Likewise. (vect_pattern_recog): Likewise. * tree-vect-slp.c (vect_detect_hybrid_slp): Likewise. (_bb_vec_info::_bb_vec_info): Likewise. * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Likewise.
2020-06-10tree-optimization/95576 - fix compare-debug issue with SLP vectorizationRichard Biener2-1/+31
The following avoids leading debug stmts in BB vectorizer regions. 2020-06-10 Richard Biener <rguenther@suse.de> PR tree-optimization/95576 * tree-vect-slp.c (vect_slp_bb): Skip leading debug stmts. * g++.dg/vect/pr95576.cc: New testcase.
2020-06-10aarch64: Fix an ICE in register_tuple_type [PR95523]z002190973-0/+15
When registering the tuple type in register_tuple_type, the TYPE_ALIGN (tuple_type) will be changed by -fpack-struct=n. We need to maintain natural alignment in handle_arm_sve_h. 2020-06-10 Haijian Zhang <z.zhanghaijian@huawei.com> gcc/ PR target/95523 * config/aarch64/aarch64-sve-builtins.h (sve_switcher::m_old_maximum_field_alignment): New member. * config/aarch64/aarch64-sve-builtins.cc (sve_switcher::sve_switcher): Save maximum_field_alignment in m_old_maximum_field_alignment and clear maximum_field_alignment. (sve_switcher::~sve_switcher): Restore maximum_field_alignment. gcc/testsuite/ PR target/95523 * gcc.target/aarch64/sve/pr95523.c: New test.
2020-06-10[Ada] AI12-0364 Add a modular atomic arithmetic packageArnaud Charlet6-8/+294
2020-06-10 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * libgnat/s-aomoar.ads, libgnat/s-aomoar.adb: New files. * libgnat/s-atopar.ads: Move... * libgnat/s-aoinar.ads: Here. * libgnat/s-atopar.adb: Move... * libgnat/s-aoinar.adb: Here. * impunit.adb: Update list of runtime files. * Makefile.rtl (GNATRTL_NONTASKING_OBJS=): Adjust.
2020-06-10gcc-changelog: fix parse_git_name_status for renames.Martin Liska2-1/+15
Renamed files are listed in the following format: M gcc/ada/Makefile.rtl M gcc/ada/impunit.adb R097 gcc/ada/libgnat/s-atopar.adb gcc/ada/libgnat/s-aoinar.adb R095 gcc/ada/libgnat/s-atopar.ads gcc/ada/libgnat/s-aoinar.ads A gcc/ada/libgnat/s-aomoar.adb A gcc/ada/libgnat/s-aomoar.ads So 'R' is followed by a percentage number. contrib/ChangeLog: * gcc-changelog/git_commit.py: Fix renamed files in parse_git_name_status. * gcc-changelog/test_email.py: Add test for it.
2020-06-10c++: Fix ICE with delayed parsing of noexcept-specifier [PR95562]Marek Polacek2-0/+18
Here we ICE because a DEFERRED_PARSE expression leaked to tsubst_copy. We create these expressions for deferred noexcept-specifiers in cp_parser_save_noexcept; they are supposed to be re-parsed in cp_parser_late_noexcept_specifier. In this case we never got around to re-parsing it because the noexcept-specifier was attached to a pointer to a function, not to a function declaration. But we should not have delayed the parsing here in the first place; we already avoid delaying the parsing for alias-decls, typedefs, and friend function declarations. (Clang++ also doesn't delay the parsing for pointers to function.) gcc/cp/ChangeLog: PR c++/95562 * parser.c (cp_parser_direct_declarator): Clear CP_PARSER_FLAGS_DELAY_NOEXCEPT if the declarator kind is not cdk_id. gcc/testsuite/ChangeLog: PR c++/95562 * g++.dg/cpp0x/noexcept60.C: New test.
2020-06-10[Ada] AI12-0311 New checks for language-defined unitsArnaud Charlet2-24/+39
2020-06-10 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * snames.ads-tmpl (Name_Characters_Assertion_Check, Name_Containers_Assertion_Check, Name_Interfaces_Assertion_Check, Name_IO_Assertion_Check, Name_Numerics_Assertion_Check, Name_Strings_Assertion_Check, Name_System_Assertion_Check): New constants. * types.ads (Characters_Assertion_Check, Containers_Assertion_Check, Interfaces_Assertion_Check, IO_Assertion_Check, Numerics_Assertion_Check, Strings_Assertion_Check, System_Assertion_Check): New constants. (All_Checks): Update accordingly.
2020-06-10[Ada] Don't build equivalent record aggregate if type has predicatesGhjuvan Lacambre1-0/+11
2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> gcc/ada/ * exp_ch3.adb (Build_Equivalent_Record_Aggregate): Return Empty if Etype of record component has predicates.
2020-06-10[Ada] Ada 202x AI12-0192 "requires late initialization"Arnaud Charlet1-24/+182
2020-06-10 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * exp_ch3.adb (Build_Init_Statements): Implement the notion of "require late initialization".
2020-06-10[Ada] Add missing Sloc on new explicit dereferencesEric Botcazou1-0/+3
2020-06-10 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_util.adb (Copy_And_Maybe_Dereference): Temporarily copy the parent node of the original tree when dereferencing.
2020-06-10[Ada] Additional warnings on overlapping actuals of composite typesEd Schonberg1-1/+17
2020-06-10 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_warn.adb (Warn_On_Overlapping_Actuals): Add a warning when two actuals in a call overlap, both are composite types that may be passed by reference, and only one of them is writable.
2020-06-10[Ada] Implement AI12-0162 Memberships and Unchecked_UnionsEric Botcazou1-11/+12
2020-06-10 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_ch4.adb (Expand_N_In): Use an expression with actions to insert the PE raise statement for the Unchecked_Union case.
2020-06-10[Ada] Remove obsolete code in Resolve_CallEric Botcazou2-22/+1
2020-06-10 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_ch4.adb (Analyze_Call): Use idiomatic condition. * sem_res.adb (Resolve_Call): Remove obsolete code.
2020-06-10[Ada] Insert explicit dereferences when building actual subtypeEric Botcazou1-5/+24
2020-06-10 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_util.adb (Copy_And_Maybe_Dereference): New function. (Build_Access_Record_Constraint): Use it to copy the prefix. (Build_Actual_Array_Constraint): Likewise. (Build_Actual_Record_Constraint): Likewise.
2020-06-10[Ada] Disable unwanted warnings in Assertion_Policy(Ignore) modeBob Duff2-27/+15
2020-06-10 Bob Duff <duff@adacore.com> gcc/ada/ * sem_prag.adb (Invariant): Remove the pragma removing code. It doesn't work to remove the pragma, because various flags are set during Build_Invariant_Procedure_Declaration and Build_Invariant_Procedure_Body that need to be set to avoid the spurious warnings. * exp_util.adb (Make_Invariant_Call): Avoid calling the invariant-checking procedure if the body is empty. This is an optimization.
2020-06-10[Ada] Fix gnatmetric switches descriptionVasiliy Fofanov1-2/+2
2020-06-10 Vasiliy Fofanov <fofanov@adacore.com> gcc/ada/ * doc/gnat_ugn/gnat_utility_programs.rst: Fix gnatmetric switches description.
2020-06-10[Ada] Update headersArnaud Charlet4-40/+16
2020-06-10 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * repinfo-input.ads, repinfo-input.adb, repinfo.adb, repinfo.ads: Update header.
2020-06-10[Ada] Improve code generated for dynamic discriminated aggregateEric Botcazou1-15/+26
2020-06-10 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_aggr.adb (In_Place_Assign_OK): Do not necessarily return false for a type with discriminants. (Convert_To_Assignments): Use Parent_Node and Parent_Kind more consistently. In the in-place assignment case, first apply a discriminant check if need be, and be prepared for a rewritten aggregate as a result.
2020-06-10[Ada] Remove more references to ASISArnaud Charlet17-182/+60
2020-06-10 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * atree.adb, contracts.adb, debug.adb, freeze.adb, repinfo-input.adb, repinfo.adb, sem_attr.adb, sem_ch10.adb, sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb, sem_ch8.adb, sem_ch9.adb, sem_disp.adb, sem_eval.adb, sem_prag.adb: Remove more references to ASIS.
2020-06-10[Ada] Fix typo in exception messageArnaud Charlet1-1/+1
2020-06-10 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * libgnat/s-secsta.adb (Round_Up): Fix typo in exception message.
2020-06-10[Ada] Fix minor typo in comment of membership choice parsingPiotr Trojanek1-1/+1
2020-06-10 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * par-ch4.adb (P_Membership_Test): Fix typo in a grammar rule.
2020-06-10[Ada] Revert workaround for expansion of Enum_Rep in GNATprove modePiotr Trojanek1-9/+2
2020-06-10 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove expansion of First and Last attributes.
2020-06-10[Ada] Fold Enum_Rep attribute in evaluation and not in expansionPiotr Trojanek3-37/+9
2020-06-10 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Remove folding for Enum_Rep attribute. * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove duplicated code for folding Enum_Rep attribute. * sem_attr.adb (Eval_Attribute): Relax condition for folding Enum_Rep attribute; previously dead code is now executed when the attribute prefix is an enumeration literal; refine type in processing of Enum_Val.
2020-06-10[Ada] Classwide controlled obj not dispatchingJavier Miranda1-13/+19
2020-06-10 Javier Miranda <miranda@adacore.com> gcc/ada/ * sem_ch3.adb (Analyze_Declarations): Adjust the machinery that takes care of late body overriding of initialize, adjust, finalize. Remove ASIS mode code.
2020-06-10[Ada] Ada_2020 AI12-0220: Pre/Postconditions on Access_To_Subprogram typesEd Schonberg6-3/+309
2020-06-10 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * einfo.ads (Access_Subprogram_Wrapper): New attribute of Subprogram_Type entities. Denotes subprogram constructed for Access_To_Subprogram types that include pre- and postconditions. * einfo.adb: Subprogram bodies for Access_Subprogram_Wrapper. * exp_ch6.adb (Expand_Call): An indirect call through an Access_To_subprogram that includes contracts is rewritten as a call to the corresponding Access_ ubprogram_Wrapper. Handle derived types that inherit contract from parent. * sem_prag.adb (Build_Access_Subprogram_Wrapper): Build subprogram declaration for subprogram that incorporates the contracts of an Access_To_Subprogram type declaration. Build corresponding body and attach it to freeze actions for type. * sem_util.ads, sem_util.adb (Is_Access_Subprogram_Wrapper): Utility that uses signature of the subprogram to determine whether it is a generated wrapper for an Access_To_Subprogram type.
2020-06-10[Ada] Fix assertion failure on functions with contractsGhjuvan Lacambre1-3/+6
2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> gcc/ada/ * par-ch6.adb (P_Subprogram): Make sure the specification belongs to a procedure.
2020-06-10[Ada] Simplify detection of static membership choicesPiotr Trojanek1-5/+10
2020-06-10 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_ch13.adb (All_Membership_Choices_Static): Assert an AST property documented in sinfo.ads and simplify an excessive condition.
2020-06-10[Ada] Minor fix style and typos in commentsPiotr Trojanek4-4/+4
2020-06-10 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Fix a copy-paste mistake in comment. * sem_res.adb (Flag_Effectively_Volatile_Objects): Fix a type in the SPARK RM rule number. * exp_ch4.adb, sem_util.adb: Fix style in single line comments.
2020-06-10[Ada] Remove unreferenced GNATprove utility routine Get_Low_BoundPiotr Trojanek2-16/+0
2020-06-10 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_aux.ads, sem_aux.adb (Get_Low_Bound): Remove.
2020-06-10[Ada] Remove Determine_LicenseArnaud Charlet1-159/+1
2020-06-10 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * scn.adb (Determine_License): Remove.
2020-06-10[Ada] Incorrect accessibility checks on functions callsJustin Squirek6-184/+203
2020-06-10 Justin Squirek <squirek@adacore.com> gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration): Add condition to handle processing of objects initialized by a call to a function return an anonymous access type. * exp_ch6.adb, exp_ch6.ads (Has_Unconstrained_Access_Discriminants): Moved to sem_util.adb (Needs_Result_Accessibility_Level): Moved to sem_util.adb * sem_util.adb, sem_util.ads (Has_Unconstrained_Access_Discriminants): Moved from exp_ch6.adb (Needs_Result_Accessibility_Level): Moved from exp_ch6.adb * sem_res.adb (Valid_Conversion): Add condition for the special case where the operand of a conversion is the result of an anonymous access type
2020-06-10[Ada] Reject illegal bodies for null proceduresGhjuvan Lacambre1-0/+7
2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> gcc/ada/ * par-ch6.adb (P_Subprogram): Reject duplicate subprogram declarations.
2020-06-10[Ada] Fix incorrect insertion of post-call actions in if-expressionEric Botcazou1-5/+10
2020-06-10 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_ch6.adb (Insert_Post_Call_Actions): Deal with the context of an if-expression and with a call written in prefixed notation.
2020-06-10[Ada] Minor reformatting and some typo fixesGary Dismukes4-14/+14
2020-06-10 Gary Dismukes <dismukes@adacore.com> gcc/ada/ * einfo.ads: Minor reformatting of a comment. * exp_aggr.adb: Minor reformatting and a grammar correction. * exp_attr.adb: Minor reformatting and a typo fix in some comments. * sem_ch12.adb: Fix three typos in comments.
2020-06-10Make {SLP_TREE,STMT_VINFO}_VEC_STMTS a vector of gimple *Richard Biener7-380/+282
This makes {SLP_TREE,STMT_VINFO}_VEC_STMTS a vector of gimple * and not allocate a stmt_vec_info for vectorizer generated stmts since this is now possible after removing the only use which was chaining of vector stmts via STMT_VINFO_RELATED_STMT. This also removes all stmt_vec_info allocations done for vector stmts, the remaining ones are for stmts in the scalar IL and for patterns which are not part of the IL. Thus after this the stmt UIDs inside a basic-block are suitable for dominance checking if you ignore (or lazy-fill) UIDs of zero of the vector stmts inserted during transform. This property is ensured by a new flag set when pattern analysis is complete. 2020-06-10 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (_slp_tree::vec_stmts): Make it a vector of gimple * stmts. (_stmt_vec_info::vec_stmts): Likewise. (vec_info::stmt_vec_info_ro): New flag. (vect_finish_replace_stmt): Adjust declaration. (vect_finish_stmt_generation): Likewise. (vectorizable_induction): Likewise. (vect_transform_reduction): Likewise. (vectorizable_lc_phi): Likewise. * tree-vect-data-refs.c (vect_create_data_ref_ptr): Do not allocate stmt infos for increments. (vect_record_grouped_load_vectors): Adjust. * tree-vect-loop.c (vect_create_epilog_for_reduction): Likewise. (vectorize_fold_left_reduction): Likewise. (vect_transform_reduction): Likewise. (vect_transform_cycle_phi): Likewise. (vectorizable_lc_phi): Likewise. (vectorizable_induction): Likewise. (vectorizable_live_operation): Likewise. (vect_transform_loop): Likewise. * tree-vect-patterns.c (vect_pattern_recog): Set stmt_vec_info_ro. * tree-vect-slp.c (vect_get_slp_vect_def): Adjust. (vect_get_slp_defs): Likewise. (vect_transform_slp_perm_load): Likewise. (vect_schedule_slp_instance): Likewise. (vectorize_slp_instance_root_stmt): Likewise. * tree-vect-stmts.c (vect_get_vec_defs_for_operand): Likewise. (vect_finish_stmt_generation_1): Do not allocate a stmt info. (vect_finish_replace_stmt): Do not return anything. (vect_finish_stmt_generation): Likewise. (vect_build_gather_load_calls): Adjust. (vectorizable_bswap): Likewise. (vectorizable_call): Likewise. (vectorizable_simd_clone_call): Likewise. (vect_create_vectorized_demotion_stmts): Likewise. (vectorizable_conversion): Likewise. (vectorizable_assignment): Likewise. (vectorizable_shift): Likewise. (vectorizable_operation): Likewise. (vectorizable_scan_store): Likewise. (vectorizable_store): Likewise. (vectorizable_load): Likewise. (vectorizable_condition): Likewise. (vectorizable_comparison): Likewise. (vect_transform_stmt): Likewise. * tree-vectorizer.c (vec_info::vec_info): Initialize stmt_vec_info_ro. (vec_info::replace_stmt): Copy over stmt UID rather than unsetting/setting a stmt info allocating a new UID. (vec_info::set_vinfo_for_stmt): Assert !stmt_vec_info_ro.
2020-06-10Merge evrp uses of substitute_and_fold_engine into the engine itself.Aldy Hernandez10-303/+220
This patch merges the evrp uses of the substitute and fold engine into the engine itself, at least the parts that can be re-used by other engine uses. It also adds a context parameter to get_value() for further use. gcc/ * gimple-loop-versioning.cc (loop_versioning::name_prop::get_value): Add stmt parameter. * gimple-ssa-evrp.c (class evrp_folder): New. (class evrp_dom_walker): Remove. (execute_early_vrp): Use evrp_folder instead of evrp_dom_walker. * tree-ssa-ccp.c (ccp_folder::get_value): Add stmt parameter. * tree-ssa-copy.c (copy_folder::get_value): Same. * tree-ssa-propagate.c (substitute_and_fold_engine::replace_uses_in): Pass stmt to get_value. (substitute_and_fold_engine::replace_phi_args_in): Same. (substitute_and_fold_dom_walker::after_dom_children): Call post_fold_bb. (substitute_and_fold_dom_walker::foreach_new_stmt_in_bb): New. (substitute_and_fold_dom_walker::propagate_into_phi_args): New. (substitute_and_fold_dom_walker::before_dom_children): Adjust to call virtual functions for folding, pre_folding, and post folding. Call get_value with PHI. Tweak dump. * tree-ssa-propagate.h (class substitute_and_fold_engine): New argument to get_value. New virtual function pre_fold_bb. New virtual function post_fold_bb. New virtual function pre_fold_stmt. New virtual function post_new_stmt. New function propagate_into_phi_args. * tree-vrp.c (vrp_folder::get_value): Add stmt argument. * vr-values.c (vr_values::extract_range_from_stmt): Adjust dump output. (vr_values::fold_cond): New. (vr_values::simplify_cond_using_ranges_1): Call fold_cond. * vr-values.h (class vr_values): Add simplify_cond_using_ranges_when_edge_is_known. gcc/testsuite/ * gcc.dg/tree-ssa/ssa-dse-30.c: Adjust test for folding of memmove happening later.
2020-06-10Add missing store in emission of asan_stack_free.Martin Liska1-2/+18
gcc/ChangeLog: 2020-05-19 Martin Liska <mliska@suse.cz> PR sanitizer/94910 * asan.c (asan_emit_stack_protection): Emit also **SavedFlagPtr(FakeStack, class_id) = 0 in order to release a stack frame.
2020-06-10AArch64: Adjust costing of by element MUL to be the same as SAME3 MUL.Tamar Christina2-1/+38
The cost model is currently treating multiplication by element as being more expensive than 3 same multiplication. This means that if the value is on the SIMD side we add an unneeded DUP. If the value is on the genreg side we use the more expensive DUP instead of fmov. This patch corrects the costs such that the two multiplies are costed the same which allows us to generate fmul v3.4s, v3.4s, v0.s[0] instead of dup v0.4s, v0.s[0] fmul v3.4s, v3.4s, v0.4s gcc/ChangeLog: * config/aarch64/aarch64.c (aarch64_rtx_mult_cost): Adjust costs for mul. gcc/testsuite/ChangeLog: * gcc.target/aarch64/asimd-mull-elem.c: New test.