summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* libgcc: Add a backchain fallback to _Unwind_Backtrace() on PowerPCRaphael Moreira Zinsly2021-10-143-16/+124
| | | | | | | | | | | | | | | | | | | | | | Without dwarf2 unwind tables available _Unwind_Backtrace() is not able to return the full backtrace. This patch adds a fallback function on powerpc to get the backtrace by doing a backchain, this code was originally at glibc. libgcc/ChangeLog: * config/rs6000/linux-unwind.h (struct rt_sigframe): Move it to outside of get_regs() in order to use it in another function, this is done twice: for __powerpc64__ and for !__powerpc64__. (struct trace_arg): New struct. (struct layout): New struct. (ppc_backchain_fallback): New function. * unwind.inc (_Unwind_Backtrace): Look for _URC_NORMAL_STOP code state and call MD_BACKCHAIN_FALLBACK. gcc/testsuite/ChangeLog: * gcc.target/powerpc/unwind-backchain.c: New test.
* Fortran: generate error message for negative elements in SHAPE arrayHarald Anlauf2021-10-142-1/+14
| | | | | | | | | | | | | gcc/fortran/ChangeLog: PR fortran/102717 * simplify.c (gfc_simplify_reshape): Replace assert by error message for negative elements in SHAPE array. gcc/testsuite/ChangeLog: PR fortran/102717 * gfortran.dg/reshape_shape_2.f90: New test.
* Fortran: fix order of checks for the SHAPE intrinsicHarald Anlauf2021-10-142-7/+13
| | | | | | | | | | | | | gcc/fortran/ChangeLog: PR fortran/102716 * check.c (gfc_check_shape): Reorder checks so that invalid KIND arguments can be detected. gcc/testsuite/ChangeLog: PR fortran/102716 * gfortran.dg/shape_10.f90: New test.
* Simplification for right shift.Andrew MacLeod2021-10-142-0/+70
| | | | | | | | | | | | When the first operand of a signed right shift is zero or negative one, the RHS doesn't matter and the shift can be converted to a copy. PR tree-optimization/102738 gcc/ * vr-values.c (simplify_using_ranges::simplify): Handle RSHIFT_EXPR. gcc/testsuite * gcc.dg/pr102738.c: New.
* openmp: Mark declare variant directive in documentation as supported in FortranKwok Cheung Yeung2021-10-141-1/+1
| | | | | | | | 2021-10-14 Kwok Cheung Yeung <kcy@codesourcery.com> libgomp/ * libgomp.texi (OpenMP 5.0): Update entry for declare variant directive.
* libiberty: d-demangle: Add test case for function literalsLuís Ferreira2021-10-141-0/+4
| | | | | | libiberty/ChangeLog: * testsuite/d-demangle-expected: Add test case for function literals.
* libiberty: d-demangle: add test cases for simple special manglesLuís Ferreira2021-10-141-0/+8
| | | | | | | libiberty/ChangeLog: * testsuite/d-demangle-expected: Add test cases for simple special mangles.
* openmp, fortran: Add support for OpenMP declare variant directive in FortranKwok Cheung Yeung2021-10-1435-148/+2903
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2021-10-14 Kwok Cheung Yeung <kcy@codesourcery.com> gcc/c-family/ * c-omp.c (c_omp_check_context_selector): Rename to omp_check_context_selector and move to omp-general.c. (c_omp_mark_declare_variant): Rename to omp_mark_declare_variant and move to omp-general.c. gcc/c/ * c-parser.c (c_finish_omp_declare_variant): Change call from c_omp_check_context_selector to omp_check_context_selector. Change call from c_omp_mark_declare_variant to omp_mark_declare_variant. gcc/cp/ * decl.c (omp_declare_variant_finalize_one): Change call from c_omp_mark_declare_variant to omp_mark_declare_variant. * parser.c (cp_finish_omp_declare_variant): Change call from c_omp_check_context_selector to omp_check_context_selector. gcc/fortran/ * gfortran.h (enum gfc_statement): Add ST_OMP_DECLARE_VARIANT. (enum gfc_omp_trait_property_kind): New. (struct gfc_omp_trait_property): New. (gfc_get_omp_trait_property): New macro. (struct gfc_omp_selector): New. (gfc_get_omp_selector): New macro. (struct gfc_omp_set_selector): New. (gfc_get_omp_set_selector): New macro. (struct gfc_omp_declare_variant): New. (gfc_get_omp_declare_variant): New macro. (struct gfc_namespace): Add omp_declare_variant field. (gfc_free_omp_declare_variant_list): New prototype. * match.h (gfc_match_omp_declare_variant): New prototype. * openmp.c (gfc_free_omp_trait_property_list): New. (gfc_free_omp_selector_list): New. (gfc_free_omp_set_selector_list): New. (gfc_free_omp_declare_variant_list): New. (gfc_match_omp_clauses): Add extra optional argument. Handle end of clauses for context selectors. (omp_construct_selectors, omp_device_selectors, omp_implementation_selectors, omp_user_selectors): New. (gfc_match_omp_context_selector): New. (gfc_match_omp_context_selector_specification): New. (gfc_match_omp_declare_variant): New. * parse.c: Include tree-core.h and omp-general.h. (decode_omp_directive): Handle 'declare variant'. (case_omp_decl): Include ST_OMP_DECLARE_VARIANT. (gfc_ascii_statement): Handle ST_OMP_DECLARE_VARIANT. (gfc_parse_file): Initialize omp_requires_mask. * symbol.c (gfc_free_namespace): Call gfc_free_omp_declare_variant_list. * trans-decl.c (gfc_get_extern_function_decl): Call gfc_trans_omp_declare_variant. (gfc_create_function_decl): Call gfc_trans_omp_declare_variant. * trans-openmp.c (gfc_trans_omp_declare_variant): New. * trans-stmt.h (gfc_trans_omp_declare_variant): New prototype. gcc/ * omp-general.c (omp_check_context_selector): Move from c-omp.c. (omp_mark_declare_variant): Move from c-omp.c. (omp_context_name_list_prop): Update for Fortran strings. * omp-general.h (omp_check_context_selector): New prototype. (omp_mark_declare_variant): New prototype. gcc/testsuite/ * gfortran.dg/gomp/declare-variant-1.f90: New test. * gfortran.dg/gomp/declare-variant-10.f90: New test. * gfortran.dg/gomp/declare-variant-11.f90: New test. * gfortran.dg/gomp/declare-variant-12.f90: New test. * gfortran.dg/gomp/declare-variant-13.f90: New test. * gfortran.dg/gomp/declare-variant-14.f90: New test. * gfortran.dg/gomp/declare-variant-15.f90: New test. * gfortran.dg/gomp/declare-variant-16.f90: New test. * gfortran.dg/gomp/declare-variant-17.f90: New test. * gfortran.dg/gomp/declare-variant-18.f90: New test. * gfortran.dg/gomp/declare-variant-19.f90: New test. * gfortran.dg/gomp/declare-variant-2.f90: New test. * gfortran.dg/gomp/declare-variant-2a.f90: New test. * gfortran.dg/gomp/declare-variant-3.f90: New test. * gfortran.dg/gomp/declare-variant-4.f90: New test. * gfortran.dg/gomp/declare-variant-5.f90: New test. * gfortran.dg/gomp/declare-variant-6.f90: New test. * gfortran.dg/gomp/declare-variant-7.f90: New test. * gfortran.dg/gomp/declare-variant-8.f90: New test. * gfortran.dg/gomp/declare-variant-9.f90: New test. libgomp/ * testsuite/libgomp.fortran/declare-variant-1.f90: New test.
* rs6000: Fix memory leak in rs6000_density_testRichard Sandiford2021-10-141-9/+8
| | | | | | | | | | rs6000_density_test has an early exit test between a call to get_loop_body and the corresponding free. This would lead to a memory leak if the early exit is taken. gcc/ * config/rs6000/rs6000.c (rs6000_density_test): Move early exit test further up the function.
* arm: Remove add_stmt_cost hookRichard Sandiford2021-10-141-40/+0
| | | | | | | | | | | | | | | | | | | | | | | | | The arm implementation of add_stmt_cost was added alongside arm_builtin_vectorization_cost. At that time it was necessary to override the latter when overriding the former, since default_add_stmt_cost didn't indirect through the builtin_vectorization_cost target hook: int stmt_cost = default_builtin_vectorization_cost (kind, vectype, misalign); That was fixed by: | 2014-06-06 Bingfeng Mei <bmei@broadcom.com> | | * targhooks.c (default_add_stmt_cost): Call target specific | hook instead of default one. so the arm definition of add_stmt_cost is now equivalent to the default. gcc/ * config/arm/arm.c (arm_add_stmt_cost): Delete. (TARGET_VECTORIZE_ADD_STMT_COST): Delete.
* Add forgotten documentation of param ipa-cp-recursive-freq-factorMartin Jambor2021-10-141-0/+4
| | | | | | | | | | | | | | Martin Liška has noticed that I forgot to document the recently added parameter in the invoke.texi documentation. This patch fixes it. Tested by running make info and make pdf and examining the output. gcc/ChangeLog: 2021-10-14 Martin Jambor <mjambor@suse.cz> * doc/invoke.texi (Optimize Options): Add entry for ipa-cp-recursive-freq-factor.
* Fix mips testsuite fallout from vectorizer changesJeff Law2021-10-141-1/+1
| | | | | gcc/testsuite * gcc.target/mips/msa-insert-split.c: Turn off vectorizer.
* libstdc++: Fix brainwrong in path::_S_convert(T) [PR102743]Jonathan Wakely2021-10-141-1/+1
| | | | | | | | | | | | | | | | | | | This function was supposed to check whether the parameter's value type is the same as path::value_type, and therefore needs no conversion. Instead it checks whether the parameter is the same as its own value type, which is never true. This means we incorrectly return a string view for the case where T is path::string_type, instead of just returning the string itself. The only place that happens is path::_S_convert_loc for Windows, where we call _S_convert with a std::wstring rvalue. This fixes the condition in _S_convert(T). libstdc++-v3/ChangeLog: PR libstdc++/102743 * include/bits/fs_path.h (path::_S_convert(T)): Fix condition for returning the same string unchanged.
* libstdc++: Use more descriptive feature test macroJonathan Wakely2021-10-141-1/+1
| | | | | | | | | | | The out-of-class definitions of the static constants are redundant if the __cpp_inline_variables feature is supported, so use that macro to decide whether to define them or not. libstdc++-v3/ChangeLog: * include/bits/regex.h: Check __cpp_inline_variables instead of __cplusplus.
* sve: optimize add reduction patternsTamar Christina2021-10-142-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The following loop does a conditional reduction using an add: #include <stdint.h> int32_t f (int32_t *restrict array, int len, int min) { int32_t iSum = 0; for (int i=0; i<len; i++) { if (array[i] >= min) iSum += array[i]; } return iSum; } for this we currently generate: mov z1.b, #0 mov z2.s, w2 mov z3.d, z1.d ptrue p2.b, all ld1w z0.s, p0/z, [x0, x3, lsl 2] cmpge p1.s, p2/z, z0.s, z2.s add x3, x3, x4 sel z0.s, p1, z0.s, z3.s add z1.s, p0/m, z1.s, z0.s whilelo p0.s, w3, w1 where the SEL is unneeded as it's selecting between 0 or a value. This can be optimized to just doing the conditional add on p1 instead of p0. After this patch we generate: mov z2.s, w2 mov z0.b, #0 ptrue p1.b, all ld1w z1.s, p0/z, [x0, x3, lsl 2] cmpge p0.s, p0/z, z1.s, z2.s add x3, x3, x4 add z0.s, p0/m, z0.s, z1.s whilelo p0.s, w3, w1 and so we drop the SEL and the 0 move. gcc/ChangeLog: * match.pd: New rule. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/pred-cond-reduc.c: New test.
* Fix ICE in insert_access.Jan Hubicka2021-10-141-8/+8
| | | | | | | | | | gcc/ChangeLog: PR ipa/102557 * ipa-modref-tree.h (modref_access_node::update2): Also check that parm_offset is unchanged. (modref_ref_node::insert_access): Fix updating of parameter.
* Add FIXME note to backward threader.Aldy Hernandez2021-10-141-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | There's a limitation in the path discovery bits in the backward threader that I ran into recently and I'd like to document it so we don't lose track of it. Basically we stop looking if we find a threadable path through a PHI, without taking into account that there could be multiple paths through a PHI that resolve the path. For example: x_5 = PHI <10(4), 20(5), ...> if (x_5 > 5) I don't remember how we ended up skipping this, but it could existing behavior from the old bits. It probably skipped multiple threads through a PHI since the generic copier couldn't re-using existing threading paths anyhow. Documenting for later fixing. gcc/ChangeLog: * tree-ssa-threadbackward.c (back_threader::resolve_phi): Add FIXME note.
* Fix predcom-3.c on arc-elf after vectorizer changesJeff Law2021-10-141-1/+1
| | | | | gcc/testsuite * gcc.dg/tree-ssa/predcom-3.c: Disable vectorizer.
* tree-optimization/102659 - really avoid undef overflow in if-conversionRichard Biener2021-10-143-8/+33
| | | | | | | | | | | | | | | | | | | | | | | This plugs the remaining hole of POINTER_PLUS_EXPR with undefined overflow. Unfortunately we have to go through some lengths to not put invariant conversions into the loop body since that confuses the vectorizers gather/scatter discovery which relies on identifying an invariant component of plus and minus expressions. We can emit those in the loop preheader but then we have to accept that being non-empty when looking for the LOOP_VECTORIZED internal function call in the vectorizer. 2021-10-14 Richard Biener <rguenther@suse.de> PR tree-optimization/102659 * tree-if-conv.c (if_convertible_gimple_assign_stmt_p): Also rewrite pointer typed undefined overflow operations. (predicate_statements): Likewise. Make sure to emit invariant conversions in the preheader. * tree-vectorizer.c (vect_loop_vectorized_call): Look through non-empty preheaders. * tree-data-ref.c (dr_analyze_indices): Strip useless conversions to the MEM_REF base type.
* Eliminate AUTODETECT_VALUE usage in options.Martin Liska2021-10-143-41/+25
| | | | | | | | | | | | gcc/ChangeLog: * common.opt: Stop using AUTODETECT_VALUE and use EnabledBy where possible. * opts.c: Enable OPT_fvar_tracking with optimize >= 1. * toplev.c (AUTODETECT_VALUE): Remove macro. (process_options): Simplify by using EnabledBy and OPT_fvar_tracking. Use OPTION_SET_P macro instead of AUTODETECT_VALUE.
* aarch64: Fix pointer parameter type in LD1 Neon intrinsicsJonathan Wright2021-10-141-2/+2
| | | | | | | | | | | | | | The pointer parameter to load a vector of signed values should itself be a signed type. This patch fixes two instances of this unsigned- signed implicit conversion in arm_neon.h. gcc/ChangeLog: 2021-10-14 Jonathan Wright <jonathan.wright@arm.com> * config/aarch64/arm_neon.h (vld1_s8_x3): Use signed type for pointer parameter. (vld1_s32_x3): Likewise.
* Do not call range_on_path_entry for SSAs defined within the pathAldy Hernandez2021-10-142-1/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the path solver, when requesting the range of an SSA for which we know nothing, we ask the ranger for the range incoming to the path. We do this by asking for all the incoming ranges to the path entry block and unioning them. The problem here is that we're asking for a range on path entry for an SSA which *is* defined in the path, but for which we know nothing about: some_global.1_2 = some_global; _3 = (char) some_global.1_2; This request is causing us to ask for range_on_edge of _3 on the incoming edges to the path. This is a bit of nonsensical request because _3 isn't live on entry to the path, so ranger correctly returns UNDEFINED. The proper thing is to avoid asking this in the first place. I have added a relevant assert, since it doesn't make sense to call range_on_path_entry for SSAs defined within the path. Tested on x86-64 Linux. PR tree-optimization/102736 gcc/ChangeLog: PR tree-optimization/102736 * gimple-range-path.cc (path_range_query::range_on_path_entry): Assert that the requested range is defined outside the path. (path_range_query::ssa_range_in_phi): Do not call range_on_path_entry for SSA names that are defined within the path. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr102736.c: New test.
* Darwin: Update quotes in driver warning messages.Iain Sandoe2021-10-141-22/+30
| | | | | | | | | | | | | | | | This adds some missing quotes around options and option argument terms in warning messages. Avoid contractions in warning messages. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/ChangeLog: * config/darwin-driver.c (darwin_find_version_from_kernel): Quote internal identifiers and avoid contractions in warnings. (darwin_default_min_version): Likewise. (darwin_driver_init): Likewise.
* ipa-cp: Propagation boost for recursion generated valuesMartin Jambor2021-10-142-81/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Recursive call graph edges, even when they are hot and important for the compiled program, can never have frequency bigger than one, even when the actual time savings in the next recursion call are not realized just once but depend on the depth of recursion. The current IPA-CP effect propagation code did not take that into account and just used the frequency, thus severely underestimating the effect. This patch artificially boosts values taking part in such calls. If a value feeds into itself through a recursive call, the frequency of the edge is multiplied by a parameter with default value of 6, basically assuming that the recursion will take place 6 times. This value can of course be subject to change. Moreover, values which do not feed into themselves but which were generated for a self-recursive call with an arithmetic pass-function (aka the 548.exchange "hack" which however is generally applicable for recursive functions which count the recursion depth in a parameter) have the edge frequency multiplied as many times as there are generated values in the chain. In essence, we will assume they are all useful. This patch partially fixes the current situation when we fail to optimize 548.exchange with PGO. In the benchmark one recursive edge count overwhelmingly dominates all other counts in the program and so we fail to perform the first cloning (for the nonrecursive entry call) because it looks totally insignificant. gcc/ChangeLog: 2021-07-16 Martin Jambor <mjambor@suse.cz> * params.opt (ipa-cp-recursive-freq-factor): New. * ipa-cp.c (ipcp_value): Switch to inline initialization. New members scc_no, self_recursion_generated_level, same_scc and self_recursion_generated_p. (ipcp_lattice::add_value): Replaced parameter unlimited with same_lat_gen_level, usit it determine limit of values and store it to the value. (ipcp_lattice<valtype>::print): Dump the new fileds. (allocate_and_init_ipcp_value): Take same_lat_gen_level as a new parameter and store it to the new value. (self_recursively_generated_p): Removed. (propagate_vals_across_arith_jfunc): Use self_recursion_generated_p instead of self_recursively_generated_p, store self generation level to such values. (value_topo_info<valtype>::add_val): Set scc_no. (value_topo_info<valtype>::propagate_effects): Multiply frequencies of recursively feeding values and self generated values by appropriate new factors.
* aarch64: Remove redundant flag_vect_cost_model testRichard Sandiford2021-10-141-109/+105
| | | | | | | | | | | | The aarch64 version of add_stmt_cost has a redundant test of flag_vect_cost_model. The current structure was based on the contemporaneous definition of default_add_stmt_cost, but g:d6d1127249564146429009e0682f25bd58d7a791 later removed the flag_vect_cost_model test from the default version. gcc/ * config/aarch64/aarch64.c (aarch64_add_stmt_cost): Remove redundant test for flag_vect_cost_model.
* Add debug helpers for auto_bitmap.Aldy Hernandez2021-10-142-0/+15
| | | | | | | | | | | | Using debug() on an auto_bitmap from gdb doesn't work because the implicit conversion from auto_bitmap to bitmap_head doesn't work from within a debugging session. This patch adds the convenience functions for auto_bitmap. gcc/ChangeLog: * bitmap.c (debug): New overloaded function for auto_bitmaps. * bitmap.h (debug): Same.
* libstdc++: Fix test for feature test macroJonathan Wakely2021-10-141-1/+1
| | | | | | | libstdc++-v3/ChangeLog: * testsuite/20_util/is_layout_compatible/version.cc: Check correct macro.
* libstdc++: Add missing constexpr to std::optional (P2231R1)Jonathan Wakely2021-10-149-18/+225
| | | | | | | | | | | | | | | | | | | | | This implements the changes in P2231R1 which make std::optional fully constexpr in C++20. libstdc++-v3/ChangeLog: * include/bits/stl_construct.h (_Construct): Use std::construct_at when constant evaluated. * include/std/optional (_Storage, _Optional_payload, optional): Add constexpr as specified by P2231R1. * include/std/version (__cpp_lib_optional): Update value for C++20. * testsuite/20_util/optional/requirements.cc: Check feature test macro. * testsuite/20_util/optional/constexpr/assign.cc: New test. * testsuite/20_util/optional/constexpr/cons/conv.cc: New test. * testsuite/20_util/optional/constexpr/modifiers.cc: New test. * testsuite/20_util/optional/constexpr/swap.cc: New test. * testsuite/20_util/optional/version.cc: New test.
* [Ada] reenable ada83 library unit renaming errorAlexandre Oliva2021-10-141-4/+5
| | | | | | | for gcc/ada/ChangeLog * par-ch10.adb (P_Compilation_Unit): Reenable ada83 library unit renaming test and error.
* AVX512FP16: Adjust builtin for mask complex fmaHongyu Wang2021-10-1413-216/+375
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current mask/mask3 implementation for complex fma contains duplicated parameter in macro, which may cause error at -O0. Refactor macro implementation to builtins to avoid potential error. For round intrinsic with NO_ROUND as input, ix86_erase_embedded_rounding erases embedded_rounding upspec but could break other emit_insn in expanders. Skip those expanders with multiple emit_insn for this function and check rounding in expander with subst. gcc/ChangeLog: * config/i386/avx512fp16intrin.h (_mm512_mask_fcmadd_pch): Adjust builtin call. (_mm512_mask3_fcmadd_pch): Likewise. (_mm512_mask_fmadd_pch): Likewise (_mm512_mask3_fmadd_pch): Likewise (_mm512_mask_fcmadd_round_pch): Likewise (_mm512_mask3_fcmadd_round_pch): Likewise (_mm512_mask_fmadd_round_pch): Likewise (_mm512_mask3_fmadd_round_pch): Likewise (_mm_mask_fcmadd_sch): Likewise (_mm_mask3_fcmadd_sch): Likewise (_mm_mask_fmadd_sch): Likewise (_mm_mask3_fmadd_sch): Likewise (_mm_mask_fcmadd_round_sch): Likewise (_mm_mask3_fcmadd_round_sch): Likewise (_mm_mask_fmadd_round_sch): Likewise (_mm_mask3_fmadd_round_sch): Likewise (_mm_fcmadd_round_sch): Likewise * config/i386/avx512fp16vlintrin.h (_mm_mask_fmadd_pch): Adjust builtin call. (_mm_mask3_fmadd_pch): Likewise (_mm256_mask_fmadd_pch): Likewise (_mm256_mask3_fmadd_pch): Likewise (_mm_mask_fcmadd_pch): Likewise (_mm_mask3_fcmadd_pch): Likewise (_mm256_mask_fcmadd_pch): Likewise (_mm256_mask3_fcmadd_pch): Likewise * config/i386/i386-builtin.def: Add mask3 builtin for complex fma, and adjust mask_builtin to corresponding expander. * config/i386/i386-expand.c (ix86_expand_round_builtin): Skip eraseing embedded rounding for expanders that emits multiple insns. * config/i386/sse.md (complexmove): New mode_attr. (<avx512>_fmaddc_<mode>_mask1<round_expand_name>): New expander. (<avx512>_fcmaddc_<mode>_mask1<round_expand_name>): Likewise. (avx512fp16_fmaddcsh_v8hf_mask1<round_expand_name>): Likewise. (avx512fp16_fcmaddcsh_v8hf_mask1<round_expand_name>): Likewise. (avx512fp16_fcmaddcsh_v8hf_mask3<round_expand_name>): Likewise. (avx512fp16_fmaddcsh_v8hf_mask3<round_expand_name>): Likewise. * config/i386/subst.md (round_embedded_complex): New subst. gcc/testsuite/ChangeLog: * gcc.target/i386/avx-1.c: Add new mask3 builtins. * gcc.target/i386/sse-13.c: Ditto. * gcc.target/i386/sse-23.c: Ditto. * gcc.target/i386/avx512fp16-vfcmaddcsh-1a.c: Add scanning for mask/mask3 intrinsic. * gcc.target/i386/avx512fp16-vfmaddcsh-1a.c: Ditto. * gcc.target/i386/avx512fp16-vfcmaddcsh-1c.c: New test for -mavx512vl. * gcc.target/i386/avx512fp16-vfmaddcsh-1c.c: Ditto.
* Adjust testcase for O2 vectorization[Wuninitialized]liuhongt2021-10-141-2/+5
| | | | | | | | | | | | | | | It looks like it's just the the location of the warning that's off, the warning itself is still issued but it's swallowed by the dg-prune-output directive. Since the test was added to verify the fix for an ICE without vectorization I think disabling vectorization should be fine. Ideally, we would understand why the location is wrong so let's keep this bug open and add a comment to the test referencing this bug. gcc/testsuite/ChangeLog: * g++.dg/warn/Wuninitialized-13.C: Add -fno-tree-vectorize.
* Fix TARGET_SOFT_FLOAT patterns in pa.mdJohn David Anglin2021-10-141-2/+83
| | | | | | | | | | 2021-10-13 John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog: * config/pa/pa.md (cbranchsf4): Disable if TARGET_SOFT_FLOAT. (cbranchdf4): Likewise. Add missing move patterns for TARGET_SOFT_FLOAT.
* Daily bump.GCC Administrator2021-10-146-1/+187
|
* libstdc++: Fix regression in memory use when constructing pathsJonathan Wakely2021-10-131-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | The changes in r12-4381 were intended to reduce memory usage, but replacing the __contiguous constant in __string_from_range with the new __is_contiguous variable template caused a regression. The old code checked is_pointer_v<decltype(std::__niter_base(__first))> but he new code just checks is_pointer_v<_InputIterator>. This means that we no longer recognise basic_string::iterator and vector::iterator as contiguous, and so return a temporary basic_string instead of a basic_string_view. This only affects C++17 mode, because the std::contiguous_iterator concept is used in C++20 which gives the right answer for __normal_iterator (and more types as well). The fix is to specialize the new __is_contiguous variable template so it is true for __normal_iterator<T*, C> specializations. The new partial specializations are defined for C++20 too, because it should be cheaper to match the partial specialization than to check whether the std::contiguous_iterator concept is satisfied. libstdc++-v3/ChangeLog: * include/bits/fs_path.h (__detail::__is_contiguous): Add partial specializations for pointers and __normal_iterator.
* libstdc++: Rename files with the wrong extensionsJonathan Wakely2021-10-132-0/+0
| | | | | | | | | libstdc++-v3/ChangeLog: * testsuite/27_io/filesystem/path/construct/102592.C: Moved to... * testsuite/27_io/filesystem/path/construct/102592.cc: ...here. * testsuite/28_regex/match_results/102667.C: Moved to... * testsuite/28_regex/match_results/102667.cc: ...here.
* libstdc++: Refactor filesystem::path encoding conversionsJonathan Wakely2021-10-131-45/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adjust the __detail::__effective_range overloads so they always return a string or string view using std::char_traits, because we don't care about the traits of an incoming string. Use std::contiguous_iterator in the __effective_range(const Source&) overload, to allow returning a basic_string_view in more cases. For the non-contiguous casecl in both __effective_range and __string_from_range, return a std::string instead of std::u8string when the value type of the range is char8_t. These changes avoid unnecessary basic_string temporaries. Also simplify __string_from_range(Iter, Iter) to not need std::__to_address for the contiguous case. Combine the _S_convert(string_type) and _S_convert(const T&) overloads into a single _S_convert(T) function which also avoids the dangling view problem of PR 102592 (should that recur somehow). libstdc++-v3/ChangeLog: * include/bits/fs_path.h (__detail::__is_contiguous): New variable template to identify contiguous iterators. (__detail::__unified_char8_t): New alias template to decide when to treat char8_t as char without encoding conversion. (__detail::__effective_range(const basic_string<C,T>&)): Use std::char_traits<C> for returned string view. (__detail::__effective_range(const basic_string_view<C,T>&)): Likewise. (__detail::__effective_range(const Source&)): Use __is_contiguous to detect mode cases of contiguous iterators. Use __unified_char8_t to return a std::string instead of std::u8string.
* libstdc++: Fix dangling string_view in filesystem::path [PR102592]Jonathan Wakely2021-10-132-8/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When creating a path from a pair of non-contiguous iterators we pass the iterators to _S_convert(Iter, Iter). That function passes the iterators to __string_from_range to get a contiguous sequence of characters, and then calls _S_convert(const C*, const C*) to perform the encoding conversions. If the value type, C, is char8_t, then no conversion is needed and the _S_convert<char8_t>(const char8_t*, const char8_t*) specialization casts the pointer to const char* and returns a std::string_view that refs to the char8_t sequence. However, that sequence is owned by the std::u8string rvalue returned by __string_from_range, which goes out of scope when _S_convert(Iter, Iter) returns. That means the std::string_view is dangling and we get undefined behaviour when parsing it as a path. The same problem does not exist for the path members taking a "Source" argument, because those functions all convert a non-contiguous range into a basic_string<C> immediately, using __effective_range(__source). That means that the rvalue string returned by that function is still in scope for the full expression, so the string_view does not dangle. The solution for the buggy functions is to do the same thing, and call __string_from_range immediately, so that the returned rvalue is still in scope for the lifetime of the string_view returned by _S_convert. To avoid reintroducing the same problem, remove the _S_convert(Iter, Iter) overload that calls __string_from_range and returns a dangling view. libstdc++-v3/ChangeLog: PR libstdc++/102592 * include/bits/fs_path.h (path::path(Iter, Iter, format)) (path::append(Iter, Iter), path::concat(Iter, Iter)): Call __string_from_range directly, instead of two-argument overload of _S_convert. (path::_S_convert(Iter, Iter)): Remove. * testsuite/27_io/filesystem/path/construct/102592.C: New test.
* x86_64: Some SUBREG related optimization tweaks to i386 backend.Roger Sayle2021-10-132-3/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch contains two SUBREG-related optimization enabling tweaks to the x86 backend. The first change, to ix86_expand_vector_extract, cures the strange -march=cascadelake related non-determinism that affected my new test cases last week. Extracting a QImode or HImode element from an SSE vector performs a zero-extension to SImode, which is currently represented as: (set (subreg:SI (reg:QI target)) (zero_extend:SI (...)) Unfortunately, the semantics of this RTL doesn't quite match what was intended. A set of a paradoxical subreg allows the high-bits to take an arbitrary value (hence the non-determinism). A more correct representation should be: (set (reg:SI temp) (zero_extend:SI (...)) (set (reg:QI target) (subreg:QI (reg:SI temp)) Optionally with the SUBREG rtx annotated as SUBREG_PROMOTED_VAR_P to indicate that value is already zero-extended in the SUBREG_REG. The second change is very similar, which is why I've included it in this patch, where currently the early RTL optimizers can produce: (set (reg:V?? hardreg) (subreg ...)) where this instruction may require a spill/reload from memory when the modes aren't tieable. Alas the presence of the hard register prevents combine/gcse etc. optimizing this away, or reusing the result which would increase the lifetime of the hard register before reload. The solution is to treat vector hard registers the same way as the x86 backend handles scalar hard registers, and only allow sets from pseudos before register allocation, which is achieved by checking ix86_hardreg_mov_ok. Hence the above instruction is expanded and maintained as: (set (reg:V?? pseudo) (subreg ...)) (set (reg:V?? hardreg) (reg:V?? pseudo)) which allows the RTL optimizers freedom to optimize the SUBREG. 2021-10-13 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/i386/i386-expand.c (ix86_expand_vector_move): Use a pseudo intermediate when moving a SUBREG into a hard register, by checking ix86_hardreg_mov_ok. (ix86_expand_vector_extract): Store zero-extended SImode intermediate in a pseudo, then set target using a SUBREG_PROMOTED annotated subreg. * config/i386/sse.md (mov<VMOVE>_internal): Prevent CSE creating complex (SUBREG) sets of (vector) hard registers before reload, by checking ix86_hardreg_mov_ok.
* ctfc: remove redundant comma in enumerator listIndu Bhagat2021-10-131-1/+1
| | | | | | | | | | | This also helps get rid of warning ctfc.h:215:18: warning: comma at end of enumerator list [-Wpedantic] CTF_DTU_D_SLICE, gcc/ChangeLog: * ctfc.h (enum ctf_dtu_d_union_enum): Remove redundant comma.
* dwarf2ctf: fix typo in commentIndu Bhagat2021-10-131-1/+1
| | | | | | gcc/ChangeLog: * dwarf2ctf.c (gen_ctf_array_type): Fix typo in comment.
* Check to see if null pointer is dereferenceable [PR102630].Martin Sebor2021-10-133-4/+34
| | | | | | | | | | | | | | | | Resolves: PR middle-end/102630 - Spurious -Warray-bounds with named address space gcc/ChangeLog: PR middle-end/102630 * pointer-query.cc (compute_objsize_r): Handle named address spaces. gcc/testsuite/ChangeLog: PR middle-end/102630 * gcc.target/i386/addr-space-2.c: Add -Wall. * gcc.target/i386/addr-space-3.c: New test.
* collect2: Fix missing cleanups.Iain Sandoe2021-10-131-1/+6
| | | | | | | | | | | | The code that checks to see if objects have LTO content via simple-object was not releasing resources, fixed thus. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/ChangeLog: * collect2.c (is_lto_object_file): Release simple-object resources, close files.
* [arm] Fix MVE addressing modes for VLDR[BHW] and VSTR[BHW]Andre Vieira2021-10-135-42/+767
| | | | | | | | | | | | | | | | | | | | | | | | | | The way we were previously dealing with addressing modes for MVE was preventing the use of pre, post and offset addressing modes for the normal loads and stores, including widening and narrowing. This patch fixes that and adds tests to ensure we are capable of using all the available addressing modes. gcc/ChangeLog: 2021-10-12 Andre Vieira <andre.simoesdiasvieira@arm.com> * config/arm/arm.c (thumb2_legitimate_address_p): Use VALID_MVE_MODE when checking mve addressing modes. (mve_vector_mem_operand): Fix the way we handle pre, post and offset addressing modes. (arm_print_operand): Fix printing of POST_ and PRE_MODIFY. * config/arm/mve.md: Use mve_memory_operand predicate everywhere where there is a single Ux constraint. gcc/testsuite/ChangeLog: 2021-10-12 Andre Vieira <andre.simoesdiasvieira@arm.com> * gcc.target/arm/mve/mve.exp: Make it test main directory. * gcc.target/arm/mve/mve_load_memory_modes.c: New test. * gcc.target/arm/mve/mve_store_memory_modes.c: New test.
* Add support for 32-bit hppa targets in muldi3 expanderJohn David Anglin2021-10-131-26/+54
| | | | | | | | | 2021-10-13 John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog: * config/pa/pa.md (muldi3): Add support for inlining 64-bit multiplication on 32-bit PA 1.1 and 2.0 targets.
* gcov: make profile merging smarterMartin Liska2021-10-137-22/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | Support merging of profiles that are built from a different .o files but belong to the same source file. Moreover, a checksum is verified during profile merging and so we can safely combine such profile. PR gcov-profile/90364 gcc/ChangeLog: * coverage.c (build_info): Emit checksum to the global variable. (build_info_type): Add new field for checksum. (coverage_obj_finish): Pass object_checksum. (coverage_init): Use 0 as checksum for .gcno files. * gcov-dump.c (dump_gcov_file): Dump also new checksum field. * gcov.c (read_graph_file): Read also checksum. * doc/invoke.texi: Document the behaviour change. libgcc/ChangeLog: * libgcov-driver.c (merge_one_data): Skip timestamp and verify checksums. (write_one_data): Write also checksum. * libgcov-util.c (read_gcda_file): Read also checksum field. * libgcov.h (struct gcov_info): Add new field.
* Add GSI_LAST_NEW_STMT iterator updateRichard Biener2021-10-134-9/+9
| | | | | | | | | | | | | | | | | | | | | Currently when adding a sequence before there's no way to get the iterator placed at the last added stmt which results in convoluted code in the if-conversion usecase. The following adds GSI_LAST_NEW_STMT and corrects one obvious mistake in execute_update_addresses_taken as well as tries to avoid the just filed PR102726 by biasing the enum values to be outside of the boolean 0/1 range. 2021-10-13 Richard Biener <rguenther@suse.de> * gimple-iterator.h (gsi_iterator_update): Add GSI_LAST_NEW_STMT, start at integer value 2. * gimple-iterator.c (gsi_insert_seq_nodes_before): Update the iterator for GSI_LAST_NEW_STMT. (gsi_insert_seq_nodes_after): Likewise. * tree-if-conv.c (predicate_statements): Use GSI_LAST_NEW_STMT. * tree-ssa.c (execute_update_addresses_taken): Correct bogus arguments to gsi_replace.
* Fix handling of flag_rename_registers by a target.Martin Liska2021-10-133-15/+3
| | | | | | | | | | | | | PR target/102688 gcc/ChangeLog: * common.opt: Use EnabledBy instead of detection in finish_options and process_options. * opts.c (finish_options): Remove handling of x_flag_unroll_all_loops. * toplev.c (process_options): Likewise for flag_web and flag_rename_registers.
* tree-optimization/102659 - avoid undefined overflow after if-conversionRichard Biener2021-10-133-4/+29
| | | | | | | | | | | | | | | | | | | | | | The following makes sure to rewrite arithmetic with undefined behavior on overflow to a well-defined variant when moving them to be always executed as part of doing if-conversion for loop vectorization. 2021-10-11 Richard Biener <rguenther@suse.de> PR tree-optimization/102659 * tree-if-conv.c (need_to_rewrite_undefined): New flag. (if_convertible_gimple_assign_stmt_p): Mark the loop for rewrite when stmts with undefined behavior on integer overflow appear. (combine_blocks): Predicate also when we need to rewrite stmts. (predicate_statements): Rewrite affected stmts to something with well-defined behavior on overflow. (tree_if_conversion): Initialize need_to_rewrite_undefined. * gcc.dg/torture/pr69760.c: Adjust the testcase. * gcc.target/i386/avx2-vect-mask-store-move1.c: Expect to move the conversions to unsigned as well.
* Fortran: dump-parse-tree.c fixes for OpenMPTobias Burnus2021-10-132-3/+4
| | | | | | | | gcc/fortran/ChangeLog: * dump-parse-tree.c (show_omp_clauses): Handle ancestor modifier, avoid ICE for GFC_OMP_ATOMIC_SWAP. * gfortran.h (gfc_omp_clauses): Change 'anecestor' into a bitfield.
* libstdc++: Ensure language linkage of std::__terminate()Jonathan Wakely2021-10-131-1/+1
| | | | | | | | | | | | This is needed because people still find it necessary to do: extern "C" { #include <stdlib.h> } libstdc++-v3/ChangeLog: * include/bits/c++config (__terminate): Add extern "C++".