[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:25:56 PST 2026


================
@@ -0,0 +1,333 @@
+//===-- InlineAsmPrepare - Prepare inline asm for code generation ---------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+//
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/CodeGen/InlineAsmPrepare.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/CodeGen/Passes.h"
+#include "llvm/IR/BasicBlock.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/IRBuilder.h"
+#include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/InitializePasses.h"
+#include "llvm/Pass.h"
+#include <sstream>
+
+using namespace llvm;
+
+#define DEBUG_TYPE "inline-asm-prepare"
+
+namespace {
+
+class InlineAsmPrepare : public FunctionPass {
+  InlineAsmPrepare(InlineAsmPrepare &) = delete;
+
+public:
+  InlineAsmPrepare() : FunctionPass(ID) {}
+
+  void getAnalysisUsage(AnalysisUsage &AU) const override {}
+  bool runOnFunction(Function &F) override;
+
+  static char ID;
+};
+
+char InlineAsmPrepare::ID = 0;
+
+} // end anonymous namespace
+
+INITIALIZE_PASS(InlineAsmPrepare, DEBUG_TYPE,
+                "Convert inline asm \"rm\" insts for fast register allocation",
+                false, false)
+FunctionPass *llvm::createInlineAsmPass() { return new InlineAsmPrepare(); }
+
+// For each inline asm, the "rm" constraint needs to default to "m" for the
+// fast register allocator.
+static SmallVector<CallBase *, 4> findInlineAsms(Function &F) {
+  SmallVector<CallBase *, 4> InlineAsms;
+
+  for_each(F, [&](BasicBlock &BB) {
+    for_each(BB, [&](Instruction &I) {
----------------
bwendling wrote:

Done.

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


More information about the cfe-commits mailing list