aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2025-07-24Remove vec_stmt from vectorizable_* APIRichard Biener4-137/+107
The following removes the non-SLP gimple **vec_stmt argument from the vectorizable_* functions API. Checks on it can be replaced by an inverted check on the passed cost_vec vector pointer. * tree-vectorizer.h (vectorizable_induction): Remove gimple **vec_stmt argument. (vectorizable_phi): Likewise. (vectorizable_recurr): Likewise. (vectorizable_early_exit): Likewise. * tree-vect-loop.cc (vectorizable_phi): Likewise and adjust. (vectorizable_recurr): Likewise. (vectorizable_nonlinear_induction): Likewise. (vectorizable_induction): Likewise. * tree-vect-stmts.cc (vectorizable_bswap): Likewise. (vectorizable_call): Likewise. (vectorizable_simd_clone_call): Likewise. (vectorizable_conversion): Likewise. (vectorizable_assignment): Likewise. (vectorizable_shift): Likewise. (vectorizable_operation): Likewise. (vectorizable_store): Likewise. (vectorizable_load): Likewise. (vectorizable_condition): Likewise. (vectorizable_comparison_1): Likewise. (vectorizable_comparison): Likewise. (vectorizable_early_exit): Likewise. (vect_analyze_stmt): Adjust. (vect_transform_stmt): Likewise. * tree-vect-slp.cc (vect_slp_analyze_operations): Adjust. (vectorize_slp_instance_root_stmt): Likewise.
2025-07-24Fix minor typo in #ifdef docuementationAndrew Pinski1-1/+1
As reported in https://gcc.gnu.org/pipermail/gcc/2025-July/246417.html, This fixes the minor typo under the #ifdef documentation about adding MACRO after the #endif and the MACRO matching of the #ifdef. It had `#ifndef` in it, rather than `#ifdef`. Pushed as obvious. gcc/ChangeLog: * doc/cpp.texi (#ifdef): Correct typo. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-07-24Remove non-SLP path from vectorizable_early_exitRichard Biener1-76/+11
This removes the non-SLP path from vectorizable_early_exit. * tree-vect-stmts.cc (vectorizable_early_exit): Remove non-SLP path.
2025-07-24Remove non-SLP path from vectorizable_simd_clone_callRichard Biener3-98/+28
This removes the non-SLP path from vectorizable_simd_clone_call and the then unused simd_clone_info from the stmt_vec_info structure. * tree-vectorizer.h (_stmt_vec_info::simd_clone_info): Remove. (STMT_VINFO_SIMD_CLONE_INFO): Likewise. * tree-vectorizer.cc (vec_info::free_stmt_vec_info): Do not release it. * tree-vect-stmts.cc (vectorizable_simd_clone_call): Remove non-SLP path.
2025-07-24libstdc++: Cleaned up string_vector_iterators.cc test [PR104874]Tomasz Kamiński1-379/+146
Removed the wrong_stuff() function, which was effectively empty for actual test runs. Replaced the manual failure counter with the VERIFY macro to simplify identifying failures. PR libstdc++/104874 libstdc++-v3/ChangeLog: * testsuite/24_iterators/random_access/string_vector_iterators.cc: Reworked. Reviewed-by: Patrick Palka <ppalka@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-07-24riscv: testsuite: Fix misalignment check.Robin Dapp1-1/+1
This fixes a thinko in the misalignment check. If we want to check for vector misalignment support we need to load 16-byte elements, not 8-byte elements that will never be misaligned. gcc/testsuite/ChangeLog: * lib/target-supports.exp: Fix misalignment check.
2025-07-24vect: Misalign checks for gather/scatter.Robin Dapp8-124/+206
This patch adds simple misalignment checks for gather/scatter operations. Previously, we assumed that those perform element accesses internally so alignment does not matter. The riscv vector spec however explicitly states that vector operations are allowed to fault on element-misaligned accesses. Reasonable uarchs won't, but... For gather/scatter we have two paths in the vectorizer: (1) Regular analysis based on datarefs. Here we can also create strided loads. (2) Non-affine access where each gather index is relative to the initial address. The assumption this patch works on is that once the alignment for the first scalar is correct, all others will fall in line, as the index is always a multiple of the first element's size. For (1) we have a dataref and can check it for alignment as in other cases. For (2) this patch checks the object alignment of BASE and compares it against the natural alignment of the current vectype's unit. The patch also adds a pointer argument to the gather/scatter IFNs that contains the necessary alignment. Most of the patch is thus mechanical in that it merely adjusts indices. I tested the riscv version with a custom qemu version that faults on element-misaligned vector accesses. With this patch applied, there is just a single fault left, which is due to PR120782 and which will be addressed separately. Bootstrapped and regtested on x86 and aarch64. Regtested on rv64gcv_zvl512b with and without unaligned vector support. gcc/ChangeLog: * internal-fn.cc (internal_fn_len_index): Adjust indices for new alias_ptr param. (internal_fn_else_index): Ditto. (internal_fn_mask_index): Ditto. (internal_fn_stored_value_index): Ditto. (internal_fn_alias_ptr_index): Ditto. (internal_fn_offset_index): Ditto. (internal_fn_scale_index): Ditto. (internal_gather_scatter_fn_supported_p): Ditto. * internal-fn.h (internal_fn_alias_ptr_index): Ditto. * optabs-query.cc (supports_vec_gather_load_p): Ditto. * tree-vect-data-refs.cc (vect_check_gather_scatter): Add alias pointer. * tree-vect-patterns.cc (vect_recog_gather_scatter_pattern): Add alias pointer. * tree-vect-slp.cc (vect_get_operand_map): Adjust for alias pointer. * tree-vect-stmts.cc (vect_truncate_gather_scatter_offset): Add alias pointer and misalignment handling. (get_load_store_type): Move from here... (get_group_load_store_type): ...To here. (vectorizable_store): Add alias pointer. (vectorizable_load): Ditto. * tree-vectorizer.h (struct gather_scatter_info): Ditto.
2025-07-24vect: Add is_gather_scatter argument to misalignment hook.Robin Dapp13-30/+90
This patch adds an is_gather_scatter argument to the support_vector_misalignment hook. All targets but riscv do not care about alignment for gather/scatter so return true for is_gather_scatter. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_builtin_support_vector_misalignment): Return true for gather/scatter. * config/arm/arm.cc (arm_builtin_support_vector_misalignment): Ditto. * config/epiphany/epiphany.cc (epiphany_support_vector_misalignment): Ditto. * config/gcn/gcn.cc (gcn_vectorize_support_vector_misalignment): Ditto. * config/loongarch/loongarch.cc (loongarch_builtin_support_vector_misalignment): Ditto. * config/riscv/riscv.cc (riscv_support_vector_misalignment): Add gather/scatter argument. * config/rs6000/rs6000.cc (rs6000_builtin_support_vector_misalignment): Return true for gather/scatter. * config/s390/s390.cc (s390_support_vector_misalignment): Ditto. * doc/tm.texi: Add argument. * target.def: Ditto. * targhooks.cc (default_builtin_support_vector_misalignment): Ditto. * targhooks.h (default_builtin_support_vector_misalignment): Ditto. * tree-vect-data-refs.cc (vect_supportable_dr_alignment): Ditto.
2025-07-24vect: Add helper macros for gather/scatter.Robin Dapp3-15/+24
This encapsulates the IFN and the builtin-function way of handling gather/scatter via three defines: GATHER_SCATTER_IFN_P GATHER_SCATTER_LEGACY_P GATHER_SCATTER_EMULATED_P and introduces a helper define for SLP operand handling as well. gcc/ChangeLog: * tree-vect-slp.cc (GATHER_SCATTER_OFFSET): New define. (vect_get_and_check_slp_defs): Use. * tree-vectorizer.h (GATHER_SCATTER_LEGACY_P): New define. (GATHER_SCATTER_IFN_P): Ditto. (GATHER_SCATTER_EMULATED_P): Ditto. * tree-vect-stmts.cc (vectorizable_store): Use. (vectorizable_load): Use.
2025-07-24ifn: Add helper functions for gather/scatter.Robin Dapp3-7/+58
This patch adds access helpers for the gather/scatter offset and scale parameters. gcc/ChangeLog: * internal-fn.cc (expand_scatter_store_optab_fn): Use new function. (expand_gather_load_optab_fn): Ditto. (internal_fn_offset_index): Ditto. (internal_fn_scale_index): Ditto. * internal-fn.h (internal_fn_offset_index): New function. (internal_fn_scale_index): Ditto. * tree-vect-data-refs.cc (vect_describe_gather_scatter_call): Use new function.
2025-07-24vect: remove cast to pointer for create_if in vect_create_data_ref_ptrAlfie Richards1-3/+2
Removes `fold_convert (aggr_ptr_type, iv_step)` when using create_iv. This was previously constructing statements like: ``` unsigned int _49; vector([4,4]) int * _50; sizetype _51; vector([4,4]) int * vectp_x.6; ... _50 = (vector([4,4]) int *) _49; _51 = (sizetype) _50; ... vectp_x.6_48 = vectp_x.6_47 + _51; ``` And instead creates: ``` unsigned int _49; sizetype _50; vector([4,4]) int * vectp_x.6; ... _50 = (sizetype) _49; ... vectp_x.6_48 = vectp_x.6_47 + _50; ``` As create_iv already has the logic to handle a pointer mode base and an integer mode var this seems a more natural expression of this. gcc/ChangeLog: * tree-vect-data-refs.cc (vect_create_data_ref_ptr): Remove unnecessary casts to aggr_ptr_type.
2025-07-24libstdc++: Expand compile-time ranges tests for vector and basic_string.Tomasz Kamiński14-238/+111
This replaces most test_constexpr invocations with direct calls to test_ranges(), which is also used for runtime tests. SimpleAllocator was made constexpr to simplify this refactoring. Other test allocators, like uneq_allocator (used in from_range constructor tests), were not updated. libstdc++-v3/ChangeLog: * testsuite/21_strings/basic_string/cons/from_range.cc: Replace test_constexpr with test_ranges inside static_assert. * testsuite/21_strings/basic_string/modifiers/append/append_range.cc: Likewise. * testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc: Likewise. * testsuite/21_strings/basic_string/modifiers/insert/insert_range.cc: Likewise. * testsuite/21_strings/basic_string/modifiers/replace/replace_with_range.cc: Likewise. * testsuite/23_containers/vector/bool/cons/from_range.cc: Likewise. * testsuite/23_containers/vector/bool/modifiers/assign/assign_range.cc: Likewise. * testsuite/23_containers/vector/bool/modifiers/insert/insert_range.cc: Likewise. * testsuite/23_containers/vector/cons/from_range.cc: Likewise. * testsuite/23_containers/vector/modifiers/assign/assign_range.cc: Likewise. * testsuite/23_containers/vector/modifiers/insert/insert_range.cc: Likewise. * testsuite/23_containers/vector/bool/modifiers/insert/append_range.cc: Run full test_ranges instead of span-only in test_constexpr. * testsuite/23_containers/vector/modifiers/append_range.cc: Replace test_constexpr with calls to test_ranges and test_overlapping. * testsuite/util/testsuite_allocator.h (__gnu_test::SimpleAllocator): Declared member functions as constexpr.
2025-07-24Remove non-SLP path from vectorizable_comparisonRichard Biener1-22/+6
This removes the non-SLP path from vectorizable_comparison. * tree-vect-stmts.cc (vectorizable_comparison_1): Remove non-SLP path. (vectorizable_comparison): Likewise.
2025-07-24Remove non-SLP path from vectorizable_conditionRichard Biener1-44/+21
The following removes the non-SLP paths from vectorizable_condition. * tree-vect-stmts.cc (vectorizable_condition): Remove non-SLP paths.
2025-07-24Remove non-SLP path from vectorizable_scan_storeRichard Biener1-32/+6
This removes the non-SLP paths from vectorizable_scan_store. * tree-vect-stmts.cc (vectorizable_scan_store): Remove non-SLP path and unused parameters. (vectorizable_store): Adjust.
2025-07-24Remove non-SLP path from vectorizable_shiftRichard Biener1-79/+44
This removes the non-SLP paths from vectorizable_shift. * tree-vect-stmts.cc (vectorizable_shift): Remove non-SLP paths.
2025-07-24Remove non-SLP path from vectorizable_assignmentRichard Biener1-23/+5
This removes the non-SLP paths from vectorizable_assignment * tree-vect-stmts.cc (vectorizable_assignment): Remove non-SLP paths.
2025-07-24Remove non-SLP path from vectorizable_callRichard Biener1-310/+131
This removes the non-SLP paths from vectorizable_call, propagates out ncopies == 1 and removes empty loops resulting from that. * tree-vect-stmts.cc (vectorizable_call): Remove non-SLP path.
2025-07-24Remove non-SLP path from vectorizable_bswapRichard Biener1-26/+5
* tree-vect-stmts.cc (vectorizable_bswap): Remove non-SLP path.
2025-07-24Remove non-SLP path from vectorizable_recurrRichard Biener1-49/+19
This removes the non-SLP paths from vectorizable_recurr. * tree-vect-loop.cc (vectorizable_recurr): Remove non-SLP path.
2025-07-24aarch64: Relaxed SEL combiner patterns for unpacked SVE FP binary arithmeticSpencer Abson10-49/+518
Extend the binary op/UNSPEC_SEL combiner patterns from SVE_FULL_F/ SVE_FULL_F_B16B16 to SVE_F/SVE_F_B16B16, where the strictness value is SVE_RELAXED_GP. gcc/ChangeLog: * config/aarch64/aarch64-sve.md (*cond_<optab><mode>_2_relaxed): Extend from SVE_FULL_F_B16B16 to SVE_F_B16B16. (*cond_<optab><mode>_3_relaxed): Likewise. (*cond_<optab><mode>_any_relaxed): Likwise. (*cond_<optab><mode>_any_const_relaxed): Extend from SVE_FULL_F to SVE_F. (*cond_add<mode>_2_const_relaxed): Likewise. (*cond_add<mode>_any_const_relaxed): Likewise. (*cond_sub<mode>_3_const_relaxed): Likewise. (*cond_sub<mode>_const_relaxed): Likewise. gcc/testsuite/ChangeLog: * g++.target/aarch64/sve/unpacked_cond_binary_bf16_1.C: New test. * gcc.target/aarch64/sve/unpacked_cond_builtin_fmax_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_builtin_fmin_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_fadd_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_fdiv_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_fmaxnm_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_fminnm_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_fmul_1.c: Likewise.. * gcc.target/aarch64/sve/unpacked_cond_fsubr_1.c: Likewise.
2025-07-24aarch64: Add support for unpacked SVE FDIVSpencer Abson5-25/+99
This patch extends the unpredicated FP division expander to support partial FP modes. It extends the existing patterns used to implement UNSPEC_COND_FDIV and it's approximation as needed. gcc/ChangeLog: * config/aarch64/aarch64-sve.md: (@aarch64_sve_<optab><mode>): Extend from SVE_FULL_F to SVE_F, use aarch64_predicate_operand. (@aarch64_frecpe<mode>): Extend from SVE_FULL_F to SVE_F. (@aarch64_frecps<mode>): Likewise. (div<mode>3): Likewise, use aarch64_sve_fp_pred. * config/aarch64/iterators.md: Add warnings above SVE_FP_UNARY and SVE_FP_BINARY. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/unpacked_fdiv_1.c: New test. * gcc.target/aarch64/sve/unpacked_fdiv_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_fdiv_3.c: Likewise.
2025-07-24aarch64: Add support for unpacked SVE FP binary arithmeticSpencer Abson18-44/+556
This patch extends the expanders for unpredicated smax, smin, add, sub, mul, min, and max, so that they support partial SVE FP modes. The relevant insn and splitting patterns are also updated. gcc/ChangeLog: * config/aarch64/aarch64-sve.md (<optab><mode>3): Extend from SVE_FULL_F to SVE_F, use aarch64_sve_fp_pred. (*post_ra_<sve_fp_op><mode>3): Extend from SVE_FULL_F to SVE_F. (@aarch64_pred_<optab><mode>): Extend from SVE_FULL_F to SVE_F, use aarch64_predicate_operand (ADD/SUB/MUL/MAX/MIN). (split for using unpredicated insns): Move SVE_RELAXED_GP into the pattern, rather than testing for it in the condition. * config/aarch64/aarch64-sve2.md (@aarch64_pred_<optab><mode>): Extend from VNx8BF_ONLY to SVE_BF. gcc/testsuite/ChangeLog: * g++.target/aarch64/sve/unpacked_binary_bf16_1.C: New test. * g++.target/aarch64/sve/unpacked_binary_bf16_2.C: Likewise. * gcc.target/aarch64/sve/unpacked_builtin_fmax_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_builtin_fmax_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_builtin_fmin_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_builtin_fmin_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_fadd_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_fadd_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_fmaxnm_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_fmaxnm_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_fminnm_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_fminnm_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_fmul_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_fmul_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_fsubr_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_fsubr_2.c: Likewise.
2025-07-24ada: Use-before-definition of a component of discriminated aggregate's itype.Steve Baird1-0/+2
In some cases involving assigning an aggregate to a formal parameter of an unconstrained discriminated subtype that has a Dynamic_Predicate, and where the discriminated type also has a component of an unconstrained discriminated subtype, the front end generates a malformed tree which causes a compilation failure when the backend fails a consistency check. gcc/ada/ChangeLog: * exp_aggr.adb (Convert_To_Assignments): Add calls to Ensure_Defined before generating assignments to components that could be associated with a not-yet-defined itype.
2025-07-24ada: Function return accessibility checking for result access discrims.Steve Baird4-7/+280
RM 6.5 defines static and dynamic checks to ensure that a function result with one or more access discriminants will not outlive the entity designated by a non-null access discriminant value (see paragraphs 5.9 and 21). Implement these checks. Also fix a bug in passing along an implicit parameter needed to perform the dynamic checks when a function that takes such a parameter returns a call to another such function. gcc/ada/ChangeLog: * accessibility.adb (Function_Call_Or_Allocator_Level): Handle the case where a function that has an Extra_Accessibility_Of_Result parameter returns as its result a call to another such function. In that case, the extra parameter should be passed along. (Check_Return_Construct_Accessibility): Replace a warning about an inevitable failure of a dynamic check with a legality-rule-violation error message; adjust the text of the message accordingly. * exp_ch6.ads (Apply_Access_Discrims_Accessibility_Check): New procedure, following example of the existing Apply_CW_Accessibility procedure. * exp_ch6.adb (Apply_Access_Discrims_Accessibility_Check): body for new procedure. (Expand_Simple_Function_Return): Add call to new Apply_Access_Discrims_Accessibility_Check procedure. * exp_ch3.adb (Make_Allocator_For_Return): Add call to new Apply_Access_Discrims_Accessibility_Check procedure.
2025-07-24ada: Minor adjustment to the doc of Last_Chance_HandlerTonu Naks2-7/+7
gcc/ada/ChangeLog: * doc/gnat_rm/standard_and_implementation_defined_restrictions.rst: clarify parameter description. * gnat_rm.texi: Regenerate.
2025-07-23testsuite: Fix gcc.target/powerpc/vsx-builtin-7.c test [PR119382]Jeevitha1-1/+9
The test vsx-builtin-7.c failed on powerpc64le-linux due to Identical Code Folding (ICF) merging the functions insert_di_0_v2 and insert_di_0. This behavior was introduced by commit r15-7961-gdc47161c1f32c3, which enhanced alias analysis in ao_compare::compare_ao_refs, enabling the compiler to identify and optimize structurally identical functions. As a result, the compiler replaced insert_di_0_v2 with a tail call to insert_di_0, altering the expected test behavior. This patch adds -fno-ipa-icf to the test's dg-options to disable ICF, avoiding function merging and ensuring the test executes correctly. 2025-06-24 Jeevitha Palanisamy <jeevitha@linux.ibm.com> gcc/testsuite/ PR testsuite/119382 * gcc.target/powerpc/vsx-builtin-7.c: Add '-fno-ipa-icf' to dg-options.
2025-07-24RISC-V: Add test case for vx combine polluting VXRMPan Li5-0/+120
Add asm check to make sure vx combine of vaaddu.vx will not pollute the vxrm. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-u16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-u32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-u64.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-u8.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm.h: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
2025-07-24RISC-V: Avoid vaaddu.vx combine pattern pollute VXRM csrPan Li4-13/+122
The vaaddu.vx combine almost comes from avg_floor, it will requires the vxrm to be RDN. But not all vaaddu.vx should depends on the RDN. The vaaddu.vx combine should leverage the VXRM value as is instead of pollute them all to RDN. This patch would like to fix this and set it as is. gcc/ChangeLog: * config/riscv/autovec-opt.md (*uavg_floor_vx_<mode>): Rename from... (*<sat_op_v_vdup>_vx_<mode>): Rename to... (*<sat_op_vdup_v>_vx_<mode>): Rename to... * config/riscv/riscv-protos.h (enum insn_flags): Add vxrm RNE, ROD type. (enum insn_type): Add RNE_P, ROD_P type. (expand_vx_binary_vxrm_vec_vec_dup): Add new func decl. (expand_vx_binary_vxrm_vec_dup_vec): Ditto. * config/riscv/riscv-v.cc (get_insn_type_by_vxrm_val): Add helper to get insn type by vxrm value. (expand_vx_binary_vxrm_vec_vec_dup): Add new func impl to expand vec + vec_dup pattern. (expand_vx_binary_vxrm_vec_dup_vec): Ditto but for vec_dup + vec pattern. * config/riscv/vector-iterators.md: Add helper iterator for sat vx combine. Signed-off-by: Pan Li <pan2.li@intel.com>
2025-07-24c++/modules: Support re-streaming TU_LOCAL_ENTITYs [PR120412]Nathaniel Shead4-1/+46
When emitting a primary module interface, we must re-stream any TU-local entities that we saw in a partition. This patch adds the missing members from core_vals. As a drive-by fix, in some cases we might have a typedef referring to a TU-local entity; we need to handle that case as well. PR c++/120412 gcc/cp/ChangeLog: * module.cc (trees_out::core_vals): Write TU_LOCAL_ENTITY bits. (trees_in::core_vals): Read it. (trees_in::tree_node): Handle TU_LOCAL_ENTITY typedefs. gcc/testsuite/ChangeLog: * g++.dg/modules/internal-14_a.C: New test. * g++.dg/modules/internal-14_b.C: New test. * g++.dg/modules/internal-14_c.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Reviewed-by: Jason Merrill <jason@redhat.com>
2025-07-24Daily bump.GCC Administrator10-1/+363
2025-07-23aarch64: Relaxed SEL combiner patterns for unpacked SVE FP unary operationsSpencer Abson10-9/+325
Extend the unary op/UNSPEC_SEL combiner patterns from SVE_FULL_F to SVE_F, where the strictness value is SVE_RELAXED_GP. gcc/ChangeLog: * config/aarch64/aarch64-sve.md (*cond_<optab><mode>_2_relaxed): Extend from SVE_FULL_F to SVE_F. (*cond_<optab><mode>_any_relaxed): Likewise. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/unpacked_cond_fabs_1.c: New test. * gcc.target/aarch64/sve/unpacked_cond_fneg_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_frinta_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_frinta_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_frinti_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_frintm_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_frintp_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_frintx_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_frintz_1.c: Likewise.
2025-07-23aarch64: Add support for unpacked SVE FP unary operationsSpencer Abson16-15/+365
This patch extends the expander for unpredicated round, nearbyint, floor, ceil, rint, and trunc, so that it can handle partial SVE FP modes. We move fabs and fneg to a separate expander, since they are not trapping instructions. gcc/ChangeLog: * config/aarch64/aarch64-sve.md (<optab><mode>2): Replace use of aarch64_ptrue_reg with aarch64_sve_fp_pred. (@aarch64_pred_<optab><mode>): Extend from SVE_FULL_F to SVE_F, and use aarch64_predicate_operand. * config/aarch64/iterators.md: Split FABS/FNEG out of SVE_COND_FP_UNARY (into new SVE_COND_FP_UNARY_BITWISE). gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/unpacked_fabs_1.c: New test. * gcc.target/aarch64/sve/unpacked_fneg_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_frinta_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_frinta_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_frinti_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_frinti_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintm_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintm_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintp_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintp_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintx_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintx_2.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintz_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_frintz_2.c: Likewise.
2025-07-23aarch64: Relaxed SEL combiner patterns for unpacked SVE FP conversionsSpencer Abson5-0/+269
Add UNSPEC_SEL combiner patterns for unpacked FP conversions, where the strictness value is SVE_RELAXED_GP. gcc/ChangeLog: * config/aarch64/aarch64-sve.md (*cond_<optab>_nontrunc<SVE_PARTIAL_F:mode><SVE_HSDI:mode>_relaxed): New FCVT/SEL combiner pattern. (*cond_<optab>_trunc<VNx2DF_ONLY:mode><VNx2SI_ONLY:mode>_relaxed): New FCVTZ{S,U}/SEL combiner pattern. (*cond_<optab>_nonextend<SVE_HSDI:mode><SVE_PARTIAL_F:mode>_relaxed): New {S,U}CVTF/SEL combiner pattern. (*cond_<optab>_trunc<SVE_SDF:mode><SVE_PARTIAL_HSF:mode>): New FCVT/SEL combiner pattern. (*cond_<optab>_nontrunc<SVE_PARTIAL_HSF:mode><SVE_SDF:mode>_relaxed): New FCVTZ{S,U}/SEL combiner pattern. * config/aarch64/iterators.md: New mode iterator for VNx2SI. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/unpacked_cond_cvtf_1.c: New test. * gcc.target/aarch64/sve/unpacked_cond_fcvt_1.c: Likewise. * gcc.target/aarch64/sve/unpacked_cond_fcvtz_1.c: Likewise.
2025-07-23contrib: add 'zlib' to ignored_prefixesSam James1-0/+1
This fixes the same problem for syncing zlib that H.J. hit for libffi in r12-4561-g25ab851dd333d7. contrib/ChangeLog: PR other/105404 * gcc-changelog/git_commit.py (ignored_prefixes): Add zlib/.
2025-07-23Fortran: fix passing of character length of function to procedure [PR121203]Harald Anlauf2-13/+47
PR fortran/121203 gcc/fortran/ChangeLog: * trans-expr.cc (gfc_conv_procedure_call): Obtain the character length of an assumed character length procedure from the typespec of the actual argument even if there is no explicit interface. gcc/testsuite/ChangeLog: * gfortran.dg/function_charlen_4.f90: New test.
2025-07-23RISC-V: Rework broadcast handling [PR121073].Robin Dapp17-250/+465
During the last weeks it became clear that our current broadcast handling needs an overhaul in order to improve maintainability. PR121073 showed that my intermediate fix wasn't enough and caused regressions. This patch now goes a first step towards untangling broadcast (vmv.v.x), "set first" (vmv.s.x), and zero-strided load (vlse). Also can_be_broadcast_p is rewritten and strided_broadcast_p is introduced to make the distinction clear directly in the predicates. Due to the pervasiveness of the patterns I needed to touch a lot of places and tried to clear up some things while at it. The patch therefore also introduces new helpers expand_broadcast for vmv.v.x that dispatches to regular as well as strided broadcast and expand_set_first that does the same thing for vmv.s.x. The non-strided fallbacks are now implemented as splitters of the strided variants. This makes it easier to see where and when things happen. The test cases I touched appeared wrong to me so this patch sets a new baseline for some of the scalar_move tests. There is still work to be done but IMHO that can be deferred: It would be clearer if the three broadcast-like variants differed not just in name but also in RTL pattern so matching is not as confusing. Right now vmv.v.x and vmv.s.x only differ in the mask and are interchangeable by just changing it from "all ones" to a "single one". As last time, I regtested on rv64 and rv32 with strided_broadcast turned on and off. Note there are regressions cond_fma_fnma-[78].c. Those are due to the patch exposing more fwprop/late-combine opportunities. For fma/fnma we don't yet have proper costing for vv/vx in place but I'll expect that to be addressed soon and figured we can live with those for the time being. PR target/121073 gcc/ChangeLog: * config/riscv/autovec-opt.md: Use new helpers. * config/riscv/autovec.md: Ditto. * config/riscv/predicates.md (strided_broadcast_mask_operand): New predicate. (strided_broadcast_operand): Ditto. (any_broadcast_operand): Ditto. * config/riscv/riscv-protos.h (expand_broadcast): Declare. (expand_set_first): Ditto. (expand_set_first_tu): Ditto. (strided_broadcast_p): Ditto. * config/riscv/riscv-string.cc (expand_vec_setmem): Use new helpers. * config/riscv/riscv-v.cc (expand_broadcast): New functionk. (expand_set_first): Ditto. (expand_set_first_tu): Ditto. (expand_const_vec_duplicate): Use new helpers. (expand_const_vector_duplicate_repeating): Ditto. (expand_const_vector_duplicate_default): Ditto. (sew64_scalar_helper): Ditto. (expand_vector_init_merge_repeating_sequence): Ditto. (expand_reduction): Ditto. (strided_broadcast_p): New function. (whole_reg_to_reg_move_p): Use new helpers. * config/riscv/riscv-vector-builtins-bases.cc: Use either broadcast or strided broadcast. * config/riscv/riscv-vector-builtins.cc (function_expander::use_ternop_insn): Ditto. (function_expander::use_widen_ternop_insn): Ditto. (function_expander::use_scalar_broadcast_insn): Ditto. * config/riscv/riscv-vector-builtins.h: Declare scalar broadcast. * config/riscv/vector.md (*pred_broadcast<mode>): Split into regular and strided broadcast. (*pred_broadcast<mode>_zvfh): Split. (pred_broadcast<mode>_zvfh): Ditto. (*pred_broadcast<mode>_zvfhmin): Ditto. (@pred_strided_broadcast<mode>): Ditto. (*pred_strided_broadcast<mode>): Ditto. (*pred_strided_broadcast<mode>_zvfhmin): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls-vlmax/repeat-6.c: Adjust test expectation. * gcc.target/riscv/rvv/base/scalar_move-5.c: Ditto. * gcc.target/riscv/rvv/base/scalar_move-6.c: Ditto. * gcc.target/riscv/rvv/base/scalar_move-7.c: Ditto. * gcc.target/riscv/rvv/base/scalar_move-8.c: Ditto. * gcc.target/riscv/rvv/base/scalar_move-9.c: Ditto. * gcc.target/riscv/rvv/pr121073.c: New test.
2025-07-23RISC-V: testsuite: Fix vx_vf_*run-1-f16.c run tests.Robin Dapp11-10/+58
This patch fixes the vf_vfmacc-run-1-f16.c test failures on rv32 by adding zvfh requirements as well as options to the test and the target harness. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmacc-run-1-f16.c: Add zvfh requirements and options. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmadd-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsac-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmsub-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmacc-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmadd-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsac-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfnmsub-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmacc-run-1-f16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmsac-run-1-f16.c: Ditto. * lib/target-supports.exp: Add zvfh options.
2025-07-23aarch64: Fix fma steering when rename fails [PR120119]Andrew Pinski2-0/+20
Regrename can fail in some case and `insn_rr[INSN_UID (insn)].op_info` will be null. The FMA steering code was not expecting the failure to happen. This started to happen after early RA was added but it has been a latent bug before that. Build and tested for aarch64-linux-gnu. PR target/120119 gcc/ChangeLog: * config/aarch64/cortex-a57-fma-steering.cc (func_fma_steering::analyze): Skip if renaming fails. gcc/testsuite/ChangeLog: * g++.dg/torture/pr120119-1.C: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-07-23cobol: Tweak adjustments to location_t of GENERIC nodes for PERFORM.Robert Dubner1-0/+7
COBOL has a group of PERFORM statements that require careful adjustments to the location_t elements of the GENERIC nodes so that the COBOL-aware version of GDB behaves properly. These changes are in service of that goal. gcc/cobol/ChangeLog: * genapi.cc (leave_procedure): Adjust location_t for PERFORM. (parser_perform_times): Likewise. (internal_perform_through_times): Likewise. (perform_outofline_before_until): Likewise. (perform_outofline_after_until): Likewise. (perform_outofline_testafter_varying): Likewise. (perform_outofline_before_varying): Likewise.
2025-07-23c++: name lookup for non-dep rewritten != expr [PR121179]Patrick Palka3-2/+14
Here we're incorrectly rejecting the modules testcase (reduced from a std module example): $ cat 121179_a.C export module foo; enum class E { x }; bool operator==(E, int); export template<class T> void f() { E::x != 0; } $ cat 121179_b.C import foo; template void f<int>(); $ g++ -fmodules 121179_*.C In module foo, imported at 121179_b.C:1: 121179_a.C: In instantiation of ‘void f@foo() [with T = int]’: 121179_b.C:3:9: required from here 121179_a.C:9:8: error: no match for ‘operator!=’ (operand types are ‘E@foo’ and ‘int’) This is ultimately because our non-dependent rewritten operator expression handling throws away the result of unqualified lookup at template parse time, and so we have to repeat the lookup at instantiation time which fails because the operator== isn't exported. This is a known deficiency, but it's easy enough to narrowly fix this for simple != to == rewrites by making build_min_non_dep_op_overload look through logical negation. PR c++/121179 gcc/cp/ChangeLog: * call.cc (build_new_op): Don't clear *overload for a simple != to == rewrite. * tree.cc (build_min_non_dep_op_overload): Handle TRUTH_NOT_EXPR appearing in a rewritten operator expression. gcc/testsuite/ChangeLog: * g++.dg/lookup/operator-8.C: Strengthen test and remove one XFAIL. Reviewed-by: Jason Merrill <jason@redhat.com>
2025-07-23c++: fix __is_invocable for std::reference_wrapper [PR121055]Patrick Palka2-1/+17
Our implementation of the INVOKE spec ([func.require]) was incorrectly treating reference_wrapper<T>::get() as returning T instead of T&, which notably makes a difference when invoking a ref-qualified memfn pointer. PR c++/121055 gcc/cp/ChangeLog: * method.cc (build_invoke): Correct reference_wrapper handling. gcc/testsuite/ChangeLog: * g++.dg/ext/is_invocable5.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com>
2025-07-23aarch64: testsuite: Keep -mtune=generic when specifying -moverrideSpencer Abson1-5/+11
gcc/testsuite/ChangeLog: * lib/gcc-defs.exp (aarch64-arg-dg-options): Split add_tune into add_tune and add_override, so that specifying -moverride does not change the baseline tuning from the testuite's default (generic).
2025-07-23libstdc++: Prepare test code for default_accessor for reuse.Luc Grosheintz2-99/+125
All test code of default_accessor can be reused. This commit moves the reuseable code into a file generic.cc and prepares the tests for reuse with aligned_accessor. libstdc++-v3/ChangeLog: * testsuite/23_containers/mdspan/accessors/default.cc: Delete. * testsuite/23_containers/mdspan/accessors/generic.cc: Slightly generalize the test code previously in default.cc. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com> Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
2025-07-23libstdc++: Remove redundant parens in mdspan testsuite.Luc Grosheintz3-27/+27
A recent commit improved the macro VERIFY to eliminate the need for certain parens. This commit updates the test code in 23_containers/mdspan libstdc++-v3/ChangeLog: * testsuite/23_containers/mdspan/extents/ctor_ints.cc: Remove superfluous parens. * testsuite/23_containers/mdspan/extents/ctor_shape.cc: Ditto. * testsuite/23_containers/mdspan/mdspan.cc: Ditto. Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
2025-07-23tree-optimization/121220 - improve sinking of storesRichard Biener2-24/+70
We currently do only very restricted store sinking into paths that have no loads or stores and end in a virtual PHI. The following extends this to sink towards a single virtual definition in addition to the case of a PHI, handling skipping of unrelated virtual uses. We later have to prune cases that would require virtual PHI insertion and the patch below basically restricts this to sinking to noreturn paths for now. PR tree-optimization/121220 * tree-ssa-sink.cc (statement_sink_location): For stores handle sinking to paths ending in a store. Skip loads that do not use the store. * gcc.dg/tree-ssa/ssa-sink-23.c: New testcase.
2025-07-23[modula2] Add return to remove build warningGaius Mulley1-2/+3
This patch adds a return statement to M2Exception which removes a build warning. gcc/m2/ChangeLog: * gm2-libs/M2EXCEPTION.mod (M2Exception): Add return exException in case Raise completes. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2025-07-23tree-sra: Avoid total SRA if there are incompat. aggregate accesses (PR119085)Martin Jambor2-0/+43
We currently use the types encountered in the function body and not in type declaration to perform total scalarization. Bug PR 119085 uncovered that we miss a check that when the same data is accessed with aggregate types that those are actually compatible. Without it, we can base total scalarization on a type that does not "cover" all live data in a different part of the function. This patch adds the check. gcc/ChangeLog: 2025-07-21 Martin Jambor <mjambor@suse.cz> PR tree-optimization/119085 * tree-sra.cc (sort_and_splice_var_accesses): Prevent total scalarization if two incompatible aggregates access the same place. gcc/testsuite/ChangeLog: 2025-07-21 Martin Jambor <mjambor@suse.cz> PR tree-optimization/119085 * gcc.dg/tree-ssa/pr119085.c: New test.
2025-07-23PR modula2/121164: Modula 2 build failure followupGaius Mulley16-97/+125
This is a followup patch for PR modula2/121164 to fix the location for the error message attributed to cc1gm2. gcc/m2/ChangeLog: PR modula2/121164 * gm2-compiler/P1SymBuild.mod: Remove PutProcTypeParam. Remove PutProcTypeParam. (CheckFileName): Remove. (P1EndBuildDefinitionModule): Correct spelling. (P1EndBuildImplementationModule): Ditto. (P1EndBuildProgramModule): Ditto. (EndBuildInnerModule): Ditto. * gm2-compiler/P2SymBuild.mod (P2EndBuildDefModule): Correct spelling. (P2EndBuildImplementationModule): Ditto. (P2EndBuildProgramModule): Ditto. (EndBuildInnerModule): Ditto. (CheckFormalParameterSection): Ditto. * gm2-compiler/P3SymBuild.mod (P3EndBuildDefModule): Ditto. * gm2-compiler/PCSymBuild.mod (PCEndBuildDefModule): Ditto. (fixupProcedureType): Pass tok to PutProcTypeVarParam. Pass tok to PutProcTypeParam. * gm2-compiler/SymbolTable.def (PutProcTypeParam): Add tok parameter. (PutProcTypeVarParam): Ditto. * gm2-compiler/SymbolTable.mod (SymParam): At change type to CARDINAL. New field FullTok. New field Scope. (SymVarParam): At change type to CARDINAL. New field FullTok. New field Scope. (GetVarDeclTok): Check ShadowVar for NulSym and return At. (PutParam): Initialize FullTok. Initialize At. Initialize Scope. (PutVarParam): Initialize FullTok. Assign At. Initialize Scope. (AddProcedureProcTypeParam): Add tok parameter. (GetScope): Add ParamSym and VarParamSym clause. (PutProcTypeVarParam): Add tok parameter. Initialize At. Initialize FullTok. (GetDeclaredDefinition): Clause ParamSym return At. Clause VarParamSym return At. (GetDeclaredModule): Ditto. (PutDeclaredDefinition): Remove clause ParamSym. Remove clause VarParamSym. (PutDeclaredModule): Remove clause ParamSym. Remove clause VarParamSym. libgm2/ChangeLog: PR modula2/121164 * libm2iso/Makefile.am (libm2iso_la_M2FLAGS): Add -Wall. * libm2iso/Makefile.in: Regenerate. * libm2log/Makefile.am (libm2log_la_M2FLAGS): Add -Wall. * libm2log/Makefile.in: Regenerate. * libm2min/Makefile.am (libm2min_la_M2FLAGS): Add -Wall. * libm2min/Makefile.in: Regenerate. * libm2pim/Makefile.am (libm2pim_la_M2FLAGS): Add -Wall. * libm2pim/Makefile.in: Regenerate. gcc/testsuite/ChangeLog: PR modula2/121164 * gm2/switches/pedantic-params/fail/arrayofchar.def: New test. * gm2/switches/pedantic-params/fail/arrayofchar.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2025-07-23libstdc++: Negative tests for constexpr uses inplace_vector [PR119137]Tomasz Kamiński4-22/+155
Adds negative tests for preconditions on inserting into a full inplace_vector and erasing non-existent elementsi at compile-time. This ensures coverage for the inplace_vector<T, 0> specialization. Also extends element access tests to cover front() and back() methods, and const and mutable overloads for all accesses. PR libstdc++/119137 libstdc++-v3/ChangeLog: * testsuite/23_containers/inplace_vector/access/elem.cc: Cover front and back methods and const calls. * testsuite/23_containers/inplace_vector/access/elem_neg.cc: Likewise. * testsuite/23_containers/inplace_vector/modifiers/erase_neg.cc: New test. * testsuite/23_containers/inplace_vector/modifiers/single_insert_neg.cc: New test.