[clang] [llvm] [Clang][inlineasm] Add special support for "rm" output constraints (PR #92040)

Bill Wendling via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 16 18:20:43 PST 2026


================
@@ -2921,13 +2921,20 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
     if (!Constraints.empty())
       Constraints += ',';
 
-    // If this is a register output, then make the inline asm return it
-    // by-value.  If this is a memory result, return the value by-reference.
+    // - If this is a register output, then make the inline asm return it
+    //   by-value.
+    // - If this is an "rm" constraint on x86, then treat it like a register
+    //   output. (We'll correct this before ISel if using the FastRA.)
+    // - If this is a memory result, return the value by-reference.
     QualType QTy = OutExpr->getType();
     const bool IsScalarOrAggregate = hasScalarEvaluationKind(QTy) ||
                                      hasAggregateEvaluationKind(QTy);
-    if (!Info.allowsMemory() && IsScalarOrAggregate) {
+    const bool X86RegisterMemoryConstraints =
+        getTarget().getTriple().isX86() &&
+        (OutputConstraint == "rm" || OutputConstraint == "mr");
----------------
bwendling wrote:

It's not ideal. Perhaps it's not necessary to restrict this to x86 targets?

https://github.com/llvm/llvm-project/pull/92040


More information about the cfe-commits mailing list