[clang] a54947f - [Clang][LoongArch] Implement getConstraintRegister for LoongArch (#210898)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 26 18:01:01 PDT 2026
Author: wanglei
Date: 2026-07-27T09:00:56+08:00
New Revision: a54947f4061498fa5aadf2f8e832ae96a3405c4d
URL: https://github.com/llvm/llvm-project/commit/a54947f4061498fa5aadf2f8e832ae96a3405c4d
DIFF: https://github.com/llvm/llvm-project/commit/a54947f4061498fa5aadf2f8e832ae96a3405c4d.diff
LOG: [Clang][LoongArch] Implement getConstraintRegister for LoongArch (#210898)
Implement `getConstraintRegister` so Clang can diagnose inline asm
register clobber conflicts for LoongArch, matching GCC.
Added:
clang/test/Sema/inline-asm-validate-loongarch.c
Modified:
clang/lib/Basic/Targets/LoongArch.h
Removed:
################################################################################
diff --git a/clang/lib/Basic/Targets/LoongArch.h b/clang/lib/Basic/Targets/LoongArch.h
index 4c98f9d0e40ae..95d5653f0fbf7 100644
--- a/clang/lib/Basic/Targets/LoongArch.h
+++ b/clang/lib/Basic/Targets/LoongArch.h
@@ -87,6 +87,11 @@ class LLVM_LIBRARY_VISIBILITY LoongArchTargetInfo : public TargetInfo {
std::string_view getClobbers() const override { return ""; }
+ StringRef getConstraintRegister(StringRef Constraint,
+ StringRef Expression) const override {
+ return Expression;
+ }
+
ArrayRef<const char *> getGCCRegNames() const override;
int getEHDataRegisterNumber(unsigned RegNo) const override {
diff --git a/clang/test/Sema/inline-asm-validate-loongarch.c b/clang/test/Sema/inline-asm-validate-loongarch.c
new file mode 100644
index 0000000000000..a621604e4c082
--- /dev/null
+++ b/clang/test/Sema/inline-asm-validate-loongarch.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -triple loongarch32 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -triple loongarch64 -fsyntax-only -verify %s
+
+void test_clobber_conflict(void) {
+ register long r4 asm("r4");
+ asm volatile("" :: "r"(r4) : "$r4"); // expected-error {{conflicts with asm clobber list}}
+ asm volatile("" :: "r"(r4) : "$a0"); // expected-error {{conflicts with asm clobber list}}
+ asm volatile("" : "=r"(r4) :: "$r4"); // expected-error {{conflicts with asm clobber list}}
+ asm volatile("" : "=r"(r4) :: "$a0"); // expected-error {{conflicts with asm clobber list}}
+}
More information about the cfe-commits
mailing list