[Mlir-commits] [mlir] [MLIR][LLVM] add metadata attrs and `llvm.named_metadata` op (PR #186703)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Sun Mar 15 14:10:48 PDT 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h -- mlir/include/mlir-c/Dialect/LLVM.h mlir/lib/Bindings/Python/DialectLLVM.cpp mlir/lib/CAPI/Dialect/LLVM.cpp mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/mlir/lib/Bindings/Python/DialectLLVM.cpp b/mlir/lib/Bindings/Python/DialectLLVM.cpp
index 3f9442adf..073387aac 100644
--- a/mlir/lib/Bindings/Python/DialectLLVM.cpp
+++ b/mlir/lib/Bindings/Python/DialectLLVM.cpp
@@ -26,8 +26,7 @@ using namespace mlir::python::nanobind_adaptors;
 
 namespace mlir {
 namespace python {
-namespace
-MLIR_BINDINGS_PYTHON_DOMAIN {
+namespace MLIR_BINDINGS_PYTHON_DOMAIN {
 namespace llvm {
 //===--------------------------------------------------------------------===//
 // StructType
@@ -286,16 +285,15 @@ struct MDStringAttr : PyConcreteAttribute<MDStringAttr> {
     c.def_static(
         "get",
         [](const std::string &value, DefaultingPyMlirContext context) {
-          return MDStringAttr(context->getRef(),
-                              mlirLLVMMDStringAttrGet(
-                                  context.get()->get(),
-                                  mlirStringRefCreate(value.data(),
-                                    value.size())));
+          return MDStringAttr(
+              context->getRef(),
+              mlirLLVMMDStringAttrGet(
+                  context.get()->get(),
+                  mlirStringRefCreate(value.data(), value.size())));
         },
         "value"_a, nb::kw_only(), "context"_a = nb::none());
     c.def_prop_ro("value", [](const MDStringAttr &self) {
-      MlirStringRef ref =
-          mlirLLVMMDStringAttrGetValue(self);
+      MlirStringRef ref = mlirLLVMMDStringAttrGetValue(self);
       return nb::str(ref.data, ref.length);
     });
   }
@@ -337,9 +335,9 @@ struct MDFuncAttr : PyConcreteAttribute<MDFuncAttr> {
           MlirAttribute symRef = mlirFlatSymbolRefAttrGet(
               context.get()->get(),
               mlirStringRefCreate(name.data(), name.size()));
-          return MDFuncAttr(context->getRef(),
-                            mlirLLVMMDFuncAttrGet(context.get()->get(),
-                                                  symRef));
+          return MDFuncAttr(
+              context->getRef(),
+              mlirLLVMMDFuncAttrGet(context.get()->get(), symRef));
         },
         "name"_a, nb::kw_only(), "context"_a = nb::none());
     c.def_prop_ro("name", [](const MDFuncAttr &self) {
@@ -364,22 +362,21 @@ struct MDNodeAttr : PyConcreteAttribute<MDNodeAttr> {
            DefaultingPyMlirContext context) {
           std::vector<MlirAttribute> operands_(operands.size());
           std::copy(operands.begin(), operands.end(), operands_.begin());
-          return MDNodeAttr(
-              context->getRef(),
-              mlirLLVMMDNodeAttrGet(context.get()->get(), operands_.size(),
-                                    operands_.data()));
+          return MDNodeAttr(context->getRef(),
+                            mlirLLVMMDNodeAttrGet(context.get()->get(),
+                                                  operands_.size(),
+                                                  operands_.data()));
         },
         "operands"_a, nb::kw_only(), "context"_a = nb::none());
     c.def_prop_ro("num_operands", [](const MDNodeAttr &self) {
       return mlirLLVMMDNodeAttrGetNumOperands(self);
     });
-    c.def("__getitem__",
-          [](const MDNodeAttr &self, intptr_t index) {
-            intptr_t n = mlirLLVMMDNodeAttrGetNumOperands(self);
-            if (index < 0 || index >= n)
-              throw nb::index_error("MDNodeAttr operand index out of range");
-            return mlirLLVMMDNodeAttrGetOperand(self, index);
-          });
+    c.def("__getitem__", [](const MDNodeAttr &self, intptr_t index) {
+      intptr_t n = mlirLLVMMDNodeAttrGetNumOperands(self);
+      if (index < 0 || index >= n)
+        throw nb::index_error("MDNodeAttr operand index out of range");
+      return mlirLLVMMDNodeAttrGetOperand(self, index);
+    });
     c.def("__len__", [](const MDNodeAttr &self) {
       return mlirLLVMMDNodeAttrGetNumOperands(self);
     });
diff --git a/mlir/lib/CAPI/Dialect/LLVM.cpp b/mlir/lib/CAPI/Dialect/LLVM.cpp
index 8f46a60f5..f05529ba2 100644
--- a/mlir/lib/CAPI/Dialect/LLVM.cpp
+++ b/mlir/lib/CAPI/Dialect/LLVM.cpp
@@ -100,7 +100,7 @@ intptr_t mlirLLVMFunctionTypeGetNumInputs(MlirType type) {
 MlirType mlirLLVMFunctionTypeGetInput(MlirType type, intptr_t pos) {
   assert(pos >= 0 && "pos in array must be positive");
   return wrap(llvm::cast<LLVM::LLVMFunctionType>(unwrap(type))
-      .getParamType(static_cast<unsigned>(pos)));
+                  .getParamType(static_cast<unsigned>(pos)));
 }
 
 MlirType mlirLLVMFunctionTypeGetReturnType(MlirType type) {
@@ -191,7 +191,7 @@ MlirLogicalResult mlirLLVMStructTypeSetBody(MlirType structType,
   SmallVector<Type> fields;
   return wrap(
       cast<LLVM::LLVMStructType>(unwrap(structType))
-      .setBody(unwrapList(nFieldTypes, fieldTypes, fields), isPacked));
+          .setBody(unwrapList(nFieldTypes, fieldTypes, fields), isPacked));
 }
 
 MlirAttribute mlirLLVMDIExpressionElemAttrGet(MlirContext ctx,
@@ -541,9 +541,8 @@ MlirStringRef mlirLLVMDIAnnotationAttrGetName(void) {
 //===----------------------------------------------------------------------===//
 
 MlirAttribute mlirLLVMMDStringAttrGet(MlirContext ctx, MlirStringRef value) {
-  return wrap(
-      MDStringAttr::get(unwrap(ctx),
-                        StringAttr::get(unwrap(ctx), unwrap(value))));
+  return wrap(MDStringAttr::get(unwrap(ctx),
+                                StringAttr::get(unwrap(ctx), unwrap(value))));
 }
 
 bool mlirLLVMAttrIsAMDStringAttr(MlirAttribute attr) {
@@ -560,8 +559,8 @@ MlirStringRef mlirLLVMMDStringAttrGetValue(MlirAttribute attr) {
 
 MlirAttribute mlirLLVMMDConstantAttrGet(MlirContext ctx,
                                         MlirAttribute integerAttr) {
-  return wrap(MDConstantAttr::get(unwrap(ctx),
-                                  cast<IntegerAttr>(unwrap(integerAttr))));
+  return wrap(
+      MDConstantAttr::get(unwrap(ctx), cast<IntegerAttr>(unwrap(integerAttr))));
 }
 
 bool mlirLLVMAttrIsAMDConstantAttr(MlirAttribute attr) {
@@ -598,9 +597,8 @@ MlirAttribute mlirLLVMMDNodeAttrGet(MlirContext ctx, intptr_t nOperands,
   SmallVector<Attribute> attrStorage;
   attrStorage.reserve(nOperands);
   return wrap(MDNodeAttr::get(
-      unwrap(ctx),
-      ArrayAttr::get(unwrap(ctx),
-                     unwrapList(nOperands, operands, attrStorage))));
+      unwrap(ctx), ArrayAttr::get(unwrap(ctx), unwrapList(nOperands, operands,
+                                                          attrStorage))));
 }
 
 bool mlirLLVMAttrIsAMDNodeAttr(MlirAttribute attr) {
@@ -615,7 +613,6 @@ intptr_t mlirLLVMMDNodeAttrGetNumOperands(MlirAttribute attr) {
   return cast<MDNodeAttr>(unwrap(attr)).getOperands().size();
 }
 
-MlirAttribute mlirLLVMMDNodeAttrGetOperand(MlirAttribute attr,
-                                           intptr_t index) {
+MlirAttribute mlirLLVMMDNodeAttrGetOperand(MlirAttribute attr, intptr_t index) {
   return wrap(cast<MDNodeAttr>(unwrap(attr)).getOperands()[index]);
 }
diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
index 9e758e9fd..7853d0a54 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
@@ -166,8 +166,8 @@ convertCallLLVMIntrinsicOp(CallIntrinsicOp op, llvm::IRBuilderBase &builder,
   // Check the result type of the call.
   const llvm::Type *intrinType =
       op.getNumResults() == 0
-        ? llvm::Type::getVoidTy(module->getContext())
-        : moduleTranslation.convertType(op.getResultTypes().front());
+          ? llvm::Type::getVoidTy(module->getContext())
+          : moduleTranslation.convertType(op.getResultTypes().front());
   if (intrinType != fn->getReturnType()) {
     return mlir::emitError(op.getLoc(), "intrinsic call returns ")
            << diagStr(intrinType) << " but " << op.getIntrinAttr()
@@ -221,31 +221,31 @@ static llvm::Metadata *
 convertMetadataAttr(Attribute attr, llvm::IRBuilderBase &builder,
                     LLVM::ModuleTranslation &moduleTranslation) {
   return llvm::TypeSwitch<Attribute, llvm::Metadata *>(attr)
-         .Case<LLVM::MDStringAttr>([&](auto a) -> llvm::Metadata * {
-           return llvm::MDString::get(builder.getContext(),
-                                      a.getValue().getValue());
-         })
-         .Case<LLVM::MDConstantAttr>([&](auto a) -> llvm::Metadata * {
-           IntegerAttr intAttr = a.getValue();
-           return llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
-               llvm::Type::getIntNTy(builder.getContext(),
-                                     intAttr.getType().getIntOrFloatBitWidth()),
-               intAttr.getValue()));
-         })
-         .Case<LLVM::MDFuncAttr>([&](auto a) -> llvm::Metadata * {
-           if (llvm::Function *fn =
-               moduleTranslation.lookupFunction(a.getName().getValue()))
-             return llvm::ValueAsMetadata::get(fn);
-           return nullptr;
-         })
-         .Case<LLVM::MDNodeAttr>([&](auto a) -> llvm::Metadata * {
-           SmallVector<llvm::Metadata *> operands;
-           for (Attribute op : a.getOperands())
-             operands.push_back(
-                 convertMetadataAttr(op, builder, moduleTranslation));
-           return llvm::MDNode::get(builder.getContext(), operands);
-         })
-         .Default([](auto) -> llvm::Metadata * { return nullptr; });
+      .Case<LLVM::MDStringAttr>([&](auto a) -> llvm::Metadata * {
+        return llvm::MDString::get(builder.getContext(),
+                                   a.getValue().getValue());
+      })
+      .Case<LLVM::MDConstantAttr>([&](auto a) -> llvm::Metadata * {
+        IntegerAttr intAttr = a.getValue();
+        return llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
+            llvm::Type::getIntNTy(builder.getContext(),
+                                  intAttr.getType().getIntOrFloatBitWidth()),
+            intAttr.getValue()));
+      })
+      .Case<LLVM::MDFuncAttr>([&](auto a) -> llvm::Metadata * {
+        if (llvm::Function *fn =
+                moduleTranslation.lookupFunction(a.getName().getValue()))
+          return llvm::ValueAsMetadata::get(fn);
+        return nullptr;
+      })
+      .Case<LLVM::MDNodeAttr>([&](auto a) -> llvm::Metadata * {
+        SmallVector<llvm::Metadata *> operands;
+        for (Attribute op : a.getOperands())
+          operands.push_back(
+              convertMetadataAttr(op, builder, moduleTranslation));
+        return llvm::MDNode::get(builder.getContext(), operands);
+      })
+      .Default([](auto) -> llvm::Metadata * { return nullptr; });
 }
 
 static void convertNamedMetadataOp(StringRef metadataName, ArrayAttr nodes,
@@ -294,7 +294,7 @@ convertModuleFlagValue(StringRef key, ArrayAttr arrayAttr,
         if (!sym)
           return nullptr;
         if (llvm::Function *fn =
-            moduleTranslation.lookupFunction(sym.getValue()))
+                moduleTranslation.lookupFunction(sym.getValue()))
           return llvm::ValueAsMetadata::get(fn);
         return nullptr;
       };
@@ -321,7 +321,7 @@ static llvm::Metadata *convertModuleFlagProfileSummaryAttr(
   auto getIntTuple = [&](StringRef key, uint64_t val) -> llvm::MDTuple * {
     SmallVector<llvm::Metadata *> tupleNodes{
         mdb.createString(key), mdb.createConstant(llvm::ConstantInt::get(
-            llvm::Type::getInt64Ty(context), val))};
+                                   llvm::Type::getInt64Ty(context), val))};
     return llvm::MDTuple::get(context, tupleNodes);
   };
 
@@ -380,26 +380,26 @@ static void convertModuleFlagsOp(ArrayAttr flags, llvm::IRBuilderBase &builder,
   for (auto flagAttr : flags.getAsRange<ModuleFlagAttr>()) {
     llvm::Metadata *valueMetadata =
         llvm::TypeSwitch<Attribute, llvm::Metadata *>(flagAttr.getValue())
-        .Case([&](StringAttr strAttr) {
-          return llvm::MDString::get(builder.getContext(),
-                                     strAttr.getValue());
-        })
-        .Case([&](IntegerAttr intAttr) {
-          return llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
-              llvm::Type::getInt32Ty(builder.getContext()),
-              intAttr.getInt()));
-        })
-        .Case([&](ArrayAttr arrayAttr) {
-          return convertModuleFlagValue(flagAttr.getKey().getValue(),
-                                        arrayAttr, builder,
-                                        moduleTranslation);
-        })
-        .Case([&](ModuleFlagProfileSummaryAttr summaryAttr) {
-          return convertModuleFlagProfileSummaryAttr(
-              flagAttr.getKey().getValue(), summaryAttr, builder,
-              moduleTranslation);
-        })
-        .Default([](auto) { return nullptr; });
+            .Case([&](StringAttr strAttr) {
+              return llvm::MDString::get(builder.getContext(),
+                                         strAttr.getValue());
+            })
+            .Case([&](IntegerAttr intAttr) {
+              return llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(
+                  llvm::Type::getInt32Ty(builder.getContext()),
+                  intAttr.getInt()));
+            })
+            .Case([&](ArrayAttr arrayAttr) {
+              return convertModuleFlagValue(flagAttr.getKey().getValue(),
+                                            arrayAttr, builder,
+                                            moduleTranslation);
+            })
+            .Case([&](ModuleFlagProfileSummaryAttr summaryAttr) {
+              return convertModuleFlagProfileSummaryAttr(
+                  flagAttr.getKey().getValue(), summaryAttr, builder,
+                  moduleTranslation);
+            })
+            .Default([](auto) { return nullptr; });
 
     assert(valueMetadata && "expected valid metadata");
     llvmModule->addModuleFlag(
@@ -412,9 +412,9 @@ static llvm::DILocalScope *
 getLocalScopeFromLoc(llvm::IRBuilderBase &builder, Location loc,
                      LLVM::ModuleTranslation &moduleTranslation) {
   if (auto scopeLoc =
-      loc->findInstanceOf<FusedLocWith<LLVM::DILocalScopeAttr>>())
+          loc->findInstanceOf<FusedLocWith<LLVM::DILocalScopeAttr>>())
     if (auto *localScope = llvm::dyn_cast<llvm::DILocalScope>(
-        moduleTranslation.translateDebugInfo(scopeLoc.getMetadata())))
+            moduleTranslation.translateDebugInfo(scopeLoc.getMetadata())))
       return localScope;
   return builder.GetInsertBlock()->getParent()->getSubprogram();
 }
@@ -443,7 +443,7 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
     llvm::CallInst *call;
     if (auto attr = callOp.getCalleeAttr()) {
       if (llvm::Function *function =
-          moduleTranslation.lookupFunction(attr.getValue())) {
+              moduleTranslation.lookupFunction(attr.getValue())) {
         call = builder.CreateCall(function, operandsRef, opBundles);
       } else {
         Operation *moduleOp = parentLLVMModule(&opInst);
@@ -527,8 +527,8 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
         ModuleTranslation::convertDefaultFuncAttr);
 
     if (llvm::Attribute attr =
-          moduleTranslation.convertAllocsizeAttr(callOp.getAllocsizeAttr());
-      attr.isValid())
+            moduleTranslation.convertAllocsizeAttr(callOp.getAllocsizeAttr());
+        attr.isValid())
       call->addFnAttr(attr);
 
     if (failed(moduleTranslation.convertArgAndResultAttrs(callOp, call)))
@@ -560,7 +560,7 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
     // that LLVM IR dialect CallOp has either 0 or 1 result.
     if (opInst.getNumResults() != 0)
       moduleTranslation.mapValue(opInst.getResult(0), call);
-      // Check that LLVM call returns void for 0-result functions.
+    // Check that LLVM call returns void for 0-result functions.
     else if (!call->getType()->isVoidTy())
       return failure();
     moduleTranslation.mapCall(callOp, call);
@@ -583,19 +583,19 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
     auto ft = LLVM::LLVMFunctionType::get(resultType, operandTypes);
     llvm::InlineAsm *inlineAsmInst =
         inlineAsmOp.getAsmDialect()
-          ? llvm::InlineAsm::get(
-              static_cast<llvm::FunctionType *>(
-                moduleTranslation.convertType(ft)),
-              inlineAsmOp.getAsmString(), inlineAsmOp.getConstraints(),
-              inlineAsmOp.getHasSideEffects(),
-              inlineAsmOp.getIsAlignStack(),
-              convertAsmDialectToLLVM(*inlineAsmOp.getAsmDialect()))
-          : llvm::InlineAsm::get(static_cast<llvm::FunctionType *>(
-                                   moduleTranslation.convertType(ft)),
-                                 inlineAsmOp.getAsmString(),
-                                 inlineAsmOp.getConstraints(),
-                                 inlineAsmOp.getHasSideEffects(),
-                                 inlineAsmOp.getIsAlignStack());
+            ? llvm::InlineAsm::get(
+                  static_cast<llvm::FunctionType *>(
+                      moduleTranslation.convertType(ft)),
+                  inlineAsmOp.getAsmString(), inlineAsmOp.getConstraints(),
+                  inlineAsmOp.getHasSideEffects(),
+                  inlineAsmOp.getIsAlignStack(),
+                  convertAsmDialectToLLVM(*inlineAsmOp.getAsmDialect()))
+            : llvm::InlineAsm::get(static_cast<llvm::FunctionType *>(
+                                       moduleTranslation.convertType(ft)),
+                                   inlineAsmOp.getAsmString(),
+                                   inlineAsmOp.getConstraints(),
+                                   inlineAsmOp.getHasSideEffects(),
+                                   inlineAsmOp.getIsAlignStack());
     llvm::CallInst *inst = builder.CreateCall(
         inlineAsmInst,
         moduleTranslation.lookupValues(inlineAsmOp.getOperands()));
@@ -743,7 +743,7 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
 
     // The verifier should not have allowed this.
     assert((global || function || alias || ifunc) &&
-        "referencing an undefined global, function, alias, or ifunc");
+           "referencing an undefined global, function, alias, or ifunc");
 
     llvm::Value *llvmValue = nullptr;
     if (global)
@@ -762,7 +762,7 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
   // Emit dso_local_equivalent. We need to look up the global value referenced
   // by the operation and store it in the MLIR-to-LLVM value mapping.
   if (auto dsoLocalEquivalentOp =
-      dyn_cast<LLVM::DSOLocalEquivalentOp>(opInst)) {
+          dyn_cast<LLVM::DSOLocalEquivalentOp>(opInst)) {
     LLVM::LLVMFuncOp function =
         dsoLocalEquivalentOp.getFunction(moduleTranslation.symbolTable());
     LLVM::AliasOp alias =
@@ -770,7 +770,7 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
 
     // The verifier should not have allowed this.
     assert((function || alias) &&
-        "referencing an undefined function, or alias");
+           "referencing an undefined function, or alias");
 
     llvm::Value *llvmValue = nullptr;
     if (alias)
@@ -809,8 +809,8 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder,
           /*isConstant=*/true, llvm::GlobalValue::LinkageTypes::ExternalLinkage,
           /*Initializer=*/nullptr,
           Twine("__mlir_block_address_")
-          .concat(Twine(fnName))
-          .concat(Twine((uint64_t)blockAddressOp.getOperation())));
+              .concat(Twine(fnName))
+              .concat(Twine((uint64_t)blockAddressOp.getOperation())));
       moduleTranslation.mapUnresolvedBlockAddress(blockAddressOp, llvmValue);
     }
 

``````````

</details>


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


More information about the Mlir-commits mailing list