https://github.com/knightXun created 
https://github.com/llvm/llvm-project/pull/75208

to align with GCC asm: "+f" is not allowed to be used on output register.

fix issue: https://github.com/llvm/llvm-project/issues/75019

>From 38e6bcf970d62deb5c6fa2ba33ae817d39124c6a Mon Sep 17 00:00:00 2001
From: knightXun <badgangkil...@gmail.com>
Date: Tue, 12 Dec 2023 23:57:56 +0800
Subject: [PATCH] [clang][sema] forbid '+f' on output register to align with
 GCC asm: "+f" is not allowed to be used on output register.

fix issue: https://github.com/llvm/llvm-project/issues/75019
---
 clang/lib/Basic/TargetInfo.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index 6cd5d618a4aca..57a81e03bc484 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -717,8 +717,15 @@ bool TargetInfo::validateOutputConstraint(ConstraintInfo 
&Info) const {
   if (*Name != '=' && *Name != '+')
     return false;
 
-  if (*Name == '+')
+  if (*Name == '+') {
     Info.setIsReadWrite();
+    // To align with GCC asm: "=f" is not allowed, the
+    // operand constraints must select a class with a single reg.
+    auto Flag = Name + 1;
+    if (Flag && *Flag == 'f') {
+      return false;
+    }
+  }
 
   Name++;
   while (*Name) {

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to