aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2021-06-04i386: Convert a couple of predicates to use match_code RTXes.Uros Bizjak1-10/+7
No functional changes. 2021-06-04 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/i386/predicates.md (GOT_memory_operand): Implement using match_code RTXes. (GOT32_symbol_operand): Ditto.
2021-06-04Fortran: Fix OpenMP/OpenACC continue-line parsingTobias Burnus4-13/+67
gcc/fortran/ChangeLog: * scanner.c (skip_fixed_omp_sentinel): Set openacc_flag if this is not an (OpenMP) continuation line. (skip_fixed_oacc_sentinel): Likewise for openmp_flag and OpenACC. (gfc_next_char_literal): gfc_error_now to force error for mixed OMP/ACC continuation once per location and return '\n'. gcc/testsuite/ChangeLog: * gfortran.dg/goacc/omp-fixed.f: Re-add test item changed in previous commit in addition - add more dg-errors and '... end ...' due to changed parsing. * gfortran.dg/goacc/omp.f95: Likewise. * gfortran.dg/goacc-gomp/mixed-1.f: New test.
2021-06-04i386: Add init pattern for V2HI vectors [PR100637]Uros Bizjak3-14/+121
2021-06-03 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100637 * config/i386/i386-expand.c (ix86_expand_vector_init_duplicate): Handle V2HI mode. (ix86_expand_vector_init_general): Ditto. Use SImode instead of word_mode for logic operations when GET_MODE_SIZE (mode) < UNITS_PER_WORD. (expand_vec_perm_even_odd_1): Assert that V2HI mode should be implemented by expand_vec_perm_1. (expand_vec_perm_broadcast_1): Assert that V2HI and V4HI modes should be implemented using standard shuffle patterns. (ix86_vectorize_vec_perm_const): Handle V2HImode. Add V4HI and V2HI modes to modes, implementable with shuffle for one operand. * config/i386/mmx.md (*punpckwd): New insn_and_split pattern. (*pshufw_1): New insn pattern. (*vec_dupv2hi): Ditto. (vec_initv2hihi): New expander. gcc/testsuite/ PR target/100637 * gcc.dg/vect/slp-perm-9.c (dg-final): Adjust dumps for vect32 targets.
2021-06-04gfortran.dg/gomp/pr99928-5.f90: Use proper iteration varTobias Burnus1-1/+1
gcc/testsuite/ChangeLog: * gfortran.dg/gomp/pr99928-5.f90: Really use the proper iteration variable.
2021-06-04gfortran.dg/gomp/pr99928-*.f90: Use implicit none, remove one xfailTobias Burnus7-2/+10
gcc/testsuite/ChangeLog: * gfortran.dg/gomp/pr99928-1.f90: Add 'implicit none'. * gfortran.dg/gomp/pr99928-11.f90: Likewise. * gfortran.dg/gomp/pr99928-4.f90: Likewise. * gfortran.dg/gomp/pr99928-6.f90: Likewise. * gfortran.dg/gomp/pr99928-8.f90: Likewise. * gfortran.dg/gomp/pr99928-2.f90: Likewise. Add missing decl. * gfortran.dg/gomp/pr99928-5.f90: Add implicit none; fix loop-variable and remove xfail.
2021-06-04arm: Update unexpected empty split conditionKewen Lin1-2/+2
gcc/ChangeLog: * config/arm/vfp.md (no_literal_pool_df_immediate, no_literal_pool_sf_immediate): Fix empty split condition.
2021-06-04i386: Update unexpected empty split conditionKewen Lin2-7/+7
gcc/ChangeLog: * config/i386/i386.md (*load_tp_x32_zext, *add_tp_x32_zext, *tls_dynamic_gnu2_combine_32): Fix empty split condition. * config/i386/sse.md (*<sse2_avx2>_pmovmskb_lt, *<sse2_avx2>_pmovmskb_zext_lt, *sse2_pmovmskb_ext_lt, *<sse4_1_avx2>_pblendvb_lt): Likewise.
2021-06-04Fortran/OpenMP: omp loop's BIND clause - fix typoTobias Burnus2-2/+2
Missed a 'git add' after fixing this typo pointed out during review. PR middle-end/99928 gcc/fortran/ChangeLog: * openmp.c (gfc_match_omp_clauses): Fix typo in error message. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/loop-2.f90: Update for typo fix.
2021-06-04Fortran/OpenMP: Add omp loop [PR99928]Tobias Burnus22-81/+1497
PR middle-end/99928 gcc/fortran/ChangeLog: * dump-parse-tree.c (show_omp_clauses): Handle bind clause. (show_omp_node): Handle loop directive. * frontend-passes.c (gfc_code_walker): Likewise. * gfortran.h (enum gfc_statement): Add ST_OMP_(END_)(TARGET_)(|PARALLEL_|TEAMS_)LOOP. (enum gfc_omp_bind_type): New. (gfc_omp_clauses): Use it. (enum gfc_exec_op): Add EXEC_OMP_(TARGET_)(|PARALLEL_|TEAMS_)LOOP. * match.h (gfc_match_omp_loop, gfc_match_omp_parallel_loop, gfc_match_omp_target_parallel_loop, gfc_match_omp_target_teams_loop, gfc_match_omp_teams_loop): New. * openmp.c (enum omp_mask1): Add OMP_CLAUSE_BIND. (gfc_match_omp_clauses): Handle it. (OMP_LOOP_CLAUSES, gfc_match_omp_loop, gfc_match_omp_teams_loop, gfc_match_omp_target_teams_loop, gfc_match_omp_parallel_loop, gfc_match_omp_target_parallel_loop): New. (resolve_omp_clauses, resolve_omp_do, omp_code_to_statement, gfc_resolve_omp_directive): Handle omp loop. * parse.c (decode_omp_directive case_exec_markers, gfc_ascii_statement, parse_omp_do, parse_executable): Likewise. (parse_omp_structured_block): Remove ST_ which use parse_omp_do. * resolve.c (gfc_resolve_blocks): Add omp loop. * st.c (gfc_free_statement): Likewise. * trans-openmp.c (gfc_trans_omp_clauses): Handle bind clause. (gfc_trans_omp_do, gfc_trans_omp_parallel_do, gfc_trans_omp_distribute, gfc_trans_omp_teams, gfc_trans_omp_target, gfc_trans_omp_directive): Handle loop directive. (gfc_split_omp_clauses): Likewise; fix firstprivate/lastprivate and (in_)reduction for taskloop. * trans.c (trans_code): Handle omp loop directive. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/pr99928-3.f90: Add 'default(none)', following C/C++ version of the patch. * gfortran.dg/gomp/loop-1.f90: New test. * gfortran.dg/gomp/loop-2.f90: New test. * gfortran.dg/gomp/pr99928-1.f90: New test; based on C/C++ test. * gfortran.dg/gomp/pr99928-11.f90: Likewise. * gfortran.dg/gomp/pr99928-2.f90: Likewise. * gfortran.dg/gomp/pr99928-4.f90: Likewise. * gfortran.dg/gomp/pr99928-5.f90: Likewise. * gfortran.dg/gomp/pr99928-6.f90: Likewise. * gfortran.dg/gomp/pr99928-8.f90: Likewise. * gfortran.dg/goacc/omp.f95: Use 'acc kernels loops' instead of 'acc loops' to hide unrelated bug for now. * gfortran.dg/goacc/omp-fixed.f: Likewise
2021-06-04x86: Fix ix86_expand_vector_init for V*TImode [PR100887]Jakub Jelinek2-3/+20
We have vec_initv4tiv2ti and vec_initv2titi patterns which call ix86_expand_vector_init and assume it works for those modes. For the case of construction from two half-sized vectors, the code assumes it will always succeed, but we have only insn patterns with SImode and DImode element types. QImode and HImode element types are already handled by performing it with same sized vectors with SImode elements and the following patch extends that to V*TImode vectors. 2021-06-04 Jakub Jelinek <jakub@redhat.com> PR target/100887 * config/i386/i386-expand.c (ix86_expand_vector_init): Handle concatenation from half-sized modes with TImode elements. * gcc.target/i386/pr100887.c: New test.
2021-06-04c++: Fix up attribute handling in methods in templates [PR100872]Jakub Jelinek2-2/+20
The following testcase FAILs because a dependent (late) attribute is never tsubsted. While the testcase is OpenMP, I think it is a generic C++ FE problem that could affect any other dependent attribute. apply_late_template_attributes documents that it relies on /* save_template_attributes puts the dependent attributes at the beginning of the list; find the non-dependent ones. */ The "operator binding" attributes that are sometimes added are added to the head of DECL_ATTRIBUTES list though and because it doesn't have ATTR_IS_DEPENDENT set it violates this requirement. The following patch fixes it by adding that attribute after all ATTR_IS_DEPENDENT attributes. I'm not 100% sure if DECL_ATTRIBUTES can't be shared by multiple functions (e.g. the cdtor clones), but the code uses later remove_attribute which could break that too. Other option would be to copy_list the ATTR_IS_DEPENDENT portion of the DECL_ATTRIBUTES list if we need to do this, that would be the same as this patch but replace that *ap = op_attr; at the end with *ap = NULL_TREE; DECL_ATTRIBUTES (cfn) = chainon (copy_list (DECL_ATTRIBUTES (cfn)), op_attr); Or perhaps set ATTR_IS_DEPENDENT on the "operator bindings" attribute, though it would need to be studied what would it try to do with the attribute during tsubst. 2021-06-04 Jakub Jelinek <jakub@redhat.com> PR c++/100872 * name-lookup.c (maybe_save_operator_binding): Add op_attr after all ATTR_IS_DEPENDENT attributes in the DECL_ATTRIBUTES list rather than to the start. * g++.dg/gomp/declare-simd-8.C: New test.
2021-06-04arc: Don't allow millicode thunks with reduced register set CPUs.Claudiu Zissulescu1-2/+4
The millicode thunks are not reduced register set safe. Disable them for CPUs having this option on. gcc/ 2021-06-04 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_override_options): Disable millicode thunks when RF16 is on. Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2021-06-04rs6000: Disable mode promotion for pseudosHaochen Gui2-11/+13
rs6000 has instructions that can do almost everything 32 bit at least as efficiently as corresponding 64 bit things. The mode promotion can be defered to when a wide mode is necessary. So it helps a lot not promote mode for pseudos. SPECint test shows that the overall performance improvement (by geomean) is more than 2% with this patch. testsuite/gcc.target/powerpc/not-promote-mode.c illustrates how the patch eliminates the redundant extensions and do further optimization by disabling mode promotion for pseduos. gcc/ChangeLog * config/rs6000/rs6000.h (PROMOTE_MODE): Remove. gcc/testsuite/ChangeLog: * gcc.target/powerpc/not-promote-mode.c: New.
2021-06-04rs6000: Expand PROMOTE_MODE marco in rs6000_promote_function_modeHaochen Gui1-1/+3
This patch prepares for the patch which disables mode promotion of pseudos on rs6000. gcc/ChangeLog: * config/rs6000/rs6000-call.c (rs6000_promote_function_mode): Replace PROMOTE_MODE marco with its content.
2021-06-04Daily bump.GCC Administrator8-1/+313
2021-06-04cris: Update unexpected empty split conditionKewen Lin1-1/+1
gcc/ChangeLog: * config/cris/cris.md (*addi_reload): Fix empty split condition.
2021-06-03RISC-V: Enable riscv attributes by default for all riscv targets.Jim Wilson1-8/+1
These were only enabled for embedded elf originally because that was the safe option, and linux had no obvious use for them. But now that we have new extensions coming like V that affect process state and ABIs, the attributes are expected to be useful for linux, and may be required by the psABI. clang already emits them for all riscv targets. gcc/ * config.gcc (riscv*-*-*): If --with-riscv-attribute not used, turn it on for all riscv targets.
2021-06-03i386: Add insert and extract patterns for 4-byte vectors [PR100637]Uros Bizjak4-2/+268
The patch introduces insert and extract patterns for 4-byte vectors. It effectively only emits PINSR and PEXTR instructions when available, otherwise falls back to generic code that emulates these instructions via inserts, extracts, logic operations and shifts in integer registers. Please note that generic fallback produces better code than the current approach of constructing new vector in memory (due to store forwarding stall) so also enable QImode 8-byte vector inserts only with TARGET_SSE4_1. 2021-06-03 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100637 * config/i386/i386-expand.c (ix86_expand_vector_set): Handle V2HI and V4QI modes. (ix86_expand_vector_extract): Ditto. * config/i386/mmx.md (*pinsrw): New insn pattern. (*pinsrb): Ditto. (*pextrw): Ditto. (*pextrw_zext): Ditto. (*pextrb): Ditto. (*pextrb_zext): Ditto. (vec_setv2hi): New expander. (vec_extractv2hihi): Ditto. (vec_setv4qi): Ditto. (vec_extractv4qiqi): Ditto. (vec_setv8qi): Enable only for TARGET_SSE4_1. (vec_extractv8qiqi): Ditto. gcc/testsuite/ PR target/100637 * gcc.target/i386/vperm-v2hi.c: New test. * gcc.target/i386/vperm-v4qi.c: Ditto.
2021-06-03Fix operand order to subf for p10 fusion.Aaron Sawdey2-41/+43
This certainly causes a bootstrap miscompare, and might also be responsible for PR/100820. The operands to subf were reversed in the logical-add/sub fusion patterns, and I screwed up my bootstrap test which is how it ended up getting committed. gcc/ChangeLog * config/rs6000/genfusion.pl (gen_logical_addsubf): Fix input order to subf instruction. * config/rs6000/fusion.md: Regenerate.
2021-06-03Fix issue for nested record types with -fdump-ada-specEric Botcazou1-64/+52
Ada does not support anonymous record declarations nested in other record declarations so -fdump-ada-spec needs to unnest them, and this contains a few fixes for this machinery. gcc/c-family/ * c-ada-spec.c (dump_ada_macros): Minor tweaks. (dump_ada_decl_name): Likewise. (dump_anonymous_type_name): Remove parent parameter and adjust. (dump_sloc): Minor tweak. (dump_ada_array_type): Remove type parameter and adjust. (dump_ada_enum_type): Remove parent parameter and adjust. (dump_ada_node): Adjust calls to above functions. (dumped_anonymous_types): New global variable. (dump_nested_types_1): Rename into... (dump_nested_types): ...this. (dump_nested_type): Remove parent and dumped_types parameters. <ARRAY_TYPE>: Replace dumped_types with dumped_anonymous_types. Adjust calls to dump_anonymous_type_name and dump_ada_array_type. (dump_ada_specs): Initialize and free dumped_anonymous_types.
2021-06-03Fix issue for external subtypes with -fdump-ada-specEric Botcazou1-38/+53
This works around an irregularity of the language whereby subtypes, unlike types, are not visible through a limited_with clause. gcc/c-family/ * c-ada-spec.c (pp_ada_tree_identifier): Tidy up. (dump_ada_node) <POINTER_TYPE>: Deal specially with external subtypes.
2021-06-03Fix duplicate name issues in output of -fdump-ada-specEric Botcazou1-42/+64
The namespace rules are different in the C family of languages and in Ada, and a few adjustments are further needed in -fdump-ada-spec because of them. gcc/c-family/ * c-ada-spec.c (dump_ada_enum_type): Dump a prefix for constants. (htable_t): New typedef. (overloaded_names): Use it. (add_name): New function. (init_overloaded_names): Use add_name to populate the table and add special cases for sigaction and stat. (overloaded_name_p): Rename into... (overloading_index): ...this. Do not initialize overloaded_names table here. Return the index or zero. (dump_ada_declaration): Minor tweaks. Do not skip overloaded functions but add an overloading suffix instead. (dump_ada_specs): Initialize overloaded_names tables here.
2021-06-03Replace uses of determine_value_range with range_of_expr.Aldy Hernandez5-74/+23
The expression evaluator changes to the range_query API provide everything determine_value_range does. This patch replaces all uses with calls into the range_query API. gcc/ChangeLog: * calls.c (get_size_range): Use range_of_expr instead of determine_value_range. * tree-affine.c (expr_to_aff_combination): Same. * tree-data-ref.c (split_constant_offset): Same. * tree-vrp.c (determine_value_range_1): Remove. (determine_value_range): Remove. * tree-vrp.h (determine_value_range): Remove.
2021-06-03Implement generic expression evaluator for range_query.Aldy Hernandez9-69/+172
Right now, range_of_expr only works with constants, SSA names, and pointers. Anything else gets returned as VARYING. This patch adds the capability to deal with arbitrary expressions, inasmuch as these tree codes are implemented in range-ops.cc. This will give us the ability to ask for the range of any tree expression, not just constants and SSA names, with range_of_expr(). This is a more generic implementation of determine_value_range in VRP. A follow-up patch will remove all uses of it in favor of the range_query API. gcc/ChangeLog: * function-tests.c (test_ranges): Call gimple_range_tests. * gimple-range-cache.cc (ranger_cache::range_of_expr): Pass stmt to get_tree_range. * gimple-range.cc (fur_source::get_operand): Do not call get_tree_range or gimple_range_global. get_tree_range. (get_tree_range): Move to value-query.cc. Call get_arith_expr_range. (gimple_ranger::range_of_expr): Add argument to get_tree_range. Include gimple-range-tests.cc. * gimple-range.h (fold_range): Add argument. (get_tree_range): Remove. * selftest.h (gimple_range_tests): New. * value-query.cc (global_range_query::range_of_expr): Add stmt argument. (range_query::get_tree_range): Move from gimple-range.cc. * value-query.h (class range_query): Add get_tree_range and get_arith_expr_range. Make fur_source a friend. * vr-values.c (vr_values::range_of_expr): Pass stmt to get_tree_range. * gimple-range-tests.cc: New file.
2021-06-03Use known global ranges in export_global_rangesAldy Hernandez4-17/+61
This patch modifies export_global_ranges to take into account current global ranges. It also handles enhances said function to export pointer global ranges as well. gcc/ChangeLog: * gimple-range.cc (gimple_ranger::export_global_ranges): Call update_global_range. * value-query.cc (update_global_range): New. * value-query.h (update_global_range): New. gcc/testsuite/ChangeLog: * gcc.dg/pr80776-1.c: XFAIL and document the reason why.
2021-06-03analyzer: remove unused prototypesDavid Malcolm1-2/+0
gcc/analyzer/ChangeLog: * store.h (store::get_direct_binding): Remove unused decl. (store::get_default_binding): Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-03analyzer: show types for poisoned_svalue and compound_svalueDavid Malcolm1-6/+23
gcc/analyzer/ChangeLog: * svalue.cc (poisoned_svalue::dump_to_pp): Dump type. (compound_svalue::dump_to_pp): Dump any type. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-03diagnostic-show-locus: tweak rejection logicDavid Malcolm1-2/+4
gcc/ChangeLog: * diagnostic-show-locus.c (diagnostic_show_locus): Don't reject printing the same location twice if there are fix-it hints, multiple locations, or a label. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-03c++: cv-qualified dependent name of alias tmpl [PR100592]Patrick Palka2-4/+22
Here, the dependent template name in the return type of f() resolves to an alias of int& after substitution, and we end up complaining about qualifying this reference type with 'const' from cp_build_qualified_type rather than just silently dropping the qualification as per [dcl.ref]/1. The problem is ultimately that make_typename_type ignores the tf_keep_type_decl flag when the dependent name is a template-id. This in turn causes the TYPE_DECL check within tsubst <case TYPENAME_TYPE> to fail, and so we end up not passing tf_ignore_bad_quals to cp_build_qualified_type. This patch fixes this by making make_typename_type respect the tf_keep_type_decl flag in this situation. PR c++/100592 gcc/cp/ChangeLog: * decl.c (make_typename_type): After calling lookup_template_class, adjust the result to its TYPE_NAME and then consider the tf_keep_type_decl flag. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/alias-decl-71.C: New test.
2021-06-03c++: using-enum and access specifiers [PR100862]Patrick Palka5-24/+46
When copying the enumerators imported by a class-scope using-enum declaration, we need to override current_access_specifier so that finish_member_declaration gives the copies the same access as the using-enum decl. (A class-scope using-enum is processed late, so current_access_specifier at this point is otherwise set to the last access specifier within the class.) To that end, this patch makes handle_using_decl call set_current_access_from_decl accordingly. For consistency, this patch makes build_enumerator use set_current_access_from_decl too. PR c++/100862 gcc/cp/ChangeLog: * pt.c (set_current_access_from_decl): Move to ... * class.c (set_current_access_from_decl): ... here. (handle_using_decl): Use it to propagate the access of the using-enum decl to the copy of the imported enumerator. * cp-tree.h (set_current_access_from_decl): Declare. * decl.c (build_enumerator): Simplify using make_temp_override and set_current_access_from_decl. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/using-enum-9.C: New test.
2021-06-03vect: Use main loop's thresholds and VF to narrow upper_bound of epilogueAndre Vieira2-6/+36
This patch uses the knowledge of the conditions to enter an epilogue loop to help come up with a potentially more restricive upper bound. gcc/ChangeLog: * tree-vect-loop.c (vect_transform_loop): Use main loop's various' thresholds to narrow the upper bound on epilogue iterations. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/part_vect_single_iter_epilog.c: New test.
2021-06-03arm: Auto-vectorization for MVE: vabsChristophe Lyon5-9/+49
This patch adds support for auto-vectorization of absolute value computation using vabs. We use a similar pattern to what is used in neon.md and extend the existing neg<mode>2 expander to match both 'neg' and 'abs'. This implies renaming the existing abs<mode>2 define_insn in neon.md to avoid a clash with the new expander with the same name. 2021-06-03 Christophe Lyon <christophe.lyon@linaro.org> gcc/ * config/arm/mve.md (mve_vabsq_f<mode>): Use 'abs' instead of unspec. (mve_vabsq_s<mode>): Likewise. * config/arm/neon.md (abs<mode>2): Rename to neon_abs<mode>2. * config/arm/unspecs.md (VABSQ_F, VABSQ_S): Delete. * config/arm/vec-common.md (neg<mode>2): Rename to <absneg_str><mode>2. gcc/testsuite/ * gcc.target/arm/simd/mve-vabs.c: New test.
2021-06-03Fix miscompilation of predicate on bit-packed array typesEric Botcazou3-15/+45
This is a regression present on the mainline and 11 branch in the form of a miscompilation by the new mod/ref IPA pass of code that passes constrained bit-packed array objets in a call to a subprograms taking unconstrained bit-packed array parameters, which occurs for predicate on bit-packed array types for example. gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add PAT local constant and use it throughout. If it is set, use a ref-all pointer type for the pointer-to-array field of the fat pointer type. <E_Array_Subtype>: Add PAT local constant and use it throughout. gcc/testsuite/ * gnat.dg/bit_packed_array6.adb: New test. * gnat.dg/bit_packed_array6_pkg.ads: New helper.
2021-06-03arc: Remove obsolete optionsClaudiu Zissulescu6-57/+10
Remove the following obsolete options: - munalign-prob-threshold - malign-call - mmixed-code The ARC's options are marked as obsolete and ignored for backwards compatibility. gcc/ 2021-06-03 Claudiu Zissulescu <claziss@synopsys.com> * common/config/arc/arc-common.c (arc_option_optimization_table): Remove malign-call. * config/arc/arc.c (arc_unalign_branch_p): Remove unused function. * config/arc/arc.h (TARGET_MIXED_CODE): Remove macro. (INDEX_REG_CLASS): Only refer to GENERAL_REGS. * config/arc/arc.md (abssi2_mixed): Remove pattern. * config/arc/arc.opt (munalign-prob-threshold): Mark it obsolete. (malign-call): Likewise. (mmixed-code): Likewise. * doc/invoke.texi (ARC): Update doc. Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2021-06-03Simplify option handling for -fsanitize-coverageMartin Liska3-32/+25
gcc/ChangeLog: * common.opt: Use proper Enum values. * opts.c (COVERAGE_SANITIZER_OPT): Remove. (parse_sanitizer_options): Handle only sanitizer_opts. (common_handle_option): Just assign value. gcc/testsuite/ChangeLog: * gcc.dg/spellcheck-options-23.c: New test.
2021-06-03Tame fix for PR ipa/99122Eric Botcazou2-11/+23
The return part has a major performance impact in Ada where variable-sized types are first-class citizens, but it turns out that it is not exercized in the testsuite yet, so back it out for now. gcc/ PR ipa/99122 * tree-inline.c (inline_forbidden_p): Remove test on return type. gcc/testsuite/ * gnat.dg/inline22.adb: New test.
2021-06-03Also generate DW_OP_GNU_variable_value at file scopeEric Botcazou1-42/+28
But only for the reference variant (dw_val_class_die_ref). This is needed for variable-sized types declared at library level in Ada. gcc/ * dwarf2out.c (loc_list_from_tree_1) <FUNCTION_DECL>: Also generate DW_OP_GNU_variable_value referencing an existing DIE at file scope. (type_byte_size): Inline into... (add_byte_size_attribute): ...this and call add_scalar_info.
2021-06-03Fix signedness issue in DWARF functions (2)Eric Botcazou1-4/+88
The compiler can synthesize DWARF functions to describe the location and size of components in discriminated record types with variant part in Ada, but in peculiar cases the compiler drops expressions on the floor, for example in the divide case: case ROUND_DIV_EXPR: case TRUNC_DIV_EXPR: case EXACT_DIV_EXPR: if (TYPE_UNSIGNED (TREE_TYPE (loc))) return 0; op = DW_OP_div; goto do_binop; Now sizetype and bitsizetype are unsigned types, which means that any divide expression in them is dropped. gcc/ * dwarf2out.c (mem_loc_descriptor) <UDIV>: Fix typo. (typed_binop_from_tree): New function. (loc_list_from_tree_1) <EXACT_DIV_EXPR>: For an unsigned type, turn a divide by a power of 2 into a shift. <CEIL_DIV_EXPR>: For an unsigned type, use a signed divide if the size of the mode is lower than DWARF2_ADDR_SIZE; otherwise, do a typed divide by calling typed_binop_from_tree.
2021-06-03Fix signedness issue in DWARF functions (1)Eric Botcazou1-79/+124
The compiler can synthesize DWARF functions to describe the location and size of components in discriminated record types with variant part in Ada, but a limitation is that most quantities must have DWARF2_ADDR_SIZE or else be the result of a zero-extension to DWARF2_ADDR_SIZE of a smaller quantity, as documented in loc_list_from_tree_1: /* ??? Most of the time we do not take proper care for sign/zero extending the values properly. Hopefully this won't be a real problem... */ In Ada discriminants may be either signed or unsigned, so this limitation is problematic. Therefore the attached patch adds a strict_signedness field to the loc_descr_context that is passed around in parts of the DWARF back-end and changes loc_list_from_tree_1 to act upon it being set to true. It also contains an optimization to avoid emitting useless comparisons. gcc/ * dwarf2out.c (scompare_loc_descriptor): Fix head comment. (is_handled_procedure_type): Likewise. (struct loc_descr_context): Add strict_signedness field. (resolve_args_picking_1): Deal with DW_OP_[GNU_]deref_type, DW_OP_[GNU_]convert and DW_OP_[GNU_]reinterpret. (resolve_args_picking): Minor tweak. (function_to_dwarf_procedure): Initialize strict_signedness field. (type_byte_size): Likewise. (field_byte_offset): Likewise. (gen_descr_array_type_die): Likewise. (gen_variant_part): Likewise. (loc_list_from_tree_1) <CALL_EXPR>: Tidy up and set strict_signedness to true when a context is present before evaluating the arguments. <COND_EXPR>: Do not generate a useless comparison with zero. When dereferencing an address, if strict_signedness is true and the type is small and signed, use DW_OP_deref_type to do the dereference and then DW_OP_convert to convert back to the generic type.
2021-06-03AArch64: Fix failing testcase for native cpu detectionTamar Christina2-2/+2
A late change in the patch changed the implemented ID to one that hasn't been used yet to avoid any ambiguity. Unfortunately the chosen value of 0xFF matches the value of -1 which is used as an invalid implementer so the test started failing. This patch changes it to 0xFE which is the highest usable number. gcc/testsuite/ChangeLog: * gcc.target/aarch64/cpunative/info_16: Update implementer. * gcc.target/aarch64/cpunative/info_17: Likewise
2021-06-03openmp: Assorted depend/affinity/iterator related fixes [PR100859]Jakub Jelinek6-22/+94
The depend-iterator-3.C testcases shows various bugs. 1) tsubst_omp_clauses didn't handle OMP_CLAUSE_AFFINITY (should be handled like OMP_CLAUSE_DEPEND) 2) because locators can be arbitrary lvalue expressions, we need to allow for C++ array section base (especially when array section is just an array reference) FIELD_DECLs, handle them as this->member, but don't need to privatize in any way 3) similarly for this as base 4) depend(inout: this) is invalid, but for different reason than the reported one, again this is an expression, but not lvalue expression, so that should be reported 5) the ctor/dtor cloning in the C++ FE (which is using walk_tree with copy_tree_body_r) didn't handle iterators correctly, walk_tree normally doesn't walk TREE_PURPOSE of TREE_LIST, and in the iterator case that TREE_VEC contains also a BLOCK that needs special handling during copy_tree_body_r 2021-06-03 Jakub Jelinek <jakub@redhat.com> PR c++/100859 gcc/ * tree-inline.c (copy_tree_body_r): Handle iterators on OMP_CLAUSE_AFFINITY or OMP_CLAUSE_DEPEND. gcc/c/ * c-typeck.c (c_finish_omp_clauses): Move OMP_CLAUSE_AFFINITY after depend only cases. gcc/cp/ * semantics.c (handle_omp_array_sections_1): For OMP_CLAUSE_{AFFINITY,DEPEND} handle FIELD_DECL base using finish_non_static_data_member and allow this as base. (finish_omp_clauses): Move OMP_CLAUSE_AFFINITY after depend only cases. Let this be diagnosed by !lvalue_p case for OMP_CLAUSE_{AFFINITY,DEPEND} and remove useless assert. * pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_AFFINITY. gcc/testsuite/ * g++.dg/gomp/depend-iterator-3.C: New test. * g++.dg/gomp/this-1.C: Don't expect any diagnostics for this as base expression of depend array section, expect a different error wording for this as depend locator and add testcases for affinity clauses.
2021-06-02arc: Remove define_insn_and_split *bbit_diKewen Lin1-28/+0
define_insn_and_split *bbit_di has unexpected empty split condition when its insn condition isn't empty. But as Claudiu pointed out, this pattern looks useless and it's better to remove it. gcc/ChangeLog: * config/arc/arc.md (*bbit_di): Remove.
2021-06-03Daily bump.GCC Administrator4-1/+92
2021-06-02REE: PR rtl-optimization/100264: Handle more PARALLEL SET expressionsChristoph Muellner1-16/+14
Move the check for register targets (i.e. REG_P ()) into the function get_sub_rtx () and change the restriction of REE to "only one child of a PARALLEL expression is a SET register expression" (was "only one child of a PARALLEL expression is a SET expression"). This allows to handle more PARALLEL SET expressions. gcc/ChangeLog: PR rtl-optimization/100264 * ree.c (get_sub_rtx): Ignore SET expressions without register destinations and remove assertion, as it is not valid anymore with this new behaviour. (merge_def_and_ext): Eliminate destination check for register as such SET expressions can't occur anymore. (combine_reaching_defs): Likewise.
2021-06-02xtensa: Fix 2 warnings during xtensa build [PR100841]Jakub Jelinek1-3/+4
When building gcc targetting xtensa-linux, there are 2 warnings the PR complains about: ../../gcc/dwarf2cfi.c: In function ‘void init_one_dwarf_reg_size(int, machine_mode, rtx, machine_mode, init_one_dwarf_reg_state*)’: ../../gcc/dwarf2cfi.c:291:12: warning: comparison of integer expressions of different signedness: ‘const unsigned int’ and ‘int’ [-Wsign-compare] 291 | if (rnum >= DWARF_FRAME_REGISTERS) ../../gcc/function.c: In function ‘void gen_call_used_regs_seq(rtx_insn*, unsigned int)’: ../../gcc/function.c:5897:63: warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits] 5897 | if (crtl->uses_only_leaf_regs && LEAF_REG_REMAP (regno) < 0) which might during bootstrap or when configured with --enable-werror-always be turned into errors. The first one is the -Wsign-compare warning, in c-family we do: 2281 /* Do not warn if the signed quantity is an unsuffixed integer 2282 literal (or some static constant expression involving such 2283 literals or a conditional expression involving such literals) 2284 and it is non-negative. */ 2285 if (tree_expr_nonnegative_warnv_p (sop, &ovf)) 2286 /* OK */; and so don't warn if that function determines the expression is non-negative. But xtensa defines DWARF_FRAME_REGISTERS as (16 + (something ? 0 : 1)) and that isn't handled by tree_expr_nonnegative_warnv_p, VRP can handle it of course, but that is much later. The second chunk rewrites it into a form that tree_expr_nonnegative_warnv_p can handle, in particular (something ? 16 : 16 + 1), where for COND_EXPRs that function checks both the 2nd and 3rd operand of the ternary operator and if both are nonnegative, returns true. The other warning has been introduced fairly recently; LEAF_REG_REMAP is currently used by 2 targets only, and is documented to yield -1 if a hard reg number can't be remapped and the remapped register number otherwise. That means that the type of the expression should be signed (otherwise -1 could never appear), and on SPARC indeed it is defined as extern char leaf_reg_remap[]; #define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO]) so unless the host is -funsigned-char by default it works fine. I guess sparc.[ch] should be fixed to use signed char of leaf_reg_remap, Eric? The argument to LEAF_REG_REMAP is often unsigned int though, hard register numbers are usually not negative, and thus the warning. I think xtensa doesn't have 2G hard registers and so it is ok to just cast it to int. 2021-06-02 Jakub Jelinek <jakub@redhat.com> PR target/100841 * config/xtensa/xtensa.h (LEAF_REG_REMAP): Cast REGNO to int to avoid -Wtype-limits warnings. (DWARF_FRAME_REGISTER): Rewrite into ternary operator with addition in operands to avoid -Wsign-compare warnings.
2021-06-02Make sure link reg save MEM has frame alias set.Pat Haugen1-8/+3
gcc/ChangeLog: * config/rs6000/rs6000-logue.c (rs6000_emit_prologue): Use gen_frame_store.
2021-06-02c++: missing dtor with -fno-elide-constructors [PR100838]Jason Merrill2-2/+36
tf_no_cleanup only applies to the outermost TARGET_EXPR, and we already clear it for nested calls in build_over_call, but in this case both constructor calls came from convert_like, so we need to clear it in the recursive call as well. This revealed that we were adding an extra ck_rvalue in direct-initialization cases where it was wrong. PR c++/100838 gcc/cp/ChangeLog: * call.c (convert_like_internal): Clear tf_no_cleanup when recursing. (build_user_type_conversion_1): Only add ck_rvalue if LOOKUP_ONLYCONVERTING. gcc/testsuite/ChangeLog: * g++.dg/init/no-elide2.C: New test.
2021-06-02ARC: gcc driver default to hs38_linuxClaudiu Zissulescu1-1/+1
arc700 is legacy and there's no active development for it, so switch to latest hs38_linux as default Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com> gcc/ 2021-06-02 Vineet Gupta <vgupta@synopsys.com> * config/arc/arc.h (TARGET_CPU_DEFAULT): Change to hs38_linux.
2021-06-02IBM Z: Remove match_scratch workaroundIlya Leoshkevich3-11/+16
Since commit dd1ef00c45ba ("Fix bug in the define_subst handling that made match_scratch unusable for multi-alternative patterns.") the workaround for that bug in *ashrdi3_31<setcc><cconly> is not only no longer necessary, but actually breaks the build. Get rid of it by using only one alternative in (match_scratch). It will be replicated as many times as needed in order to match the pattern with which (define_subst) is used. gcc/ChangeLog: * config/s390/s390.md(*ashrdi3_31<setcc><cconly>): Use a single constraint. * config/s390/subst.md(cconly_subst): Use a single constraint in (match_scratch). gcc/testsuite/ChangeLog: * gcc.target/s390/ashr.c: New test.
2021-06-02Fortran/OpenMP: Add gfortran.dg/gomp/taskloop-2.f90 [PR99928]Tobias Burnus1-0/+72
PR middle-end/99928 gcc/testsuite/ChangeLog * gfortran.dg/gomp/taskloop-2.f90: New.