[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