aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-09-22Convert CFN_BUILT_FFS and CFN_POPCOUNT to range-ops.Andrew MacLeod2-22/+34
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case for CFN_FFS and CFN_POPCOUNT. * gimple-range-op.cc (class cfn_pocount): New. (gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22Convert CFN_BUILT_IN_TOUPPER and TOLOWER to range-ops.Andrew MacLeod2-66/+77
* gimple-range-fold.cc (get_letter_range): Move to new class. (range_of_builtin_int_call): Remove case for CFN_BUILT_IN_TOUPPER and CFN_BUILT_IN_TOLOWER. * gimple-range-op.cc (class cfn_toupper_tolower): New. (gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22Convert CFN_BUILT_IN_SIGNBIT to range-ops.Andrew MacLeod2-20/+27
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case for CFN_BUILT_IN_SIGNBIT. * gimple-range-op.cc (class cfn_signbit): New. (gimple_range_op_handler::maybe_builtin_call): Set arguments.
2022-09-22Add range-ops support for builtin functions.Andrew MacLeod3-25/+97
Convert CFN_BUILT_IN_CONSTANT_P as first POC. * gimple-range-fold.cc (fold_using_range::range_of_builtin_int_call): Remove case for CFN_BUILT_IN_CONSTANT_P. * gimple-range-op.cc (gimple_range_op_handler::supported_p): Check if a call also creates a range-op object. (gimple_range_op_handler): Also check builtin calls. (class cfn_constant_float_p): New. Float CFN_BUILT_IN_CONSTANT_P. (class cfn_constant_p): New. Integral CFN_BUILT_IN_CONSTANT_P. (gimple_range_op_handler::maybe_builtin_call): Set arguments and handler for supported built-in calls. * gimple-range-op.h (maybe_builtin_call): New prototype.
2022-09-22Always check the return value of fold_range.Andrew MacLeod4-8/+16
The fold_range routine in range-ops returns FALSE if the operation fails. There are a few places which assume the operation was successful. Fix those. * gimple-range-fold.cc (range_of_range_op): Set result to VARYING if the call to fold_range fails. * tree-data-ref.cc (compute_distributive_range): Ditto. * tree-vrp.cc (range_fold_binary_expr): Ditto. (range_fold_unary_expr): Ditto. * value-query.cc (range_query::get_tree_range): Ditto.
2022-09-22Add missing float fold_range prototype for floats.Andrew MacLeod3-3/+25
Unary operations require op2 to be the range of the type of the LHS. This is so the type for the LHS can be properly set. * range-op-float.cc (range_operator_float::fold_range): New base method for "int = float op int". * range-op.cc (range_op_handler::fold_range): New case. * range-op.h: Update prototypes.
2022-09-22Fix calc_op1 for undefined op2_range.Andrew MacLeod1-2/+6
Unary operations pass the type of operand 1 into op1_range. If that range is undefined, the routine blindly picks the type of operand 2, which in the case of a unary op, does not exist and traps. * gimple-range-op.cc (gimple_range_op_handler::calc_op1): Use operand 1 for second range if there is no operand 2.
2022-09-22Create gimple_range_op_handler in a new source file.Andrew MacLeod12-293/+386
Range-ops is meant to be IL independent. Some gimple processing has be placed in range-ops, and some is located in gori. Split it all into a file and isolate it in a new class gimple_range_op_handler. * Makefile.in (OBJS): Add gimple-range-op.o. * gimple-range-edge.cc (gimple_outgoing_range_stmt_p): Use gimple_range_op_handler. * gimple-range-fold.cc (gimple_range_base_of_assignment): Move to a method in gimple_range_op_handler. (gimple_range_operand1): Ditto. (gimple_range_operand2): Ditto. (fold_using_range::fold_stmt): Use gimple_range_op_handler. (fold_using_range::range_of_range_op): Ditto. (fold_using_range::relation_fold_and_or): Ditto. (fur_source::register_outgoing_edges): Ditto. (gimple_range_ssa_names): Relocate to gimple-range-op.cc. * gimple-range-fold.h: Adjust prototypes. * gimple-range-gori.cc (gimple_range_calc_op1): Move to a method in gimple_range_op_handler. (gimple_range_calc_op2): Ditto. (gori_compute::compute_operand_range): Use gimple_range_op_handler. (gori_compute::compute_logical_operands): Ditto. (compute_operand1_range): Ditto. (gori_compute::compute_operand2_range): Ditto. (gori_compute::compute_operand1_and_operand2_range): Ditto. * gimple-range-gori.h: Adjust protoypes. * gimple-range-op.cc: New. Supply gimple_range_op_handler methods. * gimple-range-op.h: New. Supply gimple_range_op_handler class. * gimple-range.cc (gimple_ranger::prefill_name): Use gimple_range_op_handler. (gimple_ranger::prefill_stmt_dependencies): Ditto. * gimple-range.h: Include gimple-range-op.h. * range-op.cc (range_op_handler::range_op_handler): Adjust and remove gimple * parameter option. * range-op.h: Adjust prototypes.
2022-09-22Adjust range_op_handler to store the handler directly.Andrew MacLeod2-140/+114
Range_op_handler currently stores a tree code and a type. It defers checking to see if there is a valid handler until asked. This change checks at constuctor time and store a pointer to the handler if there is one. * range-op.cc (range_op_handler::set_op_handler): Set new fields. (ange_op_handler::range_op_handler): Likewise. (range_op_handler::operator bool): Remove. (range_op_handler::fold_range): Use appropriate handler. (range_op_handler::op1_range): Likewise. (range_op_handler::op2_range): Likewise. (range_op_handler::lhs_op1_relation): Likewise. (range_op_handler::lhs_op2_relation): Likewise. (range_op_handler::op1_op2_relation): Likewise. * range-op.h (class range_op_handler): Store handler pointers. (range_op_handler:: operator bool): Inline.
2022-09-22Replace another snippet with a call to gimple_range_ssa_names.Andrew MacLeod1-17/+3
When the original patch was applied, I missed a spot which could also be rewritten to use gimple_range_ssa_names. * tree-ssa-threadbackward.cc (back_threader::find_paths_to_names): Replace sequence with a call to gimple_range_ssa_names.
2022-09-22Fortran: Fix automatic reallocation inside select rank [PR100103]José Rui Faustino de Sousa2-2/+78
gcc/fortran/ChangeLog: PR fortran/100103 * trans-array.cc (gfc_is_reallocatable_lhs): Add select rank temporary associate names as possible targets of automatic reallocation. gcc/testsuite/ChangeLog: PR fortran/100103 * gfortran.dg/PR100103.f90: New test.
2022-09-22Fortran: fix ICE in generate_coarray_sym_init [PR82868]Harald Anlauf2-0/+16
gcc/fortran/ChangeLog: PR fortran/82868 * trans-decl.cc (generate_coarray_sym_init): Skip symbol if attr.associate_var. gcc/testsuite/ChangeLog: PR fortran/82868 * gfortran.dg/associate_26a.f90: New test.
2022-09-22cmd/cgo: add and use runtime/cgo.Incomplete instead of //go:notinheapIan Lance Taylor1-1/+1
This ports https://go.dev/cl/421879 to libgo. This is a quick port to update gofrontend to work with the version of cgo in gc mainline. A more complete port will follow, changing the gc version of cmd/cgo to choose an approach based on feature testing the gccgo in use. Updates golang/go#46731 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/432338
2022-09-22tree-optimization/102801 - testcase for uninit diagnosticRichard Biener1-0/+55
The following testcase is fixed in GCC 12+ PR tree-optimization/102801 gcc/testsuite/ * g++.dg/warn/Wuninitialized-33.C: New testcase.
2022-09-22c++ modules: partial variable template specializations [PR106826]Patrick Palka3-14/+82
With partial variable template specializations, it looks like we stream the VAR_DECL (i.e. the DECL_TEMPLATE_RESULT of the corresponding TEMPLATE_DECL) since process_partial_specialization adds it to the specializations table, but we end up never streaming the corresponding TEMPLATE_DECL itself that's reachable only from the primary template's DECL_TEMPLATE_SPECIALIZATIONS list, which leads to this list being incomplete on stream-in. The modules machinery already has special logic for streaming partial specializations of class templates; this patch attempts to generalize it to handle those of variable templates as well. PR c++/106826 gcc/cp/ChangeLog: * module.cc (trees_out::decl_value): Use get_template_info in the MK_partial case to handle both VAR_DECL and TYPE_DECL. (trees_out::key_mergeable): Likewise. (trees_in::key_mergeable): Likewise. (has_definition): Consider DECL_INITIAL of a partial variable template specialization. (depset::hash::make_dependency): Handle partial variable template specializations too. gcc/testsuite/ChangeLog: * g++.dg/modules/partial-2_a.C: New test. * g++.dg/modules/partial-2_b.C: New test.
2022-09-22remove -gz=zlib-gnu option valueMartin Liska4-115/+20
The option value is legacy and probably not used at all, thus ignore it. gcc/ChangeLog: * configure: Regenerate. * configure.ac: Simplify to gcc_cv_ld_compress_debug={0,1} and gcc_cv_as_compress_debug={0,1}. * doc/invoke.texi: Document the removal. * gcc.cc (LINK_COMPRESS_DEBUG_SPEC): Simplify and ignore zlib-gnu. (ASM_COMPRESS_DEBUG_SPEC): Likewise. Co-Authored-By: Fangrui Song <i@maskray.me>
2022-09-22c: fix uninitialized c_expr::m_decimal [PR106830]David Malcolm6-7/+35
I added c_expr::m_decimal in r13-2386-gbedfca647a9e9c1a as part of the implementation of -Wxor-used-as-pow, but I missed various places where the field needed to be initialized. Fixed thusly. gcc/c-family/ChangeLog: PR c/106830 * c-warn.cc (check_for_xor_used_as_pow): Don't try checking values that don't fit in uhwi. gcc/c/ChangeLog: PR c/106830 * c-parser.cc (c_parser_initelt): Initialize m_decimal. (c_parser_cast_expression): Likewise. (c_parser_alignof_expression): Likewise. (c_parser_postfix_expression_after_paren_type): Likewise. (c_parser_postfix_expression_after_primary): Likewise. (c_parser_expression): Likewise. (c_parser_omp_variable_list): Likewise. (c_parser_transaction_expression): Likewise. * c-tree.h (c_expr::set_error): Likewise. * c-typeck.cc (c_expr_sizeof_expr): Likewise. (parser_build_unary_op): Likewise. (parser_build_binary_op): Likewise. (digest_init): Likewise. (pop_init_level): Likewise. * gimple-parser.cc (c_parser_gimple_call_internal): Likewise. gcc/testsuite/ChangeLog: PR c/106830 * gcc.dg/Wxor-used-as-pow-pr106830.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-09-22tree-optimization/106922 - missed FRE/PRERichard Biener3-32/+93
The following enhances the store-with-same-value trick in vn_reference_lookup_3 by not only looking for a = val; *ptr = val; .. = a; but also *ptr = val; other = x; .. = a; where the earlier store is more than one hop away. It does this by queueing the actual value to compare until after the walk but as disadvantage only allows a single such skipped store from a constant value. Unfortunately we cannot handle defs from non-constants this way since we're prone to pick up values from the past loop iteration this way and we have no good way to identify values that are invariant in the currently iterated cycle. That's why we keep the single-hop lookup for those cases. gcc.dg/tree-ssa/pr87126.c would be a testcase that's un-XFAILed when we'd handle those as well. PR tree-optimization/106922 * tree-ssa-sccvn.cc (vn_walk_cb_data::same_val): New member. (vn_walk_cb_data::finish): Perform delayed verification of a skipped may-alias. (vn_reference_lookup_pieces): Likewise. (vn_reference_lookup): Likewise. (vn_reference_lookup_3): When skipping stores of the same value also handle constant stores that are more than a single VDEF away by delaying the verification. * gcc.dg/tree-ssa/ssa-fre-100.c: New testcase. * g++.dg/tree-ssa/pr106922.C: Adjust.
2022-09-22xtensa: gcc: enable section anchors supportMax Filippov1-0/+3
gcc/ * config/xtensa/xtensa.cc (TARGET_MAX_ANCHOR_OFFSET): New definition.
2022-09-22xtensa: gcc: implement MI thunk generation for call0 ABIMax Filippov1-1/+115
gcc/ * config/xtensa/xtensa.cc (xtensa_can_output_mi_thunk) (xtensa_output_mi_thunk): New functions. (TARGET_ASM_CAN_OUTPUT_MI_THUNK) (TARGET_ASM_OUTPUT_MI_THUNK): New macro definitions. (xtensa_prepare_expand_call): Use fixed register a8 as temporary when called with reload_completed set to 1.
2022-09-22tree-optimization/99407 - DSE with data-ref analysisRichard Biener3-3/+52
The following resolves the issue that DSE cannot handle references with variable offsets well when identifying possible uses of a store. Instead of just relying on ref_maybe_used_by_stmt_p we use data-ref analysis, making sure to perform that at most once per stmt. The new mode is only exercised by the DSE pass before loop optimization as specified by a new pass parameter and when expensive optimizations are enabled, so it's disabled below -O2. PR tree-optimization/99407 * tree-ssa-dse.cc (dse_stmt_to_dr_map): New global. (dse_classify_store): Use data-ref analysis to disambiguate more uses. (pass_dse::use_dr_analysis_p): New pass parameter. (pass_dse::set_pass_param): Implement. (pass_dse::execute): Allocate and deallocate dse_stmt_to_dr_map. * passes.def: Allow DR analysis for the DSE pass before loop. * gcc.dg/vect/tsvc/vect-tsvc-s243.c: Remove XFAIL.
2022-09-22Some VN TLCRichard Biener1-16/+27
The following was prompted by review of the patch introducing equivalences to VN. * tree-ssa-sccvn.cc (can_track_predicate_on_edge): New function split out from ... (vn_nary_op_insert_pieces_predicated): ... here.
2022-09-22Fix typo in floorv2sf2, should be register_operand for op1, not vector_operand.liuhongt2-1/+25
gcc/ChangeLog: PR target/106994 * config/i386/mmx.md (floorv2sf2): Fix typo, use register_operand instead of vector_operand for operands[1]. gcc/testsuite/ChangeLog: * gcc.target/i386/pr106994.c: New test.
2022-09-22Daily bump.GCC Administrator3-1/+83
2022-09-21[PR106967] Set known NANs to undefined for flag_finite_math_only.Aldy Hernandez1-2/+7
Explicit NANs in the IL can be treated as undefined for flag_finite_math_only. This causes all the right things to happen wrt threading, folding, etc. It also saves us special casing throughout. PR tree-optimization/106967 gcc/ChangeLog: * value-range.cc (frange::set): Set known NANs to undefined for flag_finite_math_only.
2022-09-21Clear unused flags in frange for undefined ranges.Aldy Hernandez2-4/+8
gcc/ChangeLog: * value-range.cc (frange::combine_zeros): Call set_undefined. (frange::intersect_nans): Same. (frange::intersect): Same. (frange::verify_range): Undefined ranges do not have a type. * value-range.h (frange::set_undefined): Clear NAN flags and type.
2022-09-21tree-optimization/106984 - tsan and COND_EXPR GIMPLERichard Biener2-6/+14
The following adjusts a missed spot in TSAN for the RHS COND_EXPR GIMPLE IL rework. PR tree-optimization/106984 * tsan.cc (instrument_builtin_call): Build the COND_EXPR condition in a separate statement. * gcc.dg/tsan/pr106984.c: New testcase.
2022-09-21Fortran: handle RADIX kind in IEEE_SET_ROUNDING_MODEFrancois-Xavier Coudert1-0/+27
Make sure that calling IEEE_SET_ROUNDING_MODE with RADIX=10 does not affect the binary rounding mode. 2022-09-21 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> libgfortran/ * ieee/ieee_arithmetic.F90 (IEEE_SET_ROUNDING_MODE): Handle RADIX argument better. gcc/testsuite/ * gfortran.dg/ieee/rounding_3.f90: New test.
2022-09-21aarch64: Rewrite -march=native to -mcpu if no other -mcpu or -mtune is givenKyrylo Tkachov1-18/+32
We have received requests to improve the out-of-the box experience and performance of AArch64 GCC users, particularly those porting software from other architectures. This has many aspects. One such aspect are apps built natively with an -march=native used as a tuning flag in the Makefile. On AArch64 this selects the right architecture features on GNU+Linux for the host system but tunes for the "generic" CPU target. This patch makes GCC also tune for the host CPU, as well as selecting its architecture. That is, it translates -march=native into -mcpu=native. This maintains the documentation that it "causes the compiler to pick the architecture of the host system" since -mcpu=native does that, but it also gives a better performance experience for the user. If the user explicitly asked for a particular CPU tuning through -mcpu or -mtune then we don't do this rewriting so that the user option is honoured. This would have been a one-line patch if it wasn't for --with-tune configure-time arguments. When GCC is configured with --with-tune=<CORE> the OPTION_DEFAULT_SPECS will insert an -mtune=<CORE> in the options if no other -mcpu or -mtune options were given. This will spook the aforementioned desired rewriting of -march=native into -mcpu=native, though I'd argue that we want to do the rewrite even then. Therefore, this patch moves some specs in aarch64.h around and refactors the --with-tune rewriting into CONFIG_TUNE_SPEC so that the materialization of the implicit -mtune=<CORE> does not happen if -march=native is used. Bootstrapped and tested on aarch64-none-linux-gnu and checked with the output of -### from the driver that the option rewriting works as expected on aarch64-linux-gnu. gcc/ChangeLog: * config/aarch64/aarch64.h (HAVE_LOCAL_CPU_DETECT, EXTRA_SPEC_FUNCTIONS, MCPU_MTUNE_NATIVE_SPECS): Move definitions up before OPTION_DEFAULT_SPECS. (MCPU_MTUNE_NATIVE_SPECS): Pass "cpu" to local_cpu_detect when rewriting -march=native and no -mcpu or -mtune is given. (CONFIG_TUNE_SPEC): Define. (OPTION_DEFAULT_SPECS): Use CONFIG_TUNE_SPEC for "tune".
2022-09-21[PR106967] frange: revamp relational operators for NANs.Aldy Hernandez2-93/+193
Since NANs can be inserted by other passes even for -ffinite-math-only, we can't depend on the flag to determine if a NAN is a possiblity. Instead, we must explicitly check for them. In the case of -ffinite-math-only, paths leading up to a NAN are undefined and can be considered unreachable. I have audited all the relational code and made sure we're handling the known NAN case before anything else, setting undefined when appropriate. In the process, I revamped all the relational code handling NANs to correctly notice paths that are unreachable. The basic structure for ordered relational operators (except != of course) is this: If either operand is a known NAN, return FALSE. The true side of a relop when one operand is a NAN is unreachable. On the false side of a relop when one operand is a NAN, we know nothing about the other operand. Regstrapped on x86-64 and ppc64le Linux. lapack testing on x86-64 with and without -ffinite-math-only. PR tree-optimization/106967 gcc/ChangeLog: * range-op-float.cc (foperator_equal::fold_range): Adjust for NAN. (foperator_equal::op1_range): Same. (foperator_not_equal::fold_range): Same. (foperator_not_equal::op1_range): Same. (foperator_lt::fold_range): Same. (foperator_lt::op1_range): Same. (foperator_lt::op2_range): Same. (foperator_le::fold_range): Same. (foperator_le::op1_range): Same. (foperator_le::op2_range): Same. (foperator_gt::fold_range): Same. (foperator_gt::op1_range): Same. (foperator_gt::op2_range): Same. (foperator_ge::fold_range): Same. (foperator_ge::op1_range): Same. (foperator_ge::op2_range): Same. (foperator_unordered::op1_range): Same. (foperator_ordered::fold_range): Same. (foperator_ordered::op1_range): Same. (build_le): Assert that we don't have a NAN. (build_lt): Same. (build_gt): Same. (build_ge): Same. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr106967.c: New test.
2022-09-21Don't check can_vec_perm_const_p for nonlinear iv_init when it's constant.liuhongt2-1/+18
When init_expr is INTEGER_CST or REAL_CST, can_vec_perm_const_p is not necessary since there's no real vec_perm needed, but vec_gen_perm_mask_checked will gcc_assert (can_vec_perm_const_p). So it's better to use vec_gen_perm_mask_any in vect_create_nonlinear_iv_init. gcc/ChangeLog: PR tree-optimization/106963 * tree-vect-loop.cc (vect_create_nonlinear_iv_init): Use vec_gen_perm_mask_any instead of vec_gen_perm_mask_check. gcc/testsuite/ChangeLog: * gcc.target/i386/pr106963.c: New test.
2022-09-21Daily bump.GCC Administrator6-1/+227
2022-09-20Fortran: F2018 type(*),dimension(*) with scalars [PR104143]Tobias Burnus4-2/+43
Assumed-size dummy arguments accept arrays and array elements as actual arguments. There are also a few exceptions when real scalars are permitted. Since F2018, this includes scalar arguments to assumed-type dummies; while type(*) was added in TS29113, this change is only in F2018 itself. PR fortran/104143 gcc/fortran/ChangeLog: * interface.cc (compare_parameter): Permit scalar args to 'type(*), dimension(*)'. gcc/testsuite/ChangeLog: * gfortran.dg/c-interop/c407b-2.f90: Remove dg-error. * gfortran.dg/assumed_type_16.f90: New test. * gfortran.dg/assumed_type_17.f90: New test.
2022-09-20Fortran: error recovery on invalid ARRAY argument to FINDLOC [PR106986]Harald Anlauf2-0/+9
gcc/fortran/ChangeLog: PR fortran/106986 * simplify.cc (gfc_simplify_findloc): Do not try to simplify intrinsic FINDLOC when the ARRAY argument has a NULL shape. gcc/testsuite/ChangeLog: PR fortran/106986 * gfortran.dg/pr106986.f90: New test.
2022-09-20Fortran: NULL pointer dereference in invalid simplification [PR106985]Harald Anlauf2-1/+10
gcc/fortran/ChangeLog: PR fortran/106985 * expr.cc (gfc_simplify_expr): Avoid NULL pointer dereference. gcc/testsuite/ChangeLog: PR fortran/106985 * gfortran.dg/pr106985.f90: New test.
2022-09-20c++: xtreme-header modules tests cleanupsPatrick Palka3-44/+28
This adds some recently implemented C++20/23 library headers to the xtreme-header tests as appropriate. Also, it looks like we can safely re-add <execution> and remove the NO_ASSOCIATED_LAMBDA workaround. gcc/testsuite/ChangeLog: * g++.dg/modules/xtreme-header-2.h: Include <execution>. * g++.dg/modules/xtreme-header-6.h: Include implemented C++20 library headers. * g++.dg/modules/xtreme-header.h: Likewise. Remove NO_ASSOCIATED_LAMBDA workaround. Include implemented C++23 library headers.
2022-09-20c++: modules and non-dependent auto deductionPatrick Palka4-0/+24
The modules streaming code seems to rely on the invariant that a TEMPLATE_DECL and its DECL_TEMPLATE_RESULT have the same TREE_TYPE. But for a non-dependent VAR_DECL with deduced type, the two TREE_TYPEs end up diverging: cp_finish_decl deduces the type of the initializer ahead of time and updates the TREE_TYPE of the VAR_DECL, but neglects to update the corresponding TEMPLATE_DECL as well, which leads to a "conflicting global module declaration" error for each of the __phase_alignment decls in the below testcase (and for the xtreme-header tests if we try including <barrier>). This patch makes cp_finish_decl update the TREE_TYPE of the corresponding TEMPLATE_DECL so that the invariant is maintained. gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): After updating the deduced type of a VAR_DECL, also update the corresponding TEMPLATE_DECL if there is one. gcc/testsuite/ChangeLog: * g++.dg/modules/auto-3.h: New test. * g++.dg/modules/auto-3_a.H: New test. * g++.dg/modules/auto-3_b.C: New test.
2022-09-20Fortran: Fix function attributes [PR100132]José Rui Faustino de Sousa2-2/+88
gcc/fortran/ChangeLog: PR fortran/100132 * trans-types.cc (create_fn_spec): Fix function attributes when passing polymorphic pointers. gcc/testsuite/ChangeLog: PR fortran/100132 * gfortran.dg/PR100132.f90: New test.
2022-09-20frange::maybe_isnan() should return FALSE for undefined ranges.Aldy Hernandez1-0/+2
Undefined ranges have undefined NAN bits. We can't depend on them, as they may contain garbage. This patch returns false from maybe_isnan() for undefined ranges (the empty set). gcc/ChangeLog: * value-range.h (frange::maybe_isnan): Return false for undefined ranges.
2022-09-20frange::set_nonnegative should not contain -NAN.Aldy Hernandez2-0/+23
A specifically nonnegative range should not contain -NAN, otherwise signbit_p() would return false, because we'd be unsure of the sign. PR 68097/tree-optimization gcc/ChangeLog: * value-range.cc (frange::set_nonnegative): Set +NAN. (range_tests_signed_zeros): New test. * value-range.h (frange::update_nan): New overload to set NAN sign.
2022-09-20fortran: add link to ISO_VARYING_STRING module [PR106636]Martin Liska1-1/+2
PR fortran/106636 gcc/fortran/ChangeLog: * gfortran.texi: Add back link to ISO_VARYING_STRING.
2022-09-20aarch64: Fix GTY markup for arm_sve.h [PR106491]Richard Sandiford1-4/+8
It turns out that GTY(()) markers in definitions like: GTY(()) tree scalar_types[NUM_VECTOR_TYPES]; are not effective and are silently ignored. The GTY(()) has to come after an extern or static. The externs associated with the SVE ACLE GTY variables are in aarch64-sve-builtins.h. This file is not in tm_include_list because we don't want every target-facing file to include it. It therefore isn't in the list of GC header files either. In this case that's a blessing in disguise, since the variables belong to a namespace and gengtype doesn't understand namespaces. I think the fix is instead to add an extra extern before each variable declaration, similarly to varasm.cc and vtable-verify.cc. (This works due to a "using namespace" at the end of the file.) gcc/ PR target/106491 * config/aarch64/aarch64-sve-builtins.cc (scalar_types) (acle_vector_types, acle_svpattern, acle_svprfop): Add GTY markup to (new) extern declarations instead of to the main definition.
2022-09-20vect: Fix SLP layout handling of masked loads [PR106794]Richard Sandiford3-8/+77
PR106794 shows that I'd forgotten about masked loads when doing the SLP layout changes. These loads can't currently be permuted independently of their mask input, so during construction they never get a load permutation. (If we did support permuting masked loads in future, the mask would need to be in the right order for the load, rather than in the order implied by the result of the permutation. Since masked loads can't be partly or fully scalarised in the way that normal permuted loads can be, there's probably no benefit to fusing the permutation and the load. Permutation after the fact is probably good enough.) gcc/ PR tree-optimization/106794 PR tree-optimization/106914 * tree-vect-slp.cc (vect_optimize_slp_pass::internal_node_cost): Only consider loads that already have a permutation. (vect_optimize_slp_pass::start_choosing_layouts): Assert that loads with permutations are leaf nodes. Prevent any kind of grouped access from changing layout if it doesn't have a load permutation. gcc/testsuite/ * gcc.dg/vect/pr106914.c: New test. * g++.dg/vect/pr106794.cc: Likewise.
2022-09-20vect: Fix missed gather load opportunityRichard Sandiford2-0/+43
While writing a testcase for PR106794, I noticed that we failed to vectorise the testcase in the patch for SVE. The code that recognises gather loads tries to optimise the point at which the offset is calculated, to avoid unnecessary extensions or truncations: /* Don't include the conversion if the target is happy with the current offset type. */ But breaking only makes sense if we're at an SSA_NAME (which could then be vectorised). We shouldn't break on a conversion embedded in a generic expression. gcc/ * tree-vect-data-refs.cc (vect_check_gather_scatter): Restrict early-out optimisation to SSA_NAMEs. gcc/testsuite/ * gcc.dg/vect/vect-gather-5.c: New test.
2022-09-20[PR106970] New test for PR that has already been fixed.Aldy Hernandez1-0/+9
PR tree-optimization/106970 gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr106970.c: New test.
2022-09-20c++: stream PACK_EXPANSION_EXTRA_ARGS [PR106761]Patrick Palka4-0/+37
It looks like after the libstdc++ commit r13-2158-g02f6b405f0e9dc some xtreme-header-* tests are failing with "conflicting global module declaration" errors ultimately because we're neglecting to stream PACK_EXPANSION_EXTRA_ARGS, which leads to wrong equivalences of different partial instantiations of _TupleConstraints::__constructible. PR c++/106761 gcc/cp/ChangeLog: * module.cc (trees_out::type_node) <case TYPE_PACK_EXPANSION>: Stream PACK_EXPANSION_EXTRA_ARGS. (trees_in::tree_node) <case TYPE_PACK_EXPANSION>: Likewise. gcc/testsuite/ChangeLog: * g++.dg/modules/pr106761.h: New test. * g++.dg/modules/pr106761_a.H: New test. * g++.dg/modules/pr106761_b.C: New test.
2022-09-20Merge branch 'master' into devel/modula-2.Gaius Mulley95-1767/+4216
2022-09-20replace "the the" typosMartin Liska16-17/+17
gcc/ada/ChangeLog: * exp_ch6.adb: Replace "the the" with "the". * sem_ch6.adb: Likewise. * sem_disp.ads: Likewise. gcc/ChangeLog: * ctfc.cc (ctf_add_string): Replace "the the" with "the". * doc/md.texi: Likewise. * gimple-range-infer.cc (non_null_loadstore): Likewise. gcc/fortran/ChangeLog: * gfortran.texi: Replace "the the" with "the". gcc/testsuite/ChangeLog: * g++.dg/warn/Wclass-memaccess.C: Replace "the the" with "the". * g++.dg/warn/Wconversion-real-integer2.C: Likewise. * gcc.target/powerpc/p9-extract-1.c: Likewise. * gcc.target/s390/s390.exp: Likewise. * gcc.target/s390/zvector/vec-cmp-2.c: Likewise. * gdc.dg/torture/simd_store.d: Likewise. * gfortran.dg/actual_array_offset_1.f90: Likewise. * gfortran.dg/pdt_15.f03: Likewise. * gfortran.dg/pointer_array_8.f90: Likewise.
2022-09-20fortran: remove 2 dead links [PR106636]Martin Liska1-3/+1
PR fortran/106636 gcc/fortran/ChangeLog: * gfortran.texi: Remove 2 dead links.
2022-09-20Fixes to remove warnings and rebuild gcc/m2/configure.Gaius Mulley9-60/+75
gcc/m2/ChangeLog: * configure: Rebuilt. * gm2-compiler/M2GenGCC.mod (FoldBuiltin): Replace variable op3. * gm2-compiler/M2Quads.mod (IsBackReference): Fix spacing. (IsBackReferenceConditional): Fix spacing. * gm2-gcc/m2color.cc: Correct line breaks and change drop const from return to allow modula-2 to build without warning. * gm2-gcc/m2color.def: Tidyup comments and use PtrToChar as the return result rather than ADDRESS. * gm2-gcc/m2color.h: Change return result to char * (avoiding const). * gm2-libs-min/libc.c: Correct spacing. * gm2-libs/FIO.mod (StringFormat1): Initialize local variables to avoid warning. (FormatError) Correct spacing. (FormatError2) Correct spacing. (CheckAccess) Tidy comments and spacing. (SetEndOfLine) Tidy comments and spacing. libgm2/ChangeLog: * libm2pim/wrapc.c (wrapc_fileinode): Avoid a warning by using a check whether to assign high to 0 if sizeof (high) in bits <= shift length. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>