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

Reply via email to