https://gcc.gnu.org/bugzilla/show_bug.cgi?id=156
--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Christoph Meullner <[email protected]>: https://gcc.gnu.org/g:20ee88e64f705c42a52f74e46322c20a617b85c5 commit r17-644-g20ee88e64f705c42a52f74e46322c20a617b85c5 Author: Christoph Müllner <[email protected]> Date: Mon May 18 23:44:06 2026 +0200 RISC-V: Add Zilsd alignment control options riscv-toolchain-conventions PR #156 defines separate alignment policies for RV32 Zilsd/Zclsd doubleword memory accesses. Add -mzilsd-word-align and -mzilsd-strict-align to let users select the word-aligned and naturally aligned variants explicitly. Keep the existing -mstrict-align family in the same last-option-wins option group so code can opt in or out without depending on option order surprises. When a 2 * XLEN access is not allowed by the selected policy, expand through scalar bit-field helpers instead of selecting Zilsd loads or stores. gcc/ChangeLog: * common/config/riscv/riscv-common.cc (riscv_handle_option): Handle Zilsd alignment options and clear the Zilsd-specific explicit marker for -mstrict-align. * config/riscv/riscv-opts.h (riscv_zilsd_align_type): New enum. * config/riscv/riscv-protos.h (riscv_expand_zilsd_misaligned_move): Declare as void. (riscv_zilsd_valid_mem_p): Declare. * config/riscv/riscv.cc (riscv_zilsd_required_align): New functions. (riscv_zilsd_valid_mem_p): New function. (riscv_rtx_costs): Honor Zilsd alignment policy. (riscv_split_64bit_move_p): Split invalid Zilsd GPR accesses. (riscv_expand_zilsd_misaligned_move): New function. (riscv_can_inline_p): Check effective Zilsd alignment policy. (riscv_override_options_internal): Reject explicit Zilsd alignment options for RV64. * config/riscv/riscv.md (movmisaligndi): New expander. (movmisaligndf): New expander. * config/riscv/riscv.opt: Add -mzilsd-word-align and -mzilsd-strict-align. * config/riscv/riscv.opt.urls: Regenerate. * doc/invoke.texi: Document the new options. gcc/testsuite/ChangeLog: * gcc.target/riscv/zilsd-align-default-1.c: New test. * gcc.target/riscv/zilsd-align-df-1.c: New test. * gcc.target/riscv/zilsd-align-rv64-1.c: New test. * gcc.target/riscv/zilsd-align-rv64-2.c: New test. * gcc.target/riscv/zilsd-align-rv64-3.c: New test. * gcc.target/riscv/zilsd-align-rv64-4.c: New test. * gcc.target/riscv/zilsd-align-word-1.c: New test. * gcc.target/riscv/zilsd-align-word-2.c: New test. * gcc.target/riscv/zilsd-align-word-3.c: New test. * gcc.target/riscv/zilsd-align-word-4.c: New test. * gcc.target/riscv/zilsd-align-word-5.c: New test. Signed-off-by: Christoph Müllner <[email protected]>
