diff --git a/mlir/lib/IR/BuiltinDialect.cpp b/mlir/lib/IR/BuiltinDialect.cpp index 6d7e2aa0ece7d..c88b328282275 100644 --- a/mlir/lib/IR/BuiltinDialect.cpp +++ b/mlir/lib/IR/BuiltinDialect.cpp @@ -132,7 +132,7 @@ void ModuleOp::build(OpBuilder &builder, OperationState &state, /// Construct a module from the given context. ModuleOp ModuleOp::create(Location loc, std::optional name) { OpBuilder builder(loc->getContext()); - return builder.create(loc, name); + return ModuleOp::create(builder, loc, name); } DataLayoutSpecInterface ModuleOp::getDataLayoutSpec() { diff --git a/mlir/lib/Query/Query.cpp b/mlir/lib/Query/Query.cpp index b5a9d2f1d350c..03e4177bbbe24 100644 --- a/mlir/lib/Query/Query.cpp +++ b/mlir/lib/Query/Query.cpp @@ -77,7 +77,7 @@ static Operation *extractFunction(std::vector &ops, clonedOp->result_end()); } // Add return operation - builder.create(loc, clonedVals); + func::ReturnOp::create(builder, loc, clonedVals); // Remove unused function arguments size_t currentIndex = 0; diff --git a/mlir/lib/Target/LLVMIR/LLVMImportInterface.cpp b/mlir/lib/Target/LLVMIR/LLVMImportInterface.cpp index 4e7f1d3185129..580afdddd7078 100644 --- a/mlir/lib/Target/LLVMIR/LLVMImportInterface.cpp +++ b/mlir/lib/Target/LLVMIR/LLVMImportInterface.cpp @@ -37,8 +37,8 @@ LogicalResult mlir::LLVMImportInterface::convertUnregisteredIntrinsic( return failure(); Type resultType = moduleImport.convertType(inst->getType()); - auto op = builder.create<::mlir::LLVM::CallIntrinsicOp>( - moduleImport.translateLoc(inst->getDebugLoc()), + auto op = CallIntrinsicOp::create( + builder, moduleImport.translateLoc(inst->getDebugLoc()), isa(resultType) ? TypeRange{} : TypeRange{resultType}, StringAttr::get(builder.getContext(), intrinName), ValueRange{mlirOperands}, FastmathFlagsAttr{}); diff --git a/mlir/lib/Target/LLVMIR/ModuleImport.cpp b/mlir/lib/Target/LLVMIR/ModuleImport.cpp index c807985756539..94db7f8888129 100644 --- a/mlir/lib/Target/LLVMIR/ModuleImport.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleImport.cpp @@ -185,7 +185,7 @@ ComdatOp ModuleImport::getGlobalComdatOp() { OpBuilder::InsertionGuard guard(builder); builder.setInsertionPointToEnd(mlirModule.getBody()); globalComdatOp = - builder.create(mlirModule.getLoc(), getGlobalComdatOpName()); + ComdatOp::create(builder, mlirModule.getLoc(), getGlobalComdatOpName()); globalInsertionOp = globalComdatOp; return globalComdatOp; } @@ -864,8 +864,8 @@ LogicalResult ModuleImport::convertModuleFlagsMetadata() { } if (!moduleFlags.empty()) - builder.create(mlirModule.getLoc(), - builder.getArrayAttr(moduleFlags)); + LLVM::ModuleFlagsOp::create(builder, mlirModule.getLoc(), + builder.getArrayAttr(moduleFlags)); return success(); } @@ -880,8 +880,8 @@ LogicalResult ModuleImport::convertLinkerOptionsMetadata() { options.reserve(node->getNumOperands()); for (const llvm::MDOperand &option : node->operands()) options.push_back(cast(option)->getString()); - builder.create(mlirModule.getLoc(), - builder.getStrArrayAttr(options)); + LLVM::LinkerOptionsOp::create(builder, mlirModule.getLoc(), + builder.getStrArrayAttr(options)); } } return success(); @@ -984,8 +984,8 @@ void ModuleImport::processComdat(const llvm::Comdat *comdat) { ComdatOp comdatOp = getGlobalComdatOp(); OpBuilder::InsertionGuard guard(builder); builder.setInsertionPointToEnd(&comdatOp.getBody().back()); - auto selectorOp = builder.create( - mlirModule.getLoc(), comdat->getName(), + auto selectorOp = ComdatSelectorOp::create( + builder, mlirModule.getLoc(), comdat->getName(), convertComdatFromLLVM(comdat->getSelectionKind())); auto symbolRef = SymbolRefAttr::get(builder.getContext(), getGlobalComdatOpName(), @@ -1356,12 +1356,12 @@ LogicalResult ModuleImport::convertAlias(llvm::GlobalAlias *alias) { OpBuilder::InsertionGuard guard = setGlobalInsertionPoint(); Type type = convertType(alias->getValueType()); - AliasOp aliasOp = builder.create( - mlirModule.getLoc(), type, convertLinkageFromLLVM(alias->getLinkage()), - alias->getName(), - /*dso_local=*/alias->isDSOLocal(), - /*thread_local=*/alias->isThreadLocal(), - /*attrs=*/ArrayRef()); + AliasOp aliasOp = AliasOp::create(builder, mlirModule.getLoc(), type, + convertLinkageFromLLVM(alias->getLinkage()), + alias->getName(), + /*dso_local=*/alias->isDSOLocal(), + /*thread_local=*/alias->isThreadLocal(), + /*attrs=*/ArrayRef()); globalInsertionOp = aliasOp; clearRegionState(); @@ -1370,7 +1370,7 @@ LogicalResult ModuleImport::convertAlias(llvm::GlobalAlias *alias) { FailureOr initializer = convertConstantExpr(alias->getAliasee()); if (failed(initializer)) return failure(); - builder.create(aliasOp.getLoc(), *initializer); + ReturnOp::create(builder, aliasOp.getLoc(), *initializer); if (alias->hasAtLeastLocalUnnamedAddr()) aliasOp.setUnnamedAddr(convertUnnamedAddrFromLLVM(alias->getUnnamedAddr())); @@ -1385,12 +1385,12 @@ LogicalResult ModuleImport::convertIFunc(llvm::GlobalIFunc *ifunc) { Type type = convertType(ifunc->getValueType()); llvm::Constant *resolver = ifunc->getResolver(); Type resolverType = convertType(resolver->getType()); - builder.create(mlirModule.getLoc(), ifunc->getName(), type, - resolver->getName(), resolverType, - convertLinkageFromLLVM(ifunc->getLinkage()), - ifunc->isDSOLocal(), ifunc->getAddressSpace(), - convertUnnamedAddrFromLLVM(ifunc->getUnnamedAddr()), - convertVisibilityFromLLVM(ifunc->getVisibility())); + IFuncOp::create(builder, mlirModule.getLoc(), ifunc->getName(), type, + resolver->getName(), resolverType, + convertLinkageFromLLVM(ifunc->getLinkage()), + ifunc->isDSOLocal(), ifunc->getAddressSpace(), + convertUnnamedAddrFromLLVM(ifunc->getUnnamedAddr()), + convertVisibilityFromLLVM(ifunc->getVisibility())); return success(); } @@ -1428,8 +1428,8 @@ LogicalResult ModuleImport::convertGlobal(llvm::GlobalVariable *globalVar) { if (globalName.empty()) globalName = getOrCreateNamelessSymbolName(globalVar).getValue(); - GlobalOp globalOp = builder.create( - mlirModule.getLoc(), type, globalVar->isConstant(), + GlobalOp globalOp = GlobalOp::create( + builder, mlirModule.getLoc(), type, globalVar->isConstant(), convertLinkageFromLLVM(globalVar->getLinkage()), StringRef(globalName), valueAttr, alignment, /*addr_space=*/globalVar->getAddressSpace(), /*dso_local=*/globalVar->isDSOLocal(), @@ -1445,7 +1445,7 @@ LogicalResult ModuleImport::convertGlobal(llvm::GlobalVariable *globalVar) { convertConstantExpr(globalVar->getInitializer()); if (failed(initializer)) return failure(); - builder.create(globalOp.getLoc(), *initializer); + ReturnOp::create(builder, globalOp.getLoc(), *initializer); } if (globalVar->hasAtLeastLocalUnnamedAddr()) { globalOp.setUnnamedAddr( @@ -1513,13 +1513,13 @@ ModuleImport::convertGlobalCtorsAndDtors(llvm::GlobalVariable *globalVar) { OpBuilder::InsertionGuard guard = setGlobalInsertionPoint(); if (globalVar->getName() == getGlobalCtorsVarName()) { - globalInsertionOp = builder.create( - mlirModule.getLoc(), builder.getArrayAttr(funcs), + globalInsertionOp = LLVM::GlobalCtorsOp::create( + builder, mlirModule.getLoc(), builder.getArrayAttr(funcs), builder.getI32ArrayAttr(priorities), builder.getArrayAttr(dataList)); return success(); } - globalInsertionOp = builder.create( - mlirModule.getLoc(), builder.getArrayAttr(funcs), + globalInsertionOp = LLVM::GlobalDtorsOp::create( + builder, mlirModule.getLoc(), builder.getArrayAttr(funcs), builder.getI32ArrayAttr(priorities), builder.getArrayAttr(dataList)); return success(); } @@ -1594,33 +1594,33 @@ FailureOr ModuleImport::convertConstant(llvm::Constant *constant) { if (Attribute attr = getConstantAsAttr(constant)) { Type type = convertType(constant->getType()); if (auto symbolRef = dyn_cast(attr)) { - return builder.create(loc, type, symbolRef.getValue()) + return AddressOfOp::create(builder, loc, type, symbolRef.getValue()) .getResult(); } - return builder.create(loc, type, attr).getResult(); + return ConstantOp::create(builder, loc, type, attr).getResult(); } // Convert null pointer constants. if (auto *nullPtr = dyn_cast(constant)) { Type type = convertType(nullPtr->getType()); - return builder.create(loc, type).getResult(); + return ZeroOp::create(builder, loc, type).getResult(); } // Convert none token constants. if (isa(constant)) { - return builder.create(loc).getResult(); + return NoneTokenOp::create(builder, loc).getResult(); } // Convert poison. if (auto *poisonVal = dyn_cast(constant)) { Type type = convertType(poisonVal->getType()); - return builder.create(loc, type).getResult(); + return PoisonOp::create(builder, loc, type).getResult(); } // Convert undef. if (auto *undefVal = dyn_cast(constant)) { Type type = convertType(undefVal->getType()); - return builder.create(loc, type).getResult(); + return UndefOp::create(builder, loc, type).getResult(); } // Convert dso_local_equivalent. @@ -1646,7 +1646,7 @@ FailureOr ModuleImport::convertConstant(llvm::Constant *constant) { getOrCreateNamelessSymbolName(cast(globalObj)); else symbolRef = FlatSymbolRefAttr::get(context, globalName); - return builder.create(loc, type, symbolRef).getResult(); + return AddressOfOp::create(builder, loc, type, symbolRef).getResult(); } // Convert global alias accesses. @@ -1654,7 +1654,7 @@ FailureOr ModuleImport::convertConstant(llvm::Constant *constant) { Type type = convertType(globalAliasObj->getType()); StringRef aliaseeName = globalAliasObj->getName(); FlatSymbolRefAttr symbolRef = FlatSymbolRefAttr::get(context, aliaseeName); - return builder.create(loc, type, symbolRef).getResult(); + return AddressOfOp::create(builder, loc, type, symbolRef).getResult(); } // Convert constant expressions. @@ -1705,16 +1705,17 @@ FailureOr ModuleImport::convertConstant(llvm::Constant *constant) { bool isArrayOrStruct = isa(rootType); assert((isArrayOrStruct || LLVM::isCompatibleVectorType(rootType)) && "unrecognized aggregate type"); - Value root = builder.create(loc, rootType); + Value root = UndefOp::create(builder, loc, rootType); for (const auto &it : llvm::enumerate(elementValues)) { if (isArrayOrStruct) { - root = builder.create(loc, root, it.value(), it.index()); + root = + InsertValueOp::create(builder, loc, root, it.value(), it.index()); } else { Attribute indexAttr = builder.getI32IntegerAttr(it.index()); Value indexValue = - builder.create(loc, builder.getI32Type(), indexAttr); - root = builder.create(loc, rootType, root, it.value(), - indexValue); + ConstantOp::create(builder, loc, builder.getI32Type(), indexAttr); + root = InsertElementOp::create(builder, loc, rootType, root, it.value(), + indexValue); } } return root; @@ -1727,7 +1728,7 @@ FailureOr ModuleImport::convertConstant(llvm::Constant *constant) { "target extension type does not support zero-initialization"); // Create llvm.mlir.zero operation to represent zero-initialization of // target extension type. - return builder.create(loc, targetExtType).getRes(); + return LLVM::ZeroOp::create(builder, loc, targetExtType).getRes(); } if (auto *blockAddr = dyn_cast(constant)) { @@ -2158,16 +2159,16 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { } if (!brInst->isConditional()) { - auto brOp = builder.create(loc, succBlockArgs.front(), - succBlocks.front()); + auto brOp = LLVM::BrOp::create(builder, loc, succBlockArgs.front(), + succBlocks.front()); mapNoResultOp(inst, brOp); return success(); } FailureOr condition = convertValue(brInst->getCondition()); if (failed(condition)) return failure(); - auto condBrOp = builder.create( - loc, *condition, succBlocks.front(), succBlockArgs.front(), + auto condBrOp = LLVM::CondBrOp::create( + builder, loc, *condition, succBlocks.front(), succBlockArgs.front(), succBlocks.back(), succBlockArgs.back()); mapNoResultOp(inst, condBrOp); return success(); @@ -2200,9 +2201,9 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { caseBlocks[it.index()] = lookupBlock(succBB); } - auto switchOp = builder.create( - loc, *condition, lookupBlock(defaultBB), defaultBlockArgs, caseValues, - caseBlocks, caseOperandRefs); + auto switchOp = SwitchOp::create(builder, loc, *condition, + lookupBlock(defaultBB), defaultBlockArgs, + caseValues, caseBlocks, caseOperandRefs); mapNoResultOp(inst, switchOp); return success(); } @@ -2252,14 +2253,14 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { // IR). Build the indirect call by passing an empty `callee` operand and // insert into `operands` to include the indirect call target. FlatSymbolRefAttr calleeSym = convertCalleeName(callInst); - Value indirectCallVal = builder.create( - loc, LLVM::LLVMPointerType::get(context), calleeSym); + Value indirectCallVal = LLVM::AddressOfOp::create( + builder, loc, LLVM::LLVMPointerType::get(context), calleeSym); operands->insert(operands->begin(), indirectCallVal); } else { // Regular direct call using callee name. callee = convertCalleeName(callInst); } - CallOp callOp = builder.create(loc, *funcTy, callee, *operands); + CallOp callOp = CallOp::create(builder, loc, *funcTy, callee, *operands); if (failed(convertCallAttributes(callInst, callOp))) return failure(); @@ -2294,7 +2295,7 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { Type type = convertType(lpInst->getType()); auto lpOp = - builder.create(loc, type, lpInst->isCleanup(), operands); + LandingpadOp::create(builder, loc, type, lpInst->isCleanup(), operands); mapValue(inst, lpOp); return success(); } @@ -2344,8 +2345,8 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { // IR). Build the indirect invoke by passing an empty `callee` operand and // insert into `operands` to include the indirect invoke target. FlatSymbolRefAttr calleeSym = convertCalleeName(invokeInst); - Value indirectInvokeVal = builder.create( - loc, LLVM::LLVMPointerType::get(context), calleeSym); + Value indirectInvokeVal = LLVM::AddressOfOp::create( + builder, loc, LLVM::LLVMPointerType::get(context), calleeSym); operands->insert(operands->begin(), indirectInvokeVal); } else { // Regular direct invoke using callee name. @@ -2354,9 +2355,9 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { // Create the invoke operation. Normal destination block arguments will be // added later on to handle the case in which the operation result is // included in this list. - auto invokeOp = builder.create( - loc, *funcTy, calleeName, *operands, directNormalDest, ValueRange(), - lookupBlock(invokeInst->getUnwindDest()), unwindArgs); + auto invokeOp = InvokeOp::create( + builder, loc, *funcTy, calleeName, *operands, directNormalDest, + ValueRange(), lookupBlock(invokeInst->getUnwindDest()), unwindArgs); if (failed(convertInvokeAttributes(invokeInst, invokeOp))) return failure(); @@ -2382,7 +2383,7 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { // arguments (including the invoke operation's result). OpBuilder::InsertionGuard g(builder); builder.setInsertionPointToStart(directNormalDest); - builder.create(loc, normalArgs, normalDest); + LLVM::BrOp::create(builder, loc, normalArgs, normalDest); } else { // If the invoke operation's result is not a block argument to the normal // destination block, just add the block arguments as usual. @@ -2416,8 +2417,8 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { } Type type = convertType(inst->getType()); - auto gepOp = builder.create( - loc, type, sourceElementType, *basePtr, indices, + auto gepOp = GEPOp::create( + builder, loc, type, sourceElementType, *basePtr, indices, static_cast(gepInst->getNoWrapFlags().getRaw())); mapValue(inst, gepOp); return success(); @@ -2443,8 +2444,8 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) { SmallVector succBlockArgsRange = llvm::to_vector_of(succBlockArgs); Location loc = translateLoc(inst->getDebugLoc()); - auto indBrOp = builder.create( - loc, *basePtr, succBlockArgsRange, succBlocks); + auto indBrOp = LLVM::IndirectBrOp::create(builder, loc, *basePtr, + succBlockArgsRange, succBlocks); mapNoResultOp(inst, indBrOp); return success(); @@ -2888,8 +2889,8 @@ LogicalResult ModuleImport::processFunction(llvm::Function *func) { builder.setInsertionPointToEnd(mlirModule.getBody()); Location loc = debugImporter->translateFuncLocation(func); - LLVMFuncOp funcOp = builder.create( - loc, func->getName(), functionType, + LLVMFuncOp funcOp = LLVMFuncOp::create( + builder, loc, func->getName(), functionType, convertLinkageFromLLVM(func->getLinkage()), dsoLocal, cconv); convertParameterAttributes(func, funcOp, builder); @@ -3066,12 +3067,12 @@ ModuleImport::processDebugIntrinsic(llvm::DbgVariableIntrinsic *dbgIntr, Operation *op = llvm::TypeSwitch(dbgIntr) .Case([&](llvm::DbgDeclareInst *) { - return builder.create( - loc, *argOperand, localVariableAttr, locationExprAttr); + return LLVM::DbgDeclareOp::create( + builder, loc, *argOperand, localVariableAttr, locationExprAttr); }) .Case([&](llvm::DbgValueInst *) { - return builder.create( - loc, *argOperand, localVariableAttr, locationExprAttr); + return LLVM::DbgValueOp::create( + builder, loc, *argOperand, localVariableAttr, locationExprAttr); }); mapNoResultOp(dbgIntr, op); setNonDebugMetadataAttrs(dbgIntr, op); @@ -3116,8 +3117,8 @@ LogicalResult ModuleImport::processBasicBlock(llvm::BasicBlock *bb, if (bb->hasAddressTaken()) { OpBuilder::InsertionGuard guard(builder); builder.setInsertionPointToStart(block); - builder.create(block->getParentOp()->getLoc(), - BlockTagAttr::get(context, bb->getNumber())); + BlockTagOp::create(builder, block->getParentOp()->getLoc(), + BlockTagAttr::get(context, bb->getNumber())); } return success(); } diff --git a/mlir/lib/Target/SPIRV/Deserialization/DeserializeOps.cpp b/mlir/lib/Target/SPIRV/Deserialization/DeserializeOps.cpp index 9fa03725d05ee..ee18cf815e4a7 100644 --- a/mlir/lib/Target/SPIRV/Deserialization/DeserializeOps.cpp +++ b/mlir/lib/Target/SPIRV/Deserialization/DeserializeOps.cpp @@ -42,37 +42,38 @@ static inline spirv::Opcode extractOpcode(uint32_t word) { Value spirv::Deserializer::getValue(uint32_t id) { if (auto constInfo = getConstant(id)) { // Materialize a `spirv.Constant` op at every use site. - return opBuilder.create(unknownLoc, constInfo->second, - constInfo->first); + return spirv::ConstantOp::create(opBuilder, unknownLoc, constInfo->second, + constInfo->first); } if (std::optional> constCompositeReplicateInfo = getConstantCompositeReplicate(id)) { - return opBuilder.create( - unknownLoc, constCompositeReplicateInfo->second, + return spirv::EXTConstantCompositeReplicateOp::create( + opBuilder, unknownLoc, constCompositeReplicateInfo->second, constCompositeReplicateInfo->first); } if (auto varOp = getGlobalVariable(id)) { - auto addressOfOp = opBuilder.create( - unknownLoc, varOp.getType(), SymbolRefAttr::get(varOp.getOperation())); + auto addressOfOp = + spirv::AddressOfOp::create(opBuilder, unknownLoc, varOp.getType(), + SymbolRefAttr::get(varOp.getOperation())); return addressOfOp.getPointer(); } if (auto constOp = getSpecConstant(id)) { - auto referenceOfOp = opBuilder.create( - unknownLoc, constOp.getDefaultValue().getType(), + auto referenceOfOp = spirv::ReferenceOfOp::create( + opBuilder, unknownLoc, constOp.getDefaultValue().getType(), SymbolRefAttr::get(constOp.getOperation())); return referenceOfOp.getReference(); } if (SpecConstantCompositeOp specConstCompositeOp = getSpecConstantComposite(id)) { - auto referenceOfOp = opBuilder.create( - unknownLoc, specConstCompositeOp.getType(), + auto referenceOfOp = spirv::ReferenceOfOp::create( + opBuilder, unknownLoc, specConstCompositeOp.getType(), SymbolRefAttr::get(specConstCompositeOp.getOperation())); return referenceOfOp.getReference(); } if (auto specConstCompositeReplicateOp = getSpecConstantCompositeReplicate(id)) { - auto referenceOfOp = opBuilder.create( - unknownLoc, specConstCompositeReplicateOp.getType(), + auto referenceOfOp = spirv::ReferenceOfOp::create( + opBuilder, unknownLoc, specConstCompositeReplicateOp.getType(), SymbolRefAttr::get(specConstCompositeReplicateOp.getOperation())); return referenceOfOp.getReference(); } @@ -83,7 +84,7 @@ Value spirv::Deserializer::getValue(uint32_t id) { specConstOperationInfo->enclosedOpOperands); } if (auto undef = getUndefType(id)) { - return opBuilder.create(unknownLoc, undef); + return spirv::UndefOp::create(opBuilder, unknownLoc, undef); } return valueMap.lookup(id); } @@ -387,8 +388,9 @@ Deserializer::processOp(ArrayRef words) { interface.push_back(SymbolRefAttr::get(arg.getOperation())); wordIndex++; } - opBuilder.create( - unknownLoc, execModel, SymbolRefAttr::get(opBuilder.getContext(), fnName), + spirv::EntryPointOp::create( + opBuilder, unknownLoc, execModel, + SymbolRefAttr::get(opBuilder.getContext(), fnName), opBuilder.getArrayAttr(interface)); return success(); } @@ -420,9 +422,10 @@ Deserializer::processOp(ArrayRef words) { attrListElems.push_back(opBuilder.getI32IntegerAttr(words[wordIndex++])); } auto values = opBuilder.getArrayAttr(attrListElems); - opBuilder.create( - unknownLoc, SymbolRefAttr::get(opBuilder.getContext(), fn.getName()), - execMode, values); + spirv::ExecutionModeOp::create( + opBuilder, unknownLoc, + SymbolRefAttr::get(opBuilder.getContext(), fn.getName()), execMode, + values); return success(); } @@ -459,8 +462,8 @@ Deserializer::processOp(ArrayRef operands) { arguments.push_back(value); } - auto opFunctionCall = opBuilder.create( - unknownLoc, resultType, + auto opFunctionCall = spirv::FunctionCallOp::create( + opBuilder, unknownLoc, resultType, SymbolRefAttr::get(opBuilder.getContext(), functionName), arguments); if (resultType) @@ -536,7 +539,8 @@ Deserializer::processOp(ArrayRef words) { } Location loc = createFileLineColLoc(opBuilder); - opBuilder.create(loc, resultTypes, operands, attributes); + spirv::CopyMemoryOp::create(opBuilder, loc, resultTypes, operands, + attributes); return success(); } @@ -567,8 +571,8 @@ LogicalResult Deserializer::processOp( operands.push_back(arg); Location loc = createFileLineColLoc(opBuilder); - Operation *op = opBuilder.create( - loc, resultTypes, operands); + Operation *op = spirv::GenericCastToPtrExplicitOp::create( + opBuilder, loc, resultTypes, operands); valueMap[valueID] = op->getResult(0); return success(); } diff --git a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp index d133d0332e271..88799a5ee8d52 100644 --- a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp +++ b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp @@ -518,8 +518,8 @@ spirv::Deserializer::processFunction(ArrayRef operands) { } std::string fnName = getFunctionSymbol(fnID); - auto funcOp = opBuilder.create( - unknownLoc, fnName, functionType, fnControl.value()); + auto funcOp = spirv::FuncOp::create(opBuilder, unknownLoc, fnName, + functionType, fnControl.value()); // Processing other function attributes. if (decorations.count(fnID)) { for (auto attr : decorations[fnID].getAttrs()) { @@ -714,8 +714,8 @@ spirv::SpecConstantOp spirv::Deserializer::createSpecConstant(Location loc, uint32_t resultID, TypedAttr defaultValue) { auto symName = opBuilder.getStringAttr(getSpecConstantSymbol(resultID)); - auto op = opBuilder.create(unknownLoc, symName, - defaultValue); + auto op = spirv::SpecConstantOp::create(opBuilder, unknownLoc, symName, + defaultValue); if (decorations.count(resultID)) { for (auto attr : decorations[resultID].getAttrs()) op->setAttr(attr.getName(), attr.getValue()); @@ -790,9 +790,9 @@ spirv::Deserializer::processGlobalVariable(ArrayRef operands) { << wordIndex << " of " << operands.size() << " processed"; } auto loc = createFileLineColLoc(opBuilder); - auto varOp = opBuilder.create( - loc, TypeAttr::get(type), opBuilder.getStringAttr(variableName), - initializer); + auto varOp = spirv::GlobalVariableOp::create( + opBuilder, loc, TypeAttr::get(type), + opBuilder.getStringAttr(variableName), initializer); // Decorations. if (decorations.count(variableID)) { @@ -1637,8 +1637,8 @@ spirv::Deserializer::processSpecConstantComposite(ArrayRef operands) { elements.push_back(SymbolRefAttr::get(elementInfo)); } - auto op = opBuilder.create( - unknownLoc, TypeAttr::get(resultType), symName, + auto op = spirv::SpecConstantCompositeOp::create( + opBuilder, unknownLoc, TypeAttr::get(resultType), symName, opBuilder.getArrayAttr(elements)); specConstCompositeMap[resultID] = op; @@ -1671,8 +1671,8 @@ LogicalResult spirv::Deserializer::processSpecConstantCompositeReplicateEXT( auto symName = opBuilder.getStringAttr(getSpecConstantSymbol(resultID)); spirv::SpecConstantOp constituentSpecConstantOp = getSpecConstant(operands[2]); - auto op = opBuilder.create( - unknownLoc, TypeAttr::get(resultType), symName, + auto op = spirv::EXTSpecConstantCompositeReplicateOp::create( + opBuilder, unknownLoc, TypeAttr::get(resultType), symName, SymbolRefAttr::get(constituentSpecConstantOp)); specConstCompositeReplicateMap[resultID] = op; @@ -1747,7 +1747,7 @@ Value spirv::Deserializer::materializeSpecConstantOperation( auto loc = createFileLineColLoc(opBuilder); auto specConstOperationOp = - opBuilder.create(loc, resultType); + spirv::SpecConstantOperationOp::create(opBuilder, loc, resultType); Region &body = specConstOperationOp.getBody(); // Move the new block into SpecConstantOperation's body. @@ -1760,7 +1760,7 @@ Value spirv::Deserializer::materializeSpecConstantOperation( OpBuilder::InsertionGuard moduleInsertionGuard(opBuilder); opBuilder.setInsertionPointToEnd(&block); - opBuilder.create(loc, block.front().getResult(0)); + spirv::YieldOp::create(opBuilder, loc, block.front().getResult(0)); return specConstOperationOp.getResult(); } @@ -1824,7 +1824,7 @@ LogicalResult spirv::Deserializer::processBranch(ArrayRef operands) { // The preceding instruction for the OpBranch instruction could be an // OpLoopMerge or an OpSelectionMerge instruction, in this case they will have // the same OpLine information. - opBuilder.create(loc, target); + spirv::BranchOp::create(opBuilder, loc, target); clearDebugLine(); return success(); @@ -1855,8 +1855,8 @@ spirv::Deserializer::processBranchConditional(ArrayRef operands) { // an OpSelectionMerge instruction, in this case they will have the same // OpLine information. auto loc = createFileLineColLoc(opBuilder); - opBuilder.create( - loc, condition, trueBlock, + spirv::BranchConditionalOp::create( + opBuilder, loc, condition, trueBlock, /*trueArguments=*/ArrayRef(), falseBlock, /*falseArguments=*/ArrayRef(), weights); @@ -2038,7 +2038,7 @@ ControlFlowStructurizer::createSelectionOp(uint32_t selectionControl) { OpBuilder builder(&mergeBlock->front()); auto control = static_cast(selectionControl); - auto selectionOp = builder.create(location, control); + auto selectionOp = spirv::SelectionOp::create(builder, location, control); selectionOp.addMergeBlock(builder); return selectionOp; @@ -2050,7 +2050,7 @@ spirv::LoopOp ControlFlowStructurizer::createLoopOp(uint32_t loopControl) { OpBuilder builder(&mergeBlock->front()); auto control = static_cast(loopControl); - auto loopOp = builder.create(location, control); + auto loopOp = spirv::LoopOp::create(builder, location, control); loopOp.addEntryAndMergeBlock(builder); return loopOp; @@ -2183,8 +2183,8 @@ LogicalResult ControlFlowStructurizer::structurize() { // The loop entry block should have a unconditional branch jumping to the // loop header block. builder.setInsertionPointToEnd(&body.front()); - builder.create(location, mapper.lookupOrNull(headerBlock), - ArrayRef(blockArgs)); + spirv::BranchOp::create(builder, location, mapper.lookupOrNull(headerBlock), + ArrayRef(blockArgs)); } // Values defined inside the selection region that need to be yielded outside @@ -2268,12 +2268,12 @@ LogicalResult ControlFlowStructurizer::structurize() { Operation *newOp = nullptr; if (isLoop) - newOp = builder.create( - location, TypeRange(ValueRange(outsideUses)), - static_cast(control)); + newOp = spirv::LoopOp::create(builder, location, + TypeRange(ValueRange(outsideUses)), + static_cast(control)); else - newOp = builder.create( - location, TypeRange(ValueRange(outsideUses)), + newOp = spirv::SelectionOp::create( + builder, location, TypeRange(ValueRange(outsideUses)), static_cast(control)); newOp->getRegion(0).takeBody(body); @@ -2399,7 +2399,7 @@ LogicalResult ControlFlowStructurizer::structurize() { // but replace all ops inside with a branch to the merge block. block->clear(); builder.setInsertionPointToEnd(block); - builder.create(location, mergeBlock); + spirv::BranchOp::create(builder, location, mergeBlock); } else { LLVM_DEBUG(logger.startLine() << "[cf] erasing block " << block << "\n"); block->erase(); @@ -2453,22 +2453,22 @@ LogicalResult spirv::Deserializer::wireUpBlockArgument() { if (auto branchOp = dyn_cast(op)) { // Replace the previous branch op with a new one with block arguments. - opBuilder.create(branchOp.getLoc(), branchOp.getTarget(), - blockArgs); + spirv::BranchOp::create(opBuilder, branchOp.getLoc(), + branchOp.getTarget(), blockArgs); branchOp.erase(); } else if (auto branchCondOp = dyn_cast(op)) { assert((branchCondOp.getTrueBlock() == target || branchCondOp.getFalseBlock() == target) && "expected target to be either the true or false target"); if (target == branchCondOp.getTrueTarget()) - opBuilder.create( - branchCondOp.getLoc(), branchCondOp.getCondition(), blockArgs, - branchCondOp.getFalseBlockArguments(), + spirv::BranchConditionalOp::create( + opBuilder, branchCondOp.getLoc(), branchCondOp.getCondition(), + blockArgs, branchCondOp.getFalseBlockArguments(), branchCondOp.getBranchWeightsAttr(), branchCondOp.getTrueTarget(), branchCondOp.getFalseTarget()); else - opBuilder.create( - branchCondOp.getLoc(), branchCondOp.getCondition(), + spirv::BranchConditionalOp::create( + opBuilder, branchCondOp.getLoc(), branchCondOp.getCondition(), branchCondOp.getTrueBlockArguments(), blockArgs, branchCondOp.getBranchWeightsAttr(), branchCondOp.getTrueBlock(), branchCondOp.getFalseBlock()); @@ -2528,7 +2528,7 @@ LogicalResult spirv::Deserializer::splitConditionalBlocks() { if (!llvm::hasSingleElement(*block) || splitHeaderMergeBlock) { Block *newBlock = block->splitBlock(terminator); OpBuilder builder(block, block->end()); - builder.create(block->getParent()->getLoc(), newBlock); + spirv::BranchOp::create(builder, block->getParent()->getLoc(), newBlock); // After splitting we need to update the map to use the new block as a // header. diff --git a/mlir/lib/Tools/PDLL/CodeGen/MLIRGen.cpp b/mlir/lib/Tools/PDLL/CodeGen/MLIRGen.cpp index 824201d17b5ab..0677828b635d4 100644 --- a/mlir/lib/Tools/PDLL/CodeGen/MLIRGen.cpp +++ b/mlir/lib/Tools/PDLL/CodeGen/MLIRGen.cpp @@ -134,7 +134,7 @@ class CodeGen { OwningOpRef CodeGen::generate(const ast::Module &module) { OwningOpRef mlirModule = - builder.create(genLoc(module.getLoc())); + ModuleOp::create(builder, genLoc(module.getLoc())); builder.setInsertionPointToStart(mlirModule->getBody()); // Generate code for each of the decls within the module. @@ -205,8 +205,8 @@ static void checkAndNestUnderRewriteOp(OpBuilder &builder, Value rootExpr, Location loc) { if (isa(builder.getInsertionBlock()->getParentOp())) { pdl::RewriteOp rewrite = - builder.create(loc, rootExpr, /*name=*/StringAttr(), - /*externalArgs=*/ValueRange()); + pdl::RewriteOp::create(builder, loc, rootExpr, /*name=*/StringAttr(), + /*externalArgs=*/ValueRange()); builder.createBlock(&rewrite.getBodyRegion()); } } @@ -219,7 +219,7 @@ void CodeGen::genImpl(const ast::EraseStmt *stmt) { // Make sure we are nested in a RewriteOp. OpBuilder::InsertionGuard guard(builder); checkAndNestUnderRewriteOp(builder, rootExpr, loc); - builder.create(loc, rootExpr); + pdl::EraseOp::create(builder, loc, rootExpr); } void CodeGen::genImpl(const ast::LetStmt *stmt) { genVar(stmt->getVarDecl()); } @@ -242,8 +242,8 @@ void CodeGen::genImpl(const ast::ReplaceStmt *stmt) { bool usesReplOperation = replValues.size() == 1 && isa(replValues.front().getType()); - builder.create( - loc, rootExpr, usesReplOperation ? replValues[0] : Value(), + pdl::ReplaceOp::create( + builder, loc, rootExpr, usesReplOperation ? replValues[0] : Value(), usesReplOperation ? ValueRange() : ValueRange(replValues)); } @@ -283,8 +283,8 @@ void CodeGen::genImpl(const ast::PatternDecl *decl) { // FIXME: Properly model HasBoundedRecursion in PDL so that we don't drop it // here. - pdl::PatternOp pattern = builder.create( - genLoc(decl->getLoc()), decl->getBenefit(), + pdl::PatternOp pattern = pdl::PatternOp::create( + builder, genLoc(decl->getLoc()), decl->getBenefit(), name ? std::optional(name->getName()) : std::optional()); @@ -338,30 +338,31 @@ Value CodeGen::genNonInitializerVar(const ast::VariableDecl *varDecl, ast::Type type = varDecl->getType(); Type mlirType = genType(type); if (isa(type)) - return builder.create(loc, mlirType, getTypeConstraint()); + return pdl::OperandOp::create(builder, loc, mlirType, getTypeConstraint()); if (isa(type)) - return builder.create(loc, mlirType, /*type=*/TypeAttr()); + return pdl::TypeOp::create(builder, loc, mlirType, /*type=*/TypeAttr()); if (isa(type)) - return builder.create(loc, getTypeConstraint()); + return pdl::AttributeOp::create(builder, loc, getTypeConstraint()); if (ast::OperationType opType = dyn_cast(type)) { - Value operands = builder.create( - loc, pdl::RangeType::get(builder.getType()), + Value operands = pdl::OperandsOp::create( + builder, loc, pdl::RangeType::get(builder.getType()), /*type=*/Value()); - Value results = builder.create( - loc, pdl::RangeType::get(builder.getType()), + Value results = pdl::TypesOp::create( + builder, loc, pdl::RangeType::get(builder.getType()), /*types=*/ArrayAttr()); - return builder.create(loc, opType.getName(), operands, - ArrayRef(), ValueRange(), - results); + return pdl::OperationOp::create(builder, loc, opType.getName(), operands, + ArrayRef(), ValueRange(), + results); } if (ast::RangeType rangeTy = dyn_cast(type)) { ast::Type eleTy = rangeTy.getElementType(); if (isa(eleTy)) - return builder.create(loc, mlirType, - getTypeConstraint()); + return pdl::OperandsOp::create(builder, loc, mlirType, + getTypeConstraint()); if (isa(eleTy)) - return builder.create(loc, mlirType, /*types=*/ArrayAttr()); + return pdl::TypesOp::create(builder, loc, mlirType, + /*types=*/ArrayAttr()); } llvm_unreachable("invalid non-initialized variable type"); @@ -404,7 +405,7 @@ SmallVector CodeGen::genExpr(const ast::Expr *expr) { Value CodeGen::genExprImpl(const ast::AttributeExpr *expr) { Attribute attr = parseAttribute(expr->getValue(), builder.getContext()); assert(attr && "invalid MLIR attribute data"); - return builder.create(genLoc(expr->getLoc()), attr); + return pdl::AttributeOp::create(builder, genLoc(expr->getLoc()), attr); } SmallVector CodeGen::genExprImpl(const ast::CallExpr *expr) { @@ -443,9 +444,9 @@ Value CodeGen::genExprImpl(const ast::MemberAccessExpr *expr) { if (isa(expr)) { Type mlirType = genType(expr->getType()); if (isa(mlirType)) - return builder.create(loc, mlirType, parentExprs[0], - builder.getI32IntegerAttr(0)); - return builder.create(loc, mlirType, parentExprs[0]); + return pdl::ResultOp::create(builder, loc, mlirType, parentExprs[0], + builder.getI32IntegerAttr(0)); + return pdl::ResultsOp::create(builder, loc, mlirType, parentExprs[0]); } const ods::Operation *odsOp = opType.getODSOperation(); @@ -455,8 +456,8 @@ Value CodeGen::genExprImpl(const ast::MemberAccessExpr *expr) { unsigned resultIndex; name.getAsInteger(/*Radix=*/10, resultIndex); IntegerAttr index = builder.getI32IntegerAttr(resultIndex); - return builder.create(loc, genType(expr->getType()), - parentExprs[0], index); + return pdl::ResultOp::create(builder, loc, genType(expr->getType()), + parentExprs[0], index); } // Find the result with the member name or by index. @@ -474,8 +475,8 @@ Value CodeGen::genExprImpl(const ast::MemberAccessExpr *expr) { // Generate the result access. IntegerAttr index = builder.getI32IntegerAttr(resultIndex); - return builder.create(loc, genType(expr->getType()), - parentExprs[0], index); + return pdl::ResultsOp::create(builder, loc, genType(expr->getType()), + parentExprs[0], index); } // Handle tuple based member access. @@ -518,8 +519,8 @@ Value CodeGen::genExprImpl(const ast::OperationExpr *expr) { for (const ast::Expr *result : expr->getResultTypes()) results.push_back(genSingleExpr(result)); - return builder.create(loc, opName, operands, attrNames, - attrValues, results); + return pdl::OperationOp::create(builder, loc, opName, operands, attrNames, + attrValues, results); } Value CodeGen::genExprImpl(const ast::RangeExpr *expr) { @@ -527,8 +528,8 @@ Value CodeGen::genExprImpl(const ast::RangeExpr *expr) { for (const ast::Expr *element : expr->getElements()) llvm::append_range(elements, genExpr(element)); - return builder.create(genLoc(expr->getLoc()), - genType(expr->getType()), elements); + return pdl::RangeOp::create(builder, genLoc(expr->getLoc()), + genType(expr->getType()), elements); } SmallVector CodeGen::genExprImpl(const ast::TupleExpr *expr) { @@ -541,9 +542,9 @@ SmallVector CodeGen::genExprImpl(const ast::TupleExpr *expr) { Value CodeGen::genExprImpl(const ast::TypeExpr *expr) { Type type = parseType(expr->getValue(), builder.getContext()); assert(type && "invalid MLIR type data"); - return builder.create(genLoc(expr->getLoc()), - builder.getType(), - TypeAttr::get(type)); + return pdl::TypeOp::create(builder, genLoc(expr->getLoc()), + builder.getType(), + TypeAttr::get(type)); } SmallVector @@ -586,8 +587,8 @@ CodeGen::genConstraintOrRewriteCall(const T *decl, Location loc, } else { resultTypes.push_back(genType(declResultType)); } - PDLOpT pdlOp = builder.create(loc, resultTypes, - decl->getName().getName(), inputs); + PDLOpT pdlOp = PDLOpT::create(builder, loc, resultTypes, + decl->getName().getName(), inputs); if (isNegated && std::is_same_v) cast(pdlOp).setIsNegated(true); return pdlOp->getResults(); diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp index 4c4ce3cb41fd5..d224f732a198b 100644 --- a/mlir/lib/Transforms/Utils/DialectConversion.cpp +++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp @@ -1502,7 +1502,7 @@ ValueRange ConversionPatternRewriterImpl::buildUnresolvedMaterialization( OpBuilder builder(outputTypes.front().getContext()); builder.setInsertionPoint(ip.getBlock(), ip.getPoint()); auto convertOp = - builder.create(loc, outputTypes, inputs); + UnrealizedConversionCastOp::create(builder, loc, outputTypes, inputs); if (!valuesToMap.empty()) mapping.map(valuesToMap, convertOp.getResults()); if (castOp)