[Mlir-commits] [mlir] [mlir] Use free op create functions. NFC. (PR #157374)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Sun Sep 7 17:35:20 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-vector

Author: Jakub Kuderski (kuhar)

<details>
<summary>Changes</summary>

The builder create methods are deprecated: https://mlir.llvm.org/deprecation/. See https://discourse.llvm.org/t/psa-opty-create-now-with-100-more-tab-complete/87339.

---
Full diff: https://github.com/llvm/llvm-project/pull/157374.diff


9 Files Affected:

- (modified) mlir/lib/Conversion/ComplexToROCDLLibraryCalls/ComplexToROCDLLibraryCalls.cpp (+3-3) 
- (modified) mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp (+16-16) 
- (modified) mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp (+2-2) 
- (modified) mlir/lib/Dialect/LLVMIR/IR/BasicPtxBuilderInterface.cpp (+1-1) 
- (modified) mlir/lib/Dialect/Vector/IR/VectorOps.cpp (+2-2) 
- (modified) mlir/lib/Dialect/XeGPU/Transforms/XeGPUSubgroupDistribute.cpp (+2-2) 
- (modified) mlir/lib/Dialect/XeGPU/Transforms/XeGPUUnroll.cpp (+4-4) 
- (modified) mlir/lib/Dialect/XeGPU/Transforms/XeGPUWgToSgDistribute.cpp (+20-20) 
- (modified) mlir/lib/Target/Wasm/TranslateFromWasm.cpp (+10-10) 


``````````diff
diff --git a/mlir/lib/Conversion/ComplexToROCDLLibraryCalls/ComplexToROCDLLibraryCalls.cpp b/mlir/lib/Conversion/ComplexToROCDLLibraryCalls/ComplexToROCDLLibraryCalls.cpp
index 7a3a7fdb73e5e..0372f32d6b6df 100644
--- a/mlir/lib/Conversion/ComplexToROCDLLibraryCalls/ComplexToROCDLLibraryCalls.cpp
+++ b/mlir/lib/Conversion/ComplexToROCDLLibraryCalls/ComplexToROCDLLibraryCalls.cpp
@@ -64,9 +64,9 @@ struct PowOpToROCDLLibraryCalls : public OpRewritePattern<complex::PowOp> {
   LogicalResult matchAndRewrite(complex::PowOp op,
                                 PatternRewriter &rewriter) const final {
     Location loc = op.getLoc();
-    Value logBase = rewriter.create<complex::LogOp>(loc, op.getLhs());
-    Value mul = rewriter.create<complex::MulOp>(loc, op.getRhs(), logBase);
-    Value exp = rewriter.create<complex::ExpOp>(loc, mul);
+    Value logBase = complex::LogOp::create(rewriter, loc, op.getLhs());
+    Value mul = complex::MulOp::create(rewriter, loc, op.getRhs(), logBase);
+    Value exp = complex::ExpOp::create(rewriter, loc, mul);
     rewriter.replaceOp(op, exp);
     return success();
   }
diff --git a/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp b/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
index a0758aa8b1369..29140e63f3af5 100644
--- a/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
+++ b/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
@@ -169,7 +169,7 @@ LogicalResult FromPtrOpConversion::matchAndRewrite(
   // Set the allocated and aligned pointers.
   desc.setAllocatedPtr(
       rewriter, loc,
-      rewriter.create<LLVM::ExtractValueOp>(loc, adaptor.getMetadata(), 0));
+      LLVM::ExtractValueOp::create(rewriter, loc, adaptor.getMetadata(), 0));
   desc.setAlignedPtr(rewriter, loc, adaptor.getPtr());
 
   // Extract metadata from the passed struct.
@@ -177,8 +177,8 @@ LogicalResult FromPtrOpConversion::matchAndRewrite(
 
   // Set dynamic offset if needed.
   if (offset == ShapedType::kDynamic) {
-    Value offsetValue = rewriter.create<LLVM::ExtractValueOp>(
-        loc, adaptor.getMetadata(), fieldIdx++);
+    Value offsetValue = LLVM::ExtractValueOp::create(
+        rewriter, loc, adaptor.getMetadata(), fieldIdx++);
     desc.setOffset(rewriter, loc, offsetValue);
   } else {
     desc.setConstantOffset(rewriter, loc, offset);
@@ -187,8 +187,8 @@ LogicalResult FromPtrOpConversion::matchAndRewrite(
   // Set dynamic sizes if needed.
   for (auto [i, dim] : llvm::enumerate(shape)) {
     if (dim == ShapedType::kDynamic) {
-      Value sizeValue = rewriter.create<LLVM::ExtractValueOp>(
-          loc, adaptor.getMetadata(), fieldIdx++);
+      Value sizeValue = LLVM::ExtractValueOp::create(
+          rewriter, loc, adaptor.getMetadata(), fieldIdx++);
       desc.setSize(rewriter, loc, i, sizeValue);
     } else {
       desc.setConstantSize(rewriter, loc, i, dim);
@@ -198,8 +198,8 @@ LogicalResult FromPtrOpConversion::matchAndRewrite(
   // Set dynamic strides if needed.
   for (auto [i, stride] : llvm::enumerate(strides)) {
     if (stride == ShapedType::kDynamic) {
-      Value strideValue = rewriter.create<LLVM::ExtractValueOp>(
-          loc, adaptor.getMetadata(), fieldIdx++);
+      Value strideValue = LLVM::ExtractValueOp::create(
+          rewriter, loc, adaptor.getMetadata(), fieldIdx++);
       desc.setStride(rewriter, loc, i, strideValue);
     } else {
       desc.setConstantStride(rewriter, loc, i, stride);
@@ -243,35 +243,35 @@ LogicalResult GetMetadataOpConversion::matchAndRewrite(
 
   // Create a new LLVM struct to hold the metadata
   Location loc = op.getLoc();
-  Value sV = rewriter.create<LLVM::UndefOp>(loc, *mdTy);
+  Value sV = LLVM::UndefOp::create(rewriter, loc, *mdTy);
 
   // First element is the allocated pointer.
-  sV = rewriter.create<LLVM::InsertValueOp>(
-      loc, sV, descriptor.allocatedPtr(rewriter, loc), 0);
+  sV = LLVM::InsertValueOp::create(
+      rewriter, loc, sV, descriptor.allocatedPtr(rewriter, loc), int64_t{0});
 
   // Track the current field index.
   unsigned fieldIdx = 1;
 
   // Add dynamic offset if needed.
   if (offset == ShapedType::kDynamic) {
-    sV = rewriter.create<LLVM::InsertValueOp>(
-        loc, sV, descriptor.offset(rewriter, loc), fieldIdx++);
+    sV = LLVM::InsertValueOp::create(
+        rewriter, loc, sV, descriptor.offset(rewriter, loc), fieldIdx++);
   }
 
   // Add dynamic sizes if needed.
   for (auto [i, dim] : llvm::enumerate(shape)) {
     if (dim != ShapedType::kDynamic)
       continue;
-    sV = rewriter.create<LLVM::InsertValueOp>(
-        loc, sV, descriptor.size(rewriter, loc, i), fieldIdx++);
+    sV = LLVM::InsertValueOp::create(
+        rewriter, loc, sV, descriptor.size(rewriter, loc, i), fieldIdx++);
   }
 
   // Add dynamic strides if needed
   for (auto [i, stride] : llvm::enumerate(strides)) {
     if (stride != ShapedType::kDynamic)
       continue;
-    sV = rewriter.create<LLVM::InsertValueOp>(
-        loc, sV, descriptor.stride(rewriter, loc, i), fieldIdx++);
+    sV = LLVM::InsertValueOp::create(
+        rewriter, loc, sV, descriptor.stride(rewriter, loc, i), fieldIdx++);
   }
   rewriter.replaceOp(op, sV);
   return success();
diff --git a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp
index d0a431b1caa7f..e2b31f640da2f 100644
--- a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp
+++ b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp
@@ -150,8 +150,8 @@ static Value createLinalgBodyCalculationForElementwiseOp(
       if (shift > 0 || !shiftIsConstant) {
         Value shiftConst;
         if (shiftIsConstant)
-          shiftConst =
-              rewriter.create<arith::ConstantIntOp>(loc, shift, /*bitwidth=*/8);
+          shiftConst = arith::ConstantIntOp::create(rewriter, loc, shift,
+                                                    /*bitwidth=*/8);
 
         if (!a.getType().isInteger(32))
           a = arith::ExtSIOp::create(rewriter, loc, rewriter.getI32Type(), a);
diff --git a/mlir/lib/Dialect/LLVMIR/IR/BasicPtxBuilderInterface.cpp b/mlir/lib/Dialect/LLVMIR/IR/BasicPtxBuilderInterface.cpp
index 7220e10ea84d3..d85b2ad9a0542 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/BasicPtxBuilderInterface.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/BasicPtxBuilderInterface.cpp
@@ -130,7 +130,7 @@ static SmallVector<Value> extractStructElements(PatternRewriter &rewriter,
 
   SmallVector<Value> elems;
   for (unsigned i : llvm::seq<unsigned>(0, structTy.getBody().size()))
-    elems.push_back(rewriter.create<LLVM::ExtractValueOp>(loc, structVal, i));
+    elems.push_back(LLVM::ExtractValueOp::create(rewriter, loc, structVal, i));
 
   return elems;
 }
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 9b2a455bace47..85e485c28c74e 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -3452,8 +3452,8 @@ class InsertChainFullyInitialized final : public OpRewritePattern<InsertOp> {
       SmallVector<Type> elementToInsertTypes(insertSize,
                                              srcVectorType.getElementType());
       // Get all elements from the vector in row-major order.
-      auto elementsToInsert = rewriter.create<vector::ToElementsOp>(
-          op.getLoc(), elementToInsertTypes, valueToStore);
+      auto elementsToInsert = vector::ToElementsOp::create(
+          rewriter, op.getLoc(), elementToInsertTypes, valueToStore);
       for (int64_t linearIdx = 0; linearIdx < insertSize; linearIdx++) {
         elements[insertBeginPosition + linearIdx] =
             elementsToInsert.getResult(linearIdx);
diff --git a/mlir/lib/Dialect/XeGPU/Transforms/XeGPUSubgroupDistribute.cpp b/mlir/lib/Dialect/XeGPU/Transforms/XeGPUSubgroupDistribute.cpp
index 6b8367dd8c201..b33669259249a 100644
--- a/mlir/lib/Dialect/XeGPU/Transforms/XeGPUSubgroupDistribute.cpp
+++ b/mlir/lib/Dialect/XeGPU/Transforms/XeGPUSubgroupDistribute.cpp
@@ -991,8 +991,8 @@ struct LoadDistribution final : public gpu::WarpDistributionPattern {
         newRetIndices, [&](size_t idx) { return newWarpOp.getResult(idx); });
 
     rewriter.setInsertionPointAfter(newWarpOp);
-    xegpu::LoadGatherOp newOp = rewriter.create<xegpu::LoadGatherOp>(
-        newWarpOp.getLoc(), loadVecTy, newLoadGatherOperands,
+    xegpu::LoadGatherOp newOp = xegpu::LoadGatherOp::create(
+        rewriter, newWarpOp.getLoc(), loadVecTy, newLoadGatherOperands,
         loadGatherOp->getAttrs());
     xegpu::removeLayoutAttrs(newOp);
     Value distributedVal = newWarpOp.getResult(operandIdx);
diff --git a/mlir/lib/Dialect/XeGPU/Transforms/XeGPUUnroll.cpp b/mlir/lib/Dialect/XeGPU/Transforms/XeGPUUnroll.cpp
index d24d82780ebaa..29c9fcdfebcdb 100644
--- a/mlir/lib/Dialect/XeGPU/Transforms/XeGPUUnroll.cpp
+++ b/mlir/lib/Dialect/XeGPU/Transforms/XeGPUUnroll.cpp
@@ -711,8 +711,8 @@ struct UnrollLoadMatrixOp : public UnrollPattern<xegpu::LoadMatrixOp> {
     SmallVector<Value> newOps;
     layout = layout.dropInstData();
     for (SmallVector<OpFoldResult> offsets : offsetsList) {
-      auto newOp = rewriter.create<xegpu::LoadMatrixOp>(
-          op.getLoc(), newValueTy, op.getMemDesc(), offsets, layout);
+      auto newOp = xegpu::LoadMatrixOp::create(
+          rewriter, op.getLoc(), newValueTy, op.getMemDesc(), offsets, layout);
       newOps.push_back(newOp);
     }
     Value castOp = unpack(newOps, op.getType(), *targetShape, loc, rewriter);
@@ -750,8 +750,8 @@ struct UnrollStoreMatrixOp : public UnrollPattern<xegpu::StoreMatrixOp> {
     }
 
     for (auto [v, offsets] : llvm::zip_equal(convertedValues, offsetsList))
-      rewriter.create<xegpu::StoreMatrixOp>(loc, v, op.getMemDesc(), offsets,
-                                            layout.dropInstData());
+      xegpu::StoreMatrixOp::create(rewriter, loc, v, op.getMemDesc(), offsets,
+                                   layout.dropInstData());
 
     rewriter.eraseOp(op);
     return success();
diff --git a/mlir/lib/Dialect/XeGPU/Transforms/XeGPUWgToSgDistribute.cpp b/mlir/lib/Dialect/XeGPU/Transforms/XeGPUWgToSgDistribute.cpp
index 9f627c7e1e6d8..5d0f1d18402f2 100644
--- a/mlir/lib/Dialect/XeGPU/Transforms/XeGPUWgToSgDistribute.cpp
+++ b/mlir/lib/Dialect/XeGPU/Transforms/XeGPUWgToSgDistribute.cpp
@@ -91,7 +91,8 @@ genOffsetsList(ConversionPatternRewriter &rewriter, OpType op,
   if (!layout || !layout.isForWorkgroup())
     return failure();
 
-  Value sgId = rewriter.create<gpu::SubgroupIdOp>(loc, /*upper_bound=*/nullptr);
+  Value sgId =
+      gpu::SubgroupIdOp::create(rewriter, loc, /*upper_bound=*/nullptr);
 
   // verify and adjust the sgId if the range specifier is present
   xegpu::RangeAttr sgIdRange = getRangeSpecAttr(op);
@@ -105,8 +106,8 @@ genOffsetsList(ConversionPatternRewriter &rewriter, OpType op,
     // adjust the sgId if necessary
     if (startOfRange > 0) {
       Value startOfRangeVal =
-          rewriter.create<arith::ConstantIndexOp>(loc, startOfRange);
-      sgId = rewriter.create<index::SubOp>(loc, sgId, startOfRangeVal);
+          arith::ConstantIndexOp::create(rewriter, loc, startOfRange);
+      sgId = index::SubOp::create(rewriter, loc, sgId, startOfRangeVal);
     }
   }
 
@@ -339,9 +340,9 @@ struct WgToSgStoreNdOpWithOffset
 
     for (auto [v, tdesc, offsets] :
          llvm::zip(adaptor.getValue(), adaptor.getTensorDesc(), offsetsList)) {
-      rewriter.create<xegpu::StoreNdOp>(op.getLoc(), v, tdesc, offsets,
-                                        op.getL1HintAttr(), op.getL2HintAttr(),
-                                        op.getL3HintAttr());
+      xegpu::StoreNdOp::create(rewriter, op.getLoc(), v, tdesc, offsets,
+                               op.getL1HintAttr(), op.getL2HintAttr(),
+                               op.getL3HintAttr());
     }
     rewriter.eraseOp(op);
 
@@ -363,9 +364,9 @@ struct WgToSgPrefetchNdOpWithOffset
 
     for (auto [tdesc, offsets] :
          llvm::zip(adaptor.getTensorDesc(), offsetsList)) {
-      rewriter.create<xegpu::PrefetchNdOp>(
-          op.getLoc(), tdesc, offsets, op.getL1HintAttr(), op.getL2HintAttr(),
-          op.getL3HintAttr());
+      xegpu::PrefetchNdOp::create(rewriter, op.getLoc(), tdesc, offsets,
+                                  op.getL1HintAttr(), op.getL2HintAttr(),
+                                  op.getL3HintAttr());
     }
     rewriter.eraseOp(op);
 
@@ -807,8 +808,8 @@ struct WgToSgLoadGatherOpWithOffset
     VectorType newTy = VectorType::get(sgShape, resultType.getElementType());
     for (auto [offsets, mask] :
          llvm::zip(adaptor.getOffsets(), adaptor.getMask())) {
-      auto newLoadOp = rewriter.create<xegpu::LoadGatherOp>(
-          loc, newTy, op.getSource(), offsets, mask, chunkSizeAttr,
+      auto newLoadOp = xegpu::LoadGatherOp::create(
+          rewriter, loc, newTy, op.getSource(), offsets, mask, chunkSizeAttr,
           op.getL1HintAttr(), op.getL2HintAttr(), op.getL3HintAttr());
       xegpu::setDistributeLayoutAttr(newLoadOp->getResult(0),
                                      layout.dropSgLayoutAndData());
@@ -857,9 +858,9 @@ struct WgToSgStoreScatterOpWithOffset
     auto chunkSizeAttr = rewriter.getI64IntegerAttr(chunkSize);
     for (auto [val, offs, mask] : llvm::zip(
              adaptor.getValue(), adaptor.getOffsets(), adaptor.getMask())) {
-      rewriter.create<xegpu::StoreScatterOp>(
-          loc, val, op.getDest(), offs, mask, chunkSizeAttr, op.getL1HintAttr(),
-          op.getL2HintAttr(), op.getL3HintAttr());
+      xegpu::StoreScatterOp::create(rewriter, loc, val, op.getDest(), offs,
+                                    mask, chunkSizeAttr, op.getL1HintAttr(),
+                                    op.getL2HintAttr(), op.getL3HintAttr());
       // Update the layout attribute to drop sg_layout and sg_data.
       if (auto newLayout = layout.dropSgLayoutAndData())
         op->setAttr("layout", newLayout);
@@ -888,9 +889,9 @@ struct WgToSgLoadMatrixOp : public OpConversionPattern<xegpu::LoadMatrixOp> {
     VectorType newResTy = VectorType::get(sgShape, elemTy);
     SmallVector<Value> newOps;
     for (auto offsets : offsetsList) {
-      auto newOp = rewriter.create<xegpu::LoadMatrixOp>(
-          op.getLoc(), newResTy, op.getMemDesc(), offsets,
-          layout.dropSgLayoutAndData());
+      auto newOp = xegpu::LoadMatrixOp::create(rewriter, op.getLoc(), newResTy,
+                                               op.getMemDesc(), offsets,
+                                               layout.dropSgLayoutAndData());
       newOps.push_back(newOp);
     }
     rewriter.replaceOpWithMultiple(op, {newOps});
@@ -911,9 +912,8 @@ struct WgToSgStoreMatrixOp : public OpConversionPattern<xegpu::StoreMatrixOp> {
 
     xegpu::DistributeLayoutAttr layout = op.getLayoutAttr();
     for (auto [v, offsets] : llvm::zip(adaptor.getData(), offsetsList))
-      rewriter.create<xegpu::StoreMatrixOp>(op.getLoc(), v, op.getMemDesc(),
-                                            offsets,
-                                            layout.dropSgLayoutAndData());
+      xegpu::StoreMatrixOp::create(rewriter, op.getLoc(), v, op.getMemDesc(),
+                                   offsets, layout.dropSgLayoutAndData());
     rewriter.eraseOp(op);
     return success();
   }
diff --git a/mlir/lib/Target/Wasm/TranslateFromWasm.cpp b/mlir/lib/Target/Wasm/TranslateFromWasm.cpp
index 6afbe0505e649..132be4e42ea2e 100644
--- a/mlir/lib/Target/Wasm/TranslateFromWasm.cpp
+++ b/mlir/lib/Target/Wasm/TranslateFromWasm.cpp
@@ -571,7 +571,7 @@ class ParserHead {
       if (failed(varT))
         return failure();
       for (size_t j = 0; j < *nSubVar; ++j) {
-        auto local = builder.create<LocalOp>(varLoc, *varT);
+        auto local = LocalOp::create(builder, varLoc, *varT);
         locals.push_back(local.getResult());
       }
     }
@@ -581,7 +581,7 @@ class ParserHead {
     if (!cParser.end())
       return emitError(cParser.getLocation(),
                        "unparsed garbage remaining at end of code block");
-    builder.create<ReturnOp>(func->getLoc(), *res);
+    ReturnOp::create(builder, func->getLoc(), *res);
     returnOp->erase();
     return success();
   }
@@ -802,7 +802,7 @@ inline parsed_inst_t ExpressionParser::parseSpecificInstruction<
   if (*id >= locals.size())
     return emitError(instLoc, "invalid local index. function has ")
            << locals.size() << " accessible locals, received index " << *id;
-  return {{builder.create<LocalGetOp>(instLoc, locals[*id]).getResult()}};
+  return {{LocalGetOp::create(builder, instLoc, locals[*id]).getResult()}};
 }
 
 template <>
@@ -817,8 +817,8 @@ inline parsed_inst_t ExpressionParser::parseSpecificInstruction<
            << symbols.globalSymbols.size()
            << " accessible globals, received index " << *id;
   GlobalSymbolRefContainer globalVar = symbols.globalSymbols[*id];
-  auto globalOp = builder.create<GlobalGetOp>(instLoc, globalVar.globalType,
-                                              globalVar.symbol);
+  auto globalOp = GlobalGetOp::create(builder, instLoc, globalVar.globalType,
+                                      globalVar.symbol);
 
   return {{globalOp.getResult()}};
 }
@@ -840,7 +840,7 @@ parsed_inst_t ExpressionParser::parseSetOrTee(OpBuilder &builder) {
   if (failed(poppedOp))
     return failure();
   return {
-      builder.create<OpToCreate>(*currentOpLoc, locals[*id], poppedOp->front())
+      OpToCreate::create(builder, *currentOpLoc, locals[*id], poppedOp->front())
           ->getResults()};
 }
 
@@ -960,7 +960,7 @@ inline parsed_inst_t ExpressionParser::buildNumericOp(
   auto operands = popOperands(tysToPop);
   if (failed(operands))
     return failure();
-  auto op = builder.create<opcode>(*currentOpLoc, *operands).getResult();
+  auto op = opcode::create(builder, *currentOpLoc, *operands).getResult();
   LDBG() << "Built operation: " << op;
   return {{op}};
 }
@@ -1475,8 +1475,8 @@ WasmBinaryParser::parseSectionItem<WasmSectionType::GLOBAL>(ParserHead &ph,
 
   GlobalTypeRecord globalType = *globalTypeParsed;
   auto symbol = builder.getStringAttr(symbols.getNewGlobalSymbolName());
-  auto globalOp = builder.create<wasmssa::GlobalOp>(
-      globalLocation, symbol, globalType.type, globalType.isMutable);
+  auto globalOp = wasmssa::GlobalOp::create(
+      builder, globalLocation, symbol, globalType.type, globalType.isMutable);
   symbols.globalSymbols.push_back(
       {{FlatSymbolRefAttr::get(globalOp)}, globalOp.getType()});
   OpBuilder::InsertionGuard guard{builder};
@@ -1491,7 +1491,7 @@ WasmBinaryParser::parseSectionItem<WasmSectionType::GLOBAL>(ParserHead &ph,
     return emitError(
         globalLocation,
         "initializer result type does not match global declaration type");
-  builder.create<ReturnOp>(globalLocation, *expr);
+  ReturnOp::create(builder, globalLocation, *expr);
   return success();
 }
 

``````````

</details>


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


More information about the Mlir-commits mailing list