aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/arm
AgeCommit message (Collapse)AuthorFilesLines
2025-01-10arm: [MVE intrinsics] Fix tuples field name (PR 118332)Christophe Lyon1-44/+8
The previous fix only worked for C, for C++ we need to add more information to the underlying type so that finish_class_member_access_expr accepts it. We use the same logic as in aarch64's register_tuple_type for AdvSIMD tuples. This patch makes gcc.target/arm/mve/intrinsics/pr118332.c pass in C++ mode. gcc/ChangeLog: PR target/118332 * config/arm/arm-mve-builtins.cc (wrap_type_in_struct): Delete. (register_type_decl): Delete. (register_builtin_tuple_types): Use lang_hooks.types.simulate_record_decl.
2025-01-09arm: [MVE intrinsics] Another fix for moves of tuples (PR target/118131)Christophe Lyon1-1/+4
Commit r15-6389-g670df03e5294a3 only partially fixed support for moves of large modes: despite the introduction of V2x* and V4x* modes in r15-6245-g4f4e13dd235b to support MVE tuples, we still need to support TI, OI and XI modes, which appear for instance in gcc.dg/pr100887.c. The problem was noticed when running the testsuite with -mthumb/-march=armv8.1-m.main+mve.fp+fp.dp/-mtune=cortex-m55/-mfloat-abi=hard/-mfpu=auto where several tests would ICE in output_move_neon. gcc/ChangeLog: PR target/118131 * config/arm/arm.h (VALID_MVE_STRUCT_MODE): Accept TI, OI and XI modes again.
2025-01-08arm: [MVE intrinsics] Fix tuples field name (PR 118332)Christophe Lyon1-3/+2
A recent commit mistakenly changed the field name for tuples from 'val' to '__val', but unlike SVE this name is mandated by ACLE. The patch simply switches back the name to 'val'. PR target/118332 gcc/ChangeLog: * config/arm/arm-mve-builtins.cc (wrap_type_in_struct): Use 'val' instead of '__val'. gcc/testsuite/ChangeLog: * gcc.target/arm/mve/intrinsics/pr118332.c: New test.
2025-01-02Update copyright years.Jakub Jelinek132-134/+134
2024-12-20arm: [MVE intrinsics] Fix moves of tuples (PR target/118131)Christophe Lyon3-10/+41
Commit r15-6245-g4f4e13dd235b introduced new modes for MVE tuples, but missed adding support for them in a few places. Adding them to the list in arm_attr_length_move_neon is not sufficient since we later face another ICE where the compiler does not know how to split move of such data. The patch therefore enhances the define_splits for OI and XI moves in neon.md, via the introduction of new iterators. In addition, it seems consistent to update output_move_neon such that VALID_NEON_*_MODE are used only when TARGET_NEON. gcc/ChangeLog: PR target/118131 * config/arm/arm.cc (output_move_neon): Check TARGET_NEON as needed. (arm_attr_length_move_neon): Add support for V2x and V4x MVE tuple modes. * config/arm/iterators.md (VSTRUCT2, VSTRUCT4): New. * config/arm/neon.md: Use VSTRUCT2 instead of OI and VSTRUCT4 instead of XI in define_split.
2024-12-18arm: Escape semicolon in thumb1.mdTorbjörn SVENSSON1-2/+2
Without escaping the semicolon, the generated assembler output will not match the expected assmbler in the test cases. Fixes Linaro CI reported regression on r15-6166-gb7e11b499922 in https://linaro.atlassian.net/browse/GNU-1464. gcc/ChangeLog: * config/arm/thumb1.md (thumb1_cbz): Escape the semicolon. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2024-12-15arm: fix bootstrap after MVE changesTamar Christina1-2/+2
The recent commits for MVE on Saturday have broken armhf bootstrap due to a -Werror false positive: inlined from 'virtual rtx_def* {anonymous}::vstrq_scatter_base_impl::expand(arm_mve::function_expander&) const' at /gcc/config/arm/arm-mve-builtins-base.cc:352:17: ./genrtl.h:38:16: error: 'new_base' may be used uninitialized [-Werror=maybe-uninitialized] 38 | XEXP (rt, 1) = arg1; /gcc/config/arm/arm-mve-builtins-base.cc: In member function 'virtual rtx_def* {anonymous}::vstrq_scatter_base_impl::expand(arm_mve::function_expander&) const': /gcc/config/arm/arm-mve-builtins-base.cc:311:26: note: 'new_base' was declared here 311 | rtx insns, base_ptr, new_base; | ^~~~~~~~ In function 'rtx_def* init_rtx_fmt_ee(rtx, machine_mode, rtx, rtx)', inlined from 'rtx_def* gen_rtx_fmt_ee_stat(rtx_code, machine_mode, rtx, rtx)' at ./genrtl.h:50:26, inlined from 'virtual rtx_def* {anonymous}::vldrq_gather_base_impl::expand(arm_mve::function_expander&) const' at /gcc/config/arm/arm-mve-builtins-base.cc:527:17: ./genrtl.h:38:16: error: 'new_base' may be used uninitialized [-Werror=maybe-uninitialized] 38 | XEXP (rt, 1) = arg1; /gcc/config/arm/arm-mve-builtins-base.cc: In member function 'virtual rtx_def* {anonymous}::vldrq_gather_base_impl::expand(arm_mve::function_expander&) const': /gcc/config/arm/arm-mve-builtins-base.cc:486:26: note: 'new_base' was declared here 486 | rtx insns, base_ptr, new_base; To fix it I just initialize the value. gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (expand): Initialize new_base.
2024-12-13arm: [MVE intrinsics] Fix support for predicate constants [PR target/114801]Christophe Lyon1-1/+31
In this PR, we have to handle a case where MVE predicates are supplied as a const_int, where individual predicates have illegal boolean values (such as 0xc for a 4-bit boolean predicate). To avoid the ICE, fix the constant (any non-zero value is converted to all 1s) and emit a warning. On MVE, V8BI and V4BI multi-bit masks are interpreted byte-by-byte at instruction level, but end-users should describe lanes rather than bytes (so all bytes of a true-predicated lane should be '1'), see the section on MVE intrinsics in the Arm ACLE specification. Since force_lowpart_subreg cannot handle const_int (because they have VOID mode), use gen_lowpart on them, force_lowpart_subreg otherwise. 2024-11-20 Christophe Lyon <christophe.lyon@linaro.org> Jakub Jelinek <jakub@redhat.com> PR target/114801 gcc/ * config/arm/arm-mve-builtins.cc (function_expander::add_input_operand): Handle CONST_INT predicates. gcc/testsuite/ * gcc.target/arm/mve/pr108443.c: Update predicate constant. * gcc.target/arm/mve/pr108443-run.c: Likewise. * gcc.target/arm/mve/pr114801.c: New test.
2024-12-13arm: [MVE intrinsics] rework vst2q vst4q vld2q vld4qChristophe Lyon11-683/+253
Implement vst2q, vst4q, vld2q and vld4q using the new MVE builtins framework. Since MVE uses different tuple modes than Neon, we need to use VALID_MVE_STRUCT_MODE because VALID_NEON_STRUCT_MODE is no longer a super-set of it, for instance in output_move_neon and arm_print_operand_address. In arm_hard_regno_mode_ok, the change is similar but a bit more intrusive. Expand the VSTRUCT iterator, so that mov<mode> and neon_mov<mode> patterns from neon.md still work for MVE. Besides the small updates to the patterns in mve.md, we have to update vec_load_lanes and vec_store_lanes in vec-common.md so that the vectorizer can handle the new modes. These patterns are now different from Neon's, so maybe we should move them back to neon.md and mve.md The patch adds arm_array_mode, which is used by build_array_type_nelts and makes it possible to support the new assert in register_builtin_tuple_types. gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (class vst24_impl): New. (class vld24_impl): New. (vld2q, vld4q, vst2q, vst4q): New. * config/arm/arm-mve-builtins-base.def (vld2q, vld4q, vst2q) (vst4q): New. * config/arm/arm-mve-builtins-base.h (vld2q, vld4q, vst2q, vst4q): New. * config/arm/arm-mve-builtins.cc (register_builtin_tuple_types): Add more asserts. * config/arm/arm.cc (TARGET_ARRAY_MODE): New. (output_move_neon): Handle MVE struct modes. (arm_print_operand_address): Likewise. (arm_hard_regno_mode_ok): Likewise. (arm_array_mode): New. * config/arm/arm.h (VALID_MVE_STRUCT_MODE): Likewise. * config/arm/arm_mve.h (vst4q): Delete. (vst2q): Delete. (vld2q): Delete. (vld4q): Delete. (vst4q_s8): Delete. (vst4q_s16): Delete. (vst4q_s32): Delete. (vst4q_u8): Delete. (vst4q_u16): Delete. (vst4q_u32): Delete. (vst4q_f16): Delete. (vst4q_f32): Delete. (vst2q_s8): Delete. (vst2q_u8): Delete. (vld2q_s8): Delete. (vld2q_u8): Delete. (vld4q_s8): Delete. (vld4q_u8): Delete. (vst2q_s16): Delete. (vst2q_u16): Delete. (vld2q_s16): Delete. (vld2q_u16): Delete. (vld4q_s16): Delete. (vld4q_u16): Delete. (vst2q_s32): Delete. (vst2q_u32): Delete. (vld2q_s32): Delete. (vld2q_u32): Delete. (vld4q_s32): Delete. (vld4q_u32): Delete. (vld4q_f16): Delete. (vld2q_f16): Delete. (vst2q_f16): Delete. (vld4q_f32): Delete. (vld2q_f32): Delete. (vst2q_f32): Delete. (__arm_vst4q_s8): Delete. (__arm_vst4q_s16): Delete. (__arm_vst4q_s32): Delete. (__arm_vst4q_u8): Delete. (__arm_vst4q_u16): Delete. (__arm_vst4q_u32): Delete. (__arm_vst2q_s8): Delete. (__arm_vst2q_u8): Delete. (__arm_vld2q_s8): Delete. (__arm_vld2q_u8): Delete. (__arm_vld4q_s8): Delete. (__arm_vld4q_u8): Delete. (__arm_vst2q_s16): Delete. (__arm_vst2q_u16): Delete. (__arm_vld2q_s16): Delete. (__arm_vld2q_u16): Delete. (__arm_vld4q_s16): Delete. (__arm_vld4q_u16): Delete. (__arm_vst2q_s32): Delete. (__arm_vst2q_u32): Delete. (__arm_vld2q_s32): Delete. (__arm_vld2q_u32): Delete. (__arm_vld4q_s32): Delete. (__arm_vld4q_u32): Delete. (__arm_vst4q_f16): Delete. (__arm_vst4q_f32): Delete. (__arm_vld4q_f16): Delete. (__arm_vld2q_f16): Delete. (__arm_vst2q_f16): Delete. (__arm_vld4q_f32): Delete. (__arm_vld2q_f32): Delete. (__arm_vst2q_f32): Delete. (__arm_vst4q): Delete. (__arm_vst2q): Delete. (__arm_vld2q): Delete. (__arm_vld4q): Delete. * config/arm/arm_mve_builtins.def (vst4q, vst2q, vld4q, vld2q): Delete. * config/arm/iterators.md (VSTRUCT): Add V2x16QI, V2x8HI, V2x4SI, V2x8HF, V2x4SF, V4x16QI, V4x8HI, V4x4SI, V4x8HF, V4x4SF. (MVE_VLD2_VST2, MVE_vld2_vst2, MVE_VLD4_VST4, MVE_vld4_vst4): New. * config/arm/mve.md (mve_vst4q<mode>): Update into ... (@mve_vst4q<mode>): ... this. (mve_vst2q<mode>): Update into ... (@mve_vst2q<mode>): ... this. (mve_vld2q<mode>): Update into ... (@mve_vld2q<mode>): ... this. (mve_vld4q<mode>): Update into ... (@mve_vld4q<mode>): ... this. * config/arm/vec-common.md (vec_load_lanesoi<mode>) Remove MVE support. (vec_load_lanesxi<mode>): Likewise. (vec_store_lanesoi<mode>): Likewise. (vec_store_lanesxi<mode>): Likewise. (vec_load_lanes<MVE_vld2_vst2><mode>): New. (vec_store_lanes<MVE_vld2_vst2><mode>): New. (vec_load_lanes<MVE_vld4_vst4><mode>): New. (vec_store_lanes<MVE_vld4_vst4><mode>): New.
2024-12-13arm: [MVE intrinsics] fix store shape to support tuplesChristophe Lyon1-2/+2
Now that tuples are properly supported, we can update the store shape, to expect "t0" instead of "v0" as last argument. gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (struct store_def): Add support for tuples.
2024-12-13arm: [MVE intrinsics] add support for tuplesChristophe Lyon3-13/+68
This patch is largely a copy/paste from the aarch64 SVE counterpart, and adds support for tuples to the MVE intrinsics framework. Introduce function_resolver::infer_tuple_type which will be used to resolve overloaded vst2q and vst4q function names in a later patch. Fix access to acle_vector_types in a few places, as well as in infer_vector_or_tuple_type because we should shift the tuple size to the right by one bit when computing the array index. The new wrap_type_in_struct, register_type_decl and infer_tuple_type are largely copies of the aarch64 versions, and register_builtin_tuple_types is very similar. gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (parse_type): Fix access to acle_vector_types. * config/arm/arm-mve-builtins.cc (wrap_type_in_struct): New. (register_type_decl): New. (register_builtin_tuple_types): Fix support for tuples. (function_resolver::infer_tuple_type): New. * config/arm/arm-mve-builtins.h (function_resolver::infer_tuple_type): Declare. (function_instance::tuple_type): Fix access to acle_vector_types.
2024-12-13arm: [MVE intrinsics] add modes for tuplesChristophe Lyon1-0/+22
Add V2x and V4x modes, like we do on aarch64 for Advanced SIMD q-registers. gcc/ChangeLog: * config/arm/arm-modes.def (MVE_STRUCT_MODES): New.
2024-12-13arm: [MVE intrinsics] remove V2DF from MVE_vecs iteratorChristophe Lyon1-1/+1
V2DF is not supported by MVE, so remove it from the only iterator which contains it. gcc/ChangeLog: * config/arm/iterators.md (MVE_vecs): Remove V2DF.
2024-12-13arm: [MVE intrinsics] Fix condition for vec_extract patternsChristophe Lyon1-4/+2
Remove floating-point condition from mve_vec_extract_sext_internal and mve_vec_extract_zext_internal, since the MVE_2 iterator does not include any FP mode. gcc/ChangeLog: * config/arm/mve.md (mve_vec_extract_sext_internal): Fix condition. (mve_vec_extract_zext_internal): Likewise.
2024-12-13arm: [MVE intrinsics] remove useless call_properties implementations.Christophe Lyon1-10/+0
vstrq_impl derives from store_truncating and vldrq_impl derives from load_extending which both implement call_properties. No need to re-implement them in the derived classes. gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (vstrq_impl): Remove call_properties. (vldrq_impl): Likewise.
2024-12-13arm: [MVE intrinsics] rework vldr gather_base_wbChristophe Lyon8-496/+74
Implement vldr?q_gather_base_wb using the new MVE builtins framework. gcc/ChangeLog: * config/arm/arm-builtins.cc (arm_ldrgbwbxu_qualifiers) (arm_ldrgbwbxu_z_qualifiers, arm_ldrgbwbs_qualifiers) (arm_ldrgbwbu_qualifiers, arm_ldrgbwbs_z_qualifiers) (arm_ldrgbwbu_z_qualifiers): Delete. * config/arm/arm-mve-builtins-base.cc (vldrq_gather_base_impl): Add support for MODE_wb. * config/arm/arm-mve-builtins-shapes.cc (struct load_gather_base_def): Likewise. * config/arm/arm_mve.h (vldrdq_gather_base_wb_s64): Delete. (vldrdq_gather_base_wb_u64): Delete. (vldrdq_gather_base_wb_z_s64): Delete. (vldrdq_gather_base_wb_z_u64): Delete. (vldrwq_gather_base_wb_f32): Delete. (vldrwq_gather_base_wb_s32): Delete. (vldrwq_gather_base_wb_u32): Delete. (vldrwq_gather_base_wb_z_f32): Delete. (vldrwq_gather_base_wb_z_s32): Delete. (vldrwq_gather_base_wb_z_u32): Delete. (__arm_vldrdq_gather_base_wb_s64): Delete. (__arm_vldrdq_gather_base_wb_u64): Delete. (__arm_vldrdq_gather_base_wb_z_s64): Delete. (__arm_vldrdq_gather_base_wb_z_u64): Delete. (__arm_vldrwq_gather_base_wb_s32): Delete. (__arm_vldrwq_gather_base_wb_u32): Delete. (__arm_vldrwq_gather_base_wb_z_s32): Delete. (__arm_vldrwq_gather_base_wb_z_u32): Delete. (__arm_vldrwq_gather_base_wb_f32): Delete. (__arm_vldrwq_gather_base_wb_z_f32): Delete. * config/arm/arm_mve_builtins.def (vldrwq_gather_base_nowb_z_u) (vldrdq_gather_base_nowb_z_u, vldrwq_gather_base_nowb_u) (vldrdq_gather_base_nowb_u, vldrwq_gather_base_nowb_z_s) (vldrwq_gather_base_nowb_z_f, vldrdq_gather_base_nowb_z_s) (vldrwq_gather_base_nowb_s, vldrwq_gather_base_nowb_f) (vldrdq_gather_base_nowb_s, vldrdq_gather_base_wb_z_s) (vldrdq_gather_base_wb_z_u, vldrdq_gather_base_wb_s) (vldrdq_gather_base_wb_u, vldrwq_gather_base_wb_z_s) (vldrwq_gather_base_wb_z_f, vldrwq_gather_base_wb_z_u) (vldrwq_gather_base_wb_s, vldrwq_gather_base_wb_f) (vldrwq_gather_base_wb_u): Delete * config/arm/iterators.md (supf): Remove VLDRWQGBWB_S, VLDRWQGBWB_U, VLDRDQGBWB_S, VLDRDQGBWB_U. (VLDRWGBWBQ, VLDRDGBWBQ): Delete. * config/arm/mve.md (mve_vldrwq_gather_base_wb_<supf>v4si): Delete. (mve_vldrwq_gather_base_nowb_<supf>v4si): Delete. (mve_vldrwq_gather_base_wb_<supf>v4si_insn): Delete. (mve_vldrwq_gather_base_wb_z_<supf>v4si): Delete. (mve_vldrwq_gather_base_nowb_z_<supf>v4si): Delete. (mve_vldrwq_gather_base_wb_z_<supf>v4si_insn): Delete. (mve_vldrwq_gather_base_wb_fv4sf): Delete. (mve_vldrwq_gather_base_nowb_fv4sf): Delete. (mve_vldrwq_gather_base_wb_fv4sf_insn): Delete. (mve_vldrwq_gather_base_wb_z_fv4sf): Delete. (mve_vldrwq_gather_base_nowb_z_fv4sf): Delete. (mve_vldrwq_gather_base_wb_z_fv4sf_insn): Delete. (mve_vldrdq_gather_base_wb_<supf>v2di): Delete. (mve_vldrdq_gather_base_nowb_<supf>v2di): Delete. (mve_vldrdq_gather_base_wb_<supf>v2di_insn): Delete. (mve_vldrdq_gather_base_wb_z_<supf>v2di): Delete. (mve_vldrdq_gather_base_nowb_z_<supf>v2di): Delete. (mve_vldrdq_gather_base_wb_z_<supf>v2di_insn): Delete. (@mve_vldrq_gather_base_wb_<mode>): New. (@mve_vldrq_gather_base_wb_z_<mode>): New. * config/arm/unspecs.md (VLDRWQGBWB_S, VLDRWQGBWB_U, VLDRWQGBWB_F) (VLDRDQGBWB_S, VLDRDQGBWB_U): Delete (VLDRGBWBQ, VLDRGBWBQ_Z): New. gcc/testsuite/ChangeLog: * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_wb_s64.c: Update expected output. * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_wb_u64.c: Likewise.
2024-12-13arm: [MVE intrinsics] rework vldr gather_baseChristophe Lyon9-245/+71
Implement vldr?q_gather_base using the new MVE builtins framework. The patch updates two testcases rather than using different iterators for predicated and non-predicated versions. According to ACLE: vldrdq_gather_base_s64 is expected to generate VLDRD.64 vldrdq_gather_base_z_s64 is expected to generate VLDRDT.U64 Both are equally valid, however. gcc/ChangeLog: * config/arm/arm-builtins.cc (arm_ldrgbs_qualifiers) (arm_ldrgbu_qualifiers, arm_ldrgbs_z_qualifiers) (arm_ldrgbu_z_qualifiers): Delete. * config/arm/arm-mve-builtins-base.cc (class vldrq_gather_base_impl): New. (vldrdq_gather_base, vldrwq_gather_base): New. * config/arm/arm-mve-builtins-base.def (vldrdq_gather_base) (vldrwq_gather_base): New. * config/arm/arm-mve-builtins-base.h: (vldrdq_gather_base) (vldrwq_gather_base): New. * config/arm/arm_mve.h (vldrwq_gather_base_s32): Delete. (vldrwq_gather_base_u32): Delete. (vldrwq_gather_base_z_u32): Delete. (vldrwq_gather_base_z_s32): Delete. (vldrdq_gather_base_s64): Delete. (vldrdq_gather_base_u64): Delete. (vldrdq_gather_base_z_s64): Delete. (vldrdq_gather_base_z_u64): Delete. (vldrwq_gather_base_f32): Delete. (vldrwq_gather_base_z_f32): Delete. (__arm_vldrwq_gather_base_s32): Delete. (__arm_vldrwq_gather_base_u32): Delete. (__arm_vldrwq_gather_base_z_s32): Delete. (__arm_vldrwq_gather_base_z_u32): Delete. (__arm_vldrdq_gather_base_s64): Delete. (__arm_vldrdq_gather_base_u64): Delete. (__arm_vldrdq_gather_base_z_s64): Delete. (__arm_vldrdq_gather_base_z_u64): Delete. (__arm_vldrwq_gather_base_f32): Delete. (__arm_vldrwq_gather_base_z_f32): Delete. * config/arm/arm_mve_builtins.def (vldrwq_gather_base_s) (vldrwq_gather_base_u, vldrwq_gather_base_z_s) (vldrwq_gather_base_z_u, vldrdq_gather_base_s) (vldrwq_gather_base_f, vldrdq_gather_base_z_s) (vldrwq_gather_base_z_f, vldrdq_gather_base_u) (vldrdq_gather_base_z_u): Delete. * config/arm/iterators.md (supf): Remove VLDRWQGB_S, VLDRWQGB_U, VLDRDQGB_S, VLDRDQGB_U. (VLDRWGBQ, VLDRDGBQ): Delete. * config/arm/mve.md (mve_vldrwq_gather_base_<supf>v4si): Delete. (mve_vldrwq_gather_base_z_<supf>v4si): Delete. (mve_vldrdq_gather_base_<supf>v2di): Delete. (mve_vldrdq_gather_base_z_<supf>v2di): Delete. (mve_vldrwq_gather_base_fv4sf): Delete. (mve_vldrwq_gather_base_z_fv4sf): Delete. (@mve_vldrq_gather_base_<mode>): New. (@mve_vldrq_gather_base_z_<mode>): New. * config/arm/unspecs.md (VLDRWQGB_S, VLDRWQGB_U, VLDRDQGB_S) (VLDRDQGB_U, VLDRWQGB_F): Delete. (VLDRGBQ, VLDRGBQ_Z): New. gcc/testsuite/ChangeLog: * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_s64.c: Update expected output. * gcc.target/arm/mve/intrinsics/vldrdq_gather_base_u64.c: Likewise.
2024-12-13arm: [MVE intrinsics] add load_gather_base shapeChristophe Lyon2-0/+39
This patch adds the load_gather_base shape description. Unlike other load_gather shapes, this one does not support overloaded forms. gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (struct load_gather_base_def): New. * config/arm/arm-mve-builtins-shapes.h: (load_gather_base): New.
2024-12-13arm: [MVE intrinsics] rework vldr gather_shifted_offsetChristophe Lyon9-653/+129
Implement vldr?q_gather_shifted_offset using the new MVE builtins framework. gcc/ChangeLog: * config/arm/arm-builtins.cc (arm_ldrgu_qualifiers) (arm_ldrgs_qualifiers, arm_ldrgs_z_qualifiers) (arm_ldrgu_z_qualifiers): Delete. * config/arm/arm-mve-builtins-base.cc (vldrq_gather_impl): Add support for shifted version. (vldrdq_gather_shifted, vldrhq_gather_shifted) (vldrwq_gather_shifted): New. * config/arm/arm-mve-builtins-base.def (vldrdq_gather_shifted) (vldrhq_gather_shifted, vldrwq_gather_shifted): New. * config/arm/arm-mve-builtins-base.h (vldrdq_gather_shifted) (vldrhq_gather_shifted, vldrwq_gather_shifted): New. * config/arm/arm_mve.h (vldrhq_gather_shifted_offset): Delete. (vldrhq_gather_shifted_offset_z): Delete. (vldrdq_gather_shifted_offset): Delete. (vldrdq_gather_shifted_offset_z): Delete. (vldrwq_gather_shifted_offset): Delete. (vldrwq_gather_shifted_offset_z): Delete. (vldrhq_gather_shifted_offset_s32): Delete. (vldrhq_gather_shifted_offset_s16): Delete. (vldrhq_gather_shifted_offset_u32): Delete. (vldrhq_gather_shifted_offset_u16): Delete. (vldrhq_gather_shifted_offset_z_s32): Delete. (vldrhq_gather_shifted_offset_z_s16): Delete. (vldrhq_gather_shifted_offset_z_u32): Delete. (vldrhq_gather_shifted_offset_z_u16): Delete. (vldrdq_gather_shifted_offset_s64): Delete. (vldrdq_gather_shifted_offset_u64): Delete. (vldrdq_gather_shifted_offset_z_s64): Delete. (vldrdq_gather_shifted_offset_z_u64): Delete. (vldrhq_gather_shifted_offset_f16): Delete. (vldrhq_gather_shifted_offset_z_f16): Delete. (vldrwq_gather_shifted_offset_f32): Delete. (vldrwq_gather_shifted_offset_s32): Delete. (vldrwq_gather_shifted_offset_u32): Delete. (vldrwq_gather_shifted_offset_z_f32): Delete. (vldrwq_gather_shifted_offset_z_s32): Delete. (vldrwq_gather_shifted_offset_z_u32): Delete. (__arm_vldrhq_gather_shifted_offset_s32): Delete. (__arm_vldrhq_gather_shifted_offset_s16): Delete. (__arm_vldrhq_gather_shifted_offset_u32): Delete. (__arm_vldrhq_gather_shifted_offset_u16): Delete. (__arm_vldrhq_gather_shifted_offset_z_s32): Delete. (__arm_vldrhq_gather_shifted_offset_z_s16): Delete. (__arm_vldrhq_gather_shifted_offset_z_u32): Delete. (__arm_vldrhq_gather_shifted_offset_z_u16): Delete. (__arm_vldrdq_gather_shifted_offset_s64): Delete. (__arm_vldrdq_gather_shifted_offset_u64): Delete. (__arm_vldrdq_gather_shifted_offset_z_s64): Delete. (__arm_vldrdq_gather_shifted_offset_z_u64): Delete. (__arm_vldrwq_gather_shifted_offset_s32): Delete. (__arm_vldrwq_gather_shifted_offset_u32): Delete. (__arm_vldrwq_gather_shifted_offset_z_s32): Delete. (__arm_vldrwq_gather_shifted_offset_z_u32): Delete. (__arm_vldrhq_gather_shifted_offset_f16): Delete. (__arm_vldrhq_gather_shifted_offset_z_f16): Delete. (__arm_vldrwq_gather_shifted_offset_f32): Delete. (__arm_vldrwq_gather_shifted_offset_z_f32): Delete. (__arm_vldrhq_gather_shifted_offset): Delete. (__arm_vldrhq_gather_shifted_offset_z): Delete. (__arm_vldrdq_gather_shifted_offset): Delete. (__arm_vldrdq_gather_shifted_offset_z): Delete. (__arm_vldrwq_gather_shifted_offset): Delete. (__arm_vldrwq_gather_shifted_offset_z): Delete. * config/arm/arm_mve_builtins.def (vldrhq_gather_shifted_offset_z_u, vldrhq_gather_shifted_offset_u) (vldrhq_gather_shifted_offset_z_s, vldrhq_gather_shifted_offset_s) (vldrdq_gather_shifted_offset_s, vldrhq_gather_shifted_offset_f) (vldrwq_gather_shifted_offset_f, vldrwq_gather_shifted_offset_s) (vldrdq_gather_shifted_offset_z_s) (vldrhq_gather_shifted_offset_z_f) (vldrwq_gather_shifted_offset_z_f) (vldrwq_gather_shifted_offset_z_s, vldrdq_gather_shifted_offset_u) (vldrwq_gather_shifted_offset_u, vldrdq_gather_shifted_offset_z_u) (vldrwq_gather_shifted_offset_z_u): Delete. * config/arm/iterators.md (supf): Remove VLDRHQGSO_S, VLDRHQGSO_U, VLDRDQGSO_S, VLDRDQGSO_U, VLDRWQGSO_S, VLDRWQGSO_U. (VLDRHGSOQ, VLDRDGSOQ, VLDRWGSOQ): Delete. * config/arm/mve.md (mve_vldrhq_gather_shifted_offset_<supf><mode>): Delete. (mve_vldrhq_gather_shifted_offset_z_<supf><mode>): Delete. (mve_vldrdq_gather_shifted_offset_<supf>v2di): Delete. (mve_vldrdq_gather_shifted_offset_z_<supf>v2di): Delete. (mve_vldrhq_gather_shifted_offset_fv8hf): Delete. (mve_vldrhq_gather_shifted_offset_z_fv8hf): Delete. (mve_vldrwq_gather_shifted_offset_fv4sf): Delete. (mve_vldrwq_gather_shifted_offset_<supf>v4si): Delete. (mve_vldrwq_gather_shifted_offset_z_fv4sf): Delete. (mve_vldrwq_gather_shifted_offset_z_<supf>v4si): Delete. (@mve_vldrq_gather_shifted_offset_<mode>): New. (@mve_vldrq_gather_shifted_offset_extend_v4si<US>): New. (@mve_vldrq_gather_shifted_offset_z_<mode>): New. (@mve_vldrq_gather_shifted_offset_z_extend_v4si<US>): New. * config/arm/unspecs.md (VLDRHQGSO_S, VLDRHQGSO_U, VLDRDQGSO_S) (VLDRDQGSO_U, VLDRHQGSO_F, VLDRWQGSO_F, VLDRWQGSO_S, VLDRWQGSO_U): Delete. (VLDRGSOQ, VLDRGSOQ_Z, VLDRGSOQ_EXT, VLDRGSOQ_EXT_Z): New.
2024-12-13arm: [MVE intrinsics] rework vldr gather_offsetChristophe Lyon8-884/+156
Implement vldr?q_gather_offset using the new MVE builtins framework. The patch introduces a new attribute iterator (MVE_u_elem) to accomodate the fact that ACLE's expected output description uses "uNN" for all modes, except V8HF where it expects ".f16". Using "V_sz_elem" would work, but would require to update several testcases. gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (class vldrq_gather_impl): New. (vldrbq_gather, vldrdq_gather, vldrhq_gather, vldrwq_gather): New. * config/arm/arm-mve-builtins-base.def (vldrbq_gather) (vldrdq_gather, vldrhq_gather, vldrwq_gather): New. * config/arm/arm-mve-builtins-base.h (vldrbq_gather) (vldrdq_gather, vldrhq_gather, vldrwq_gather): New. * config/arm/arm_mve.h (vldrbq_gather_offset): Delete. (vldrbq_gather_offset_z): Delete. (vldrhq_gather_offset): Delete. (vldrhq_gather_offset_z): Delete. (vldrdq_gather_offset): Delete. (vldrdq_gather_offset_z): Delete. (vldrwq_gather_offset): Delete. (vldrwq_gather_offset_z): Delete. (vldrbq_gather_offset_u8): Delete. (vldrbq_gather_offset_s8): Delete. (vldrbq_gather_offset_u16): Delete. (vldrbq_gather_offset_s16): Delete. (vldrbq_gather_offset_u32): Delete. (vldrbq_gather_offset_s32): Delete. (vldrbq_gather_offset_z_s16): Delete. (vldrbq_gather_offset_z_u8): Delete. (vldrbq_gather_offset_z_s32): Delete. (vldrbq_gather_offset_z_u16): Delete. (vldrbq_gather_offset_z_u32): Delete. (vldrbq_gather_offset_z_s8): Delete. (vldrhq_gather_offset_s32): Delete. (vldrhq_gather_offset_s16): Delete. (vldrhq_gather_offset_u32): Delete. (vldrhq_gather_offset_u16): Delete. (vldrhq_gather_offset_z_s32): Delete. (vldrhq_gather_offset_z_s16): Delete. (vldrhq_gather_offset_z_u32): Delete. (vldrhq_gather_offset_z_u16): Delete. (vldrdq_gather_offset_s64): Delete. (vldrdq_gather_offset_u64): Delete. (vldrdq_gather_offset_z_s64): Delete. (vldrdq_gather_offset_z_u64): Delete. (vldrhq_gather_offset_f16): Delete. (vldrhq_gather_offset_z_f16): Delete. (vldrwq_gather_offset_f32): Delete. (vldrwq_gather_offset_s32): Delete. (vldrwq_gather_offset_u32): Delete. (vldrwq_gather_offset_z_f32): Delete. (vldrwq_gather_offset_z_s32): Delete. (vldrwq_gather_offset_z_u32): Delete. (__arm_vldrbq_gather_offset_u8): Delete. (__arm_vldrbq_gather_offset_s8): Delete. (__arm_vldrbq_gather_offset_u16): Delete. (__arm_vldrbq_gather_offset_s16): Delete. (__arm_vldrbq_gather_offset_u32): Delete. (__arm_vldrbq_gather_offset_s32): Delete. (__arm_vldrbq_gather_offset_z_s8): Delete. (__arm_vldrbq_gather_offset_z_s32): Delete. (__arm_vldrbq_gather_offset_z_s16): Delete. (__arm_vldrbq_gather_offset_z_u8): Delete. (__arm_vldrbq_gather_offset_z_u32): Delete. (__arm_vldrbq_gather_offset_z_u16): Delete. (__arm_vldrhq_gather_offset_s32): Delete. (__arm_vldrhq_gather_offset_s16): Delete. (__arm_vldrhq_gather_offset_u32): Delete. (__arm_vldrhq_gather_offset_u16): Delete. (__arm_vldrhq_gather_offset_z_s32): Delete. (__arm_vldrhq_gather_offset_z_s16): Delete. (__arm_vldrhq_gather_offset_z_u32): Delete. (__arm_vldrhq_gather_offset_z_u16): Delete. (__arm_vldrdq_gather_offset_s64): Delete. (__arm_vldrdq_gather_offset_u64): Delete. (__arm_vldrdq_gather_offset_z_s64): Delete. (__arm_vldrdq_gather_offset_z_u64): Delete. (__arm_vldrwq_gather_offset_s32): Delete. (__arm_vldrwq_gather_offset_u32): Delete. (__arm_vldrwq_gather_offset_z_s32): Delete. (__arm_vldrwq_gather_offset_z_u32): Delete. (__arm_vldrhq_gather_offset_f16): Delete. (__arm_vldrhq_gather_offset_z_f16): Delete. (__arm_vldrwq_gather_offset_f32): Delete. (__arm_vldrwq_gather_offset_z_f32): Delete. (__arm_vldrbq_gather_offset): Delete. (__arm_vldrbq_gather_offset_z): Delete. (__arm_vldrhq_gather_offset): Delete. (__arm_vldrhq_gather_offset_z): Delete. (__arm_vldrdq_gather_offset): Delete. (__arm_vldrdq_gather_offset_z): Delete. (__arm_vldrwq_gather_offset): Delete. (__arm_vldrwq_gather_offset_z): Delete. * config/arm/arm_mve_builtins.def (vldrbq_gather_offset_u) (vldrbq_gather_offset_s, vldrbq_gather_offset_z_s) (vldrbq_gather_offset_z_u, vldrhq_gather_offset_z_u) (vldrhq_gather_offset_u, vldrhq_gather_offset_z_s) (vldrhq_gather_offset_s, vldrdq_gather_offset_s) (vldrhq_gather_offset_f, vldrwq_gather_offset_f) (vldrwq_gather_offset_s, vldrdq_gather_offset_z_s) (vldrhq_gather_offset_z_f, vldrwq_gather_offset_z_f) (vldrwq_gather_offset_z_s, vldrdq_gather_offset_u) (vldrwq_gather_offset_u, vldrdq_gather_offset_z_u) (vldrwq_gather_offset_z_u): Delete. * config/arm/iterators.md (MVE_u_elem): New. (supf): Remove VLDRBQGO_S, VLDRBQGO_U, VLDRHQGO_S, VLDRHQGO_U, VLDRDQGO_S, VLDRDQGO_U, VLDRWQGO_S, VLDRWQGO_U. (VLDRBGOQ, VLDRHGOQ, VLDRDGOQ, VLDRWGOQ): Delete. * config/arm/mve.md (mve_vldrbq_gather_offset_<supf><mode>): Delete. (mve_vldrbq_gather_offset_z_<supf><mode>): Delete. (mve_vldrhq_gather_offset_<supf><mode>): Delete. (mve_vldrhq_gather_offset_z_<supf><mode>): Delete. (mve_vldrdq_gather_offset_<supf>v2di): Delete. (mve_vldrdq_gather_offset_z_<supf>v2di): Delete. (mve_vldrhq_gather_offset_fv8hf): Delete. (mve_vldrhq_gather_offset_z_fv8hf): Delete. (mve_vldrwq_gather_offset_fv4sf): Delete. (mve_vldrwq_gather_offset_<supf>v4si): Delete. (mve_vldrwq_gather_offset_z_fv4sf): Delete. (mve_vldrwq_gather_offset_z_<supf>v4si): Delete. (@mve_vldrq_gather_offset_<mode>): New. (@mve_vldrq_gather_offset_extend_<mode><US>): New. (@mve_vldrq_gather_offset_z_<mode>): New. (@mve_vldrq_gather_offset_z_extend_<mode><US>): New. * config/arm/unspecs.md (VLDRBQGO_S, VLDRBQGO_U, VLDRHQGO_S) (VLDRHQGO_U, VLDRDQGO_S, VLDRDQGO_U, VLDRHQGO_F, VLDRWQGO_F) (VLDRWQGO_S, VLDRWQGO_U): Delete. (VLDRGOQ, VLDRGOQ_Z, VLDRGOQ_EXT, VLDRGOQ_EXT_Z): New.
2024-12-13arm: [MVE intrinsics] add load_ext_gather_offset shapeChristophe Lyon2-0/+59
This patch adds the load_ext_gather_offset shape description. gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (struct load_ext_gather): New. (struct load_ext_gather_offset_def): New. * config/arm/arm-mve-builtins-shapes.h (load_ext_gather_offset): New.
2024-12-13arm: [MVE intrinsics] rework vstr scatter_base_wbChristophe Lyon10-378/+128
Implement vstr?q_scatter_base_wb using the new MVE builtins framework. The patch introduces a new 'b' type for signatures, which represents the type of the 'base' argument of vstr?q_scatter_base_wb. gcc/ChangeLog: * config/arm/arm-builtins.cc (arm_strsbwbs_qualifiers) (arm_strsbwbu_qualifiers, arm_strsbwbs_p_qualifiers) (arm_strsbwbu_p_qualifiers): Delete. * config/arm/arm-mve-builtins-base.cc (vstrq_scatter_base_impl): Add support for MODE_wb. * config/arm/arm-mve-builtins-shapes.cc (parse_type): Add support for 'b' type. (store_scatter_base): Add support for MODE_wb. * config/arm/arm-mve-builtins.cc (function_resolver::require_pointer_to_type): New. * config/arm/arm-mve-builtins.h (function_resolver::require_pointer_to_type): New. * config/arm/arm_mve.h (vstrdq_scatter_base_wb): Delete. (vstrdq_scatter_base_wb_p): Delete. (vstrwq_scatter_base_wb_p): Delete. (vstrwq_scatter_base_wb): Delete. (vstrdq_scatter_base_wb_p_s64): Delete. (vstrdq_scatter_base_wb_p_u64): Delete. (vstrdq_scatter_base_wb_s64): Delete. (vstrdq_scatter_base_wb_u64): Delete. (vstrwq_scatter_base_wb_p_s32): Delete. (vstrwq_scatter_base_wb_p_f32): Delete. (vstrwq_scatter_base_wb_p_u32): Delete. (vstrwq_scatter_base_wb_s32): Delete. (vstrwq_scatter_base_wb_u32): Delete. (vstrwq_scatter_base_wb_f32): Delete. (__arm_vstrdq_scatter_base_wb_s64): Delete. (__arm_vstrdq_scatter_base_wb_u64): Delete. (__arm_vstrdq_scatter_base_wb_p_s64): Delete. (__arm_vstrdq_scatter_base_wb_p_u64): Delete. (__arm_vstrwq_scatter_base_wb_p_s32): Delete. (__arm_vstrwq_scatter_base_wb_p_u32): Delete. (__arm_vstrwq_scatter_base_wb_s32): Delete. (__arm_vstrwq_scatter_base_wb_u32): Delete. (__arm_vstrwq_scatter_base_wb_f32): Delete. (__arm_vstrwq_scatter_base_wb_p_f32): Delete. (__arm_vstrdq_scatter_base_wb): Delete. (__arm_vstrdq_scatter_base_wb_p): Delete. (__arm_vstrwq_scatter_base_wb_p): Delete. (__arm_vstrwq_scatter_base_wb): Delete. * config/arm/arm_mve_builtins.def (vstrwq_scatter_base_wb_u) (vstrdq_scatter_base_wb_u, vstrwq_scatter_base_wb_p_u) (vstrdq_scatter_base_wb_p_u, vstrwq_scatter_base_wb_s) (vstrwq_scatter_base_wb_f, vstrdq_scatter_base_wb_s) (vstrwq_scatter_base_wb_p_s, vstrwq_scatter_base_wb_p_f) (vstrdq_scatter_base_wb_p_s): Delete. * config/arm/iterators.md (supf): Remove VSTRWQSBWB_S, VSTRWQSBWB_U, VSTRDQSBWB_S, VSTRDQSBWB_U. (VSTRDSBQ, VSTRWSBWBQ, VSTRDSBWBQ): Delete. * config/arm/mve.md (mve_vstrwq_scatter_base_wb_<supf>v4si): Delete. (mve_vstrwq_scatter_base_wb_p_<supf>v4si): Delete. (mve_vstrwq_scatter_base_wb_fv4sf): Delete. (mve_vstrwq_scatter_base_wb_p_fv4sf): Delete. (mve_vstrdq_scatter_base_wb_<supf>v2di): Delete. (mve_vstrdq_scatter_base_wb_p_<supf>v2di): Delete. (@mve_vstrq_scatter_base_wb_<mode>): New. (@mve_vstrq_scatter_base_wb_p_<mode>): New. * config/arm/unspecs.md (VSTRWQSBWB_S, VSTRWQSBWB_U, VSTRWQSBWB_F) (VSTRDQSBWB_S, VSTRDQSBWB_U): Delete. (VSTRSBWBQ, VSTRSBWBQ_P): New.
2024-12-13arm: [MVE intrinsics] rework vstr scatter_baseChristophe Lyon9-360/+72
Implement vstr?q_scatter_base using the new MVE builtins framework. We need to introduce a new iterator (MVE_4) to support the set needed by vstr?q_scatter_base (V4SI V4SF V2DI). gcc/ChangeLog: * config/arm/arm-builtins.cc (arm_strsbs_qualifiers) (arm_strsbu_qualifiers, arm_strsbs_p_qualifiers) (arm_strsbu_p_qualifiers): Delete. * config/arm/arm-mve-builtins-base.cc (class vstrq_scatter_base_impl): New. (vstrwq_scatter_base, vstrdq_scatter_base): New. * config/arm/arm-mve-builtins-base.def (vstrwq_scatter_base) (vstrdq_scatter_base): New. * config/arm/arm-mve-builtins-base.h (vstrwq_scatter_base) (vstrdq_scatter_base): New. * config/arm/arm_mve.h (vstrwq_scatter_base): Delete. (vstrwq_scatter_base_p): Delete. (vstrdq_scatter_base_p): Delete. (vstrdq_scatter_base): Delete. (vstrwq_scatter_base_s32): Delete. (vstrwq_scatter_base_u32): Delete. (vstrwq_scatter_base_p_s32): Delete. (vstrwq_scatter_base_p_u32): Delete. (vstrdq_scatter_base_p_s64): Delete. (vstrdq_scatter_base_p_u64): Delete. (vstrdq_scatter_base_s64): Delete. (vstrdq_scatter_base_u64): Delete. (vstrwq_scatter_base_f32): Delete. (vstrwq_scatter_base_p_f32): Delete. (__arm_vstrwq_scatter_base_s32): Delete. (__arm_vstrwq_scatter_base_u32): Delete. (__arm_vstrwq_scatter_base_p_s32): Delete. (__arm_vstrwq_scatter_base_p_u32): Delete. (__arm_vstrdq_scatter_base_p_s64): Delete. (__arm_vstrdq_scatter_base_p_u64): Delete. (__arm_vstrdq_scatter_base_s64): Delete. (__arm_vstrdq_scatter_base_u64): Delete. (__arm_vstrwq_scatter_base_f32): Delete. (__arm_vstrwq_scatter_base_p_f32): Delete. (__arm_vstrwq_scatter_base): Delete. (__arm_vstrwq_scatter_base_p): Delete. (__arm_vstrdq_scatter_base_p): Delete. (__arm_vstrdq_scatter_base): Delete. * config/arm/arm_mve_builtins.def (vstrwq_scatter_base_s) (vstrwq_scatter_base_u, vstrwq_scatter_base_p_s) (vstrwq_scatter_base_p_u, vstrdq_scatter_base_s) (vstrwq_scatter_base_f, vstrdq_scatter_base_p_s) (vstrwq_scatter_base_p_f, vstrdq_scatter_base_u) (vstrdq_scatter_base_p_u): Delete. * config/arm/iterators.md (MVE_4): New. (supf): Remove VSTRWQSB_S, VSTRWQSB_U. (VSTRWSBQ): Delete. * config/arm/mve.md (mve_vstrwq_scatter_base_<supf>v4si): Delete. (mve_vstrwq_scatter_base_p_<supf>v4si): Delete. (mve_vstrdq_scatter_base_p_<supf>v2di): Delete. (mve_vstrdq_scatter_base_<supf>v2di): Delete. (mve_vstrwq_scatter_base_fv4sf): Delete. (mve_vstrwq_scatter_base_p_fv4sf): Delete. (@mve_vstrq_scatter_base_<mode>): New. (@mve_vstrq_scatter_base_p_<mode>): New. * config/arm/unspecs.md (VSTRWQSB_S, VSTRWQSB_U, VSTRWQSB_F): Delete. (VSTRSBQ, VSTRSBQ_P): New.
2024-12-13arm: [MVE intrinsics] Add store_scatter_base shapeChristophe Lyon2-0/+50
This patch adds the store_scatter_base shape description. gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (store_scatter_base): New. * config/arm/arm-mve-builtins-shapes.h (store_scatter_base): New.
2024-12-13arm: [MVE intrinsics] Check immediate is a multiple in a rangeChristophe Lyon2-0/+63
This patch adds support to check that an immediate is a multiple of a given value in a given range. This will be used for instance by scatter_base to check that offset is in +/-4*[0..127]. Unlike require_immediate_range, require_immediate_range_multiple accepts signed range bounds to handle the above case. gcc/ChangeLog: * config/arm/arm-mve-builtins.cc (report_out_of_range_multiple): New. (function_checker::require_signed_immediate): New. (function_checker::require_immediate_range_multiple): New. * config/arm/arm-mve-builtins.h (function_checker::require_immediate_range_multiple): New. (function_checker::require_signed_immediate): New.
2024-12-13arm: [MVE intrinsics] rework vstr_scatter_shifted_offsetChristophe Lyon9-786/+103
Implement vstr?q_scatter_shifted_offset intrinsics using the MVE builtins framework. We use the same approach as the previous patch, and we now have four sets of patterns: - vector scatter stores with shifted offset (non-truncating) - predicated vector scatter stores with shifted offset (non-truncating) - truncating vector scatter stores with shifted offset - predicated truncating vector scatter stores with shifted offset Note that the truncating patterns do not use an iterator since there is only one such variant: V4SI to V4HI. We need to introduce new iterators: - MVE_VLD_ST_scatter_shifted, same as MVE_VLD_ST_scatter without V16QI - MVE_scatter_shift to map the mode to the shift amount gcc/ChangeLog: * config/arm/arm-builtins.cc (arm_strss_qualifiers) (arm_strsu_qualifiers, arm_strsu_p_qualifiers) (arm_strss_p_qualifiers): Delete. * config/arm/arm-mve-builtins-base.cc (class vstrq_scatter_impl): Add support for shifted version. (vstrdq_scatter_shifted, vstrhq_scatter_shifted) (vstrwq_scatter_shifted): New. * config/arm/arm-mve-builtins-base.def (vstrhq_scatter_shifted) (vstrwq_scatter_shifted, vstrdq_scatter_shifted): New. * config/arm/arm-mve-builtins-base.h (vstrhq_scatter_shifted) (vstrwq_scatter_shifted, vstrdq_scatter_shifted): New. * config/arm/arm_mve.h (vstrhq_scatter_shifted_offset): Delete. (vstrhq_scatter_shifted_offset_p): Delete. (vstrdq_scatter_shifted_offset_p): Delete. (vstrdq_scatter_shifted_offset): Delete. (vstrwq_scatter_shifted_offset_p): Delete. (vstrwq_scatter_shifted_offset): Delete. (vstrhq_scatter_shifted_offset_s32): Delete. (vstrhq_scatter_shifted_offset_s16): Delete. (vstrhq_scatter_shifted_offset_u32): Delete. (vstrhq_scatter_shifted_offset_u16): Delete. (vstrhq_scatter_shifted_offset_p_s32): Delete. (vstrhq_scatter_shifted_offset_p_s16): Delete. (vstrhq_scatter_shifted_offset_p_u32): Delete. (vstrhq_scatter_shifted_offset_p_u16): Delete. (vstrdq_scatter_shifted_offset_p_s64): Delete. (vstrdq_scatter_shifted_offset_p_u64): Delete. (vstrdq_scatter_shifted_offset_s64): Delete. (vstrdq_scatter_shifted_offset_u64): Delete. (vstrhq_scatter_shifted_offset_f16): Delete. (vstrhq_scatter_shifted_offset_p_f16): Delete. (vstrwq_scatter_shifted_offset_f32): Delete. (vstrwq_scatter_shifted_offset_p_f32): Delete. (vstrwq_scatter_shifted_offset_p_s32): Delete. (vstrwq_scatter_shifted_offset_p_u32): Delete. (vstrwq_scatter_shifted_offset_s32): Delete. (vstrwq_scatter_shifted_offset_u32): Delete. (__arm_vstrhq_scatter_shifted_offset_s32): Delete. (__arm_vstrhq_scatter_shifted_offset_s16): Delete. (__arm_vstrhq_scatter_shifted_offset_u32): Delete. (__arm_vstrhq_scatter_shifted_offset_u16): Delete. (__arm_vstrhq_scatter_shifted_offset_p_s32): Delete. (__arm_vstrhq_scatter_shifted_offset_p_s16): Delete. (__arm_vstrhq_scatter_shifted_offset_p_u32): Delete. (__arm_vstrhq_scatter_shifted_offset_p_u16): Delete. (__arm_vstrdq_scatter_shifted_offset_p_s64): Delete. (__arm_vstrdq_scatter_shifted_offset_p_u64): Delete. (__arm_vstrdq_scatter_shifted_offset_s64): Delete. (__arm_vstrdq_scatter_shifted_offset_u64): Delete. (__arm_vstrwq_scatter_shifted_offset_p_s32): Delete. (__arm_vstrwq_scatter_shifted_offset_p_u32): Delete. (__arm_vstrwq_scatter_shifted_offset_s32): Delete. (__arm_vstrwq_scatter_shifted_offset_u32): Delete. (__arm_vstrhq_scatter_shifted_offset_f16): Delete. (__arm_vstrhq_scatter_shifted_offset_p_f16): Delete. (__arm_vstrwq_scatter_shifted_offset_f32): Delete. (__arm_vstrwq_scatter_shifted_offset_p_f32): Delete. (__arm_vstrhq_scatter_shifted_offset): Delete. (__arm_vstrhq_scatter_shifted_offset_p): Delete. (__arm_vstrdq_scatter_shifted_offset_p): Delete. (__arm_vstrdq_scatter_shifted_offset): Delete. (__arm_vstrwq_scatter_shifted_offset_p): Delete. (__arm_vstrwq_scatter_shifted_offset): Delete. * config/arm/arm_mve_builtins.def (vstrhq_scatter_shifted_offset_p_u) (vstrhq_scatter_shifted_offset_u) (vstrhq_scatter_shifted_offset_p_s) (vstrhq_scatter_shifted_offset_s, vstrdq_scatter_shifted_offset_s) (vstrhq_scatter_shifted_offset_f, vstrwq_scatter_shifted_offset_f) (vstrwq_scatter_shifted_offset_s) (vstrdq_scatter_shifted_offset_p_s) (vstrhq_scatter_shifted_offset_p_f) (vstrwq_scatter_shifted_offset_p_f) (vstrwq_scatter_shifted_offset_p_s) (vstrdq_scatter_shifted_offset_u, vstrwq_scatter_shifted_offset_u) (vstrdq_scatter_shifted_offset_p_u) (vstrwq_scatter_shifted_offset_p_u): Delete. * config/arm/iterators.md (MVE_VLD_ST_scatter_shifted): New. (MVE_scatter_shift): New. (supf): Remove VSTRHQSSO_S, VSTRHQSSO_U, VSTRDQSSO_S, VSTRDQSSO_U, VSTRWQSSO_U, VSTRWQSSO_S. (VSTRHSSOQ, VSTRDSSOQ, VSTRWSSOQ): Delete. * config/arm/mve.md (mve_vstrhq_scatter_shifted_offset_p_<supf><mode>): Delete. (mve_vstrhq_scatter_shifted_offset_p_<supf><mode>_insn): Delete. (mve_vstrhq_scatter_shifted_offset_<supf><mode>): Delete. (mve_vstrhq_scatter_shifted_offset_<supf><mode>_insn): Delete. (mve_vstrdq_scatter_shifted_offset_p_<supf>v2di): Delete. (mve_vstrdq_scatter_shifted_offset_p_<supf>v2di_insn): Delete. (mve_vstrdq_scatter_shifted_offset_<supf>v2di): Delete. (mve_vstrdq_scatter_shifted_offset_<supf>v2di_insn): Delete. (mve_vstrhq_scatter_shifted_offset_fv8hf): Delete. (mve_vstrhq_scatter_shifted_offset_fv8hf_insn): Delete. (mve_vstrhq_scatter_shifted_offset_p_fv8hf): Delete. (mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn): Delete. (mve_vstrwq_scatter_shifted_offset_fv4sf): Delete. (mve_vstrwq_scatter_shifted_offset_fv4sf_insn): Delete. (mve_vstrwq_scatter_shifted_offset_p_fv4sf): Delete. (mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn): Delete. (mve_vstrwq_scatter_shifted_offset_p_<supf>v4si): Delete. (mve_vstrwq_scatter_shifted_offset_p_<supf>v4si_insn): Delete. (mve_vstrwq_scatter_shifted_offset_<supf>v4si): Delete. (mve_vstrwq_scatter_shifted_offset_<supf>v4si_insn): Delete. (@mve_vstrq_scatter_shifted_offset_<mode>): New. (@mve_vstrq_scatter_shifted_offset_p_<mode>): New. (mve_vstrq_truncate_scatter_shifted_offset_v4si): New. (mve_vstrq_truncate_scatter_shifted_offset_p_v4si): New. * config/arm/unspecs.md (VSTRDQSSO_S, VSTRDQSSO_U, VSTRWQSSO_S) (VSTRWQSSO_U, VSTRHQSSO_F, VSTRWQSSO_F, VSTRHQSSO_S, VSTRHQSSO_U): Delete. (VSTRSSOQ, VSTRSSOQ_P, VSTRSSOQ_TRUNC, VSTRSSOQ_TRUNC_P): New.
2024-12-13arm: [MVE intrinsics] rework vstr?q_scatter_offsetChristophe Lyon9-1017/+143
This patch implements vstr?q_scatter_offset using the new MVE builtins framework. It uses a similar approach to a previous patch which grouped truncating and non-truncating stores in two sets of patterns, rather than having groups of patterns depending on the destination size. We need to add the 'integer_64' types of suffixes in order to support vstrdq_scatter_offset. The patch introduces the MVE_VLD_ST_scatter iterator, similar to MVE_VLD_ST but which also includes V2DI (again, for vstrdq_scatter_offset). The new MVE_scatter_offset mode attribute is used to map the destination type to the offset type (both are usually equal, except when the destination is floating-point). We end up with four sets of patterns: - vector scatter stores with offset (non-truncating) - predicated vector scatter stores with offset (non-truncating) - truncating vector scatter stores with offset - predicated truncating vector scatter stores with offset gcc/ChangeLog: * config/arm/arm-mve-builtins-base.cc (class vstrq_scatter_impl): New. (vstrbq_scatter, vstrhq_scatter, vstrwq_scatter, vstrdq_scatter): New. * config/arm/arm-mve-builtins-base.def (vstrbq_scatter) (vstrhq_scatter, vstrwq_scatter, vstrdq_scatter): New. * config/arm/arm-mve-builtins-base.h (vstrbq_scatter) (vstrhq_scatter, vstrwq_scatter, vstrdq_scatter): New. * config/arm/arm-mve-builtins.cc (integer_64): New. * config/arm/arm_mve.h (vstrbq_scatter_offset): Delete. (vstrbq_scatter_offset_p): Delete. (vstrhq_scatter_offset): Delete. (vstrhq_scatter_offset_p): Delete. (vstrdq_scatter_offset_p): Delete. (vstrdq_scatter_offset): Delete. (vstrwq_scatter_offset_p): Delete. (vstrwq_scatter_offset): Delete. (vstrbq_scatter_offset_s8): Delete. (vstrbq_scatter_offset_u8): Delete. (vstrbq_scatter_offset_u16): Delete. (vstrbq_scatter_offset_s16): Delete. (vstrbq_scatter_offset_u32): Delete. (vstrbq_scatter_offset_s32): Delete. (vstrbq_scatter_offset_p_s8): Delete. (vstrbq_scatter_offset_p_s32): Delete. (vstrbq_scatter_offset_p_s16): Delete. (vstrbq_scatter_offset_p_u8): Delete. (vstrbq_scatter_offset_p_u32): Delete. (vstrbq_scatter_offset_p_u16): Delete. (vstrhq_scatter_offset_s32): Delete. (vstrhq_scatter_offset_s16): Delete. (vstrhq_scatter_offset_u32): Delete. (vstrhq_scatter_offset_u16): Delete. (vstrhq_scatter_offset_p_s32): Delete. (vstrhq_scatter_offset_p_s16): Delete. (vstrhq_scatter_offset_p_u32): Delete. (vstrhq_scatter_offset_p_u16): Delete. (vstrdq_scatter_offset_p_s64): Delete. (vstrdq_scatter_offset_p_u64): Delete. (vstrdq_scatter_offset_s64): Delete. (vstrdq_scatter_offset_u64): Delete. (vstrhq_scatter_offset_f16): Delete. (vstrhq_scatter_offset_p_f16): Delete. (vstrwq_scatter_offset_f32): Delete. (vstrwq_scatter_offset_p_f32): Delete. (vstrwq_scatter_offset_p_s32): Delete. (vstrwq_scatter_offset_p_u32): Delete. (vstrwq_scatter_offset_s32): Delete. (vstrwq_scatter_offset_u32): Delete. (__arm_vstrbq_scatter_offset_s8): Delete. (__arm_vstrbq_scatter_offset_s32): Delete. (__arm_vstrbq_scatter_offset_s16): Delete. (__arm_vstrbq_scatter_offset_u8): Delete. (__arm_vstrbq_scatter_offset_u32): Delete. (__arm_vstrbq_scatter_offset_u16): Delete. (__arm_vstrbq_scatter_offset_p_s8): Delete. (__arm_vstrbq_scatter_offset_p_s32): Delete. (__arm_vstrbq_scatter_offset_p_s16): Delete. (__arm_vstrbq_scatter_offset_p_u8): Delete. (__arm_vstrbq_scatter_offset_p_u32): Delete. (__arm_vstrbq_scatter_offset_p_u16): Delete. (__arm_vstrhq_scatter_offset_s32): Delete. (__arm_vstrhq_scatter_offset_s16): Delete. (__arm_vstrhq_scatter_offset_u32): Delete. (__arm_vstrhq_scatter_offset_u16): Delete. (__arm_vstrhq_scatter_offset_p_s32): Delete. (__arm_vstrhq_scatter_offset_p_s16): Delete. (__arm_vstrhq_scatter_offset_p_u32): Delete. (__arm_vstrhq_scatter_offset_p_u16): Delete. (__arm_vstrdq_scatter_offset_p_s64): Delete. (__arm_vstrdq_scatter_offset_p_u64): Delete. (__arm_vstrdq_scatter_offset_s64): Delete. (__arm_vstrdq_scatter_offset_u64): Delete. (__arm_vstrwq_scatter_offset_p_s32): Delete. (__arm_vstrwq_scatter_offset_p_u32): Delete. (__arm_vstrwq_scatter_offset_s32): Delete. (__arm_vstrwq_scatter_offset_u32): Delete. (__arm_vstrhq_scatter_offset_f16): Delete. (__arm_vstrhq_scatter_offset_p_f16): Delete. (__arm_vstrwq_scatter_offset_f32): Delete. (__arm_vstrwq_scatter_offset_p_f32): Delete. (__arm_vstrbq_scatter_offset): Delete. (__arm_vstrbq_scatter_offset_p): Delete. (__arm_vstrhq_scatter_offset): Delete. (__arm_vstrhq_scatter_offset_p): Delete. (__arm_vstrdq_scatter_offset_p): Delete. (__arm_vstrdq_scatter_offset): Delete. (__arm_vstrwq_scatter_offset_p): Delete. (__arm_vstrwq_scatter_offset): Delete. * config/arm/arm_mve_builtins.def (vstrbq_scatter_offset_s) (vstrbq_scatter_offset_u, vstrbq_scatter_offset_p_s) (vstrbq_scatter_offset_p_u, vstrhq_scatter_offset_p_u) (vstrhq_scatter_offset_u, vstrhq_scatter_offset_p_s) (vstrhq_scatter_offset_s, vstrdq_scatter_offset_s) (vstrhq_scatter_offset_f, vstrwq_scatter_offset_f) (vstrwq_scatter_offset_s, vstrdq_scatter_offset_p_s) (vstrhq_scatter_offset_p_f, vstrwq_scatter_offset_p_f) (vstrwq_scatter_offset_p_s, vstrdq_scatter_offset_u) (vstrwq_scatter_offset_u, vstrdq_scatter_offset_p_u) (vstrwq_scatter_offset_p_u) Delete. * config/arm/iterators.md (MVE_VLD_ST_scatter): New. (MVE_scatter_offset): New. (MVE_elem_ch): Add entry for V2DI. (supf): Remove VSTRBQSO_S, VSTRBQSO_U, VSTRHQSO_S, VSTRHQSO_U, VSTRDQSO_S, VSTRDQSO_U, VSTRWQSO_U, VSTRWQSO_S. (VSTRBSOQ, VSTRHSOQ, VSTRDSOQ, VSTRWSOQ): Delete. * config/arm/mve.md (mve_vstrbq_scatter_offset_<supf><mode>): Delete. (mve_vstrbq_scatter_offset_<supf><mode>_insn): Delete. (mve_vstrbq_scatter_offset_p_<supf><mode>): Delete. (mve_vstrbq_scatter_offset_p_<supf><mode>_insn): Delete. (mve_vstrhq_scatter_offset_p_<supf><mode>): Delete. (mve_vstrhq_scatter_offset_p_<supf><mode>_insn): Delete. (mve_vstrhq_scatter_offset_<supf><mode>): Delete. (mve_vstrhq_scatter_offset_<supf><mode>_insn): Delete. (mve_vstrdq_scatter_offset_p_<supf>v2di): Delete. (mve_vstrdq_scatter_offset_p_<supf>v2di_insn): Delete. (mve_vstrdq_scatter_offset_<supf>v2di): Delete. (mve_vstrdq_scatter_offset_<supf>v2di_insn): Delete. (mve_vstrhq_scatter_offset_fv8hf): Delete. (mve_vstrhq_scatter_offset_fv8hf_insn): Delete. (mve_vstrhq_scatter_offset_p_fv8hf): Delete. (mve_vstrhq_scatter_offset_p_fv8hf_insn): Delete. (mve_vstrwq_scatter_offset_fv4sf): Delete. (mve_vstrwq_scatter_offset_fv4sf_insn): Delete. (mve_vstrwq_scatter_offset_p_fv4sf): Delete. (mve_vstrwq_scatter_offset_p_fv4sf_insn): Delete. (mve_vstrwq_scatter_offset_p_<supf>v4si): Delete. (mve_vstrwq_scatter_offset_p_<supf>v4si_insn): Delete. (mve_vstrwq_scatter_offset_<supf>v4si): Delete. (mve_vstrwq_scatter_offset_<supf>v4si_insn): Delete. (@mve_vstrq_scatter_offset_<mode>): New. (@mve_vstrq_scatter_offset_p_<mode>): New. (@mve_vstrq_truncate_scatter_offset_<mode>): New. (@mve_vstrq_truncate_scatter_offset_p_<mode>): New. * config/arm/unspecs.md (VSTRBQSO_S, VSTRBQSO_U, VSTRHQSO_S) (VSTRDQSO_S, VSTRDQSO_U, VSTRWQSO_S, VSTRWQSO_U, VSTRHQSO_F) (VSTRWQSO_F, VSTRHQSO_U): Delete. (VSTRQSO, VSTRQSO_P, VSTRQSO_TRUNC, VSTRQSO_TRUNC_P): New.
2024-12-13arm: [MVE intrinsics] add store_scatter_offset shapeChristophe Lyon2-0/+65
This patch adds the store_scatter_offset shape and uses a new helper class (store_scatter), which will also be used by later patches. gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (struct store_scatter): New. (struct store_scatter_offset_def): New. * config/arm/arm-mve-builtins-shapes.h (store_scatter_offset): New.
2024-12-13arm: [MVE intrinsics] add mode_after_pred helper in function_shapeChristophe Lyon3-1/+21
This new helper returns true if the mode suffix goes after the predicate suffix. This is true in most cases, so the base implementations in nonoverloaded_base and overloaded_base return true. For instance: vaddq_m_n_s32. This will be useful in later patches to implement vstr?q_scatter_offset_p (_p appears after _offset). gcc/ChangeLog: * config/arm/arm-mve-builtins-shapes.cc (struct nonoverloaded_base): Implement mode_after_pred. (struct overloaded_base): Likewise. * config/arm/arm-mve-builtins.cc (function_builder::get_name): Call mode_after_pred as needed. * config/arm/arm-mve-builtins.h (function_shape): Add mode_after_pred.
2024-12-10arm: Fix LDRD register overlap [PR117675]Wilco Dijkstra5-2/+37
The register indexed variants of LDRD have complex register overlap constraints which makes them hard to use without using output_move_double (which can't be used for atomics as it doesn't guarantee to emit atomic LDRD/STRD when required). Add a new predicate and constraint for plain LDRD/STRD with base or base+imm. This blocks register indexing and fixes PR117675. gcc: PR target/117675 * config/arm/arm.cc (arm_ldrd_legitimate_address): New function. * config/arm/arm-protos.h (arm_ldrd_legitimate_address): New prototype. * config/arm/constraints.md: Add new Uo constraint. * config/arm/predicates.md (arm_ldrd_memory_operand): Add new predicate. * config/arm/sync.md (arm_atomic_loaddi2_ldrd): Use arm_ldrd_memory_operand and Uo. gcc/testsuite: PR target/117675 * gcc.target/arm/pr117675.c: Add new test.
2024-12-09c++: Allow overloaded builtins to be used in SFINAE contextMatthew Malcomson3-6/+5
This commit newly introduces the ability to use overloaded builtins in C++ SFINAE context. The goal behind this is in order to ensure there is a single mechanism that libstdc++ can use to determine whether a given type can be used in the atomic fetch_add (and similar) builtins. I am working on another patch that hopes to use this mechanism to identify whether fetch_add (and similar) work on floating point types. Current state of the world: GCC currently exposes resolved versions of these builtins to the user, so for GCC it's currently possible to use tests similar to the below to check for atomic loads on a 2 byte sized object. #if __has_builtin(__atomic_load_2) Clang does not expose resolved versions of the atomic builtins. clang currently allows SFINAE on builtins, so that C++ code can check whether a builtin is available on a given type. GCC does not (and that is what this patch aims to change). C libraries like libatomic can check whether a given atomic builtin can work on a given type by using autoconf to check for a miscompilation when attempting such a use. My goal: I would like to enable floating point fetch_add (and similar) in GCC, in order to use those overloads in libstdc++ implementation of atomic<float>::fetch_add. This should allow compilers targeting GPU's which have floating point fetch_add instructions to emit optimal code. In order to do that I need some consistent mechanism that libstdc++ can use to identify whether the fetch_add builtins have floating point overloads (and for which types these exist). I would hence like to enable SFINAE on builtins, so that libstdc++ can use that mechanism for the floating point fetch_add builtins. Implementation follows the existing mechanism for handling SFINAE contexts in c-common.cc. A boolean is passed into the c-common.cc function indicating whether these functions should emit errors or not. This boolean comes from `complain & tf_error` in the C++ frontend. (Similar to other functions like valid_array_size_p and c_build_vec_perm_expr). This is done both for resolve_overloaded_builtin and check_builtin_function_arguments, both of which can be used in SFINAE contexts. I attempted to trigger something using the `reject_gcc_builtin` function in an SFINAE context. Given the context where this function is called from the C++ frontend it looks like it may be possible, but I did not manage to trigger this in template context by attempting to do something similar to the testcases added around those calls. - I would appreciate any feedback on whether this is something that can happen in a template context, and if so some help writing a relevant testcase for it. Both of these functions have target hooks for target specific builtins that I have updated to take the extra boolean flag. I have not adjusted the functions implementing those target hooks (except to update the declarations) so target specific builtins will still error in SFINAE contexts. - I could imagine not updating the target hook definition since nothing would use that change. However I figure that allowing targets to decide this behaviour would be the right thing to do eventually, and since this is the target-independent part of the change to do that this patch should make that change. Could adjust if others disagree. Other relevant points that I'd appreciate reviewers check: - I did not pass this new flag through atomic_bitint_fetch_using_cas_loop since the _BitInt type is not available in the C++ frontend and I didn't want if conditions that can not be executed in the source. - I only test non-compile-time-constant types with SVE types, since I do not know of a way to get a VLA into a SFINAE context. - While writing tests I noticed a few differences with clang in this area. I don't think they are problematic but am mentioning them for completeness and to allow others to judge if these are a problem). - atomic_fetch_add on a boolean is allowed by clang. - When __atomic_load is passed an invalid memory model (i.e. too large), we give an SFINAE failure while clang does not. Bootstrap and regression tested on AArch64 and x86_64. Built first stage on targets whose target hook declaration needed updated (though did not regtest etc). Targets triplets I built in order to check the backend specific changes I made: - arm-none-linux-gnueabihf - avr-linux-gnu - riscv-linux-gnu - powerpc-linux-gnu - s390x-linux-gnu Ok for commit to trunk? gcc/c-family/ChangeLog: * c-common.cc (builtin_function_validate_nargs, check_builtin_function_arguments, speculation_safe_value_resolve_call, speculation_safe_value_resolve_params, sync_resolve_size, sync_resolve_params, get_atomic_generic_size, resolve_overloaded_atomic_exchange, resolve_overloaded_atomic_compare_exchange, resolve_overloaded_atomic_load, resolve_overloaded_atomic_store, resolve_overloaded_builtin): Add `complain` boolean parameter and determine whether to emit errors based on its value. * c-common.h (check_builtin_function_arguments, resolve_overloaded_builtin): Mention `complain` boolean parameter in declarations. Give it a default of `true`. gcc/ChangeLog: * config/aarch64/aarch64-c.cc (aarch64_resolve_overloaded_builtin,aarch64_check_builtin_call): Add new unused boolean parameter to match target hook definition. * config/arm/arm-builtins.cc (arm_check_builtin_call): Likewise. * config/arm/arm-c.cc (arm_resolve_overloaded_builtin): Likewise. * config/arm/arm-protos.h (arm_check_builtin_call): Likewise. * config/avr/avr-c.cc (avr_resolve_overloaded_builtin): Likewise. * config/riscv/riscv-c.cc (riscv_check_builtin_call, riscv_resolve_overloaded_builtin): Likewise. * config/rs6000/rs6000-c.cc (altivec_resolve_overloaded_builtin): Likewise. * config/rs6000/rs6000-protos.h (altivec_resolve_overloaded_builtin): Likewise. * config/s390/s390-c.cc (s390_resolve_overloaded_builtin): Likewise. * doc/tm.texi: Regenerate. * target.def (TARGET_RESOLVE_OVERLOADED_BUILTIN, TARGET_CHECK_BUILTIN_CALL): Update prototype to include a boolean parameter that indicates whether errors should be emitted. Update documentation to mention this fact. gcc/cp/ChangeLog: * call.cc (build_cxx_call): Pass `complain` parameter to check_builtin_function_arguments. Take its value from the `tsubst_flags_t` type `complain & tf_error`. * semantics.cc (finish_call_expr): Pass `complain` parameter to resolve_overloaded_builtin. Take its value from the `tsubst_flags_t` type `complain & tf_error`. gcc/testsuite/ChangeLog: * g++.dg/template/builtin-atomic-overloads.def: New test. * g++.dg/template/builtin-atomic-overloads1.C: New test. * g++.dg/template/builtin-atomic-overloads2.C: New test. * g++.dg/template/builtin-atomic-overloads3.C: New test. * g++.dg/template/builtin-atomic-overloads4.C: New test. * g++.dg/template/builtin-atomic-overloads5.C: New test. * g++.dg/template/builtin-atomic-overloads6.C: New test. * g++.dg/template/builtin-atomic-overloads7.C: New test. * g++.dg/template/builtin-atomic-overloads8.C: New test. * g++.dg/template/builtin-sfinae-check-function-arguments.C: New test. * g++.dg/template/builtin-speculation-overloads.def: New test. * g++.dg/template/builtin-speculation-overloads1.C: New test. * g++.dg/template/builtin-speculation-overloads2.C: New test. * g++.dg/template/builtin-speculation-overloads3.C: New test. * g++.dg/template/builtin-speculation-overloads4.C: New test. * g++.dg/template/builtin-speculation-overloads5.C: New test. * g++.dg/template/builtin-validate-nargs.C: New test. Signed-off-by: Matthew Malcomson <mmalcomson@nvidia.com>
2024-12-09arm: remove obsolete vcond expandersRichard Earnshaw3-116/+0
The vcond{,u} expander paterns have been declared as obsolete. Remove them from the Arm backend. gcc/ChangeLog: PR target/114189 * config/arm/arm-protos.h (arm_expand_vcond): Delete prototype. * config/arm/arm.cc (arm_expand_vcond): Delete function. * config/arm/vec-common.md (vcond<mode><mode>): Delete pattern (vcond<V_cvtto><mode>): Likewise. (vcond<VH_cvtto><mode>): Likewise. (vcondu<mode><v_cmp_result>): Likewise.
2024-12-06diagnostics: UX: add doc URLs for attributes (v2)David Malcolm1-0/+3
This is v2 of the patch; v1 was here: https://gcc.gnu.org/pipermail/gcc-patches/2024-June/655541.html Changed in v2: * added a new TARGET_DOCUMENTATION_NAME hook for figuring out which documentation URL to use when there are multiple per-target docs, such as for __attribute__((interrupt)); implemented this for all targets that have target-specific attributes * moved attribute_urlifier and its support code to a new gcc-attribute-urlifier.cc since it needs to use targetm for the above; gcc-urlifier.o is used by the driver. * fixed extend.texi so that some attributes that failed to appear in attr-urls.def now do so (affected nvptx "kernel" and "shared" attrs) * regenerated attr-urls.def for the above fix, and bringing in attributes added since v1 of the patch In r14-5118-gc5db4d8ba5f3de I added a mechanism to automatically add documentation URLs to quoted strings in diagnostics. In r14-6920-g9e49746da303b8 I added a mechanism to generate URLs for mentions of command-line options in quoted strings in diagnostics. This patch does a similar thing for attributes. It adds a new Python 3 script to scrape the generated HTML looking for documentation of attributes, and uses this to (re)generate a new gcc/attr-urls.def file. Running "make regenerate-attr-urls" after rebuilding the HTML docs will regenerate gcc/attr-urls.def in the source directory. The patch uses this to optionally add doc URLs for attributes in any diagnostic emitted during the lifetime of a auto_urlify_attributes instance, and adds such instances everywhere that a diagnostic refers to a diagnostic within quotes (based on grepping the source tree for references to attributes in strings and in code). For example, given: $ ./xgcc -B. -S ../../src/gcc/testsuite/gcc.dg/attr-access-2.c ../../src/gcc/testsuite/gcc.dg/attr-access-2.c:14:16: warning: attribute ‘access(read_write, 2, 3)’ positional argument 2 conflicts with previous designation by argument 1 [-Wattributes] with this patch the quoted text `access(read_write, 2, 3)' automatically gains the URL for our docs for "access": https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-access-function-attribute in a sufficiently modern terminal. Like r14-6920-g9e49746da303b8 this avoids the Makefile target depending on the generated HTML, since a missing URL is a minor problem, whereas requiring all users to build HTML docs seems more involved. Doing so also avoids Python 3 as a build requirement for everyone, but instead just for developers addding attributes. Like the options, we could add a CI test for this. The patch gathers both general and target-specific attributes. For example, the function attribute "interrupt" has 19 URLs within our docs: one common, and 18 target-specific ones. The patch adds a new target hook used when selecting the most appropriate one. Signed-off-by: David Malcolm <dmalcolm@redhat.com> gcc/ChangeLog: * Makefile.in (OBJS): Add -attribute-urlifier.o. (ATTR_URLS_HTML_DEPS): New. (regenerate-attr-urls): New. (regenerate-attr-urls-unit-test): New. * attr-urls.def: New file. * attribs.cc: Include "gcc-urlifier.h". (decl_attributes): Use auto_urlify_attributes. * config/aarch64/aarch64.cc (TARGET_DOCUMENTATION_NAME): New. * config/arc/arc.cc (TARGET_DOCUMENTATION_NAME): New. * config/arm/arm.cc (TARGET_DOCUMENTATION_NAME): New. * config/bfin/bfin.cc (TARGET_DOCUMENTATION_NAME): New. * config/bpf/bpf.cc (TARGET_DOCUMENTATION_NAME): New. * config/epiphany/epiphany.cc (TARGET_DOCUMENTATION_NAME): New. * config/gcn/gcn.cc (TARGET_DOCUMENTATION_NAME): New. * config/h8300/h8300.cc (TARGET_DOCUMENTATION_NAME): New. * config/i386/i386.cc (TARGET_DOCUMENTATION_NAME): New. * config/ia64/ia64.cc (TARGET_DOCUMENTATION_NAME): New. * config/m32c/m32c.cc (TARGET_DOCUMENTATION_NAME): New. * config/m32r/m32r.cc (TARGET_DOCUMENTATION_NAME): New. * config/m68k/m68k.cc (TARGET_DOCUMENTATION_NAME): New. * config/mcore/mcore.cc (TARGET_DOCUMENTATION_NAME): New. * config/microblaze/microblaze.cc (TARGET_DOCUMENTATION_NAME): New. * config/mips/mips.cc (TARGET_DOCUMENTATION_NAME): New. * config/msp430/msp430.cc (TARGET_DOCUMENTATION_NAME): New. * config/nds32/nds32.cc (TARGET_DOCUMENTATION_NAME): New. * config/nvptx/nvptx.cc (TARGET_DOCUMENTATION_NAME): New. * config/riscv/riscv.cc (TARGET_DOCUMENTATION_NAME): New. * config/rl78/rl78.cc (TARGET_DOCUMENTATION_NAME): New. * config/rs6000/rs6000.cc (TARGET_DOCUMENTATION_NAME): New. * config/rx/rx.cc (TARGET_DOCUMENTATION_NAME): New. * config/s390/s390.cc (TARGET_DOCUMENTATION_NAME): New. * config/sh/sh.cc (TARGET_DOCUMENTATION_NAME): New. * config/stormy16/stormy16.cc (TARGET_DOCUMENTATION_NAME): New. * config/v850/v850.cc (TARGET_DOCUMENTATION_NAME): New. * config/visium/visium.cc (TARGET_DOCUMENTATION_NAME): New. gcc/analyzer/ChangeLog: * region-model.cc: Include "gcc-urlifier.h". (reason_attr_access::emit): Use auto_urlify_attributes. * sm-taint.cc: Include "gcc-urlifier.h". (tainted_access_attrib_size::emit): Use auto_urlify_attributes. gcc/c-family/ChangeLog: * c-attribs.cc: Include "gcc-urlifier.h". (positional_argument): Use auto_urlify_attributes. * c-common.cc: Include "gcc-urlifier.h". (parse_optimize_options): Use auto_urlify_attributes with OPT_Wattributes. (attribute_fallthrough_p): Use auto_urlify_attributes. * c-warn.cc: Include "gcc-urlifier.h". (diagnose_mismatched_attributes): Use auto_urlify_attributes. gcc/c/ChangeLog: * c-decl.cc: Include "gcc-urlifier.h". (start_decl): Use auto_urlify_attributes with OPT_Wattributes. (start_function): Likewise. * c-parser.cc: Include "gcc-urlifier.h". (c_parser_statement_after_labels): Use auto_urlify_attributes with OPT_Wattributes. * c-typeck.cc: Include "gcc-urlifier.h". (maybe_warn_nodiscard): Use auto_urlify_attributes with OPT_Wunused_result. gcc/cp/ChangeLog: * cp-gimplify.cc: Include "gcc-urlifier.h". (process_stmt_hotness_attribute): Use auto_urlify_attributes with OPT_Wattributes. * cvt.cc: Include "gcc-urlifier.h". (maybe_warn_nodiscard): Use auto_urlify_attributes with OPT_Wunused_result. * decl.cc: Include "gcc-urlifier.h". (start_decl): Use auto_urlify_attributes. (start_preparsed_function): Likewise. gcc/ChangeLog: * diagnostic.cc (diagnostic_context::override_urlifier): New. * diagnostic.h (diagnostic_context::override_urlifier): New decl. * doc/extend.texi (Nvidia PTX Function Attributes): Update @cindex to specify that "kernel" is a function attribute and "shared" is a variable attribute, so that these entries are recognized by the regex in regenerate-attr-urls.py. * doc/tm.texi: Regenerate. * doc/tm.texi.in (TARGET_DOCUMENTATION_NAME): New. * gcc-attribute-urlifier.cc: New file. * gcc-urlifier.cc: Include diagnostic.h. (gcc_urlifier::make_doc): Convert to... (make_doc_url): ...this. (auto_override_urlifier::auto_override_urlifier): New. (auto_override_urlifier::~auto_override_urlifier): New. (selftest::gcc_urlifier_cc_tests): Split out body into... (selftest::test_gcc_urlifier): ...this. * gcc-urlifier.h: Include "pretty-print-urlifier.h" and "label-text.h". (make_doc_url): New decl. (class auto_override_urlifier): New. (class attribute_urlifier): New. (class auto_urlify_attributes): New. * gimple-ssa-warn-access.cc: Include "gcc-urlifier.h". (pass_waccess::execute): Use auto_urlify_attributes. * gimplify.cc: Include "gcc-urlifier.h". (expand_FALLTHROUGH): Use auto_urlify_attributes. * internal-fn.cc: Define INCLUDE_MEMORY and include "gcc-urlifier.h. (expand_FALLTHROUGH): Use auto_urlify_attributes. * ipa-pure-const.cc: Include "gcc-urlifier.h. (suggest_attribute): Use auto_urlify_attributes. * ipa-strub.cc: Include "gcc-urlifier.h. (can_strub_p): Use auto_urlify_attributes. * regenerate-attr-urls.py: New file. * selftest-run-tests.cc (selftest::run_tests): Call gcc_attribute_urlifier_cc_tests. * selftest.h (selftest::gcc_attribute_urlifier_cc_tests): New decl. * target.def (documentation_name): New DEFHOOKPOD. * tree-cfg.cc: Include "gcc-urlifier.h. (do_warn_unused_result): Use auto_urlify_attributes. * tree-ssa-uninit.cc: Include "gcc-urlifier.h. (maybe_warn_read_write_only): Use auto_urlify_attributes. (maybe_warn_pass_by_reference): Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-12-05arm: remove support for iWMMX/iWMMX2 intrinsicsRichard Earnshaw1-1811/+1
The mmintrin.h header was adjusted for GCC-14 to generate a (suppressible) warning if it was used, saying that support would be removed in GCC-15. Make that come true by removing the contents of this header and emitting an error. At this point in time I've not removed the internal support for the intrinsics, just the wrappers that enable access to them. That can be done at leisure from now on. gcc/ChangeLog: * config/arm/mmintrin.h: Raise an error if this header is used. Remove other content.
2024-12-05arm: Add CDE options for star-mc1 cpuArvin Zhong1-0/+8
This patch adds the CDE options support for the -mcpu=star-mc1. The star-mc1 is an Armv8-m Mainline CPU supporting CDE feature. gcc/ChangeLog: * config/arm/arm-cpus.in (star-mc1): Add CDE options. * doc/invoke.texi (cdecp options): Document for star-mc1. Signed-off-by: Qingxin Zhong <arvin.zhong@armchina.com>
2024-12-04arm: use quotes when referring to command-line options [PR90160]David Malcolm1-3/+3
gcc/ChangeLog: PR translation/90160 * config/arm/arm.cc (arm_option_check_internal): Use quotes in messages that refer to command-line options. Tweak wording. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-12-02arm, mve: Adding missing Runtime Library Exception to header filesAndre Vieira2-0/+8
Add missing Runtime Library Exception to mve header files to bring them into line with other similar headers. Not adding it in the first place was an oversight. gcc/ChangeLog: * config/arm/arm_mve.h: Add Runtime Library Exception. * config/arm/arm_mve_types.h: Likewise.
2024-11-29arm, mve: Detect uses of vctp_vpr_generated inside subregsAndre Vieira1-1/+2
Address a problem we were having where we were missing on detecting uses of vctp_vpr_generated in the analysis for 'arm_attempt_dlstp_transform' because the use was inside a SUBREG and rtx_equal_p does not catch that. Using reg_overlap_mentioned_p is much more robust. gcc/ChangeLog: PR target/117814 * config/arm/arm.cc (arm_attempt_dlstp_transform): Use reg_overlap_mentioned_p instead of rtx_equal_p to detect uses of vctp_vpr_generated inside subregs. gcc/testsuite/ChangeLog: PR target/117814 * gcc.target/arm/mve/dlstp-invalid-asm.c (test10): Renamed to... (test10a): ... this. (test10b): Variation of test10a with a small change to trigger wrong codegen.
2024-11-27diagnostics: replace %<%s%> with %qs [PR104896]David Malcolm1-3/+3
No functional change intended. gcc/analyzer/ChangeLog: PR c/104896 * sm-malloc.cc: Replace "%<%s%>" with "%qs" in message wording. gcc/c-family/ChangeLog: PR c/104896 * c-lex.cc (c_common_lex_availability_macro): Replace "%<%s%>" with "%qs" in message wording. * c-opts.cc (c_common_handle_option): Likewise. * c-warn.cc (warn_parm_array_mismatch): Likewise. gcc/ChangeLog: PR c/104896 * common/config/ia64/ia64-common.cc (ia64_handle_option): Replace "%<%s%>" with "%qs" in message wording. * common/config/rs6000/rs6000-common.cc (rs6000_handle_option): Likewise. * config/aarch64/aarch64.cc (aarch64_validate_sls_mitigation): Likewise. (aarch64_override_options): Likewise. (aarch64_process_target_attr): Likewise. * config/arm/aarch-common.cc (aarch_validate_mbranch_protection): Likewise. * config/pru/pru.cc (pru_insert_attributes): Likewise. * config/riscv/riscv-target-attr.cc (riscv_target_attr_parser::parse_arch): Likewise. * omp-general.cc (oacc_verify_routine_clauses): Likewise. * tree-ssa-uninit.cc (maybe_warn_read_write_only): Likewise. (maybe_warn_pass_by_reference): Likewise. gcc/cp/ChangeLog: PR c/104896 * cvt.cc (maybe_warn_nodiscard): Replace "%<%s%>" with "%qs" in message wording. gcc/fortran/ChangeLog: PR c/104896 * resolve.cc (resolve_operator): Replace "%<%s%>" with "%qs" in message wording. gcc/go/ChangeLog: PR c/104896 * gofrontend/embed.cc (Gogo::initializer_for_embeds): Replace "%<%s%>" with "%qs" in message wording. * gofrontend/expressions.cc (Selector_expression::lower_method_expression): Likewise. * gofrontend/gogo.cc (Gogo::set_package_name): Likewise. (Named_object::export_named_object): Likewise. * gofrontend/parse.cc (Parse::struct_type): Likewise. (Parse::parameter_list): Likewise. gcc/rust/ChangeLog: PR c/104896 * backend/rust-compile-expr.cc (CompileExpr::compile_integer_literal): Replace "%<%s%>" with "%qs" in message wording. (CompileExpr::compile_float_literal): Likewise. * backend/rust-compile-intrinsic.cc (Intrinsics::compile): Likewise. * backend/rust-tree.cc (maybe_warn_nodiscard): Likewise. * checks/lints/rust-lint-scan-deadcode.h: Likewise. * lex/rust-lex.cc (Lexer::parse_partial_unicode_escape): Likewise. (Lexer::parse_raw_byte_string): Likewise. * lex/rust-token.cc (Token::get_str): Likewise. * metadata/rust-export-metadata.cc (PublicInterface::write_to_path): Likewise. * parse/rust-parse.cc (peculiar_fragment_match_compatible_fragment): Likewise. (peculiar_fragment_match_compatible): Likewise. * resolve/rust-ast-resolve-path.cc (ResolvePath::resolve_path): Likewise. * resolve/rust-ast-resolve-toplevel.h: Likewise. * resolve/rust-ast-resolve-type.cc (ResolveRelativeTypePath::go): Likewise. * rust-session-manager.cc (validate_crate_name): Likewise. (Session::load_extern_crate): Likewise. * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise. (TypeCheckExpr::resolve_fn_trait_call): Likewise. * typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItemWithTrait::visit): Likewise. * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::validate_trait_impl_block): Likewise. * typecheck/rust-hir-type-check-struct.cc (TypeCheckStructExpr::visit): Likewise. * typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit): Likewise. * typecheck/rust-tyty.cc (BaseType::bounds_compatible): Likewise. * typecheck/rust-unify.cc (UnifyRules::emit_abi_mismatch): Likewise. * util/rust-attributes.cc (AttributeChecker::visit): Likewise. libcpp/ChangeLog: PR c/104896 * pch.cc (cpp_valid_state): Replace "%<%s%>" with "%qs" in message wording. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-11-22build: Remove INCLUDE_MEMORY [PR117737]Andrew Pinski3-3/+0
Since diagnostic.h is included in over half of the sources, requiring to `#define INCLUDE_MEMORY` does not make sense. Instead lets unconditionally include memory in system.h. The majority of this patch is just removing `#define INCLUDE_MEMORY` from the sources which currently have it. This should also fix the mingw build issue but I have not tried it. Bootstrapped and tested on x86_64-linux-gnu. PR bootstrap/117737 gcc/ada/ChangeLog: * gcc-interface/misc.cc (INCLUDE_MEMORY): Remove. * gcc-interface/trans.cc (INCLUDE_MEMORY): Remove. * gcc-interface/utils.cc (INCLUDE_MEMORY): Remove. gcc/analyzer/ChangeLog: * access-diagram.cc (INCLUDE_MEMORY): Remove. * analysis-plan.cc (INCLUDE_MEMORY): Remove. * analyzer-language.cc (INCLUDE_MEMORY): Remove. * analyzer-logging.cc (INCLUDE_MEMORY): Remove. * analyzer-pass.cc (INCLUDE_MEMORY): Remove. * analyzer-selftests.cc (INCLUDE_MEMORY): Remove. * analyzer.cc (INCLUDE_MEMORY): Remove. * bar-chart.cc (INCLUDE_MEMORY): Remove. * bounds-checking.cc (INCLUDE_MEMORY): Remove. * call-details.cc (INCLUDE_MEMORY): Remove. * call-info.cc (INCLUDE_MEMORY): Remove. * call-string.cc (INCLUDE_MEMORY): Remove. * call-summary.cc (INCLUDE_MEMORY): Remove. * checker-event.cc (INCLUDE_MEMORY): Remove. * checker-path.cc (INCLUDE_MEMORY): Remove. * complexity.cc (INCLUDE_MEMORY): Remove. * constraint-manager.cc (INCLUDE_MEMORY): Remove. * diagnostic-manager.cc (INCLUDE_MEMORY): Remove. * engine.cc (INCLUDE_MEMORY): Remove. * feasible-graph.cc (INCLUDE_MEMORY): Remove. * infinite-loop.cc (INCLUDE_MEMORY): Remove. * infinite-recursion.cc (INCLUDE_MEMORY): Remove. * kf-analyzer.cc (INCLUDE_MEMORY): Remove. * kf-lang-cp.cc (INCLUDE_MEMORY): Remove. * kf.cc (INCLUDE_MEMORY): Remove. * known-function-manager.cc (INCLUDE_MEMORY): Remove. * pending-diagnostic.cc (INCLUDE_MEMORY): Remove. * program-point.cc (INCLUDE_MEMORY): Remove. * program-state.cc (INCLUDE_MEMORY): Remove. * ranges.cc (INCLUDE_MEMORY): Remove. * record-layout.cc (INCLUDE_MEMORY): Remove. * region-model-asm.cc (INCLUDE_MEMORY): Remove. * region-model-manager.cc (INCLUDE_MEMORY): Remove. * region-model-reachability.cc (INCLUDE_MEMORY): Remove. * region-model.cc (INCLUDE_MEMORY): Remove. * region.cc (INCLUDE_MEMORY): Remove. * sm-fd.cc (INCLUDE_MEMORY): Remove. * sm-file.cc (INCLUDE_MEMORY): Remove. * sm-malloc.cc (INCLUDE_MEMORY): Remove. * sm-pattern-test.cc (INCLUDE_MEMORY): Remove. * sm-sensitive.cc (INCLUDE_MEMORY): Remove. * sm-signal.cc (INCLUDE_MEMORY): Remove. * sm-taint.cc (INCLUDE_MEMORY): Remove. * sm.cc (INCLUDE_MEMORY): Remove. * state-purge.cc (INCLUDE_MEMORY): Remove. * store.cc (INCLUDE_MEMORY): Remove. * supergraph.cc (INCLUDE_MEMORY): Remove. * svalue.cc (INCLUDE_MEMORY): Remove. * symbol.cc (INCLUDE_MEMORY): Remove. * trimmed-graph.cc (INCLUDE_MEMORY): Remove. * varargs.cc (INCLUDE_MEMORY): Remove. gcc/ChangeLog: * asan.cc (INCLUDE_MEMORY): Remove. * attribs.cc (INCLUDE_MEMORY): Remove. * auto-profile.cc (INCLUDE_MEMORY): Remove. * calls.cc (INCLUDE_MEMORY): Remove. * cfganal.cc (INCLUDE_MEMORY): Remove. * cfgexpand.cc (INCLUDE_MEMORY): Remove. * cfghooks.cc (INCLUDE_MEMORY): Remove. * cfgloop.cc (INCLUDE_MEMORY): Remove. * cgraph.cc (INCLUDE_MEMORY): Remove. * cgraphclones.cc (INCLUDE_MEMORY): Remove. * cgraphunit.cc (INCLUDE_MEMORY): Remove. * collect-utils.cc (INCLUDE_MEMORY): Remove. * collect2.cc (INCLUDE_MEMORY): Remove. * common/config/aarch64/aarch64-common.cc (INCLUDE_MEMORY): Remove. * common/config/arm/arm-common.cc (INCLUDE_MEMORY): Remove. * common/config/avr/avr-common.cc (INCLUDE_MEMORY): Remove. * config/aarch64/aarch64-cc-fusion.cc (INCLUDE_MEMORY): Remove. * config/aarch64/aarch64-early-ra.cc (INCLUDE_MEMORY): Remove. * config/aarch64/aarch64-sve-builtins.cc (INCLUDE_MEMORY): Remove. * config/aarch64/aarch64.cc (INCLUDE_MEMORY): Remove. * config/arc/arc.cc (INCLUDE_MEMORY): Remove. * config/arm/aarch-common.cc (INCLUDE_MEMORY) Remove.: * config/arm/arm-mve-builtins.cc (INCLUDE_MEMORY): Remove. * config/arm/arm.cc (INCLUDE_MEMORY): Remove. * config/avr/avr-devices.cc (INCLUDE_MEMORY): Remove. * config/avr/driver-avr.cc (INCLUDE_MEMORY): Remove. * config/bpf/bpf.cc (INCLUDE_MEMORY): Remove. * config/bpf/btfext-out.cc (INCLUDE_MEMORY): Remove. * config/bpf/core-builtins.cc (INCLUDE_MEMORY): Remove. * config/darwin.cc (INCLUDE_MEMORY): Remove. * config/gcn/mkoffload.cc (INCLUDE_MEMORY): Remove. * config/i386/driver-i386.cc (INCLUDE_MEMORY): Remove. * config/i386/i386-builtins.cc (INCLUDE_MEMORY): Remove. * config/i386/i386-expand.cc (INCLUDE_MEMORY): Remove. * config/i386/i386-features.cc (INCLUDE_MEMORY): Remove. * config/i386/i386-options.cc (INCLUDE_MEMORY): Remove. * config/i386/i386.cc (INCLUDE_MEMORY): Remove. * config/loongarch/loongarch-builtins.cc (INCLUDE_MEMORY): Remove. * config/loongarch/loongarch.cc (INCLUDE_MEMORY): Remove. * config/mingw/winnt-cxx.cc (INCLUDE_MEMORY): Remove. * config/mingw/winnt.cc (INCLUDE_MEMORY): Remove. * config/mips/mips.cc (INCLUDE_MEMORY): Remove. * config/msp430/driver-msp430.cc (INCLUDE_MEMORY): Remove. * config/nvptx/mkoffload.cc (INCLUDE_MEMORY): Remove. * config/nvptx/nvptx.cc (INCLUDE_MEMORY): Remove. * config/riscv/riscv-avlprop.cc (INCLUDE_MEMORY): Remove. * config/riscv/riscv-target-attr.cc (INCLUDE_MEMORY): Remove. * config/riscv/riscv-vector-builtins.cc (INCLUDE_MEMORY): Remove. * config/riscv/riscv-vector-costs.cc (INCLUDE_MEMORY): Remove. * config/riscv/riscv-vsetvl.cc (INCLUDE_MEMORY): Remove. * config/riscv/riscv.cc (INCLUDE_MEMORY): Remove. * config/rs6000/driver-rs6000.cc (INCLUDE_MEMORY): Remove. * config/rs6000/host-darwin.cc (INCLUDE_MEMORY): Remove. * config/rs6000/rs6000-c.cc (INCLUDE_MEMORY): Remove. * config/rs6000/rs6000.cc (INCLUDE_MEMORY): Remove. * config/s390/s390-c.cc (INCLUDE_MEMORY): Remove. * config/s390/s390.cc (INCLUDE_MEMORY): Remove. * config/sol2-cxx.cc (INCLUDE_MEMORY): Remove. * config/vms/vms-c.cc (INCLUDE_MEMORY): Remove. * config/xtensa/xtensa-dynconfig.cc (INCLUDE_MEMORY): Remove. * coroutine-passes.cc (INCLUDE_MEMORY): Remove. * coverage.cc (INCLUDE_MEMORY): Remove. * data-streamer-in.cc (INCLUDE_MEMORY): Remove. * data-streamer-out.cc (INCLUDE_MEMORY): Remove. * data-streamer.cc (INCLUDE_MEMORY): Remove. * diagnostic-format-json.cc (INCLUDE_MEMORY): Remove. * diagnostic-format-sarif.cc (INCLUDE_MEMORY): Remove. * diagnostic-format-text.cc (INCLUDE_MEMORY): Remove. * diagnostic-global-context.cc (INCLUDE_MEMORY): Remove. * diagnostic-macro-unwinding.cc (INCLUDE_MEMORY): Remove. * diagnostic-path.cc (INCLUDE_MEMORY): Remove. * diagnostic-show-locus.cc (INCLUDE_MEMORY): Remove. * diagnostic-spec.cc (INCLUDE_MEMORY): Remove. * diagnostic.cc (INCLUDE_MEMORY): Remove. * diagnostic.h: Remove check for INCLUDE_MEMORY. * digraph.cc (INCLUDE_MEMORY): Remove. * dumpfile.cc (INCLUDE_MEMORY): Remove. * dwarf2out.cc (INCLUDE_MEMORY): Remove. * edit-context.cc (INCLUDE_MEMORY): Remove. * except.cc (INCLUDE_MEMORY): Remove. * expr.cc (INCLUDE_MEMORY): Remove. * file-prefix-map.cc (INCLUDE_MEMORY): Remove. * final.cc (INCLUDE_MEMORY): Remove. * fwprop.cc (INCLUDE_MEMORY): Remove. * gcc-plugin.h (INCLUDE_MEMORY): Remove. * gcc-rich-location.cc (INCLUDE_MEMORY): Remove. * gcc-urlifier.cc (INCLUDE_MEMORY): Remove. * gcc.cc (INCLUDE_MEMORY): Remove. * gcov-dump.cc (INCLUDE_MEMORY): Remove. * gcov-tool.cc (INCLUDE_MEMORY): Remove. * gcov.cc (INCLUDE_MEMORY): Remove. * gengtype.cc (open_base_files): Don't print `#define INCLUDE_MEMORY`. * genmatch.cc (INCLUDE_MEMORY): Remove. * gimple-fold.cc (INCLUDE_MEMORY): Remove. * gimple-harden-conditionals.cc (INCLUDE_MEMORY): Remove. * gimple-harden-control-flow.cc (INCLUDE_MEMORY): Remove. * gimple-if-to-switch.cc (INCLUDE_MEMORY): Remove. * gimple-loop-interchange.cc (INCLUDE_MEMORY): Remove. * gimple-loop-jam.cc (INCLUDE_MEMORY): Remove. * gimple-loop-versioning.cc (INCLUDE_MEMORY): Remove. * gimple-lower-bitint.cc (INCLUDE_MEMORY): Remove. * gimple-predicate-analysis.cc (INCLUDE_MEMORY): Remove. * gimple-pretty-print.cc (INCLUDE_MEMORY): Remove. * gimple-range-cache.cc (INCLUDE_MEMORY): Remove. * gimple-range-edge.cc (INCLUDE_MEMORY): Remove. * gimple-range-fold.cc (INCLUDE_MEMORY): Remove. * gimple-range-gori.cc (INCLUDE_MEMORY): Remove. * gimple-range-infer.cc (INCLUDE_MEMORY): Remove. * gimple-range-op.cc (INCLUDE_MEMORY): Remove. * gimple-range-path.cc (INCLUDE_MEMORY): Remove. * gimple-range-phi.cc (INCLUDE_MEMORY): Remove. * gimple-range-trace.cc (INCLUDE_MEMORY): Remove. * gimple-range.cc (INCLUDE_MEMORY): Remove. * gimple-ssa-backprop.cc (INCLUDE_MEMORY): Remove. * gimple-ssa-sprintf.cc (INCLUDE_MEMORY): Remove. * gimple-ssa-store-merging.cc (INCLUDE_MEMORY): Remove. * gimple-ssa-strength-reduction.cc (INCLUDE_MEMORY): Remove. * gimple-ssa-warn-access.cc (INCLUDE_MEMORY): Remove. * gimple-ssa-warn-alloca.cc (INCLUDE_MEMORY): Remove. * gimple-ssa-warn-restrict.cc (INCLUDE_MEMORY): Remove. * gimple-streamer-in.cc (INCLUDE_MEMORY): Remove. * gimple-streamer-out.cc (INCLUDE_MEMORY): Remove. * gimple.cc (INCLUDE_MEMORY): Remove. * gimplify.cc (INCLUDE_MEMORY): Remove. * graph.cc (INCLUDE_MEMORY): Remove. * graphite-dependences.cc (INCLUDE_MEMORY): Remove. * graphite-isl-ast-to-gimple.cc (INCLUDE_MEMORY): Remove. * graphite-optimize-isl.cc (INCLUDE_MEMORY): Remove. * graphite-poly.cc (INCLUDE_MEMORY): Remove. * graphite-scop-detection.cc (INCLUDE_MEMORY): Remove. * graphite-sese-to-poly.cc (INCLUDE_MEMORY): Remove. * graphite.cc (INCLUDE_MEMORY): Remove. * graphviz.cc (INCLUDE_MEMORY): Remove. * input.cc (INCLUDE_MEMORY): Remove. * ipa-cp.cc (INCLUDE_MEMORY): Remove. * ipa-devirt.cc (INCLUDE_MEMORY): Remove. * ipa-fnsummary.cc (INCLUDE_MEMORY): Remove. * ipa-free-lang-data.cc (INCLUDE_MEMORY): Remove. * ipa-icf-gimple.cc (INCLUDE_MEMORY): Remove. * ipa-icf.cc (INCLUDE_MEMORY): Remove. * ipa-inline-analysis.cc (INCLUDE_MEMORY): Remove. * ipa-inline.cc (INCLUDE_MEMORY): Remove. * ipa-modref-tree.cc (INCLUDE_MEMORY): Remove. * ipa-modref.cc (INCLUDE_MEMORY): Remove. * ipa-param-manipulation.cc (INCLUDE_MEMORY): Remove. * ipa-polymorphic-call.cc (INCLUDE_MEMORY): Remove. * ipa-predicate.cc (INCLUDE_MEMORY): Remove. * ipa-profile.cc (INCLUDE_MEMORY): Remove. * ipa-prop.cc (INCLUDE_MEMORY): Remove. * ipa-pure-const.cc (INCLUDE_MEMORY): Remove. * ipa-reference.cc (INCLUDE_MEMORY): Remove. * ipa-split.cc (INCLUDE_MEMORY): Remove. * ipa-sra.cc (INCLUDE_MEMORY): Remove. * ipa-strub.cc (INCLUDE_MEMORY): Remove. * ipa-utils.cc (INCLUDE_MEMORY): Remove. * json-parsing.cc (INCLUDE_MEMORY): Remove. * json.cc (INCLUDE_MEMORY): Remove. * json.h: Don't check INCLUDE_MEMORY. * langhooks.cc (INCLUDE_MEMORY): Remove. * late-combine.cc (INCLUDE_MEMORY): Remove. * lazy-diagnostic-path.cc (INCLUDE_MEMORY): Remove. * libdiagnostics.cc (INCLUDE_MEMORY): Remove. * libsarifreplay.cc (INCLUDE_MEMORY): Remove. * lto-cgraph.cc (INCLUDE_MEMORY): Remove. * lto-compress.cc (INCLUDE_MEMORY): Remove. * lto-opts.cc (INCLUDE_MEMORY): Remove. * lto-section-in.cc (INCLUDE_MEMORY): Remove. * lto-section-out.cc (INCLUDE_MEMORY): Remove. * lto-streamer-in.cc (INCLUDE_MEMORY): Remove. * lto-streamer-out.cc (INCLUDE_MEMORY): Remove. * lto-streamer.cc (INCLUDE_MEMORY): Remove. * lto-wrapper.cc (INCLUDE_MEMORY): Remove. * make-unique.h (GCC_MAKE_UNIQUE): Remove. * multiple_target.cc (INCLUDE_MEMORY): Remove. * omp-expand.cc (INCLUDE_MEMORY): Remove. * omp-general.cc (INCLUDE_MEMORY): Remove. * omp-low.cc (INCLUDE_MEMORY): Remove. * omp-oacc-neuter-broadcast.cc (INCLUDE_MEMORY): Remove. * omp-offload.cc (INCLUDE_MEMORY): Remove. * omp-simd-clone.cc (INCLUDE_MEMORY): Remove. * opt-problem.cc (INCLUDE_MEMORY): Remove. * optinfo-emit-json.cc (INCLUDE_MEMORY): Remove. * optinfo.cc (INCLUDE_MEMORY): Remove. * optinfo.h: Don't check INCLUDE_MEMORY. * opts-common.cc (INCLUDE_MEMORY): Remove. * opts-diagnostic.cc (INCLUDE_MEMORY): Remove. * opts-global.cc (INCLUDE_MEMORY): Remove. * opts.cc (INCLUDE_MEMORY): Remove. * pair-fusion.cc (INCLUDE_MEMORY): Remove. * passes.cc (INCLUDE_MEMORY): Remove. * pointer-query.cc (INCLUDE_MEMORY): Remove. * predict.cc (INCLUDE_MEMORY): Remove. * pretty-print.cc (INCLUDE_MEMORY): Remove. * pretty-print.h: Don't check INCLUDE_MEMORY. * print-rtl.cc (INCLUDE_MEMORY): Remove. * print-tree.cc (INCLUDE_MEMORY): Remove. * profile-count.cc (INCLUDE_MEMORY): Remove. * range-op-float.cc (INCLUDE_MEMORY): Remove. * range-op-ptr.cc (INCLUDE_MEMORY): Remove. * range-op.cc (INCLUDE_MEMORY): Remove. * range.cc (INCLUDE_MEMORY): Remove. * read-rtl-function.cc (INCLUDE_MEMORY): Remove. * rtl-error.cc (INCLUDE_MEMORY): Remove. * rtl-ssa/accesses.cc (INCLUDE_MEMORY): Remove. * rtl-ssa/blocks.cc (INCLUDE_MEMORY): Remove. * rtl-ssa/changes.cc (INCLUDE_MEMORY): Remove. * rtl-ssa/functions.cc (INCLUDE_MEMORY): Remove. * rtl-ssa/insns.cc (INCLUDE_MEMORY): Remove. * rtl-ssa/movement.cc (INCLUDE_MEMORY): Remove. * rtl-tests.cc (INCLUDE_MEMORY): Remove. * sanopt.cc (INCLUDE_MEMORY): Remove. * sched-rgn.cc (INCLUDE_MEMORY): Remove. * selftest-diagnostic-path.cc (INCLUDE_MEMORY): Remove. * selftest-diagnostic.cc (INCLUDE_MEMORY): Remove. * selftest-json.cc (INCLUDE_MEMORY): Remove. * sese.cc (INCLUDE_MEMORY): Remove. * simple-diagnostic-path.cc (INCLUDE_MEMORY): Remove. * splay-tree-utils.cc (INCLUDE_MEMORY): Remove. * sreal.cc (INCLUDE_MEMORY): Remove. * stmt.cc (INCLUDE_MEMORY): Remove. * substring-locations.cc (INCLUDE_MEMORY): Remove. * symtab-clones.cc (INCLUDE_MEMORY): Remove. * symtab-thunks.cc (INCLUDE_MEMORY): Remove. * symtab.cc (INCLUDE_MEMORY): Remove. * system.h: Include memory unconditionally for C++. Also remove support for INCLUDE_MEMORY. * targhooks.cc (INCLUDE_MEMORY): Remove. * text-art/box-drawing.cc (INCLUDE_MEMORY): Remove. * text-art/canvas.cc (INCLUDE_MEMORY): Remove. * text-art/ruler.cc (INCLUDE_MEMORY): Remove. * text-art/selftests.cc (INCLUDE_MEMORY): Remove. * text-art/style.cc (INCLUDE_MEMORY): Remove. * text-art/styled-string.cc (INCLUDE_MEMORY): Remove. * text-art/table.cc (INCLUDE_MEMORY): Remove. * text-art/theme.cc (INCLUDE_MEMORY): Remove. * text-art/tree-widget.cc (INCLUDE_MEMORY): Remove. * text-art/widget.cc (INCLUDE_MEMORY): Remove. * timevar.cc (INCLUDE_MEMORY): Remove. * toplev.cc (INCLUDE_MEMORY): Remove. * trans-mem.cc (INCLUDE_MEMORY): Remove. * tree-affine.cc (INCLUDE_MEMORY): Remove. * tree-assume.cc (INCLUDE_MEMORY): Remove. * tree-call-cdce.cc (INCLUDE_MEMORY): Remove. * tree-cfg.cc (INCLUDE_MEMORY): Remove. * tree-chrec.cc (INCLUDE_MEMORY): Remove. * tree-data-ref.cc (INCLUDE_MEMORY): Remove. * tree-dfa.cc (INCLUDE_MEMORY): Remove. * tree-diagnostic-client-data-hooks.cc (INCLUDE_MEMORY): Remove. * tree-diagnostic.cc (INCLUDE_MEMORY): Remove. * tree-dump.cc (INCLUDE_MEMORY): Remove. * tree-if-conv.cc (INCLUDE_MEMORY): Remove. * tree-inline.cc (INCLUDE_MEMORY): Remove. * tree-into-ssa.cc (INCLUDE_MEMORY): Remove. * tree-logical-location.cc (INCLUDE_MEMORY): Remove. * tree-loop-distribution.cc (INCLUDE_MEMORY): Remove. * tree-nested.cc (INCLUDE_MEMORY): Remove. * tree-nrv.cc (INCLUDE_MEMORY): Remove. * tree-object-size.cc (INCLUDE_MEMORY): Remove. * tree-outof-ssa.cc (INCLUDE_MEMORY): Remove. * tree-parloops.cc (INCLUDE_MEMORY): Remove. * tree-predcom.cc (INCLUDE_MEMORY): Remove. * tree-pretty-print.cc (INCLUDE_MEMORY): Remove. * tree-profile.cc (INCLUDE_MEMORY): Remove. * tree-scalar-evolution.cc (INCLUDE_MEMORY): Remove. * tree-sra.cc (INCLUDE_MEMORY): Remove. * tree-ssa-address.cc (INCLUDE_MEMORY): Remove. * tree-ssa-alias.cc (INCLUDE_MEMORY): Remove. * tree-ssa-ccp.cc (INCLUDE_MEMORY): Remove. * tree-ssa-coalesce.cc (INCLUDE_MEMORY): Remove. * tree-ssa-copy.cc (INCLUDE_MEMORY): Remove. * tree-ssa-dce.cc (INCLUDE_MEMORY): Remove. * tree-ssa-dom.cc (INCLUDE_MEMORY): Remove. * tree-ssa-dse.cc (INCLUDE_MEMORY): Remove. * tree-ssa-forwprop.cc (INCLUDE_MEMORY): Remove. * tree-ssa-ifcombine.cc (INCLUDE_MEMORY): Remove. * tree-ssa-live.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-ch.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-im.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-ivcanon.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-ivopts.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-manip.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-niter.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-prefetch.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-split.cc (INCLUDE_MEMORY): Remove. * tree-ssa-loop-unswitch.cc (INCLUDE_MEMORY): Remove. * tree-ssa-math-opts.cc (INCLUDE_MEMORY): Remove. * tree-ssa-operands.cc (INCLUDE_MEMORY): Remove. * tree-ssa-phiopt.cc (INCLUDE_MEMORY): Remove. * tree-ssa-phiprop.cc (INCLUDE_MEMORY): Remove. * tree-ssa-pre.cc (INCLUDE_MEMORY): Remove. * tree-ssa-propagate.cc (INCLUDE_MEMORY): Remove. * tree-ssa-reassoc.cc (INCLUDE_MEMORY): Remove. * tree-ssa-sccvn.cc (INCLUDE_MEMORY): Remove. * tree-ssa-scopedtables.cc (INCLUDE_MEMORY): Remove. * tree-ssa-sink.cc (INCLUDE_MEMORY): Remove. * tree-ssa-strlen.cc (INCLUDE_MEMORY): Remove. * tree-ssa-structalias.cc (INCLUDE_MEMORY): Remove. * tree-ssa-ter.cc (INCLUDE_MEMORY): Remove. * tree-ssa-threadbackward.cc (INCLUDE_MEMORY): Remove. * tree-ssa-threadupdate.cc (INCLUDE_MEMORY): Remove. * tree-ssa-uninit.cc (INCLUDE_MEMORY): Remove. * tree-ssa.cc (INCLUDE_MEMORY): Remove. * tree-ssanames.cc (INCLUDE_MEMORY): Remove. * tree-stdarg.cc (INCLUDE_MEMORY): Remove. * tree-streamer-in.cc (INCLUDE_MEMORY): Remove. * tree-streamer-out.cc (INCLUDE_MEMORY): Remove. * tree-streamer.cc (INCLUDE_MEMORY): Remove. * tree-switch-conversion.cc (INCLUDE_MEMORY): Remove. * tree-tailcall.cc (INCLUDE_MEMORY): Remove. * tree-vect-data-refs.cc (INCLUDE_MEMORY): Remove. * tree-vect-generic.cc (INCLUDE_MEMORY): Remove. * tree-vect-loop-manip.cc (INCLUDE_MEMORY): Remove. * tree-vect-loop.cc (INCLUDE_MEMORY): Remove. * tree-vect-patterns.cc (INCLUDE_MEMORY): Remove. * tree-vect-slp-patterns.cc (INCLUDE_MEMORY): Remove. * tree-vect-slp.cc (INCLUDE_MEMORY): Remove. * tree-vect-stmts.cc (INCLUDE_MEMORY): Remove. * tree-vectorizer.cc (INCLUDE_MEMORY): Remove. * tree-vrp.cc (INCLUDE_MEMORY): Remove. * tree.cc (INCLUDE_MEMORY): Remove. * ubsan.cc (INCLUDE_MEMORY): Remove. * value-pointer-equiv.cc (INCLUDE_MEMORY): Remove. * value-prof.cc (INCLUDE_MEMORY): Remove. * value-query.cc (INCLUDE_MEMORY): Remove. * value-range-pretty-print.cc (INCLUDE_MEMORY): Remove. * value-range-storage.cc (INCLUDE_MEMORY): Remove. * value-range.cc (INCLUDE_MEMORY): Remove. * value-relation.cc (INCLUDE_MEMORY): Remove. * var-tracking.cc (INCLUDE_MEMORY): Remove. * varpool.cc (INCLUDE_MEMORY): Remove. * vr-values.cc (INCLUDE_MEMORY): Remove. * wide-int-print.cc (INCLUDE_MEMORY): Remove. gcc/c-family/ChangeLog: * c-ada-spec.cc (INCLUDE_MEMORY): Remove. * c-attribs.cc (INCLUDE_MEMORY): Remove. * c-common.cc (INCLUDE_MEMORY): Remove. * c-format.cc (INCLUDE_MEMORY): Remove. * c-gimplify.cc (INCLUDE_MEMORY): Remove. * c-indentation.cc (INCLUDE_MEMORY): Remove. * c-opts.cc (INCLUDE_MEMORY): Remove. * c-pch.cc (INCLUDE_MEMORY): Remove. * c-pragma.cc (INCLUDE_MEMORY): Remove. * c-pretty-print.cc (INCLUDE_MEMORY): Remove. * c-type-mismatch.cc (INCLUDE_MEMORY): Remove. * c-warn.cc (INCLUDE_MEMORY): Remove. * known-headers.cc (INCLUDE_MEMORY): Remove. * name-hint.h: Remove check of INCLUDE_MEMORY. gcc/c/ChangeLog: * c-aux-info.cc (INCLUDE_MEMORY): Remove. * c-convert.cc (INCLUDE_MEMORY): Remove. * c-decl.cc (INCLUDE_MEMORY): Remove. * c-errors.cc (INCLUDE_MEMORY): Remove. * c-fold.cc (INCLUDE_MEMORY): Remove. * c-lang.cc (INCLUDE_MEMORY): Remove. * c-objc-common.cc (INCLUDE_MEMORY): Remove. * c-parser.cc (INCLUDE_MEMORY): Remove. * c-typeck.cc (INCLUDE_MEMORY): Remove. * gimple-parser.cc (INCLUDE_MEMORY): Remove. gcc/cp/ChangeLog: * call.cc (INCLUDE_MEMORY): Remove. * class.cc (INCLUDE_MEMORY): Remove. * constexpr.cc (INCLUDE_MEMORY): Remove. * constraint.cc (INCLUDE_MEMORY): Remove. * contracts.cc (INCLUDE_MEMORY): Remove. * coroutines.cc (INCLUDE_MEMORY): Remove. * cp-gimplify.cc (INCLUDE_MEMORY): Remove. * cp-lang.cc (INCLUDE_MEMORY): Remove. * cp-objcp-common.cc (INCLUDE_MEMORY): Remove. * cp-ubsan.cc (INCLUDE_MEMORY): Remove. * cvt.cc (INCLUDE_MEMORY): Remove. * cxx-pretty-print.cc (INCLUDE_MEMORY): Remove. * decl.cc (INCLUDE_MEMORY): Remove. * decl2.cc (INCLUDE_MEMORY): Remove. * dump.cc (INCLUDE_MEMORY): Remove. * error.cc (INCLUDE_MEMORY): Remove. * except.cc (INCLUDE_MEMORY): Remove. * expr.cc (INCLUDE_MEMORY): Remove. * friend.cc (INCLUDE_MEMORY): Remove. * init.cc (INCLUDE_MEMORY): Remove. * lambda.cc (INCLUDE_MEMORY): Remove. * lex.cc (INCLUDE_MEMORY): Remove. * logic.cc (INCLUDE_MEMORY): Remove. * mangle.cc (INCLUDE_MEMORY): Remove. * mapper-client.cc (INCLUDE_MEMORY): Remove. * mapper-resolver.cc (INCLUDE_MEMORY): Remove. * method.cc (INCLUDE_MEMORY): Remove. * module.cc (INCLUDE_MEMORY): Remove. * name-lookup.cc (INCLUDE_MEMORY): Remove. * optimize.cc (INCLUDE_MEMORY): Remove. * parser.cc (INCLUDE_MEMORY): Remove. * pt.cc (INCLUDE_MEMORY): Remove. * ptree.cc (INCLUDE_MEMORY): Remove. * rtti.cc (INCLUDE_MEMORY): Remove. * search.cc (INCLUDE_MEMORY): Remove. * semantics.cc (INCLUDE_MEMORY): Remove. * tree.cc (INCLUDE_MEMORY): Remove. * typeck.cc (INCLUDE_MEMORY): Remove. * typeck2.cc (INCLUDE_MEMORY): Remove. * vtable-class-hierarchy.cc (INCLUDE_MEMORY): Remove. gcc/d/ChangeLog: * d-attribs.cc (INCLUDE_MEMORY): Remove. * d-builtins.cc (INCLUDE_MEMORY): Remove. * d-codegen.cc (INCLUDE_MEMORY): Remove. * d-convert.cc (INCLUDE_MEMORY): Remove. * d-diagnostic.cc (INCLUDE_MEMORY): Remove. * d-frontend.cc (INCLUDE_MEMORY): Remove. * d-lang.cc (INCLUDE_MEMORY): Remove. * d-longdouble.cc (INCLUDE_MEMORY): Remove. * d-target.cc (INCLUDE_MEMORY): Remove. * decl.cc (INCLUDE_MEMORY): Remove. * expr.cc (INCLUDE_MEMORY): Remove. * intrinsics.cc (INCLUDE_MEMORY): Remove. * modules.cc (INCLUDE_MEMORY): Remove. * toir.cc (INCLUDE_MEMORY): Remove. * typeinfo.cc (INCLUDE_MEMORY): Remove. * types.cc (INCLUDE_MEMORY): Remove. gcc/fortran/ChangeLog: * arith.cc (INCLUDE_MEMORY): Remove. * array.cc (INCLUDE_MEMORY): Remove. * bbt.cc (INCLUDE_MEMORY): Remove. * check.cc (INCLUDE_MEMORY): Remove. * class.cc (INCLUDE_MEMORY): Remove. * constructor.cc (INCLUDE_MEMORY): Remove. * convert.cc (INCLUDE_MEMORY): Remove. * cpp.cc (INCLUDE_MEMORY): Remove. * data.cc (INCLUDE_MEMORY): Remove. * decl.cc (INCLUDE_MEMORY): Remove. * dependency.cc (INCLUDE_MEMORY): Remove. * dump-parse-tree.cc (INCLUDE_MEMORY): Remove. * error.cc (INCLUDE_MEMORY): Remove. * expr.cc (INCLUDE_MEMORY): Remove. * f95-lang.cc (INCLUDE_MEMORY): Remove. * frontend-passes.cc (INCLUDE_MEMORY): Remove. * interface.cc (INCLUDE_MEMORY): Remove. * intrinsic.cc (INCLUDE_MEMORY): Remove. * io.cc (INCLUDE_MEMORY): Remove. * iresolve.cc (INCLUDE_MEMORY): Remove. * match.cc (INCLUDE_MEMORY): Remove. * matchexp.cc (INCLUDE_MEMORY): Remove. * misc.cc (INCLUDE_MEMORY): Remove. * module.cc (INCLUDE_MEMORY): Remove. * openmp.cc (INCLUDE_MEMORY): Remove. * options.cc (INCLUDE_MEMORY): Remove. * parse.cc (INCLUDE_MEMORY): Remove. * primary.cc (INCLUDE_MEMORY): Remove. * resolve.cc (INCLUDE_MEMORY): Remove. * scanner.cc (INCLUDE_MEMORY): Remove. * simplify.cc (INCLUDE_MEMORY): Remove. * st.cc (INCLUDE_MEMORY): Remove. * symbol.cc (INCLUDE_MEMORY): Remove. * target-memory.cc (INCLUDE_MEMORY): Remove. * trans-array.cc (INCLUDE_MEMORY): Remove. * trans-common.cc (INCLUDE_MEMORY): Remove. * trans-const.cc (INCLUDE_MEMORY): Remove. * trans-decl.cc (INCLUDE_MEMORY): Remove. * trans-expr.cc (INCLUDE_MEMORY): Remove. * trans-intrinsic.cc (INCLUDE_MEMORY): Remove. * trans-io.cc (INCLUDE_MEMORY): Remove. * trans-openmp.cc (INCLUDE_MEMORY): Remove. * trans-stmt.cc (INCLUDE_MEMORY): Remove. * trans-types.cc (INCLUDE_MEMORY): Remove. * trans.cc (INCLUDE_MEMORY): Remove. gcc/go/ChangeLog: * go-backend.cc (INCLUDE_MEMORY): Remove. * go-lang.cc (INCLUDE_MEMORY): Remove. gcc/jit/ChangeLog: * dummy-frontend.cc (INCLUDE_MEMORY): Remove. * jit-playback.cc (INCLUDE_MEMORY): Remove. * jit-recording.cc (INCLUDE_MEMORY): Remove. gcc/lto/ChangeLog: * lto-common.cc (INCLUDE_MEMORY): Remove. * lto-dump.cc (INCLUDE_MEMORY): Remove. * lto-partition.cc (INCLUDE_MEMORY): Remove. * lto-symtab.cc (INCLUDE_MEMORY): Remove. * lto.cc (INCLUDE_MEMORY): Remove. gcc/m2/ChangeLog: * gm2-gcc/gcc-consolidation.h (INCLUDE_MEMORY): Remove. * gm2-gcc/m2configure.cc (INCLUDE_MEMORY): Remove. * mc-boot/GASCII.cc (INCLUDE_MEMORY): Remove. * mc-boot/GASCII.h (INCLUDE_MEMORY): Remove. * mc-boot/GArgs.cc (INCLUDE_MEMORY): Remove. * mc-boot/GArgs.h (INCLUDE_MEMORY): Remove. * mc-boot/GAssertion.cc (INCLUDE_MEMORY): Remove. * mc-boot/GAssertion.h (INCLUDE_MEMORY): Remove. * mc-boot/GBreak.cc (INCLUDE_MEMORY): Remove. * mc-boot/GBreak.h (INCLUDE_MEMORY): Remove. * mc-boot/GCOROUTINES.h (INCLUDE_MEMORY): Remove. * mc-boot/GCmdArgs.cc (INCLUDE_MEMORY): Remove. * mc-boot/GCmdArgs.h (INCLUDE_MEMORY): Remove. * mc-boot/GDebug.cc (INCLUDE_MEMORY): Remove. * mc-boot/GDebug.h (INCLUDE_MEMORY): Remove. Remove. * mc-boot/GDynamicStrings.cc (INCLUDE_MEMORY): Remove. * mc-boot/GDynamicStrings.h (INCLUDE_MEMORY): Remove. * mc-boot/GEnvironment.cc (INCLUDE_MEMORY): Remove. * mc-boot/GEnvironment.h (INCLUDE_MEMORY): Remove. * mc-boot/GFIO.cc (INCLUDE_MEMORY): Remove. * mc-boot/GFIO.h (INCLUDE_MEMORY): Remove. * mc-boot/GFormatStrings.cc (INCLUDE_MEMORY): Remove. * mc-boot/GFormatStrings.h (INCLUDE_MEMORY): Remove. * mc-boot/GFpuIO.cc (INCLUDE_MEMORY): Remove. * mc-boot/GFpuIO.h (INCLUDE_MEMORY): Remove. * mc-boot/GIO.cc (INCLUDE_MEMORY): Remove. * mc-boot/GIO.h (INCLUDE_MEMORY): Remove. * mc-boot/GIndexing.cc (INCLUDE_MEMORY): Remove. * mc-boot/GIndexing.h (INCLUDE_MEMORY): Remove. * mc-boot/GM2Dependent.cc (INCLUDE_MEMORY): Remove. * mc-boot/GM2Dependent.h (INCLUDE_MEMORY): Remove. * mc-boot/GM2EXCEPTION.cc (INCLUDE_MEMORY): Remove. * mc-boot/GM2EXCEPTION.h (INCLUDE_MEMORY): Remove. * mc-boot/GM2RTS.cc (INCLUDE_MEMORY): Remove. * mc-boot/GM2RTS.h (INCLUDE_MEMORY): Remove. Remove. * mc-boot/GMemUtils.cc (INCLUDE_MEMORY): Remove. * mc-boot/GMemUtils.h (INCLUDE_MEMORY): Remove. * mc-boot/GNumberIO.cc (INCLUDE_MEMORY): Remove. * mc-boot/GNumberIO.h (INCLUDE_MEMORY): Remove. * mc-boot/GPushBackInput.cc (INCLUDE_MEMORY): Remove. * mc-boot/GPushBackInput.h (INCLUDE_MEMORY): Remove. * mc-boot/GRTExceptions.cc (INCLUDE_MEMORY): Remove. * mc-boot/GRTExceptions.h (INCLUDE_MEMORY): Remove. * mc-boot/GRTco.h (INCLUDE_MEMORY): Remove. * mc-boot/GRTentity.h (INCLUDE_MEMORY): Remove. * mc-boot/GRTint.cc (INCLUDE_MEMORY): Remove. * mc-boot/GRTint.h (INCLUDE_MEMORY): Remove. * mc-boot/GSArgs.cc (INCLUDE_MEMORY): Remove. * mc-boot/GSArgs.h (INCLUDE_MEMORY): Remove. * mc-boot/GSFIO.cc (INCLUDE_MEMORY): Remove. * mc-boot/GSFIO.h (INCLUDE_MEMORY): Remove. * mc-boot/GSYSTEM.h (INCLUDE_MEMORY): Remove. * mc-boot/GSelective.h (INCLUDE_MEMORY): Remove. * mc-boot/GStdIO.cc (INCLUDE_MEMORY): Remove. * mc-boot/GStdIO.h (INCLUDE_MEMORY): Remove. * mc-boot/GStorage.cc (INCLUDE_MEMORY): Remove. * mc-boot/GStorage.h (INCLUDE_MEMORY): Remove. * mc-boot/GStrCase.cc (INCLUDE_MEMORY): Remove. * mc-boot/GStrCase.h (INCLUDE_MEMORY): Remove. * mc-boot/GStrIO.cc (INCLUDE_MEMORY): Remove. * mc-boot/GStrIO.h (INCLUDE_MEMORY): Remove. * mc-boot/GStrLib.cc (INCLUDE_MEMORY): Remove. * mc-boot/GStrLib.h (INCLUDE_MEMORY): Remove. * mc-boot/GStringConvert.cc (INCLUDE_MEMORY): Remove. * mc-boot/GStringConvert.h (INCLUDE_MEMORY): Remove. * mc-boot/GSysExceptions.h (INCLUDE_MEMORY): Remove. * mc-boot/GSysStorage.cc (INCLUDE_MEMORY): Remove. * mc-boot/GSysStorage.h (INCLUDE_MEMORY): Remove. * mc-boot/GTimeString.cc (INCLUDE_MEMORY): Remove. * mc-boot/GTimeString.h (INCLUDE_MEMORY): Remove. * mc-boot/GUnixArgs.h (INCLUDE_MEMORY): Remove. * mc-boot/Galists.cc (INCLUDE_MEMORY): Remove. * mc-boot/Galists.h (INCLUDE_MEMORY): Remove. * mc-boot/Gdecl.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gdecl.h (INCLUDE_MEMORY): Remove. * mc-boot/Gdtoa.h (INCLUDE_MEMORY): Remove. * mc-boot/Gerrno.h (INCLUDE_MEMORY): Remove. * mc-boot/Gkeyc.cc (INCLUDE_MEMORY): Remove. (checkGccConfigSystem): Remove printing out `#define INCLUDE_MEMORY`. * mc-boot/Gkeyc.h (INCLUDE_MEMORY): Remove. * mc-boot/Gldtoa.h (INCLUDE_MEMORY): Remove. * mc-boot/Glibc.h (INCLUDE_MEMORY): Remove. * mc-boot/Glibm.h (INCLUDE_MEMORY): Remove. * mc-boot/Glists.cc (INCLUDE_MEMORY): Remove. * mc-boot/Glists.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcComment.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcComment.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcComp.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcComp.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcDebug.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcDebug.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcError.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcError.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcFileName.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcFileName.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcLexBuf.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcLexBuf.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcMetaError.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcMetaError.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcOptions.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcOptions.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcPreprocess.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcPreprocess.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcPretty.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcPretty.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcPrintf.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcPrintf.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcQuiet.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcQuiet.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcReserved.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcReserved.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcSearch.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcSearch.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcStack.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcStack.h (INCLUDE_MEMORY): Remove. * mc-boot/GmcStream.cc (INCLUDE_MEMORY): Remove. * mc-boot/GmcStream.h (INCLUDE_MEMORY): Remove. * mc-boot/Gmcflex.h (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp1.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp1.h (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp2.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp2.h (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp3.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp3.h (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp4.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp4.h (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp5.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gmcp5.h (INCLUDE_MEMORY): Remove. * mc-boot/GnameKey.cc (INCLUDE_MEMORY): Remove. * mc-boot/GnameKey.h (INCLUDE_MEMORY): Remove. * mc-boot/GsymbolKey.cc (INCLUDE_MEMORY): Remove. * mc-boot/GsymbolKey.h (INCLUDE_MEMORY): Remove. * mc-boot/Gtermios.h (INCLUDE_MEMORY): Remove. * mc-boot/Gtop.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gvarargs.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gvarargs.h (INCLUDE_MEMORY): Remove. * mc-boot/Gwlists.cc (INCLUDE_MEMORY): Remove. * mc-boot/Gwlists.h (INCLUDE_MEMORY): Remove. * mc-boot/Gwrapc.h (INCLUDE_MEMORY): Remove. * pge-boot/GIndexing.h (INCLUDE_MEMORY): Remove. * pge-boot/GSEnvironment.h (INCLUDE_MEMORY): Remove. * pge-boot/GScan.h (INCLUDE_MEMORY): Remove. gcc/objc/ChangeLog: * objc-act.cc (INCLUDE_MEMORY): Remove. * objc-encoding.cc (INCLUDE_MEMORY): Remove. * objc-gnu-runtime-abi-01.cc (INCLUDE_MEMORY): Remove. * objc-lang.cc (INCLUDE_MEMORY): Remove. * objc-next-runtime-abi-01.cc (INCLUDE_MEMORY): Remove. * objc-next-runtime-abi-02.cc (INCLUDE_MEMORY): Remove. * objc-runtime-shared-support.cc (INCLUDE_MEMORY): Remove. gcc/objcp/ChangeLog: * objcp-decl.cc (INCLUDE_MEMORY): Remove. * objcp-lang.cc (INCLUDE_MEMORY): Remove. gcc/rust/ChangeLog: * resolve/rust-ast-resolve-expr.cc (INCLUDE_MEMORY): Remove. * rust-attribs.cc (INCLUDE_MEMORY): Remove. * rust-system.h (INCLUDE_MEMORY): Remove. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-11-20arm, mve: Fix arm_mve_dlstp_check_dec_counter's use of single_predAndre Vieira1-2/+3
Call 'single_pred_p' before 'single_pred' to verify it is safe to do so. gcc/ChangeLog: * config/arm/arm.cc (arm_mve_dlstp_check_dec_counter): Call single_pred_p to verify it's safe to call single_pred. gcc/testsuite/ChangeLog: * gcc.target/arm/mve/dlstp-loop-form.c: Add loop that triggered ICE.
2024-11-14aarch64: Introduce indirect_return attributeSzabolcs Nagy3-4/+29
Tail calls of indirect_return functions from non-indirect_return functions are disallowed even if BTI is disabled, since the call site may have BTI enabled. Needed for swapcontext within the same function when GCS is enabled. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_gnu_attributes): Add indirect_return. (aarch64_gen_callee_cookie): Use indirect_return attribute. (aarch64_callee_indirect_return): New. (aarch_fun_is_indirect_return): New. (aarch64_function_ok_for_sibcall): Disallow tail calls if caller is non-indirect_return but callee is indirect_return. (aarch64_function_arg): Add indirect_return to cookie. (aarch64_init_cumulative_args): Record indirect_return in CUMULATIVE_ARGS. (aarch64_comp_type_attributes): Check indirect_return attribute. (aarch64_output_mi_thunk): Add indirect_return to cookie. * config/aarch64/aarch64.h (CUMULATIVE_ARGS): Add new field indirect_return. * config/aarch64/aarch64.md (tlsdesc_small_<mode>): Update. * config/aarch64/aarch64-opts.h (AARCH64_NUM_ABI_ATTRIBUTES): New. * config/aarch64/aarch64-protos.h (aarch64_gen_callee_cookie): Update. * config/arm/aarch-bti-insert.cc (call_needs_bti_j): New. (rest_of_insert_bti): Use call_needs_bti_j. * config/arm/aarch-common-protos.h (aarch_fun_is_indirect_return): New. * config/arm/arm.cc (aarch_fun_is_indirect_return): New. Co-authored-by: Yury Khrustalev <yury.khrustalev@arm.com>
2024-11-09arm: Fix ICE on arm_mve.h pragma without MVE types [PR117408]Torbjörn SVENSSON1-0/+7
Starting with r14-435-g00d97bf3b5a, doing `#pragma arm "arm_mve.h" false` or `#pragma arm "arm_mve.h" true` without first doing `#pragma arm "arm_mve_types.h"` causes GCC to ICE. gcc/ChangeLog: PR target/117408 * config/arm/arm-mve-builtins.cc(handle_arm_mve_h): Detect if MVE types is missing and if so, return error. gcc/testsuite/ChangeLog: PR target/117408 * gcc.target/arm/mve/pr117408-1.c: New test. * gcc.target/arm/mve/pr117408-2.c: Likewise. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2024-11-08arm: Improvements to arm_noce_conversion_profitable_p call [PR 116444]Andre Simoes Dias Vieira1-3/+56
When not dealing with the special armv8.1-m.main conditional instructions case make sure it uses the default_noce_conversion_profitable_p call to determine whether the sequence is cost effective. Also make sure arm_noce_conversion_profitable_p accepts vsel<cond> patterns for Armv8.1-M Mainline targets. gcc/ChangeLog: PR target/116444 * config/arm/arm.cc (arm_noce_conversion_profitable_p): Call default_noce_conversion_profitable_p when not dealing with the armv8.1-m.main special case. (arm_is_vsel_fp_insn): New function.
2024-10-30arm: [MVE intrinsics] Remove unused builtins qualifiersChristophe Lyon1-41/+0
After the re-implementation of MVE vld/vst intrinsics, a few builtins qualifiers became useless. This patch removes them to restore bootstrap (otherwise the build fails because of 'defined but not used' errors. gcc/ChangeLog: * config/arm/arm-builtins.cc (STRS_QUALIFIERS): Delete. (STRU_QUALIFIERS): Delete. (STRS_P_QUALIFIERS): Delete. (STRU_P_QUALIFIERS): Delete. (LDRS_QUALIFIERS): Delete. (LDRU_QUALIFIERS): Delete. (LDRS_Z_QUALIFIERS): Delete. (LDRU_Z_QUALIFIERS): Delete.
2024-10-29arm: [MVE intrinsics] Rework MVE vld/vst intrinsicsAlfie Richards10-1578/+366
Implement the mve vld and vst intrinsics using the MVE builtins framework. The main part of the patch is to reimplement to vstr/vldr patterns such that we now have much fewer of them: - non-truncating stores - predicated non-truncating stores - truncating stores - predicated truncating stores - non-extending loads - predicated non-extending loads - extending loads - predicated extending loads This enables us to update the implementation of vld1/vst1 and use the new vldr/vstr builtins. The patch also adds support for the predicated vld1/vst1 versions. gcc.target/arm/pr112337.c needs an update, to call the intrinsic instead of the builtin, which this patch deletes. 2024-09-11 Alfie Richards <Alfie.Richards@arm.com> Christophe Lyon <christophe.lyon@arm.com> gcc/ * config/arm/arm-mve-builtins-base.cc (vld1q_impl): Add support for predicated version. (vst1q_impl): Likewise. (vstrq_impl): New class. (vldrq_impl): New class. (vldrbq): New. (vldrhq): New. (vldrwq): New. (vstrbq): New. (vstrhq): New. (vstrwq): New. * config/arm/arm-mve-builtins-base.def (vld1q): Add predicated version. (vldrbq): New. (vldrhq): New. (vldrwq): New. (vst1q): Add predicated version. (vstrbq): New. (vstrhq): New. (vstrwq): New. (vrev32q): Update types to float_16. * config/arm/arm-mve-builtins-base.h (vldrbq): New. (vldrhq): New. (vldrwq): New. (vstrbq): New. (vstrhq): New. (vstrwq): New. * config/arm/arm-mve-builtins-functions.h (memory_vector_mode): Remove conversion of floating point vectors to integer. * config/arm/arm-mve-builtins.cc (TYPES_float16): Change to... (TYPES_float_16): ...this. (TYPES_float_32): New. (float16): Change to... (float_16): ...this. (float_32): New. (preds_z_or_none): New. (function_resolver::check_gp_argument): Add support for _z predicate. * config/arm/arm_mve.h (vstrbq): Remove. (vstrbq_p): Likewise. (vstrhq): Likewise. (vstrhq_p): Likewise. (vstrwq): Likewise. (vstrwq_p): Likewise. (vst1q_p): Likewise. (vld1q_z): Likewise. (vldrbq_s8): Likewise. (vldrbq_u8): Likewise. (vldrbq_s16): Likewise. (vldrbq_u16): Likewise. (vldrbq_s32): Likewise. (vldrbq_u32): Likewise. (vstrbq_s8): Likewise. (vstrbq_s32): Likewise. (vstrbq_s16): Likewise. (vstrbq_u8): Likewise. (vstrbq_u32): Likewise. (vstrbq_u16): Likewise. (vstrbq_p_s8): Likewise. (vstrbq_p_s32): Likewise. (vstrbq_p_s16): Likewise. (vstrbq_p_u8): Likewise. (vstrbq_p_u32): Likewise. (vstrbq_p_u16): Likewise. (vldrbq_z_s16): Likewise. (vldrbq_z_u8): Likewise. (vldrbq_z_s8): Likewise. (vldrbq_z_s32): Likewise. (vldrbq_z_u16): Likewise. (vldrbq_z_u32): Likewise. (vldrhq_s32): Likewise. (vldrhq_s16): Likewise. (vldrhq_u32): Likewise. (vldrhq_u16): Likewise. (vldrhq_z_s32): Likewise. (vldrhq_z_s16): Likewise. (vldrhq_z_u32): Likewise. (vldrhq_z_u16): Likewise. (vldrwq_s32): Likewise. (vldrwq_u32): Likewise. (vldrwq_z_s32): Likewise. (vldrwq_z_u32): Likewise. (vldrhq_f16): Likewise. (vldrhq_z_f16): Likewise. (vldrwq_f32): Likewise. (vldrwq_z_f32): Likewise. (vstrhq_f16): Likewise. (vstrhq_s32): Likewise. (vstrhq_s16): Likewise. (vstrhq_u32): Likewise. (vstrhq_u16): Likewise. (vstrhq_p_f16): Likewise. (vstrhq_p_s32): Likewise. (vstrhq_p_s16): Likewise. (vstrhq_p_u32): Likewise. (vstrhq_p_u16): Likewise. (vstrwq_f32): Likewise. (vstrwq_s32): Likewise. (vstrwq_u32): Likewise. (vstrwq_p_f32): Likewise. (vstrwq_p_s32): Likewise. (vstrwq_p_u32): Likewise. (vst1q_p_u8): Likewise. (vst1q_p_s8): Likewise. (vld1q_z_u8): Likewise. (vld1q_z_s8): Likewise. (vst1q_p_u16): Likewise. (vst1q_p_s16): Likewise. (vld1q_z_u16): Likewise. (vld1q_z_s16): Likewise. (vst1q_p_u32): Likewise. (vst1q_p_s32): Likewise. (vld1q_z_u32): Likewise. (vld1q_z_s32): Likewise. (vld1q_z_f16): Likewise. (vst1q_p_f16): Likewise. (vld1q_z_f32): Likewise. (vst1q_p_f32): Likewise. (__arm_vstrbq_s8): Likewise. (__arm_vstrbq_s32): Likewise. (__arm_vstrbq_s16): Likewise. (__arm_vstrbq_u8): Likewise. (__arm_vstrbq_u32): Likewise. (__arm_vstrbq_u16): Likewise. (__arm_vldrbq_s8): Likewise. (__arm_vldrbq_u8): Likewise. (__arm_vldrbq_s16): Likewise. (__arm_vldrbq_u16): Likewise. (__arm_vldrbq_s32): Likewise. (__arm_vldrbq_u32): Likewise. (__arm_vstrbq_p_s8): Likewise. (__arm_vstrbq_p_s32): Likewise. (__arm_vstrbq_p_s16): Likewise. (__arm_vstrbq_p_u8): Likewise. (__arm_vstrbq_p_u32): Likewise. (__arm_vstrbq_p_u16): Likewise. (__arm_vldrbq_z_s8): Likewise. (__arm_vldrbq_z_s32): Likewise. (__arm_vldrbq_z_s16): Likewise. (__arm_vldrbq_z_u8): Likewise. (__arm_vldrbq_z_u32): Likewise. (__arm_vldrbq_z_u16): Likewise. (__arm_vldrhq_s32): Likewise. (__arm_vldrhq_s16): Likewise. (__arm_vldrhq_u32): Likewise. (__arm_vldrhq_u16): Likewise. (__arm_vldrhq_z_s32): Likewise. (__arm_vldrhq_z_s16): Likewise. (__arm_vldrhq_z_u32): Likewise. (__arm_vldrhq_z_u16): Likewise. (__arm_vldrwq_s32): Likewise. (__arm_vldrwq_u32): Likewise. (__arm_vldrwq_z_s32): Likewise. (__arm_vldrwq_z_u32): Likewise. (__arm_vstrhq_s32): Likewise. (__arm_vstrhq_s16): Likewise. (__arm_vstrhq_u32): Likewise. (__arm_vstrhq_u16): Likewise. (__arm_vstrhq_p_s32): Likewise. (__arm_vstrhq_p_s16): Likewise. (__arm_vstrhq_p_u32): Likewise. (__arm_vstrhq_p_u16): Likewise. (__arm_vstrwq_s32): Likewise. (__arm_vstrwq_u32): Likewise. (__arm_vstrwq_p_s32): Likewise. (__arm_vstrwq_p_u32): Likewise. (__arm_vst1q_p_u8): Likewise. (__arm_vst1q_p_s8): Likewise. (__arm_vld1q_z_u8): Likewise. (__arm_vld1q_z_s8): Likewise. (__arm_vst1q_p_u16): Likewise. (__arm_vst1q_p_s16): Likewise. (__arm_vld1q_z_u16): Likewise. (__arm_vld1q_z_s16): Likewise. (__arm_vst1q_p_u32): Likewise. (__arm_vst1q_p_s32): Likewise. (__arm_vld1q_z_u32): Likewise. (__arm_vld1q_z_s32): Likewise. (__arm_vldrwq_f32): Likewise. (__arm_vldrwq_z_f32): Likewise. (__arm_vldrhq_z_f16): Likewise. (__arm_vldrhq_f16): Likewise. (__arm_vstrwq_p_f32): Likewise. (__arm_vstrwq_f32): Likewise. (__arm_vstrhq_f16): Likewise. (__arm_vstrhq_p_f16): Likewise. (__arm_vld1q_z_f16): Likewise. (__arm_vst1q_p_f16): Likewise. (__arm_vld1q_z_f32): Likewise. (__arm_vst2q_f32): Likewise. (__arm_vst1q_p_f32): Likewise. (__arm_vstrbq): Likewise. (__arm_vstrbq_p): Likewise. (__arm_vstrhq): Likewise. (__arm_vstrhq_p): Likewise. (__arm_vstrwq): Likewise. (__arm_vstrwq_p): Likewise. (__arm_vst1q_p): Likewise. (__arm_vld1q_z): Likewise. * config/arm/arm_mve_builtins.def: (vstrbq_s): Delete. (vstrbq_u): Likewise. (vldrbq_s): Likewise. (vldrbq_u): Likewise. (vstrbq_p_s): Likewise. (vstrbq_p_u): Likewise. (vldrbq_z_s): Likewise. (vldrbq_z_u): Likewise. (vld1q_u): Likewise. (vld1q_s): Likewise. (vldrhq_z_u): Likewise. (vldrhq_u): Likewise. (vldrhq_z_s): Likewise. (vldrhq_s): Likewise. (vld1q_f): Likewise. (vldrhq_f): Likewise. (vldrhq_z_f): Likewise. (vldrwq_f): Likewise. (vldrwq_s): Likewise. (vldrwq_u): Likewise. (vldrwq_z_f): Likewise. (vldrwq_z_s): Likewise. (vldrwq_z_u): Likewise. (vst1q_u): Likewise. (vst1q_s): Likewise. (vstrhq_p_u): Likewise. (vstrhq_u): Likewise. (vstrhq_p_s): Likewise. (vstrhq_s): Likewise. (vst1q_f): Likewise. (vstrhq_f): Likewise. (vstrhq_p_f): Likewise. (vstrwq_f): Likewise. (vstrwq_s): Likewise. (vstrwq_u): Likewise. (vstrwq_p_f): Likewise. (vstrwq_p_s): Likewise. (vstrwq_p_u): Likewise. * config/arm/iterators.md (MVE_w_narrow_TYPE): New iterator. (MVE_w_narrow_type): New iterator. (MVE_wide_n_TYPE): New attribute. (MVE_wide_n_type): New attribute. (MVE_wide_n_sz_elem): New attribute. (MVE_wide_n_VPRED): New attribute. (MVE_elem_ch): New attribute. (supf): Remove VSTRBQ_S, VSTRBQ_U, VLDRBQ_S, VLDRBQ_U, VLD1Q_S, VLD1Q_U, VLDRHQ_S, VLDRHQ_U, VLDRWQ_S, VLDRWQ_U, VST1Q_S, VST1Q_U, VSTRHQ_S, VSTRHQ_U, VSTRWQ_S, VSTRWQ_U. (VSTRBQ, VLDRBQ, VLD1Q, VLDRHQ, VLDRWQ, VST1Q, VSTRHQ, VSTRWQ): Delete. * config/arm/mve.md (mve_vstrbq_<supf><mode>): Remove. (mve_vldrbq_<supf><mode>): Likewise. (mve_vstrbq_p_<supf><mode>): Likewise. (mve_vldrbq_z_<supf><mode>): Likewise. (mve_vldrhq_fv8hf): Likewise. (mve_vldrhq_<supf><mode>): Likewise. (mve_vldrhq_z_fv8hf): Likewise. (mve_vldrhq_z_<supf><mode>): Likewise. (mve_vldrwq_fv4sf): Likewise. (mve_vldrwq_<supf>v4si): Likewise. (mve_vldrwq_z_fv4sf): Likewise. (mve_vldrwq_z_<supf>v4si): Likewise. (@mve_vld1q_f<mode>): Likewise. (@mve_vld1q_<supf><mode>): Likewise. (mve_vstrhq_fv8hf): Likewise. (mve_vstrhq_p_fv8hf): Likewise. (mve_vstrhq_p_<supf><mode>): Likewise. (mve_vstrhq_<supf><mode>): Likewise. (mve_vstrwq_fv4sf): Likewise. (mve_vstrwq_p_fv4sf): Likewise. (mve_vstrwq_p_<supf>v4si): Likewise. (mve_vstrwq_<supf>v4si): Likewise. (@mve_vst1q_f<mode>): Likewise. (@mve_vst1q_<supf><mode>): Likewise. (@mve_vstrq_<mode>): New. (@mve_vstrq_p_<mode>): New. (@mve_vstrq_truncate_<mode>): New. (@mve_vstrq_p_truncate_<mode>): New. (@mve_vldrq_<mode>): New. (@mve_vldrq_z_<mode>): New. (@mve_vldrq_extend_<mode><US>): New. (@mve_vldrq_z_extend_<mode><US>): New. * config/arm/unspecs.md: (VSTRBQ_S): Remove. (VSTRBQ_U): Likewise. (VLDRBQ_S): Likewise. (VLDRBQ_U): Likewise. (VLD1Q_F): Likewise. (VLD1Q_S): Likewise. (VLD1Q_U): Likewise. (VLDRHQ_F): Likewise. (VLDRHQ_U): Likewise. (VLDRHQ_S): Likewise. (VLDRWQ_F): Likewise. (VLDRWQ_S): Likewise. (VLDRWQ_U): Likewise. (VSTRHQ_F): Likewise. (VST1Q_S): Likewise. (VST1Q_U): Likewise. (VSTRHQ_U): Likewise. (VSTRWQ_S): Likewise. (VSTRWQ_U): Likewise. (VSTRWQ_F): Likewise. (VST1Q_F): Likewise. (VLDRQ): New. (VLDRQ_Z): Likewise. (VLDRQ_EXT): Likewise. (VLDRQ_EXT_Z): Likewise. (VSTRQ): Likewise. (VSTRQ_P): Likewise. (VSTRQ_TRUNC): Likewise. (VSTRQ_TRUNC_P): Likewise. gcc/testsuite/ * gcc.target/arm/pr112337.c: Call intrinsic instead of builtin.
2024-10-29arm: [MVE intrinsics] Add support for predicated contiguous loads and storesAlfie Richards1-0/+4
This patch extends function_expander::use_contiguous_load_insn and function_expander::use_contiguous_store_insn functions to support predicated versions. 2024-09-11 Alfie Richards <Alfie.Richards@arm.com> Christophe Lyon <christophe.lyon@arm.com> gcc/ * config/arm/arm-mve-builtins.cc (function_expander::use_contiguous_load_insn): Add support for PRED_z. (function_expander::use_contiguous_store_insn): Add support for PRED_p.
2024-10-29arm: [MVE intrinsics] Add load_extending and store_truncating function basesAlfie Richards3-0/+121
This patch adds the load_extending and store_truncating function bases for MVE intrinsics. The constructors have parameters describing the memory element type/width which is part of the function base name (e.g. "h" in vldrhq). 2024-09-11 Alfie Richards <Alfie.Richards@arm.com> gcc/ * config/arm/arm-mve-builtins-functions.h (load_extending): New class. (store_truncating): New class. * config/arm/arm-protos.h (arm_mve_data_mode): New helper function. * config/arm/arm.cc (arm_mve_data_mode): New helper function.
2024-10-29arm: [MVE intrinsics] Add load_ext intrinsic shapeAlfie Richards2-3/+28
This patch adds the extending load shape. It also adds/fixes comments for the load and store shapes. 2024-09-11 Alfie Richards <Alfie.Richards@arm.com> Christophe Lyon <christophe.lyon@arm.com> gcc/ * config/arm/arm-mve-builtins-shapes.cc: (load_ext): New. * config/arm/arm-mve-builtins-shapes.h: (load_ext): New.
2024-10-27arm: Support -mfdpic for more targetsFangrui Song2-2/+5
Targets that are not arm*-*-uclinuxfdpiceabi can use -S -mfdpic, but -c -mfdpic does not pass --fdpic to gas. This is an unnecessary restriction. Just define the ASM_SPEC in bpabi.h. Additionally, use armelf[b]_linux_fdpiceabi emulations for -mfdpic in linux-eabi.h. This will allow a future musl fdpic port to use the desired BFD emulation. gcc/ChangeLog: * config/arm/bpabi.h (TARGET_FDPIC_ASM_SPEC): Transform -mfdpic. * config/arm/linux-eabi.h (TARGET_FDPIC_LINKER_EMULATION): Define. (SUBTARGET_EXTRA_LINK_SPEC): Use TARGET_FDPIC_LINKER_EMULATION if -mfdpic.