[clang] [clang-tools-extra] [llvm] [RISCV] Clang flags for controlling zilsd alignment (PR #181439)
Sam Elliott via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 4 07:49:22 PDT 2026
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 <aelliott at qti.qualcomm.com>
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 <aelliott at qti.qualcomm.com>
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 <aelliott at qti.qualcomm.com>
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 <aelliott at qti.qualcomm.com>
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 <aelliott at qti.qualcomm.com>
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 {
More information about the cfe-commits
mailing list