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 { LogicalResult matchAndRewrite(complex::PowOp op, PatternRewriter &rewriter) const final { Location loc = op.getLoc(); - Value logBase = rewriter.create(loc, op.getLhs()); - Value mul = rewriter.create(loc, op.getRhs(), logBase); - Value exp = rewriter.create(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(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( - 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( - 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( - 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(loc, *mdTy); + Value sV = LLVM::UndefOp::create(rewriter, loc, *mdTy); // First element is the allocated pointer. - sV = rewriter.create( - 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( - 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( - 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( - 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(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 extractStructElements(PatternRewriter &rewriter, SmallVector elems; for (unsigned i : llvm::seq(0, structTy.getBody().size())) - elems.push_back(rewriter.create(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 { SmallVector elementToInsertTypes(insertSize, srcVectorType.getElementType()); // Get all elements from the vector in row-major order. - auto elementsToInsert = rewriter.create( - 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( - 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 { SmallVector newOps; layout = layout.dropInstData(); for (SmallVector offsets : offsetsList) { - auto newOp = rewriter.create( - 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 { } for (auto [v, offsets] : llvm::zip_equal(convertedValues, offsetsList)) - rewriter.create(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(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(loc, startOfRange); - sgId = rewriter.create(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(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( - 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( - 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( - 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 { VectorType newResTy = VectorType::get(sgShape, elemTy); SmallVector newOps; for (auto offsets : offsetsList) { - auto newOp = rewriter.create( - 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::DistributeLayoutAttr layout = op.getLayoutAttr(); for (auto [v, offsets] : llvm::zip(adaptor.getData(), offsetsList)) - rewriter.create(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(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(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(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(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(*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(*currentOpLoc, *operands).getResult(); + auto op = opcode::create(builder, *currentOpLoc, *operands).getResult(); LDBG() << "Built operation: " << op; return {{op}}; } @@ -1475,8 +1475,8 @@ WasmBinaryParser::parseSectionItem(ParserHead &ph, GlobalTypeRecord globalType = *globalTypeParsed; auto symbol = builder.getStringAttr(symbols.getNewGlobalSymbolName()); - auto globalOp = builder.create( - 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(ParserHead &ph, return emitError( globalLocation, "initializer result type does not match global declaration type"); - builder.create(globalLocation, *expr); + ReturnOp::create(builder, globalLocation, *expr); return success(); }