https://github.com/lenary updated https://github.com/llvm/llvm-project/pull/181439
>From 9dd24d3ae3db373dbdb4bbf685da507faae1c81a Mon Sep 17 00:00:00 2001 From: Sam Elliott <[email protected]> Date: Fri, 13 Feb 2026 14:19:04 -0800 Subject: [PATCH 1/5] [RISCV] Clang flags for controlling zilsd alignment Called `-mno-zilsd-4byte-align` and `-mzilsd-4byte-align`. These interact with scalar/strict alignment, in hopefully a reasonable way. They cause errors on rv64, where zilsd is not available. --- clang-tools-extra/docs/ReleaseNotes.rst | 4 +++ clang/include/clang/Options/Options.td | 4 +++ clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 29 +++++++++++++++++++++ clang/test/Driver/riscv-zilsd-4byte-align.c | 25 ++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 clang/test/Driver/riscv-zilsd-4byte-align.c diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index e7437e62ee77d..aa5d33edad3ce 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -64,6 +64,10 @@ Semantic Highlighting Compile flags ^^^^^^^^^^^^^ +- There are a new pair of flags for riscv32 called ``-mzilsd-4byte-align`` and + ``-mzilsd-4byte-align`` which control whether Zilsd accesses are allowed to be + aligned to 4-bytes rather than fully unaligned or fully (8-byte) aligned. + Hover ^^^^^ diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index a274017953b1d..8faed31813d2b 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -5454,6 +5454,10 @@ def mvector_strict_align : Flag<["-"], "mvector-strict-align">, Group<m_Group>, HelpText<"Force all vector memory accesses to be aligned (RISC-V only)">; def mno_vector_strict_align : Flag<["-"], "mno-vector-strict-align">, Group<m_Group>, HelpText<"Allow vector memory accesses to be unaligned (RISC-V only)">; +def mzilsd_4byte_align : Flag<["-"], "mzilsd-4byte-align">, Group<m_Group>, + HelpText<"Allow Zilsd/Zclsd accesses to be 4-byte aligned (RISC-V only)">; +def mno_zilsd_4byte_align : Flag<["-"], "mno-zilsd-4byte-align">, Group<m_Group>, + HelpText<"Force Zilsd/Zclsd accesses to be 8-byte aligned (RISC-V only)">; def mno_thumb : Flag<["-"], "mno-thumb">, Group<m_arm_Features_Group>; def mrestrict_it: Flag<["-"], "mrestrict-it">, Group<m_arm_Features_Group>, HelpText<"Disallow generation of complex IT blocks. It is off by default.">; diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp index 7fda8ea50223d..582a8e4ce8b66 100644 --- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp +++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp @@ -8,6 +8,7 @@ #include "RISCV.h" #include "../Clang.h" +#include "clang/Basic/DiagnosticDriver.h" #include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Options/Options.h" @@ -169,6 +170,34 @@ void riscv::getRISCVTargetFeatures(const Driver &D, const llvm::Triple &Triple, Features.push_back("+unaligned-vector-mem"); } + if (Triple.isRISCV32()) { + // Handle `-mzilsd-4byte-align` and `-mnozilsd-4byte-align` on rv32. These + // interact with the scalar alignment options - if unaligned scalar memory + // is allowed then that takes precedence over this option, as zilsd accesses + // can be 1-byte aligned in this case. Otherwise, the option allows zilsd + // accesses to be 4-byte aligned rather than the usual 8-byte aligned. + if (const Arg *A = Args.getLastArg( + options::OPT_mstrict_align, options::OPT_mscalar_strict_align, + options::OPT_mzilsd_4byte_align, options::OPT_mno_strict_align, + options::OPT_mno_scalar_strict_align, + options::OPT_mno_zilsd_4byte_align)) { + if (A->getOption().matches(options::OPT_mno_strict_align) || + A->getOption().matches(options::OPT_mno_scalar_strict_align) || + A->getOption().matches(options::OPT_mzilsd_4byte_align)) { + Features.push_back("+zilsd-4byte-align"); + } else { + Features.push_back("-zilsd-4byte-align"); + } + } + } else { + // Zilsd is not available on RV64, so report an error for these options. + if (const Arg *A = Args.getLastArg(options::OPT_mzilsd_4byte_align, + options::OPT_mno_zilsd_4byte_align)) { + D.Diag(clang::diag::err_drv_unsupported_opt_for_target) + << A->getSpelling() << Triple.getTriple(); + } + } + // Now add any that the user explicitly requested on the command line, // which may override the defaults. handleTargetFeaturesGroup(D, Triple, Args, Features, diff --git a/clang/test/Driver/riscv-zilsd-4byte-align.c b/clang/test/Driver/riscv-zilsd-4byte-align.c new file mode 100644 index 0000000000000..3cdd679ac56d1 --- /dev/null +++ b/clang/test/Driver/riscv-zilsd-4byte-align.c @@ -0,0 +1,25 @@ + + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-strict-align 2>&1 | FileCheck %s -check-prefixes=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mstrict-align 2>&1 | FileCheck %s -check-prefixes=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-zilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-zilsd-4byte-align -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-4byte-align -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-zilsd-4byte-align -mno-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-4byte-align -mstrict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// ZILSD-4BYTE-ALIGN: "-target-feature" "+zilsd-4byte-align" +// NO-ZILSD-4BYTE-ALIGN: "-target-feature" "-zilsd-4byte-align" + +// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=ERROR-ZILSD-4BYTE-ALIGN +// RUN: not %clang --target=riscv64-unknown-elf -### %s -mno-zilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=ERROR-NO-ZILSD-4BYTE-ALIGN + +// ERROR-ZILSD-4BYTE-ALIGN: error: unsupported option '-mzilsd-4byte-align' for target +// ERROR-NO-ZILSD-4BYTE-ALIGN: error: unsupported option '-mno-zilsd-4byte-align' for target >From 66c60dbe8ce409d15331a011b8f1c19536f76846 Mon Sep 17 00:00:00 2001 From: Sam Elliott <[email protected]> Date: Fri, 13 Feb 2026 23:48:18 -0800 Subject: [PATCH 2/5] Put release note in correct file --- clang-tools-extra/docs/ReleaseNotes.rst | 4 ---- clang/docs/ReleaseNotes.rst | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index aa5d33edad3ce..e7437e62ee77d 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -64,10 +64,6 @@ Semantic Highlighting Compile flags ^^^^^^^^^^^^^ -- There are a new pair of flags for riscv32 called ``-mzilsd-4byte-align`` and - ``-mzilsd-4byte-align`` which control whether Zilsd accesses are allowed to be - aligned to 4-bytes rather than fully unaligned or fully (8-byte) aligned. - Hover ^^^^^ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 83cd562c6f49b..c72c13448af2e 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -152,6 +152,10 @@ New Compiler Flags can only generate the reduced BMI as a by-product, e.g, an object files or a full BMI. +- There are a new pair of flags for riscv32 called ``-mzilsd-4byte-align`` and + ``-mzilsd-4byte-align`` which control whether Zilsd accesses are allowed to be + aligned to 4-bytes rather than fully unaligned or fully (8-byte) aligned. + Deprecated Compiler Flags ------------------------- >From 671cb1535b2e9ba5df612e83bd4c8ff0e7606d06 Mon Sep 17 00:00:00 2001 From: Sam Elliott <[email protected]> Date: Thu, 19 Feb 2026 13:16:15 -0800 Subject: [PATCH 3/5] New option names --- clang/include/clang/Options/Options.td | 8 +++---- clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 17 +++++++------- clang/test/Driver/riscv-zilsd-4byte-align.c | 25 --------------------- clang/test/Driver/riscv-zilsd-word-align.c | 25 +++++++++++++++++++++ 4 files changed, 38 insertions(+), 37 deletions(-) delete mode 100644 clang/test/Driver/riscv-zilsd-4byte-align.c create mode 100644 clang/test/Driver/riscv-zilsd-word-align.c diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index 9c0b8450c7b73..7eb8f2cbd5077 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -5459,10 +5459,10 @@ def mvector_strict_align : Flag<["-"], "mvector-strict-align">, Group<m_Group>, HelpText<"Force all vector memory accesses to be aligned (RISC-V only)">; def mno_vector_strict_align : Flag<["-"], "mno-vector-strict-align">, Group<m_Group>, HelpText<"Allow vector memory accesses to be unaligned (RISC-V only)">; -def mzilsd_4byte_align : Flag<["-"], "mzilsd-4byte-align">, Group<m_Group>, - HelpText<"Allow Zilsd/Zclsd accesses to be 4-byte aligned (RISC-V only)">; -def mno_zilsd_4byte_align : Flag<["-"], "mno-zilsd-4byte-align">, Group<m_Group>, - HelpText<"Force Zilsd/Zclsd accesses to be 8-byte aligned (RISC-V only)">; +def mzilsd_word_align : Flag<["-"], "mzilsd-word-align">, Group<m_Group>, + HelpText<"Allow Zilsd/Zclsd memory accesses to be 4-byte aligned (RISC-V only)">; +def mzilsd_strict_align : Flag<["-"], "mzilsd-strict-align">, Group<m_Group>, + HelpText<"Force all Zilsd/Zclsd memory accesses to be 8-byte aligned (RISC-V only)">; def mno_thumb : Flag<["-"], "mno-thumb">, Group<m_arm_Features_Group>; def mrestrict_it: Flag<["-"], "mrestrict-it">, Group<m_arm_Features_Group>, HelpText<"Disallow generation of complex IT blocks. It is off by default.">; diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp index 582a8e4ce8b66..bc07de83f545b 100644 --- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp +++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp @@ -171,19 +171,20 @@ void riscv::getRISCVTargetFeatures(const Driver &D, const llvm::Triple &Triple, } if (Triple.isRISCV32()) { - // Handle `-mzilsd-4byte-align` and `-mnozilsd-4byte-align` on rv32. These + // Handle `-mzilsd-word-align` and `-mzilsd-strict-align` on rv32. These // interact with the scalar alignment options - if unaligned scalar memory // is allowed then that takes precedence over this option, as zilsd accesses - // can be 1-byte aligned in this case. Otherwise, the option allows zilsd - // accesses to be 4-byte aligned rather than the usual 8-byte aligned. + // can be 1-byte aligned in this case. Otherwise, the option + // `-mzilsd-word-align` option allows zilsd accesses to be 4-byte aligned + // rather than the usual 8-byte aligned (`-mzilsd-strict-align`). if (const Arg *A = Args.getLastArg( options::OPT_mstrict_align, options::OPT_mscalar_strict_align, - options::OPT_mzilsd_4byte_align, options::OPT_mno_strict_align, + options::OPT_mzilsd_word_align, options::OPT_mno_strict_align, options::OPT_mno_scalar_strict_align, - options::OPT_mno_zilsd_4byte_align)) { + options::OPT_mzilsd_strict_align)) { if (A->getOption().matches(options::OPT_mno_strict_align) || A->getOption().matches(options::OPT_mno_scalar_strict_align) || - A->getOption().matches(options::OPT_mzilsd_4byte_align)) { + A->getOption().matches(options::OPT_mzilsd_word_align)) { Features.push_back("+zilsd-4byte-align"); } else { Features.push_back("-zilsd-4byte-align"); @@ -191,8 +192,8 @@ void riscv::getRISCVTargetFeatures(const Driver &D, const llvm::Triple &Triple, } } else { // Zilsd is not available on RV64, so report an error for these options. - if (const Arg *A = Args.getLastArg(options::OPT_mzilsd_4byte_align, - options::OPT_mno_zilsd_4byte_align)) { + if (const Arg *A = Args.getLastArg(options::OPT_mzilsd_word_align, + options::OPT_mzilsd_strict_align)) { D.Diag(clang::diag::err_drv_unsupported_opt_for_target) << A->getSpelling() << Triple.getTriple(); } diff --git a/clang/test/Driver/riscv-zilsd-4byte-align.c b/clang/test/Driver/riscv-zilsd-4byte-align.c deleted file mode 100644 index 3cdd679ac56d1..0000000000000 --- a/clang/test/Driver/riscv-zilsd-4byte-align.c +++ /dev/null @@ -1,25 +0,0 @@ - - -// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-strict-align 2>&1 | FileCheck %s -check-prefixes=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mstrict-align 2>&1 | FileCheck %s -check-prefixes=NO-ZILSD-4BYTE-ALIGN - -// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN - -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-zilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN - -// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-zilsd-4byte-align -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-4byte-align -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN - -// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-zilsd-4byte-align -mno-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-4byte-align -mstrict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN - -// ZILSD-4BYTE-ALIGN: "-target-feature" "+zilsd-4byte-align" -// NO-ZILSD-4BYTE-ALIGN: "-target-feature" "-zilsd-4byte-align" - -// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=ERROR-ZILSD-4BYTE-ALIGN -// RUN: not %clang --target=riscv64-unknown-elf -### %s -mno-zilsd-4byte-align 2>&1 | FileCheck %s -check-prefix=ERROR-NO-ZILSD-4BYTE-ALIGN - -// ERROR-ZILSD-4BYTE-ALIGN: error: unsupported option '-mzilsd-4byte-align' for target -// ERROR-NO-ZILSD-4BYTE-ALIGN: error: unsupported option '-mno-zilsd-4byte-align' for target diff --git a/clang/test/Driver/riscv-zilsd-word-align.c b/clang/test/Driver/riscv-zilsd-word-align.c new file mode 100644 index 0000000000000..d4850b3ccf641 --- /dev/null +++ b/clang/test/Driver/riscv-zilsd-word-align.c @@ -0,0 +1,25 @@ + + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-strict-align 2>&1 | FileCheck %s -check-prefixes=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mstrict-align 2>&1 | FileCheck %s -check-prefixes=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align -mno-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align -mstrict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN + +// ZILSD-4BYTE-ALIGN: "-target-feature" "+zilsd-4byte-align" +// NO-ZILSD-4BYTE-ALIGN: "-target-feature" "-zilsd-4byte-align" + +// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-word-align 2>&1 | FileCheck %s -check-prefix=ERROR-ZILSD-4BYTE-ALIGN +// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-strict-align 2>&1 | FileCheck %s -check-prefix=ERROR-NO-ZILSD-4BYTE-ALIGN + +// ERROR-ZILSD-4BYTE-ALIGN: error: unsupported option '-mzilsd-word-align' for target +// ERROR-NO-ZILSD-4BYTE-ALIGN: error: unsupported option '-mzilsd-strict-align' for target >From 587dd958869ce34cd2c404f100102efcc574d87c Mon Sep 17 00:00:00 2001 From: Sam Elliott <[email protected]> Date: Mon, 30 Mar 2026 14:37:11 -0700 Subject: [PATCH 4/5] update feature name --- clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 4 +-- clang/test/Driver/riscv-zilsd-word-align.c | 32 +++++++++---------- llvm/lib/Target/RISCV/RISCVFeatures.td | 4 +-- llvm/lib/Target/RISCV/RISCVSubtarget.h | 2 +- llvm/test/CodeGen/RISCV/callee-saved-gprs.ll | 2 +- llvm/test/CodeGen/RISCV/features-info.ll | 2 +- llvm/test/CodeGen/RISCV/zdinx-spill.ll | 2 +- .../CodeGen/RISCV/zilsd-ldst-opt-prera.mir | 2 +- .../CodeGen/RISCV/zilsd-regalloc-hints.mir | 2 +- llvm/test/CodeGen/RISCV/zilsd-spill.ll | 2 +- llvm/test/CodeGen/RISCV/zilsd.ll | 2 +- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp index bc07de83f545b..f17e3c4942709 100644 --- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp +++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp @@ -185,9 +185,9 @@ void riscv::getRISCVTargetFeatures(const Driver &D, const llvm::Triple &Triple, if (A->getOption().matches(options::OPT_mno_strict_align) || A->getOption().matches(options::OPT_mno_scalar_strict_align) || A->getOption().matches(options::OPT_mzilsd_word_align)) { - Features.push_back("+zilsd-4byte-align"); + Features.push_back("+zilsd-word-align"); } else { - Features.push_back("-zilsd-4byte-align"); + Features.push_back("-zilsd-word-align"); } } } else { diff --git a/clang/test/Driver/riscv-zilsd-word-align.c b/clang/test/Driver/riscv-zilsd-word-align.c index d4850b3ccf641..c6e08bb87aa55 100644 --- a/clang/test/Driver/riscv-zilsd-word-align.c +++ b/clang/test/Driver/riscv-zilsd-word-align.c @@ -1,25 +1,25 @@ -// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-strict-align 2>&1 | FileCheck %s -check-prefixes=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mstrict-align 2>&1 | FileCheck %s -check-prefixes=NO-ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-strict-align 2>&1 | FileCheck %s -check-prefixes=ZILSD-WORD-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mstrict-align 2>&1 | FileCheck %s -check-prefixes=NO-ZILSD-WORD-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-WORD-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-WORD-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align 2>&1 | FileCheck %s -check-prefix=ZILSD-WORD-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-WORD-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align -mno-scalar-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-WORD-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align -mscalar-strict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-WORD-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align -mno-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-4BYTE-ALIGN -// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align -mstrict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-4BYTE-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-strict-align -mno-strict-align 2>&1 | FileCheck %s -check-prefix=ZILSD-WORD-ALIGN +// RUN: %clang --target=riscv32-unknown-elf -### %s -mzilsd-word-align -mstrict-align 2>&1 | FileCheck %s -check-prefix=NO-ZILSD-WORD-ALIGN -// ZILSD-4BYTE-ALIGN: "-target-feature" "+zilsd-4byte-align" -// NO-ZILSD-4BYTE-ALIGN: "-target-feature" "-zilsd-4byte-align" +// ZILSD-WORD-ALIGN: "-target-feature" "+zilsd-word-align" +// NO-ZILSD-WORD-ALIGN: "-target-feature" "-zilsd-word-align" -// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-word-align 2>&1 | FileCheck %s -check-prefix=ERROR-ZILSD-4BYTE-ALIGN -// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-strict-align 2>&1 | FileCheck %s -check-prefix=ERROR-NO-ZILSD-4BYTE-ALIGN +// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-word-align 2>&1 | FileCheck %s -check-prefix=ERROR-ZILSD-WORD-ALIGN +// RUN: not %clang --target=riscv64-unknown-elf -### %s -mzilsd-strict-align 2>&1 | FileCheck %s -check-prefix=ERROR-NO-ZILSD-WORD-ALIGN -// ERROR-ZILSD-4BYTE-ALIGN: error: unsupported option '-mzilsd-word-align' for target -// ERROR-NO-ZILSD-4BYTE-ALIGN: error: unsupported option '-mzilsd-strict-align' for target +// ERROR-ZILSD-WORD-ALIGN: error: unsupported option '-mzilsd-word-align' for target +// ERROR-NO-ZILSD-WORD-ALIGN: error: unsupported option '-mzilsd-strict-align' for target diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td index 59525fb0a469e..379380c83d91d 100644 --- a/llvm/lib/Target/RISCV/RISCVFeatures.td +++ b/llvm/lib/Target/RISCV/RISCVFeatures.td @@ -195,8 +195,8 @@ def HasStdExtZilsd : Predicate<"Subtarget->hasStdExtZilsd()">, AssemblerPredicate<(all_of FeatureStdExtZilsd), "'Zilsd' (Load/Store pair instructions)">; -def FeatureZilsd4ByteAlign - : SubtargetFeature<"zilsd-4byte-align", "AllowZilsd4ByteAlign", "true", +def FeatureZilsdWordAlign + : SubtargetFeature<"zilsd-word-align", "AllowZilsdWordAlign", "true", "Allow 4-byte alignment for Zilsd LD/SD instructions">; // Multiply Extensions diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.h b/llvm/lib/Target/RISCV/RISCVSubtarget.h index 4cbb7750de769..17aec0b8abc34 100644 --- a/llvm/lib/Target/RISCV/RISCVSubtarget.h +++ b/llvm/lib/Target/RISCV/RISCVSubtarget.h @@ -246,7 +246,7 @@ class RISCVSubtarget : public RISCVGenSubtargetInfo { Align getZilsdAlign() const { return Align(enableUnalignedScalarMem() ? 1 - : allowZilsd4ByteAlign() ? 4 + : allowZilsdWordAlign() ? 4 : 8); } diff --git a/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll b/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll index 4e5d175e0ee12..ebd91fe885669 100644 --- a/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll +++ b/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll @@ -37,7 +37,7 @@ ; RUN: | FileCheck %s -check-prefix=RV32I-ZILSD-WITH-FP ; RUN: llc -mtriple=riscv32 -mattr=+zilsd -target-abi ilp32e -verify-machineinstrs < %s \ ; RUN: | FileCheck %s -check-prefix=RV32I-ZILSD-ILP32E -; RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-4byte-align -target-abi ilp32e -verify-machineinstrs < %s \ +; RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-word-align -target-abi ilp32e -verify-machineinstrs < %s \ ; RUN: | FileCheck %s -check-prefix=RV32I-ZILSD-ILP32E-4BYTE @var = global [32 x i32] zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/features-info.ll b/llvm/test/CodeGen/RISCV/features-info.ll index 5a137a9dbbc3a..b9c49af42dcef 100644 --- a/llvm/test/CodeGen/RISCV/features-info.ll +++ b/llvm/test/CodeGen/RISCV/features-info.ll @@ -314,7 +314,7 @@ ; CHECK-NEXT: zihintpause - 'Zihintpause' (Pause Hint). ; CHECK-NEXT: zihpm - 'Zihpm' (Hardware Performance Counters). ; CHECK-NEXT: zilsd - 'Zilsd' (Load/Store Pair Instructions). -; CHECK-NEXT: zilsd-4byte-align - Allow 4-byte alignment for Zilsd LD/SD instructions. +; CHECK-NEXT: zilsd-word-align - Allow 4-byte alignment for Zilsd LD/SD instructions. ; CHECK-NEXT: zimop - 'Zimop' (May-Be-Operations). ; CHECK-NEXT: zk - 'Zk' (Standard scalar cryptography extension). ; CHECK-NEXT: zkn - 'Zkn' (NIST Algorithm Suite). diff --git a/llvm/test/CodeGen/RISCV/zdinx-spill.ll b/llvm/test/CodeGen/RISCV/zdinx-spill.ll index 0a0c30157ecfc..a1d103b619647 100644 --- a/llvm/test/CodeGen/RISCV/zdinx-spill.ll +++ b/llvm/test/CodeGen/RISCV/zdinx-spill.ll @@ -2,7 +2,7 @@ ; RUN: llc < %s -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs -stop-after=prologepilog | FileCheck %s -check-prefix=ZDINX ; RUN: llc < %s -mtriple=riscv32 -mattr=+zdinx,+zilsd -verify-machineinstrs -stop-after=prologepilog | FileCheck %s -check-prefix=ZDINX-ZILSD ; RUN: llc < %s -mtriple=riscv32 -mattr=+zdinx,+zilsd,+unaligned-scalar-mem -verify-machineinstrs -stop-after=prologepilog | FileCheck %s -check-prefix=ZDINX-ZILSD-UNALIGNED -; RUN: llc < %s -mtriple=riscv32 -mattr=+zdinx,+zilsd,+zilsd-4byte-align -verify-machineinstrs -stop-after=prologepilog | FileCheck %s -check-prefix=ZDINX-ZILSD-4BYTEALIGN +; RUN: llc < %s -mtriple=riscv32 -mattr=+zdinx,+zilsd,+zilsd-word-align -verify-machineinstrs -stop-after=prologepilog | FileCheck %s -check-prefix=ZDINX-ZILSD-4BYTEALIGN declare void @bar() diff --git a/llvm/test/CodeGen/RISCV/zilsd-ldst-opt-prera.mir b/llvm/test/CodeGen/RISCV/zilsd-ldst-opt-prera.mir index c2400e982cb89..20dc3a9c4598d 100644 --- a/llvm/test/CodeGen/RISCV/zilsd-ldst-opt-prera.mir +++ b/llvm/test/CodeGen/RISCV/zilsd-ldst-opt-prera.mir @@ -1,6 +1,6 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 # RUN: llc -mtriple=riscv32 -mattr=+zilsd -run-pass riscv-prera-zilsd-opt %s -o - | FileCheck %s -# RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-4byte-align -run-pass riscv-prera-zilsd-opt %s -o - | FileCheck %s --check-prefix=CHECK-4BYTE +# RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-word-align -run-pass riscv-prera-zilsd-opt %s -o - | FileCheck %s --check-prefix=CHECK-4BYTE --- | declare void @external_func() diff --git a/llvm/test/CodeGen/RISCV/zilsd-regalloc-hints.mir b/llvm/test/CodeGen/RISCV/zilsd-regalloc-hints.mir index b3861c3098cea..7b2ce62a38383 100644 --- a/llvm/test/CodeGen/RISCV/zilsd-regalloc-hints.mir +++ b/llvm/test/CodeGen/RISCV/zilsd-regalloc-hints.mir @@ -1,6 +1,6 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 # RUN: llc -mtriple=riscv32 -mattr=+zilsd -run-pass=greedy,virtregrewriter %s -o - | FileCheck --check-prefix=WITHOUT-HINT %s -# RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-4byte-align -run-pass=riscv-prera-zilsd-opt,greedy,virtregrewriter %s -o - | FileCheck --check-prefix=WITH-HINT %s +# RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-word-align -run-pass=riscv-prera-zilsd-opt,greedy,virtregrewriter %s -o - | FileCheck --check-prefix=WITH-HINT %s --- | define i32 @test_load_pair_hints(ptr %p) { diff --git a/llvm/test/CodeGen/RISCV/zilsd-spill.ll b/llvm/test/CodeGen/RISCV/zilsd-spill.ll index 41eccedd287a7..eea589fc03f6c 100644 --- a/llvm/test/CodeGen/RISCV/zilsd-spill.ll +++ b/llvm/test/CodeGen/RISCV/zilsd-spill.ll @@ -5,7 +5,7 @@ ; RUN: | FileCheck %s -check-prefix=RV32I-ZILSD ; RUN: llc < %s -mtriple=riscv32 -mattr=+zilsd,+unaligned-scalar-mem -verify-machineinstrs -stop-after=prologepilog \ ; RUN: | FileCheck %s -check-prefix=RV32I-ZILSD-UNALIGNED -; RUN: llc < %s -mtriple=riscv32 -mattr=+zilsd,+zilsd-4byte-align -verify-machineinstrs -stop-after=prologepilog \ +; RUN: llc < %s -mtriple=riscv32 -mattr=+zilsd,+zilsd-word-align -verify-machineinstrs -stop-after=prologepilog \ ; RUN: | FileCheck %s -check-prefix=RV32I-ZILSD-4BYTEALIGN define i64 @cmpxchg_i64_monotonic_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwind { diff --git a/llvm/test/CodeGen/RISCV/zilsd.ll b/llvm/test/CodeGen/RISCV/zilsd.ll index 12b6a73fa44cd..9429311713dcb 100644 --- a/llvm/test/CodeGen/RISCV/zilsd.ll +++ b/llvm/test/CodeGen/RISCV/zilsd.ll @@ -3,7 +3,7 @@ ; RUN: | FileCheck -check-prefixes=CHECK,SLOW %s ; RUN: llc -mtriple=riscv32 -mattr=+zilsd,+unaligned-scalar-mem -verify-machineinstrs < %s \ ; RUN: | FileCheck -check-prefixes=CHECK,FAST %s -; RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-4byte-align -verify-machineinstrs < %s \ +; RUN: llc -mtriple=riscv32 -mattr=+zilsd,+zilsd-word-align -verify-machineinstrs < %s \ ; RUN: | FileCheck -check-prefixes=CHECK,4BYTEALIGN %s define i64 @load(ptr %a) nounwind { >From 5d2e13497e16a04ded1a43b0d85fba70e45be8c6 Mon Sep 17 00:00:00 2001 From: Sam Elliott <[email protected]> Date: Mon, 30 Mar 2026 15:53:09 -0700 Subject: [PATCH 5/5] clang-format, remove nested ternary --- llvm/lib/Target/RISCV/RISCVSubtarget.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.h b/llvm/lib/Target/RISCV/RISCVSubtarget.h index 17aec0b8abc34..1fe076fd93c52 100644 --- a/llvm/lib/Target/RISCV/RISCVSubtarget.h +++ b/llvm/lib/Target/RISCV/RISCVSubtarget.h @@ -245,9 +245,13 @@ class RISCVSubtarget : public RISCVGenSubtargetInfo { } Align getZilsdAlign() const { - return Align(enableUnalignedScalarMem() ? 1 - : allowZilsdWordAlign() ? 4 - : 8); + if (enableUnalignedScalarMem()) + return Align(1); + + if (allowZilsdWordAlign()) + return Align(4); + + return Align(8); } unsigned getELen() const { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
