diff --git a/mlir/docs/Tutorials/Toy/Ch-2.md b/mlir/docs/Tutorials/Toy/Ch-2.md --- a/mlir/docs/Tutorials/Toy/Ch-2.md +++ b/mlir/docs/Tutorials/Toy/Ch-2.md @@ -490,14 +490,14 @@ // using `builder.create(...)`. let builders = [ // Build a constant with a given constant tensor value. - OpBuilder<"DenseElementsAttr value", [{ + OpBuilderDAG<(ins "DenseElementsAttr":$value), [{ // Call into an autogenerated `build` method. build(builder, result, value.getType(), value); }]>, // Build a constant with a given constant floating-point value. This builder // creates a declaration for `ConstantOp::build` with the given parameters. - OpBuilder<"double value"> + OpBuilderDAG<(ins "double":$value)> ]; } ``` diff --git a/mlir/examples/toy/Ch2/include/toy/Ops.td b/mlir/examples/toy/Ch2/include/toy/Ops.td --- a/mlir/examples/toy/Ch2/include/toy/Ops.td +++ b/mlir/examples/toy/Ch2/include/toy/Ops.td @@ -68,12 +68,12 @@ // using `builder.create(...)`. let builders = [ // Build a constant with a given constant tensor value. - OpBuilder<"DenseElementsAttr value", [{ + OpBuilderDAG<(ins "DenseElementsAttr":$value), [{ build($_builder, $_state, value.getType(), value); }]>, // Build a constant with a given constant floating-point value. - OpBuilder<"double value"> + OpBuilderDAG<(ins "double":$value)> ]; // Invoke a static verify method to verify this constant operation. @@ -96,7 +96,7 @@ // Allow building an AddOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -131,7 +131,7 @@ // Add custom build methods for the generic call operation. let builders = [ - OpBuilder<"StringRef callee, ArrayRef arguments"> + OpBuilderDAG<(ins "StringRef":$callee, "ArrayRef":$arguments)> ]; } @@ -151,7 +151,7 @@ // Allow building a MulOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -215,7 +215,7 @@ // Allow building a ReturnOp with no return operand. let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + OpBuilderDAG<(ins), [{ build($_builder, $_state, llvm::None); }]> ]; // Provide extra utility definitions on the c++ operation class definition. @@ -239,7 +239,7 @@ // Allow building a TransposeOp with from the input operand. let builders = [ - OpBuilder<"Value input"> + OpBuilderDAG<(ins "Value":$input)> ]; // Invoke a static verify method to verify this transpose operation. diff --git a/mlir/examples/toy/Ch3/include/toy/Ops.td b/mlir/examples/toy/Ch3/include/toy/Ops.td --- a/mlir/examples/toy/Ch3/include/toy/Ops.td +++ b/mlir/examples/toy/Ch3/include/toy/Ops.td @@ -67,12 +67,12 @@ // using `builder.create(...)`. let builders = [ // Build a constant with a given constant tensor value. - OpBuilder<"DenseElementsAttr value", [{ + OpBuilderDAG<(ins "DenseElementsAttr":$value), [{ build($_builder, $_state, value.getType(), value); }]>, // Build a constant with a given constant floating-point value. - OpBuilder<"double value"> + OpBuilderDAG<(ins "double":$value)> ]; // Invoke a static verify method to verify this constant operation. @@ -95,7 +95,7 @@ // Allow building an AddOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -130,7 +130,7 @@ // Add custom build methods for the generic call operation. let builders = [ - OpBuilder<"StringRef callee, ArrayRef arguments"> + OpBuilderDAG<(ins "StringRef":$callee, "ArrayRef":$arguments)> ]; } @@ -150,7 +150,7 @@ // Allow building a MulOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -217,7 +217,7 @@ // Allow building a ReturnOp with no return operand. let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + OpBuilderDAG<(ins), [{ build($_builder, $_state, llvm::None); }]> ]; // Provide extra utility definitions on the c++ operation class definition. @@ -244,7 +244,7 @@ // Allow building a TransposeOp with from the input operand. let builders = [ - OpBuilder<"Value input"> + OpBuilderDAG<(ins "Value":$input)> ]; // Invoke a static verify method to verify this transpose operation. diff --git a/mlir/examples/toy/Ch4/include/toy/Ops.td b/mlir/examples/toy/Ch4/include/toy/Ops.td --- a/mlir/examples/toy/Ch4/include/toy/Ops.td +++ b/mlir/examples/toy/Ch4/include/toy/Ops.td @@ -69,12 +69,12 @@ // using `builder.create(...)`. let builders = [ // Build a constant with a given constant tensor value. - OpBuilder<"DenseElementsAttr value", [{ + OpBuilderDAG<(ins "DenseElementsAttr":$value), [{ build($_builder, $_state, value.getType(), value); }]>, // Build a constant with a given constant floating-point value. - OpBuilder<"double value"> + OpBuilderDAG<(ins "double":$value)> ]; // Invoke a static verify method to verify this constant operation. @@ -98,7 +98,7 @@ // Allow building an AddOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -155,7 +155,7 @@ // Add custom build methods for the generic call operation. let builders = [ - OpBuilder<"StringRef callee, ArrayRef arguments"> + OpBuilderDAG<(ins "StringRef":$callee, "ArrayRef":$arguments)> ]; } @@ -176,7 +176,7 @@ // Allow building a MulOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -243,7 +243,7 @@ // Allow building a ReturnOp with no return operand. let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + OpBuilderDAG<(ins), [{ build($_builder, $_state, llvm::None); }]> ]; // Provide extra utility definitions on the c++ operation class definition. @@ -271,7 +271,7 @@ // Allow building a TransposeOp with from the input operand. let builders = [ - OpBuilder<"Value input"> + OpBuilderDAG<(ins "Value":$input)> ]; // Invoke a static verify method to verify this transpose operation. diff --git a/mlir/examples/toy/Ch5/include/toy/Ops.td b/mlir/examples/toy/Ch5/include/toy/Ops.td --- a/mlir/examples/toy/Ch5/include/toy/Ops.td +++ b/mlir/examples/toy/Ch5/include/toy/Ops.td @@ -69,12 +69,12 @@ // using `builder.create(...)`. let builders = [ // Build a constant with a given constant tensor value. - OpBuilder<"DenseElementsAttr value", [{ + OpBuilderDAG<(ins "DenseElementsAttr":$value), [{ build($_builder, $_state, value.getType(), value); }]>, // Build a constant with a given constant floating-point value. - OpBuilder<"double value"> + OpBuilderDAG<(ins "double":$value)> ]; // Invoke a static verify method to verify this constant operation. @@ -98,7 +98,7 @@ // Allow building an AddOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -155,7 +155,7 @@ // Add custom build methods for the generic call operation. let builders = [ - OpBuilder<"StringRef callee, ArrayRef arguments"> + OpBuilderDAG<(ins "StringRef":$callee, "ArrayRef":$arguments)> ]; } @@ -176,7 +176,7 @@ // Allow building a MulOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -244,7 +244,7 @@ // Allow building a ReturnOp with no return operand. let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + OpBuilderDAG<(ins), [{ build($_builder, $_state, llvm::None); }]> ]; // Provide extra utility definitions on the c++ operation class definition. @@ -272,7 +272,7 @@ // Allow building a TransposeOp with from the input operand. let builders = [ - OpBuilder<"Value input"> + OpBuilderDAG<(ins "Value":$input)> ]; // Invoke a static verify method to verify this transpose operation. diff --git a/mlir/examples/toy/Ch6/include/toy/Ops.td b/mlir/examples/toy/Ch6/include/toy/Ops.td --- a/mlir/examples/toy/Ch6/include/toy/Ops.td +++ b/mlir/examples/toy/Ch6/include/toy/Ops.td @@ -69,12 +69,12 @@ // using `builder.create(...)`. let builders = [ // Build a constant with a given constant tensor value. - OpBuilder<"DenseElementsAttr value", [{ + OpBuilderDAG<(ins "DenseElementsAttr":$value), [{ build($_builder, $_state, value.getType(), value); }]>, // Build a constant with a given constant floating-point value. - OpBuilder<"double value"> + OpBuilderDAG<(ins "double":$value)> ]; // Invoke a static verify method to verify this constant operation. @@ -98,7 +98,7 @@ // Allow building an AddOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -155,7 +155,7 @@ // Add custom build methods for the generic call operation. let builders = [ - OpBuilder<"StringRef callee, ArrayRef arguments"> + OpBuilderDAG<(ins "StringRef":$callee, "ArrayRef":$arguments)> ]; } @@ -176,7 +176,7 @@ // Allow building a MulOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -244,7 +244,7 @@ // Allow building a ReturnOp with no return operand. let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + OpBuilderDAG<(ins), [{ build($_builder, $_state, llvm::None); }]> ]; // Provide extra utility definitions on the c++ operation class definition. @@ -272,7 +272,7 @@ // Allow building a TransposeOp with from the input operand. let builders = [ - OpBuilder<"Value input"> + OpBuilderDAG<(ins "Value":$input)> ]; // Invoke a static verify method to verify this transpose operation. diff --git a/mlir/examples/toy/Ch7/include/toy/Ops.td b/mlir/examples/toy/Ch7/include/toy/Ops.td --- a/mlir/examples/toy/Ch7/include/toy/Ops.td +++ b/mlir/examples/toy/Ch7/include/toy/Ops.td @@ -79,12 +79,12 @@ // using `builder.create(...)`. let builders = [ // Build a constant with a given constant tensor value. - OpBuilder<"DenseElementsAttr value", [{ + OpBuilderDAG<(ins "DenseElementsAttr":$value), [{ build($_builder, $_state, value.getType(), value); }]>, // Build a constant with a given constant floating-point value. - OpBuilder<"double value"> + OpBuilderDAG<(ins "double":$value)> ]; // Invoke a static verify method to verify this constant operation. @@ -111,7 +111,7 @@ // Allow building an AddOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -169,7 +169,7 @@ // Add custom build methods for the generic call operation. let builders = [ - OpBuilder<"StringRef callee, ArrayRef arguments"> + OpBuilderDAG<(ins "StringRef":$callee, "ArrayRef":$arguments)> ]; } @@ -190,7 +190,7 @@ // Allow building a MulOp with from the two input operands. let builders = [ - OpBuilder<"Value lhs, Value rhs"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs)> ]; } @@ -258,7 +258,7 @@ // Allow building a ReturnOp with no return operand. let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + OpBuilderDAG<(ins), [{ build($_builder, $_state, llvm::None); }]> ]; // Provide extra utility definitions on the c++ operation class definition. @@ -285,7 +285,7 @@ // Allow building a StructAccessOp with just a struct value and an index. let builders = [ - OpBuilder<"Value input, size_t index"> + OpBuilderDAG<(ins "Value":$input, "size_t":$index)> ]; let verifier = [{ return ::verify(*this); }]; @@ -333,7 +333,7 @@ // Allow building a TransposeOp with from the input operand. let builders = [ - OpBuilder<"Value input"> + OpBuilderDAG<(ins "Value":$input)> ]; // Invoke a static verify method to verify this transpose operation. diff --git a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td --- a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td +++ b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td @@ -72,7 +72,8 @@ // has a constant builder. That way we wouldn't need to explicitly specify the // result types here. let builders = [ - OpBuilder<"AffineMap map, ValueRange mapOperands", [{ + OpBuilderDAG<(ins "AffineMap":$map, "ValueRange":$mapOperands), + [{ build($_builder, $_state, $_builder.getIndexType(), map, mapOperands); }]> ]; @@ -212,14 +213,15 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"int64_t lowerBound, int64_t upperBound, int64_t step = 1, " - "ValueRange iterArgs = llvm::None, function_ref bodyBuilder = nullptr">, - OpBuilder<"ValueRange lbOperands, AffineMap lbMap, " - "ValueRange ubOperands, AffineMap ubMap, " - "int64_t step = 1, ValueRange iterArgs = llvm::None, " - "function_ref " - "bodyBuilder = nullptr"> + OpBuilderDAG<(ins "int64_t":$lowerBound, "int64_t":$upperBound, + CArg<"int64_t", "1">:$step, CArg<"ValueRange", "llvm::None">:$iterArgs, + CArg<"function_ref", + "nullptr">:$bodyBuilder)>, + OpBuilderDAG<(ins "ValueRange":$lbOperands, "AffineMap":$lbMap, + "ValueRange":$ubOperands, "AffineMap":$ubMap, CArg<"int64_t", "1">:$step, + CArg<"ValueRange", "llvm::None">:$iterArgs, + CArg<"function_ref", + "nullptr">:$bodyBuilder)> ]; let extraClassDeclaration = [{ @@ -409,9 +411,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"IntegerSet set, ValueRange args, bool withElseRegion">, - OpBuilder<"TypeRange resultTypes, IntegerSet set, ValueRange args," - "bool withElseRegion">, + OpBuilderDAG<(ins "IntegerSet":$set, "ValueRange":$args, + "bool":$withElseRegion)>, + OpBuilderDAG<(ins "TypeRange":$resultTypes, "IntegerSet":$set, + "ValueRange":$args, "bool":$withElseRegion)>, ]; let extraClassDeclaration = [{ @@ -502,11 +505,12 @@ let builders = [ /// Builds an affine load op with the specified map and operands. - OpBuilder<"AffineMap map, ValueRange operands">, + OpBuilderDAG<(ins "AffineMap":$map, "ValueRange":$operands)>, /// Builds an affine load op with an identity map and operands. - OpBuilder<"Value memref, ValueRange indices = {}">, + OpBuilderDAG<(ins "Value":$memref, CArg<"ValueRange", "{}">:$indices)>, /// Builds an affine load op with the specified map and its operands. - OpBuilder<"Value memref, AffineMap map, ValueRange mapOperands"> + OpBuilderDAG<(ins "Value":$memref, "AffineMap":$map, + "ValueRange":$mapOperands)> ]; let extraClassDeclaration = extraClassDeclarationBase; @@ -521,7 +525,7 @@ let results = (outs Index); let builders = [ - OpBuilder<"AffineMap affineMap, ValueRange mapOperands", + OpBuilderDAG<(ins "AffineMap":$affineMap, "ValueRange":$mapOperands), [{ build($_builder, $_state, $_builder.getIndexType(), affineMap, mapOperands); }]> @@ -646,18 +650,15 @@ let regions = (region SizedRegion<1>:$region); let builders = [ - OpBuilder<"TypeRange resultTypes, " - "ArrayRef reductions, " - "ArrayRef ranges">, - OpBuilder<"TypeRange resultTypes, " - "ArrayRef reductions, " - "AffineMap lbMap, ValueRange lbArgs, " - "AffineMap ubMap, ValueRange ubArgs">, - OpBuilder<"TypeRange resultTypes, " - "ArrayRef reductions, " - "AffineMap lbMap, ValueRange lbArgs, " - "AffineMap ubMap, ValueRange ubArgs, " - "ArrayRef steps"> + OpBuilderDAG<(ins "TypeRange":$resultTypes, + "ArrayRef":$reductions, "ArrayRef":$ranges)>, + OpBuilderDAG<(ins "TypeRange":$resultTypes, + "ArrayRef":$reductions, "AffineMap":$lbMap, + "ValueRange":$lbArgs, "AffineMap":$ubMap, "ValueRange":$ubArgs)>, + OpBuilderDAG<(ins "TypeRange":$resultTypes, + "ArrayRef":$reductions, "AffineMap":$lbMap, + "ValueRange":$lbArgs, "AffineMap":$ubMap, "ValueRange":$ubArgs, + "ArrayRef":$steps)> ]; let extraClassDeclaration = [{ @@ -722,9 +723,10 @@ IntMaxValue<3>]>:$localityHint, BoolAttr:$isDataCache); - let builders = [OpBuilder< - "Value memref, AffineMap map, ArrayRef mapOperands, bool isWrite," - "unsigned localityHint, bool isDataCache", + let builders = [ + OpBuilderDAG<(ins "Value":$memref, "AffineMap":$map, + "ArrayRef":$mapOperands, "bool":$isWrite, "unsigned":$localityHint, + "bool":$isDataCache), [{ assert(map.getNumInputs() == mapOperands.size() && "inconsistent index info"); @@ -830,9 +832,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"Value valueToStore, Value memref, ValueRange indices">, - OpBuilder<"Value valueToStore, Value memref, AffineMap map, " - "ValueRange mapOperands"> + OpBuilderDAG<(ins "Value":$valueToStore, "Value":$memref, + "ValueRange":$indices)>, + OpBuilderDAG<(ins "Value":$valueToStore, "Value":$memref, "AffineMap":$map, + "ValueRange":$mapOperands)> ]; let extraClassDeclaration = extraClassDeclarationBase; @@ -859,7 +862,7 @@ let arguments = (ins Variadic:$operands); let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + OpBuilderDAG<(ins), [{ build($_builder, $_state, llvm::None); }]> ]; let assemblyFormat = "attr-dict ($operands^ `:` type($operands))?"; diff --git a/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td b/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td --- a/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td +++ b/mlir/include/mlir/Dialect/Async/IR/AsyncOps.td @@ -118,7 +118,8 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"Value operand, ArrayRef attrs = {}">, + OpBuilderDAG<(ins "Value":$operand, + CArg<"ArrayRef", "{}">:$attrs)>, ]; let extraClassDeclaration = [{ diff --git a/mlir/include/mlir/Dialect/GPU/GPUOps.td b/mlir/include/mlir/Dialect/GPU/GPUOps.td --- a/mlir/include/mlir/Dialect/GPU/GPUOps.td +++ b/mlir/include/mlir/Dialect/GPU/GPUOps.td @@ -197,10 +197,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"StringRef name, " - "FunctionType type, TypeRange workgroupAttributions = {}, " - "TypeRange privateAttributions = {}, " - "ArrayRef attrs = {}"> + OpBuilderDAG<(ins "StringRef":$name, "FunctionType":$type, + CArg<"TypeRange", "{}">:$workgroupAttributions, + CArg<"TypeRange", "{}">:$privateAttributions, + CArg<"ArrayRef", "{}">:$attrs)> ]; let extraClassDeclaration = [{ @@ -363,9 +363,8 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"GPUFuncOp kernelFunc, " - "KernelDim3 gridSize, KernelDim3 blockSize, " - "ValueRange kernelOperands"> + OpBuilderDAG<(ins "GPUFuncOp":$kernelFunc, "KernelDim3":$gridSize, + "KernelDim3":$blockSize, "ValueRange":$kernelOperands)> ]; let extraClassDeclaration = [{ @@ -482,9 +481,9 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"Value gridSizeX," - "Value gridSizeY, Value gridSizeZ, Value blockSizeX," - "Value blockSizeY, Value blockSizeZ"> + OpBuilderDAG<(ins "Value":$gridSizeX, "Value":$gridSizeY, + "Value":$gridSizeZ, "Value":$blockSizeX, "Value":$blockSizeY, + "Value":$blockSizeZ)> ]; let extraClassDeclaration = [{ @@ -529,7 +528,7 @@ by an invocation of the `gpu.func`. }]; - let builders = [OpBuilder<"", " // empty">]; + let builders = [OpBuilderDAG<(ins), [{ // empty}]>]; let parser = [{ return parseReturnOp(parser, result); }]; let printer = [{ p << getOperationName(); }]; @@ -708,7 +707,7 @@ ``` }]; - let builders = [OpBuilder<"StringRef name">]; + let builders = [OpBuilderDAG<(ins "StringRef":$name)>]; let parser = [{ return ::parseGPUModuleOp(parser, result); }]; let printer = [{ return ::print(p, *this); }]; let regions = (region SizedRegion<1>:$body); diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -22,9 +22,9 @@ string llvmBuilder = builder; } -def LLVM_OneResultOpBuilder : OpBuilder< - "Type resultType, ValueRange operands, " - "ArrayRef attributes = {}", +def LLVM_OneResultOpBuilder : + OpBuilderDAG<(ins "Type":$resultType, "ValueRange":$operands, + CArg<"ArrayRef", "{}">:$attributes), [{ if (resultType) $_state.addTypes(resultType); $_state.addOperands(operands); @@ -33,8 +33,9 @@ } }]>; -def LLVM_ZeroResultOpBuilder : OpBuilder< - "ValueRange operands, ArrayRef attributes = {}", +def LLVM_ZeroResultOpBuilder : + OpBuilderDAG<(ins "ValueRange":$operands, + CArg<"ArrayRef", "{}">:$attributes), [{ $_state.addOperands(operands); for (auto namedAttr : attributes) { @@ -42,8 +43,8 @@ } }]>; -class LLVM_TwoBuilders { - list builders = [b1, b2]; +class LLVM_TwoBuilders { + list builders = [b1, b2]; } // Base class for LLVM operations with one result. @@ -54,8 +55,9 @@ // Compatibility builder that takes an instance of wrapped llvm::VoidType // to indicate no result. -def LLVM_VoidResultTypeOpBuilder : OpBuilder< - "Type resultType, ValueRange operands, ArrayRef attributes = {}", +def LLVM_VoidResultTypeOpBuilder : + OpBuilderDAG<(ins "Type":$resultType, "ValueRange":$operands, + CArg<"ArrayRef", "{}">:$attributes), [{ auto llvmType = resultType.dyn_cast(); (void)llvmType; assert(llvmType && "result must be an LLVM type"); @@ -70,9 +72,9 @@ LLVM_TwoBuilders; // Opaque builder used for terminator operations that contain successors. -def LLVM_TerminatorPassthroughOpBuilder : OpBuilder< - "ValueRange operands, SuccessorRange destinations, " - "ArrayRef attributes = {}", +def LLVM_TerminatorPassthroughOpBuilder : + OpBuilderDAG<(ins "ValueRange":$operands, "SuccessorRange":$destinations, + CArg<"ArrayRef", "{}">:$attributes), [{ $_state.addOperands(operands); $_state.addSuccessors(destinations); @@ -158,8 +160,9 @@ let llvmBuilder = [{ $res = builder.CreateICmp(getLLVMCmpPredicate($predicate), $lhs, $rhs); }]; - let builders = [OpBuilder< - "ICmpPredicate predicate, Value lhs, Value rhs", [{ + let builders = [ + OpBuilderDAG<(ins "ICmpPredicate":$predicate, "Value":$lhs, "Value":$rhs), + [{ build($_builder, $_state, LLVMType::getInt1Ty(lhs.getType().getContext()), $_builder.getI64IntegerAttr(static_cast(predicate)), lhs, rhs); }]>]; @@ -204,8 +207,9 @@ let llvmBuilder = [{ $res = builder.CreateFCmp(getLLVMCmpPredicate($predicate), $lhs, $rhs); }]; - let builders = [OpBuilder< - "FCmpPredicate predicate, Value lhs, Value rhs", [{ + let builders = [ + OpBuilderDAG<(ins "FCmpPredicate":$predicate, "Value":$lhs, "Value":$rhs), + [{ build($_builder, $_state, LLVMType::getInt1Ty(lhs.getType().getContext()), $_builder.getI64IntegerAttr(static_cast(predicate)), lhs, rhs); }]>]; @@ -259,8 +263,9 @@ }] # setAlignmentCode # [{ $res = inst; }]; - let builders = [OpBuilder< - "Type resultType, Value arraySize, unsigned alignment", + let builders = [ + OpBuilderDAG<(ins "Type":$resultType, "Value":$arraySize, + "unsigned":$alignment), [{ if (alignment == 0) return build($_builder, $_state, resultType, arraySize, IntegerAttr()); @@ -291,16 +296,16 @@ }] # setAlignmentCode # setNonTemporalMetadataCode # [{ $res = inst; }]; - let builders = [OpBuilder< - "Value addr, unsigned alignment = 0, bool isVolatile = false, " - "bool isNonTemporal = false", + let builders = [ + OpBuilderDAG<(ins "Value":$addr, CArg<"unsigned", "0">:$alignment, + CArg<"bool", "false">:$isVolatile, CArg<"bool", "false">:$isNonTemporal), [{ auto type = addr.getType().cast().getPointerElementTy(); build($_builder, $_state, type, addr, alignment, isVolatile, isNonTemporal); }]>, - OpBuilder< - "Type t, Value addr, unsigned alignment = 0, bool isVolatile = false, " - "bool isNonTemporal = false">]; + OpBuilderDAG<(ins "Type":$t, "Value":$addr, + CArg<"unsigned", "0">:$alignment, CArg<"bool", "false">:$isVolatile, + CArg<"bool", "false">:$isNonTemporal)>]; let parser = [{ return parseLoadOp(parser, result); }]; let printer = [{ printLoadOp(p, *this); }]; } @@ -314,9 +319,10 @@ string llvmBuilder = [{ auto *inst = builder.CreateStore($value, $addr, $volatile_); }] # setAlignmentCode # setNonTemporalMetadataCode; - let builders = [OpBuilder< - "Value value, Value addr, unsigned alignment = 0, bool isVolatile = false, " - "bool isNonTemporal = false"> + let builders = [ + OpBuilderDAG<(ins "Value":$value, "Value":$addr, + CArg<"unsigned", "0">:$alignment, CArg<"bool", "false">:$isVolatile, + CArg<"bool", "false">:$isNonTemporal)> ]; let parser = [{ return parseStoreOp(parser, result); }]; let printer = [{ printStoreOp(p, *this); }]; @@ -373,16 +379,16 @@ let successors = (successor AnySuccessor:$normalDest, AnySuccessor:$unwindDest); - let builders = [OpBuilder< - "TypeRange tys, FlatSymbolRefAttr callee, ValueRange ops, Block* normal, " - "ValueRange normalOps, Block* unwind, ValueRange unwindOps", + let builders = [ + OpBuilderDAG<(ins "TypeRange":$tys, "FlatSymbolRefAttr":$callee, + "ValueRange":$ops, "Block*":$normal, "ValueRange":$normalOps, + "Block*":$unwind, "ValueRange":$unwindOps), [{ $_state.addAttribute("callee", callee); build($_builder, $_state, tys, ops, normal, normalOps, unwind, unwindOps); }]>, - OpBuilder< - "TypeRange tys, ValueRange ops, Block* normal, " - "ValueRange normalOps, Block* unwind, ValueRange unwindOps", + OpBuilderDAG<(ins "TypeRange":$tys, "ValueRange":$ops, "Block*":$normal, + "ValueRange":$normalOps, "Block*":$unwind, "ValueRange":$unwindOps), [{ build($_builder, $_state, tys, /*callee=*/FlatSymbolRefAttr(), ops, normalOps, unwindOps, normal, unwind); @@ -403,9 +409,9 @@ Results<(outs Variadic)> { let arguments = (ins OptionalAttr:$callee, Variadic); - let builders = [OpBuilder< - "LLVMFuncOp func, ValueRange operands, " - "ArrayRef attributes = {}", + let builders = [ + OpBuilderDAG<(ins "LLVMFuncOp":$func, "ValueRange":$operands, + CArg<"ArrayRef", "{}">:$attributes), [{ LLVMType resultType = func.getType().getFunctionResultType(); if (!resultType.isVoidTy()) @@ -423,8 +429,9 @@ string llvmBuilder = [{ $res = builder.CreateExtractElement($vector, $position); }]; - let builders = [OpBuilder< - "Value vector, Value position, ArrayRef attrs = {}">]; + let builders = [ + OpBuilderDAG<(ins "Value":$vector, "Value":$position, + CArg<"ArrayRef", "{}">:$attrs)>]; let parser = [{ return parseExtractElementOp(parser, result); }]; let printer = [{ printExtractElementOp(p, *this); }]; } @@ -452,8 +459,8 @@ $res = builder.CreateInsertValue($container, $value, extractPosition($position)); }]; - let builders = [OpBuilder< - "Value container, Value value, ArrayAttr position", + let builders = [ + OpBuilderDAG<(ins "Value":$container, "Value":$value, "ArrayAttr":$position), [{ build($_builder, $_state, container.getType(), container, value, position); }]>]; @@ -467,8 +474,9 @@ SmallVector mask(position.begin(), position.end()); $res = builder.CreateShuffleVector($v1, $v2, mask); }]; - let builders = [OpBuilder< - "Value v1, Value v2, ArrayAttr mask, ArrayRef attrs = {}">]; + let builders = [ + OpBuilderDAG<(ins "Value":$v1, "Value":$v2, "ArrayAttr":$mask, + CArg<"ArrayRef", "{}">:$attrs)>]; let verifier = [{ auto wrappedVectorType1 = v1().getType().cast(); auto wrappedVectorType2 = v2().getType().cast(); @@ -491,8 +499,9 @@ "$res = builder.CreateSelect($condition, $trueValue, $falseValue);"> { let arguments = (ins LLVM_ScalarOrVectorOf:$condition, LLVM_Type:$trueValue, LLVM_Type:$falseValue); - let builders = [OpBuilder< - "Value condition, Value lhs, Value rhs", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$condition, "Value":$lhs, "Value":$rhs), + [{ build($_builder, $_state, lhs.getType(), condition, lhs, rhs); }]>]; let assemblyFormat = "operands attr-dict `:` type($condition) `,` type($res)"; @@ -528,10 +537,12 @@ attr-dict }]; - let builders = [OpBuilder< - "Value condition, Block *trueDest, ValueRange trueOperands," - "Block *falseDest, ValueRange falseOperands," - "Optional> weights = {}", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$condition, "Block *":$trueDest, + "ValueRange":$trueOperands, "Block *":$falseDest, + "ValueRange":$falseOperands, + CArg<"Optional>", "{}">:$weights), + [{ ElementsAttr weightsAttr; if (weights) { weightsAttr = @@ -540,9 +551,10 @@ } build($_builder, $_state, condition, trueOperands, falseOperands, weightsAttr, trueDest, falseDest); - }]>, OpBuilder< - "Value condition, Block *trueDest, Block *falseDest, " - "ValueRange falseOperands = {}", [{ + }]>, + OpBuilderDAG<(ins "Value":$condition, "Block *":$trueDest, + "Block *":$falseDest, CArg<"ValueRange", "{}">:$falseOperands), + [{ build($_builder, $_state, condition, trueDest, ValueRange(), falseDest, falseOperands); }]>, LLVM_TerminatorPassthroughOpBuilder]; @@ -633,20 +645,21 @@ let summary = "Creates a pointer pointing to a global or a function"; let builders = [ - OpBuilder<"LLVMType resType, " - "StringRef name, ArrayRef attrs = {}", [{ + OpBuilderDAG<(ins "LLVMType":$resType, "StringRef":$name, + CArg<"ArrayRef", "{}">:$attrs), + [{ $_state.addAttribute("global_name",$_builder.getSymbolRefAttr(name)); $_state.addAttributes(attrs); $_state.addTypes(resType);}]>, - - OpBuilder<"GlobalOp global, " - "ArrayRef attrs = {}", [{ + OpBuilderDAG<(ins "GlobalOp":$global, + CArg<"ArrayRef", "{}">:$attrs), + [{ build($_builder, $_state, global.getType().getPointerTo(global.addr_space()), global.sym_name(), attrs);}]>, - - OpBuilder<"LLVMFuncOp func, " - "ArrayRef attrs = {}", [{ + OpBuilderDAG<(ins "LLVMFuncOp":$func, + CArg<"ArrayRef", "{}">:$attrs), + [{ build($_builder, $_state, func.getType().getPointerTo(), func.getName(), attrs);}]> ]; @@ -694,10 +707,9 @@ let regions = (region AnyRegion:$initializer); let builders = [ - OpBuilder<"LLVMType type, " - "bool isConstant, Linkage linkage, StringRef name, " - "Attribute value, unsigned addrSpace = 0, " - "ArrayRef attrs = {}"> + OpBuilderDAG<(ins "LLVMType":$type, "bool":$isConstant, "Linkage":$linkage, + "StringRef":$name, "Attribute":$value, CArg<"unsigned", "0">:$addrSpace, + CArg<"ArrayRef", "{}">:$attrs)> ]; let extraClassDeclaration = [{ @@ -742,10 +754,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"StringRef name, " - "LLVMType type, Linkage linkage = Linkage::External, " - "ArrayRef attrs = {}, " - "ArrayRef argAttrs = {}"> + OpBuilderDAG<(ins "StringRef":$name, "LLVMType":$type, + CArg<"Linkage", "Linkage::External">:$linkage, + CArg<"ArrayRef", "{}">:$attrs, + CArg<"ArrayRef", "{}">:$argAttrs)> ]; let extraClassDeclaration = [{ diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td b/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td --- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td +++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td @@ -47,8 +47,8 @@ %3 = linalg.range %0:%1:%2 : !linalg.range ```` }]; - let builders = [OpBuilder< - "Value min, Value max, Value step", + let builders = [ + OpBuilderDAG<(ins "Value":$min, "Value":$max, "Value":$step), [{ auto rangeType = RangeType::get($_builder.getContext()); build($_builder, $_state, rangeType, min, max, step); @@ -64,12 +64,13 @@ let builders = [ // Builders for a contracting reshape whose result type is computed from // `src` and `reassociation`. - OpBuilder<"Value src, " - "ArrayRef reassociation, " - "ArrayRef attrs = {}">, - OpBuilder<"Value src, " - "ArrayRef reassociation, " - "ArrayRef attrs = {}", [{ + OpBuilderDAG<(ins "Value":$src, + "ArrayRef":$reassociation, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "Value":$src, + "ArrayRef":$reassociation, + CArg<"ArrayRef", "{}">:$attrs), + [{ auto reassociationMaps = convertReassociationIndicesToMaps($_builder, reassociation); build($_builder, $_state, src, reassociationMaps, attrs); @@ -77,12 +78,13 @@ // Builders for a reshape whose result type is passed explicitly. This may // be either a contracting or expanding reshape. - OpBuilder<"Type resultType, Value src, " - "ArrayRef reassociation, " - "ArrayRef attrs = {}">, - OpBuilder<"Type resultType, Value src, " - "ArrayRef reassociation, " - "ArrayRef attrs = {}", [{ + OpBuilderDAG<(ins "Type":$resultType, "Value":$src, + "ArrayRef":$reassociation, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "Type":$resultType, "Value":$src, + "ArrayRef":$reassociation, + CArg<"ArrayRef", "{}">:$attrs), + [{ auto reassociationMaps = convertReassociationIndicesToMaps($_builder, reassociation); build($_builder, $_state, resultType, src, reassociationMaps, attrs); @@ -258,7 +260,7 @@ ``` }]; - let builders = [OpBuilder<"Value base, ValueRange indexings">]; + let builders = [OpBuilderDAG<(ins "Value":$base, "ValueRange":$indexings)>]; let extraClassDeclaration = [{ enum { FirstIndexingOperand = 1 }; diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td b/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td --- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td +++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td @@ -128,11 +128,11 @@ // TODO: this should go away once the usage of OptionalAttr triggers emission // of builders with default arguments left unspecified. - let builders = [OpBuilder< - "Value input, Value output", [{ - return build( - $_builder, $_state, input, output, AffineMapAttr(), AffineMapAttr()); - }]>]; + let builders = [OpBuilderDAG<(ins "Value":$input, "Value":$output), + [{ + return build( + $_builder, $_state, input, output, AffineMapAttr(), AffineMapAttr()); + }]>]; let extraClassDeclaration = libraryCallName # [{ // Rank-polymorphic. @@ -662,27 +662,22 @@ }]; let builders = [ - OpBuilder< - "TypeRange resultTensorTypes," - "ValueRange inputs, ValueRange outputBuffers, ValueRange initTensors, " - "ArrayRef indexingMaps, ArrayRef iteratorTypes, " - "StringRef doc, StringRef libraryCall, IntegerAttr symbolSource, " - "function_ref = nullptr">, - OpBuilder< - "ValueRange inputs, ValueRange outputBuffers, " - "ArrayRef indexingMaps, ArrayRef iteratorTypes, " - "StringRef doc, StringRef libraryCall, IntegerAttr symbolSource, " - "function_ref = nullptr">, - OpBuilder< - "TypeRange resultTensorTypes," - "ValueRange inputs, ValueRange outputBuffers, ValueRange initTensors, " - "ArrayRef indexingMaps, ArrayRef iteratorTypes, " - "function_ref = nullptr">, - OpBuilder< - "ValueRange inputs, " - "ValueRange outputBuffers, ArrayRef indexingMaps, " - "ArrayRef iteratorTypes, " - "function_ref = nullptr"> + OpBuilderDAG<(ins "TypeRange":$resultTensorTypes, "ValueRange":$inputs, + "ValueRange":$outputBuffers, "ValueRange":$initTensors, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + "StringRef":$doc, "StringRef":$libraryCall, "IntegerAttr":$symbolSource, + CArg<"function_ref", "nullptr">)>, + OpBuilderDAG<(ins "ValueRange":$inputs, "ValueRange":$outputBuffers, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + "StringRef":$doc, "StringRef":$libraryCall, "IntegerAttr":$symbolSource, + CArg<"function_ref", "nullptr">)>, + OpBuilderDAG<(ins "TypeRange":$resultTensorTypes, "ValueRange":$inputs, + "ValueRange":$outputBuffers, "ValueRange":$initTensors, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + CArg<"function_ref", "nullptr">)>, + OpBuilderDAG<(ins "ValueRange":$inputs, "ValueRange":$outputBuffers, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + CArg<"function_ref", "nullptr">)> ]; let verifier = [{ return ::verify(*this); }]; @@ -840,27 +835,26 @@ }]; let builders = [ - OpBuilder< - "TypeRange resultTensorTypes," - "ValueRange inputs, ValueRange outputBuffers, ValueRange initTensors, " - "ArrayRef indexingMaps, ArrayRef iteratorTypes, " - "StringRef doc, StringRef libraryCall, IntegerAttr symbolSource, " - "function_ref = nullptr">, - OpBuilder< - "ValueRange inputs, ValueRange outputBuffers, " - "ArrayRef indexingMaps, ArrayRef iteratorTypes, " - "StringRef doc, StringRef libraryCall, IntegerAttr symbolSource, " - "function_ref = nullptr">, - OpBuilder< - "TypeRange resultTensorTypes," - "ValueRange inputs, ValueRange outputBuffers, ValueRange initTensors, " - "ArrayRef indexingMaps, ArrayRef iteratorTypes, " - "function_ref = nullptr">, - OpBuilder< - "ValueRange inputs, " - "ValueRange outputBuffers, ArrayRef indexingMaps, " - "ArrayRef iteratorTypes, " - "function_ref = nullptr"> + OpBuilderDAG<(ins "TypeRange":$resultTensorTypes, "ValueRange":$inputs, + "ValueRange":$outputBuffers, "ValueRange":$initTensors, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + "StringRef":$doc, "StringRef":$libraryCall, "IntegerAttr":$symbolSource, + CArg<"function_ref", + "nullptr">)>, + OpBuilderDAG<(ins "ValueRange":$inputs, "ValueRange":$outputBuffers, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + "StringRef":$doc, "StringRef":$libraryCall, "IntegerAttr":$symbolSource, + CArg<"function_ref", + "nullptr">)>, + OpBuilderDAG<(ins "TypeRange":$resultTensorTypes, "ValueRange":$inputs, + "ValueRange":$outputBuffers, "ValueRange":$initTensors, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + CArg<"function_ref", + "nullptr">)>, + OpBuilderDAG<(ins "ValueRange":$inputs, "ValueRange":$outputBuffers, + "ArrayRef":$indexingMaps, "ArrayRef":$iteratorTypes, + CArg<"function_ref", + "nullptr">)> ]; let verifier = [{ return ::verify(*this); }]; diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td --- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td +++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td @@ -390,9 +390,7 @@ let arguments = (ins Variadic:$operands); - let builders = [ - OpBuilder<"", [{ /* nothing to do */ }]> - ]; + let builders = [OpBuilderDAG<(ins), [{ /* nothing to do */ }]>]; let verifier = ?; diff --git a/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td b/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td --- a/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td +++ b/mlir/include/mlir/Dialect/PDL/IR/PDLOps.td @@ -59,8 +59,8 @@ }]; let builders = [ - OpBuilder<"StringRef name, " - "ValueRange args = {}, ArrayRef params = {}", [{ + OpBuilderDAG<(ins "StringRef":$name, CArg<"ValueRange", "{}">:$args, + CArg<"ArrayRef", "{}">:$params), [{ build($_builder, $_state, $_builder.getStringAttr(name), args, params.empty() ? ArrayAttr() : $_builder.getArrayAttr(params)); }]>, @@ -103,11 +103,11 @@ let assemblyFormat = "attr-dict (`:` $type^)? ($value^)?"; let builders = [ - OpBuilder<"Value type = Value()", [{ + OpBuilderDAG<(ins CArg<"Value", "Value()">:$type), [{ build($_builder, $_state, $_builder.getType(), type, Attribute()); }]>, - OpBuilder<"Attribute attr", [{ + OpBuilderDAG<(ins "Attribute":$attr), [{ build($_builder, $_state, $_builder.getType(), Value(), attr); }]>, ]; @@ -199,7 +199,7 @@ let assemblyFormat = "(`:` $type^)? attr-dict"; let builders = [ - OpBuilder<"", [{ + OpBuilderDAG<(ins), [{ build($_builder, $_state, $_builder.getType(), Value()); }]>, ]; @@ -253,11 +253,11 @@ let results = (outs PDL_Operation:$op, Variadic:$results); let builders = [ - OpBuilder<"Optional name = llvm::None, " - "ValueRange operandValues = llvm::None, " - "ArrayRef attrNames = llvm::None, " - "ValueRange attrValues = llvm::None, " - "ValueRange resultTypes = llvm::None", [{ + OpBuilderDAG<(ins CArg<"Optional", "llvm::None">:$name, + CArg<"ValueRange", "llvm::None">:$operandValues, + CArg<"ArrayRef", "llvm::None">:$attrNames, + CArg<"ValueRange", "llvm::None">:$attrValues, + CArg<"ValueRange", "llvm::None">:$resultTypes), [{ auto nameAttr = name ? StringAttr() : $_builder.getStringAttr(*name); build($_builder, $_state, $_builder.getType(), {}, nameAttr, operandValues, attrValues, $_builder.getStrArrayAttr(attrNames), @@ -311,9 +311,9 @@ }]; let builders = [ - OpBuilder<"Optional rootKind = llvm::None, " - "Optional benefit = 1, " - "Optional name = llvm::None">, + OpBuilderDAG<(ins CArg<"Optional", "llvm::None">:$rootKind, + CArg<"Optional", "1">:$benefit, + CArg<"Optional", "llvm::None">:$name)>, ]; let extraClassDeclaration = [{ //===------------------------------------------------------------------===// @@ -452,7 +452,7 @@ let assemblyFormat = "attr-dict (`:` $type^)?"; let builders = [ - OpBuilder<"Type ty = Type()", [{ + OpBuilderDAG<(ins CArg<"Type", "Type()">:$ty), [{ build($_builder, $_state, $_builder.getType(), ty ? TypeAttr::get(ty) : TypeAttr()); }]>, diff --git a/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td b/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td --- a/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td +++ b/mlir/include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td @@ -347,9 +347,9 @@ let assemblyFormat = "$value attr-dict"; let builders = [ - OpBuilder<"Attribute value", [{ - build($_builder, $_state, $_builder.getType(), value); - }]>]; + OpBuilderDAG<(ins "Attribute":$value), [{ + build($_builder, $_state, $_builder.getType(), value); + }]>]; } //===----------------------------------------------------------------------===// @@ -411,11 +411,12 @@ let results = (outs PDL_Operation:$operation); let builders = [ - OpBuilder<"StringRef name, ValueRange types, ValueRange operands, " - "ValueRange attributes, ArrayAttr attributeNames", [{ - build($_builder, $_state, $_builder.getType(), name, - operands, attributes, attributeNames, types); - }]>]; + OpBuilderDAG<(ins "StringRef":$name, "ValueRange":$types, + "ValueRange":$operands, "ValueRange":$attributes, + "ArrayAttr":$attributeNames), [{ + build($_builder, $_state, $_builder.getType(), name, + operands, attributes, attributeNames, types); + }]>]; let parser = [{ return ::parseCreateOperationOp(parser, result); }]; let printer = [{ ::print(p, *this); }]; } @@ -442,7 +443,7 @@ let assemblyFormat = "$value attr-dict"; let builders = [ - OpBuilder<"TypeAttr type", [{ + OpBuilderDAG<(ins "TypeAttr":$type), [{ build($_builder, $_state, $_builder.getType(), type); }]> ]; @@ -537,7 +538,7 @@ let assemblyFormat = "`of` $value attr-dict"; let builders = [ - OpBuilder<"Value value", [{ + OpBuilderDAG<(ins "Value":$value), [{ build($_builder, $_state, $_builder.getType(), value); }]> ]; @@ -638,7 +639,7 @@ let assemblyFormat = "`of` $value attr-dict"; let builders = [ - OpBuilder<"Value value", [{ + OpBuilderDAG<(ins "Value":$value), [{ build($_builder, $_state, $_builder.getType(), value); }]> ]; @@ -665,7 +666,7 @@ let assemblyFormat = "attr-dict"; let builders = [ - OpBuilder<"", [{ + OpBuilderDAG<(ins), [{ build($_builder, $_state, $_builder.getType()); }]>, ]; @@ -780,8 +781,8 @@ }]; let builders = [ - OpBuilder<"Value attribute, ArrayRef caseValues," - "Block *defaultDest, BlockRange dests", [{ + OpBuilderDAG<(ins "Value":$attribute, "ArrayRef":$caseValues, + "Block *":$defaultDest, "BlockRange":$dests), [{ build($_builder, $_state, attribute, $_builder.getArrayAttr(caseValues), defaultDest, dests); }]>]; @@ -813,8 +814,8 @@ }]; let builders = [ - OpBuilder<"Value operation, ArrayRef counts, " - "Block *defaultDest, BlockRange dests", [{ + OpBuilderDAG<(ins "Value":$operation, "ArrayRef":$counts, + "Block *":$defaultDest, "BlockRange":$dests), [{ build($_builder, $_state, operation, $_builder.getI32VectorAttr(counts), defaultDest, dests); }]>]; @@ -847,8 +848,8 @@ }]; let builders = [ - OpBuilder<"Value operation, ArrayRef names, " - "Block *defaultDest, BlockRange dests", [{ + OpBuilderDAG<(ins "Value":$operation, "ArrayRef":$names, + "Block *":$defaultDest, "BlockRange":$dests), [{ auto stringNames = llvm::to_vector<8>(llvm::map_range(names, [](OperationName name) { return name.getStringRef(); })); build($_builder, $_state, operation, $_builder.getStrArrayAttr(stringNames), @@ -883,8 +884,8 @@ }]; let builders = [ - OpBuilder<"Value operation, ArrayRef counts, Block *defaultDest, " - "BlockRange dests", [{ + OpBuilderDAG<(ins "Value":$operation, "ArrayRef":$counts, + "Block *":$defaultDest, "BlockRange":$dests), [{ build($_builder, $_state, operation, $_builder.getI32VectorAttr(counts), defaultDest, dests); }]>]; @@ -915,8 +916,8 @@ }]; let builders = [ - OpBuilder<"Value edge, TypeRange types, Block *defaultDest, " - "BlockRange dests", [{ + OpBuilderDAG<(ins "Value":$edge, "TypeRange":$types, "Block *":$defaultDest, + "BlockRange":$dests), [{ build($_builder, $_state, edge, $_builder.getTypeArrayAttr(types), defaultDest, dests); }]>, diff --git a/mlir/include/mlir/Dialect/SCF/SCFOps.td b/mlir/include/mlir/Dialect/SCF/SCFOps.td --- a/mlir/include/mlir/Dialect/SCF/SCFOps.td +++ b/mlir/include/mlir/Dialect/SCF/SCFOps.td @@ -135,10 +135,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"Value lowerBound, Value upperBound, Value step, " - "ValueRange iterArgs = llvm::None, " - "function_ref" - " = nullptr"> + OpBuilderDAG<(ins "Value":$lowerBound, "Value":$upperBound, "Value":$step, + CArg<"ValueRange", "llvm::None">:$iterArgs, + CArg<"function_ref", + "nullptr">)> ]; let extraClassDeclaration = [{ @@ -235,18 +235,19 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"Value cond, bool withElseRegion">, - OpBuilder<"TypeRange resultTypes, Value cond, bool withElseRegion">, - OpBuilder< - "TypeRange resultTypes, Value cond, " - "function_ref thenBuilder " - " = buildTerminatedBody, " - "function_ref elseBuilder = nullptr">, - OpBuilder< - "Value cond, " - "function_ref thenBuilder " - " = buildTerminatedBody, " - "function_ref elseBuilder = nullptr"> + OpBuilderDAG<(ins "Value":$cond, "bool":$withElseRegion)>, + OpBuilderDAG<(ins "TypeRange":$resultTypes, "Value":$cond, + "bool":$withElseRegion)>, + OpBuilderDAG<(ins "TypeRange":$resultTypes, "Value":$cond, + CArg<"function_ref", + "buildTerminatedBody">:$thenBuilder, + CArg<"function_ref", + "nullptr">:$elseBuilder)>, + OpBuilderDAG<(ins "Value":$cond, + CArg<"function_ref", + "buildTerminatedBody">:$thenBuilder, + CArg<"function_ref", + "nullptr">:$elseBuilder)> ]; let extraClassDeclaration = [{ @@ -325,15 +326,14 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"ValueRange lowerBounds, ValueRange upperBounds, " - "ValueRange steps, ValueRange initVals, " - "function_ref" - " bodyBuilderFn = nullptr">, - OpBuilder<"ValueRange lowerBounds, ValueRange upperBounds, " - "ValueRange steps, " - "function_ref" - " bodyBuilderFn = nullptr">, + OpBuilderDAG<(ins "ValueRange":$lowerBounds, "ValueRange":$upperBounds, + "ValueRange":$steps, "ValueRange":$initVals, + CArg<"function_ref", + "nullptr">:$bodyBuilderFn)>, + OpBuilderDAG<(ins "ValueRange":$lowerBounds, "ValueRange":$upperBounds, + "ValueRange":$steps, + CArg<"function_ref", + "nullptr">:$bodyBuilderFn)>, ]; let extraClassDeclaration = [{ @@ -386,9 +386,9 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"Value operand, " - "function_ref" - " bodyBuilderFn = nullptr"> + OpBuilderDAG<(ins "Value":$operand, + CArg<"function_ref", + "nullptr">:$bodyBuilderFn)> ]; let arguments = (ins AnyType:$operand); @@ -429,9 +429,7 @@ }]; let arguments = (ins Variadic:$results); - let builders = [ - OpBuilder<"", [{ /* nothing to do */ }]> - ]; + let builders = [OpBuilderDAG<(ins), [{ /* nothing to do */ }]>]; // Override default verifier (defined in SCF_Op), no custom verification // needed. let verifier = ?; diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVAtomicOps.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVAtomicOps.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVAtomicOps.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVAtomicOps.td @@ -49,11 +49,9 @@ ); let builders = [ - OpBuilder< - [{Value pointer, ::mlir::spirv::Scope scope, - ::mlir::spirv::MemorySemantics memory, Value value}], - [{build($_builder, $_state, value.getType(), pointer, scope, memory, value);}] - > + OpBuilderDAG<(ins "Value":$pointer, "::mlir::spirv::Scope":$scope, + "::mlir::spirv::MemorySemantics":$memory, "Value":$value), + [{build($_builder, $_state, value.getType(), pointer, scope, memory, value);}]> ]; } diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVCompositeOps.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVCompositeOps.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVCompositeOps.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVCompositeOps.td @@ -111,7 +111,7 @@ ); let builders = [ - OpBuilder<[{Value composite, ArrayRef indices}]> + OpBuilderDAG<(ins "Value":$composite, "ArrayRef":$indices)> ]; let hasFolder = 1; @@ -163,7 +163,8 @@ ); let builders = [ - OpBuilder<[{Value object, Value composite, ArrayRef indices}]> + OpBuilderDAG<(ins "Value":$object, "Value":$composite, + "ArrayRef":$indices)> ]; } diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVControlFlowOps.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVControlFlowOps.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVControlFlowOps.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVControlFlowOps.td @@ -54,12 +54,11 @@ let verifier = [{ return success(); }]; let builders = [ - OpBuilder< - "Block *successor, ValueRange arguments = {}", [{ - $_state.addSuccessors(successor); - $_state.addOperands(arguments); - }] - > + OpBuilderDAG<(ins "Block *":$successor, CArg<"ValueRange", "{}">:$arguments), + [{ + $_state.addSuccessors(successor); + $_state.addOperands(arguments); + }]> ]; let skipDefaultBuilders = 1; @@ -135,22 +134,20 @@ AnySuccessor:$falseTarget); let builders = [ - OpBuilder< - "Value condition, " - "Block *trueBlock, ValueRange trueArguments, " - "Block *falseBlock, ValueRange falseArguments, " - "Optional> weights = {}", - [{ - ArrayAttr weightsAttr; - if (weights) { - weightsAttr = - $_builder.getI32ArrayAttr({static_cast(weights->first), - static_cast(weights->second)}); - } - build($_builder, $_state, condition, trueArguments, falseArguments, - weightsAttr, trueBlock, falseBlock); - }] - > + OpBuilderDAG<(ins "Value":$condition, "Block *":$trueBlock, + "ValueRange":$trueArguments, "Block *":$falseBlock, + "ValueRange":$falseArguments, + CArg<"Optional>", "{}">:$weights), + [{ + ArrayAttr weightsAttr; + if (weights) { + weightsAttr = + $_builder.getI32ArrayAttr({static_cast(weights->first), + static_cast(weights->second)}); + } + build($_builder, $_state, condition, trueArguments, falseArguments, + weightsAttr, trueBlock, falseBlock); + }]> ]; let autogenSerialization = 0; @@ -289,7 +286,7 @@ let regions = (region AnyRegion:$body); - let builders = [OpBuilder<"">]; + let builders = [OpBuilderDAG<(ins)>]; let extraClassDeclaration = [{ // Returns the entry block. diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVLogicalOps.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVLogicalOps.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVLogicalOps.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVLogicalOps.td @@ -28,9 +28,8 @@ let printer = [{ return ::printLogicalOp(getOperation(), p); }]; let builders = [ - OpBuilder< - "Value lhs, Value rhs", - "::buildLogicalBinaryOp($_builder, $_state, lhs, rhs);"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs), + [{::buildLogicalBinaryOp($_builder, $_state, lhs, rhs);}]> ]; } @@ -860,8 +859,8 @@ SPV_SelectType:$result ); - let builders = [OpBuilder<[{Value cond, Value trueValue, - Value falseValue}]>]; + let builders = [ + OpBuilderDAG<(ins "Value":$cond, "Value":$trueValue, "Value":$falseValue)>]; let assemblyFormat = [{ operands attr-dict `:` type($condition) `,` type($result) diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVNonUniformOps.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVNonUniformOps.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVNonUniformOps.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVNonUniformOps.td @@ -217,9 +217,7 @@ SPV_Bool:$result ); - let builders = [ - OpBuilder<[{spirv::Scope}]> - ]; + let builders = [OpBuilderDAG<(ins "spirv::Scope")>]; let assemblyFormat = "$execution_scope attr-dict `:` type($result)"; } diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVOps.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVOps.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVOps.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVOps.td @@ -96,7 +96,7 @@ SPV_AnyPtr:$component_ptr ); - let builders = [OpBuilder<[{Value basePtr, ValueRange indices}]>]; + let builders = [OpBuilderDAG<(ins "Value":$basePtr, "ValueRange":$indices)>]; let hasCanonicalizer = 1; } @@ -272,9 +272,9 @@ let autogenSerialization = 0; - let builders = [OpBuilder<[{spirv::FuncOp function, - spirv::ExecutionMode executionMode, - ArrayRef params}]>]; + let builders = [ + OpBuilderDAG<(ins "spirv::FuncOp":$function, + "spirv::ExecutionMode":$executionMode, "ArrayRef":$params)>]; } // ----- @@ -325,10 +325,9 @@ ); let builders = [ - OpBuilder<[{ - Value basePtr, IntegerAttr memory_access = {}, - IntegerAttr alignment = {} - }]> + OpBuilderDAG<(ins "Value":$basePtr, + CArg<"IntegerAttr", "{}">:$memory_access, + CArg<"IntegerAttr", "{}">:$alignment)> ]; } @@ -427,8 +426,9 @@ let results = (outs); let builders = [ - OpBuilder< - "Value ptr, Value value, ArrayRef namedAttrs = {}", [{ + OpBuilderDAG<(ins "Value":$ptr, "Value":$value, + CArg<"ArrayRef", "{}">:$namedAttrs), + [{ $_state.addOperands(ptr); $_state.addOperands(value); $_state.addAttributes(namedAttrs); diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVStructureOps.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVStructureOps.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVStructureOps.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVStructureOps.td @@ -60,7 +60,7 @@ let autogenSerialization = 0; - let builders = [OpBuilder<[{spirv::GlobalVariableOp var}]>]; + let builders = [OpBuilderDAG<(ins "spirv::GlobalVariableOp":$var)>]; let assemblyFormat = "$variable attr-dict `:` type($pointer)"; } @@ -188,9 +188,9 @@ let autogenSerialization = 0; - let builders = [OpBuilder<[{spirv::ExecutionModel executionModel, - spirv::FuncOp function, - ArrayRef interfaceVars}]>]; + let builders = [ + OpBuilderDAG<(ins "spirv::ExecutionModel":$executionModel, + "spirv::FuncOp":$function, "ArrayRef":$interfaceVars)>]; } // ----- @@ -241,11 +241,10 @@ let verifier = [{ return success(); }]; - let builders = [OpBuilder<[{ - StringRef name, FunctionType type, - spirv::FunctionControl control = spirv::FunctionControl::None, - ArrayRef attrs = {} - }]>]; + let builders = [ + OpBuilderDAG<(ins "StringRef":$name, "FunctionType":$type, + CArg<"spirv::FunctionControl", "spirv::FunctionControl::None">:$control, + CArg<"ArrayRef", "{}">:$attrs)>]; let hasOpcode = 0; @@ -330,14 +329,15 @@ let results = (outs); let builders = [ - OpBuilder< - "TypeAttr type, ArrayRef namedAttrs", [{ + OpBuilderDAG<(ins "TypeAttr":$type, "ArrayRef":$namedAttrs), + [{ $_state.addAttribute("type", type); $_state.addAttributes(namedAttrs); }]>, - OpBuilder<[{Type type, StringRef name, unsigned descriptorSet, - unsigned binding}]>, - OpBuilder<[{Type type, StringRef name, spirv::BuiltIn builtin}]> + OpBuilderDAG<(ins "Type":$type, "StringRef":$name, + "unsigned":$descriptorSet, "unsigned":$binding)>, + OpBuilderDAG<(ins "Type":$type, "StringRef":$name, + "spirv::BuiltIn":$builtin)> ]; let hasOpcode = 0; @@ -413,10 +413,10 @@ let regions = (region SizedRegion<1>:$body); let builders = [ - OpBuilder<[{Optional name = llvm::None}]>, - OpBuilder<[{spirv::AddressingModel addressing_model, - spirv::MemoryModel memory_model, - Optional name = llvm::None}]> + OpBuilderDAG<(ins CArg<"Optional", "llvm::None">:$name)>, + OpBuilderDAG<(ins "spirv::AddressingModel":$addressing_model, + "spirv::MemoryModel":$memory_model, + CArg<"Optional", "llvm::None">:$name)> ]; // We need to ensure the block inside the region is properly terminated; diff --git a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td --- a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td +++ b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td @@ -123,9 +123,7 @@ let arguments = (ins IndexAttr:$value); let results = (outs Shape_SizeType:$result); - let builders = [ - OpBuilder<"int64_t value"> - ]; + let builders = [OpBuilderDAG<(ins "int64_t":$value)>]; let assemblyFormat = "$value attr-dict"; let hasFolder = 1; @@ -231,8 +229,7 @@ let builders = [ // Builder that allows passing a constant dimension as a simple integer. - OpBuilder<"Value shape, " - "int64_t dim"> + OpBuilderDAG<(ins "Value":$shape, "int64_t":$dim)> ]; let extraClassDeclaration = [{ @@ -331,9 +328,7 @@ let arguments = (ins Shape_ShapeOrExtentTensorType:$shape); let results = (outs Shape_SizeOrIndexType:$result); - let builders = [ - OpBuilder<"Value shape">, - ]; + let builders = [OpBuilderDAG<(ins "Value":$shape)>]; let assemblyFormat = "$shape `:` type($shape) `->` type($result) attr-dict"; @@ -382,9 +377,7 @@ let results = (outs Variadic:$result); let regions = (region SizedRegion<1>:$region); - let builders = [ - OpBuilder<"Value shape, ValueRange initVals">, - ]; + let builders = [OpBuilderDAG<(ins "Value":$shape, "ValueRange":$initVals)>]; let verifier = [{ return ::verify(*this); }]; let printer = [{ return ::print(p, *this); }]; @@ -404,9 +397,7 @@ let assemblyFormat = "$arg `:` type($arg) `->` type($result) attr-dict"; - let builders = [ - OpBuilder<"Value arg"> - ]; + let builders = [OpBuilderDAG<(ins "Value":$arg)>]; let verifier = [{ return ::verifyShapeOrExtentTensorOp(*this); }]; let hasCanonicalizer = 1; @@ -483,8 +474,8 @@ let arguments = (ins Variadic:$operands); - let builders = [ - OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]> + let builders = [OpBuilderDAG<(ins), + [{ build($_builder, $_state, llvm::None); }]> ]; let verifier = [{ return ::verify(*this); }]; @@ -660,9 +651,7 @@ let arguments = (ins Variadic:$operands); - let builders = [ - OpBuilder<"", [{ /* nothing to do */ }]> - ]; + let builders = [OpBuilderDAG<(ins), [{ /* nothing to do */ }]>]; let assemblyFormat = "attr-dict ($operands^ `:` type($operands))?"; } diff --git a/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td b/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td --- a/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td +++ b/mlir/include/mlir/Dialect/StandardOps/IR/Ops.td @@ -50,10 +50,11 @@ let results = (outs AnyType); - let builders = [OpBuilder< - "Value source, Type destType", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$source, "Type":$destType), [{ impl::buildCastOp($_builder, $_state, source, destType); - }]>]; + }]> + ]; let parser = [{ return impl::parseCastOp(parser, result); @@ -162,18 +163,17 @@ Confined, [IntMinValue<0>]>:$alignment); let results = (outs Res]>); - let builders = [OpBuilder< - "MemRefType memrefType", [{ - $_state.types.push_back(memrefType); - }]>, - OpBuilder< - "MemRefType memrefType, ValueRange operands, " - "IntegerAttr alignment = IntegerAttr()", [{ - $_state.addOperands(operands); - $_state.types.push_back(memrefType); - if (alignment) - $_state.addAttribute(getAlignmentAttrName(), alignment); - }]>]; + let builders = [ + OpBuilderDAG<(ins "MemRefType":$memrefType), [{ + $_state.types.push_back(memrefType); + }]>, + OpBuilderDAG<(ins "MemRefType":$memrefType, "ValueRange":$operands, + CArg<"IntegerAttr", "IntegerAttr()">:$alignment), [{ + $_state.addOperands(operands); + $_state.types.push_back(memrefType); + if (alignment) + $_state.addAttribute(getAlignmentAttrName(), alignment); + }]>]; let extraClassDeclaration = [{ static StringRef getAlignmentAttrName() { return "alignment"; } @@ -847,9 +847,7 @@ let regions = (region AnyRegion:$body); let skipDefaultBuilders = 1; - let builders = [ - OpBuilder<"Value memref, ValueRange ivs"> - ]; + let builders = [OpBuilderDAG<(ins "Value":$memref, "ValueRange":$ivs)>]; let extraClassDeclaration = [{ // The value stored in memref[ivs]. @@ -903,10 +901,12 @@ let arguments = (ins Variadic:$destOperands); let successors = (successor AnySuccessor:$dest); - let builders = [OpBuilder<"Block *dest, ValueRange destOperands = {}", [{ - $_state.addSuccessors(dest); - $_state.addOperands(destOperands); - }]>]; + let builders = [ + OpBuilderDAG<(ins "Block *":$dest, + CArg<"ValueRange", "{}">:$destOperands), [{ + $_state.addSuccessors(dest); + $_state.addOperands(destOperands); + }]>]; // BranchOp is fully verified by traits. let verifier = ?; @@ -949,21 +949,23 @@ let arguments = (ins FlatSymbolRefAttr:$callee, Variadic:$operands); let results = (outs Variadic); - let builders = [OpBuilder< - "FuncOp callee, ValueRange operands = {}", [{ + let builders = [ + OpBuilderDAG<(ins "FuncOp":$callee, CArg<"ValueRange", "{}">:$operands), [{ $_state.addOperands(operands); $_state.addAttribute("callee",$_builder.getSymbolRefAttr(callee)); $_state.addTypes(callee.getType().getResults()); - }]>, OpBuilder< - "SymbolRefAttr callee, TypeRange results, ValueRange operands = {}", [{ + }]>, + OpBuilderDAG<(ins "SymbolRefAttr":$callee, "TypeRange":$results, + CArg<"ValueRange", "{}">:$operands), [{ $_state.addOperands(operands); $_state.addAttribute("callee", callee); $_state.addTypes(results); - }]>, OpBuilder< - "StringRef callee, TypeRange results, ValueRange operands = {}", [{ + }]>, + OpBuilderDAG<(ins "StringRef":$callee, "TypeRange":$results, + CArg<"ValueRange", "{}">:$operands), [{ build($_builder, $_state, $_builder.getSymbolRefAttr(callee), results, operands); - }]>]; + }]>]; let extraClassDeclaration = [{ StringRef getCallee() { return callee(); } @@ -1023,12 +1025,12 @@ let arguments = (ins FunctionType:$callee, Variadic:$operands); let results = (outs Variadic:$results); - let builders = [OpBuilder< - "Value callee, ValueRange operands = {}", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$callee, CArg<"ValueRange", "{}">:$operands), [{ $_state.operands.push_back(callee); $_state.addOperands(operands); $_state.addTypes(callee.getType().cast().getResults()); - }]>]; + }]>]; let extraClassDeclaration = [{ Value getCallee() { return getOperand(0); } @@ -1188,10 +1190,11 @@ ); let results = (outs BoolLike:$result); - let builders = [OpBuilder< - "CmpFPredicate predicate, Value lhs, Value rhs", [{ + let builders = [ + OpBuilderDAG<(ins "CmpFPredicate":$predicate, "Value":$lhs, + "Value":$rhs), [{ ::buildCmpFOp($_builder, $_state, predicate, lhs, rhs); - }]>]; + }]>]; let extraClassDeclaration = [{ static StringRef getPredicateAttrName() { return "predicate"; } @@ -1309,10 +1312,11 @@ ); let results = (outs BoolLike:$result); - let builders = [OpBuilder< - "CmpIPredicate predicate, Value lhs, Value rhs", [{ + let builders = [ + OpBuilderDAG<(ins "CmpIPredicate":$predicate, "Value":$lhs, + "Value":$rhs), [{ ::buildCmpIOp($_builder, $_state, predicate, lhs, rhs); - }]>]; + }]>]; let extraClassDeclaration = [{ static StringRef getPredicateAttrName() { return "predicate"; } @@ -1406,17 +1410,18 @@ Variadic:$falseDestOperands); let successors = (successor AnySuccessor:$trueDest, AnySuccessor:$falseDest); - let builders = [OpBuilder< - "Value condition, Block *trueDest, ValueRange trueOperands," - "Block *falseDest, ValueRange falseOperands", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$condition, "Block *":$trueDest, + "ValueRange":$trueOperands, "Block *":$falseDest, + "ValueRange":$falseOperands), [{ build($_builder, $_state, condition, trueOperands, falseOperands, trueDest, falseDest); - }]>, OpBuilder< - "Value condition, Block *trueDest, Block *falseDest, " - "ValueRange falseOperands = {}", [{ + }]>, + OpBuilderDAG<(ins "Value":$condition, "Block *":$trueDest, + "Block *":$falseDest, CArg<"ValueRange", "{}">:$falseOperands), [{ build($_builder, $_state, condition, trueDest, ValueRange(), falseDest, falseOperands); - }]>]; + }]>]; // CondBranchOp is fully verified by traits. let verifier = ?; @@ -1539,7 +1544,8 @@ let arguments = (ins AnyAttr:$value); let results = (outs AnyType); - let builders = [OpBuilder<"Attribute value", + let builders = [ + OpBuilderDAG<(ins "Attribute":$value), [{ build($_builder, $_state, value.getType(), value); }]>]; let extraClassDeclaration = [{ @@ -1722,8 +1728,8 @@ }]; let builders = [ - OpBuilder<"Value memrefOrTensor, int64_t index">, - OpBuilder<"Value memrefOrTensor, Value index"> + OpBuilderDAG<(ins "Value":$memrefOrTensor, "int64_t":$index)>, + OpBuilderDAG<(ins "Value":$memrefOrTensor, "Value":$index)> ]; let extraClassDeclaration = [{ @@ -1776,8 +1782,8 @@ let builders = [ // Build op and populate its body per callback function. - OpBuilder<"Type resultTy, ValueRange dynamicExtents, " - "function_ref">, + OpBuilderDAG<(ins "Type":$resultTy, "ValueRange":$dynamicExtents, + "function_ref")>, ]; let hasCanonicalizer = 1; @@ -1854,8 +1860,8 @@ Variadic:$indices); let results = (outs AnyType:$result); - let builders = [OpBuilder< - "Value aggregate, ValueRange indices = {}", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$aggregate, CArg<"ValueRange", "{}">:$indices), [{ auto resType = aggregate.getType().cast() .getElementType(); build($_builder, $_state, resType, aggregate, indices); @@ -1908,9 +1914,9 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"Type elementType, ValueRange elements">, + OpBuilderDAG<(ins "Type":$elementType, "ValueRange":$elements)>, // Special case builder for when `elements` has size >=1. - OpBuilder<"ValueRange elements"> + OpBuilderDAG<(ins "ValueRange":$elements)> ]; let hasCanonicalizer = 1; @@ -2102,13 +2108,13 @@ Variadic:$indices); let results = (outs AnyType:$result); - let builders = [OpBuilder< - "Value memref, ValueRange indices = {}", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$memref, CArg<"ValueRange", "{}">:$indices), [{ auto memrefType = memref.getType().cast(); $_state.addOperands(memref); $_state.addOperands(indices); $_state.types.push_back(memrefType.getElementType()); - }]>]; + }]>]; let extraClassDeclaration = [{ Value getMemRef() { return getOperand(0); } @@ -2310,8 +2316,8 @@ ); let results = (outs AnyRankedOrUnrankedMemRef:$result); - let builders = [OpBuilder< - "MemRefType resultType, Value operand, Value shape", [{ + let builders = [OpBuilderDAG< + (ins "MemRefType":$resultType, "Value":$operand, "Value":$shape), [{ $_state.addOperands(operand); $_state.addOperands(shape); $_state.addTypes(resultType); @@ -2503,8 +2509,8 @@ let results = (outs Index); let verifier = ?; - let builders = [OpBuilder< - "Value tensor", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$tensor), [{ auto indexType = $_builder.getIndexType(); build($_builder, $_state, indexType, tensor); }]>]; @@ -2576,7 +2582,9 @@ let arguments = (ins Variadic:$operands); - let builders = [OpBuilder<"", [{ build($_builder, $_state, llvm::None); }]>]; + let builders = [ + OpBuilderDAG<(ins), + [{ build($_builder, $_state, llvm::None); }]>]; let assemblyFormat = "attr-dict ($operands^ `:` type($operands))?"; } @@ -2639,11 +2647,12 @@ AnyType:$false_value); let results = (outs AnyType:$result); - let builders = [OpBuilder< - "Value condition, Value trueValue, Value falseValue", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$condition, "Value":$trueValue, + "Value":$falseValue), [{ $_state.addOperands({condition, trueValue, falseValue}); $_state.addTypes(trueValue.getType()); - }]>]; + }]>]; let extraClassDeclaration = [{ Value getCondition() { return condition(); } @@ -2797,10 +2806,11 @@ let arguments = (ins SignlessIntegerLike:$value); let results = (outs SignlessIntegerLike); - let builders = [OpBuilder<"Value value, Type destType", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$value, "Type":$destType), [{ $_state.addOperands(value); $_state.addTypes(destType); - }]>]; + }]>]; let parser = [{ return impl::parseCastOp(parser, result); @@ -2870,9 +2880,9 @@ "integer or float type">:$input); let results = (outs AnyTypeOf<[AnyVector, AnyStaticShapeTensor]>:$aggregate); - let builders = - [OpBuilder<"Value element, Type aggregateType", - [{ build($_builder, $_state, aggregateType, element); }]>]; + let builders = [ + OpBuilderDAG<(ins "Value":$element, "Type":$aggregateType), + [{ build($_builder, $_state, aggregateType, element); }]>]; let hasFolder = 1; @@ -2948,11 +2958,11 @@ [MemWrite]>:$memref, Variadic:$indices); - let builders = [OpBuilder< - "Value valueToStore, Value memref", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$valueToStore, "Value":$memref), [{ $_state.addOperands(valueToStore); $_state.addOperands(memref); - }]>]; + }]>]; let extraClassDeclaration = [{ Value getValueToStore() { return getOperand(0); } @@ -3160,27 +3170,25 @@ let builders = [ // Build a SubViewOp with mixed static and dynamic entries. - OpBuilder< - "Value source, ArrayRef staticOffsets, " - "ArrayRef staticSizes, ArrayRef staticStrides, " - "ValueRange offsets, ValueRange sizes, ValueRange strides, " - "ArrayRef attrs = {}">, + OpBuilderDAG<(ins "Value":$source, "ArrayRef":$staticOffsets, + "ArrayRef":$staticSizes, "ArrayRef":$staticStrides, + "ValueRange":$offsets, "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)>, // Build a SubViewOp with all dynamic entries. - OpBuilder< - "Value source, ValueRange offsets, ValueRange sizes, ValueRange strides, " - "ArrayRef attrs = {}">, + OpBuilderDAG<(ins "Value":$source, "ValueRange":$offsets, + "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)>, // Build a SubViewOp with mixed static and dynamic entries // and custom result type. - OpBuilder< - "MemRefType resultType, Value source, ArrayRef staticOffsets, " - "ArrayRef staticSizes, ArrayRef staticStrides, " - "ValueRange offsets, ValueRange sizes, " - "ValueRange strides, ArrayRef attrs = {}">, + OpBuilderDAG<(ins "MemRefType":$resultType, "Value":$source, + "ArrayRef":$staticOffsets, "ArrayRef":$staticSizes, + "ArrayRef":$staticStrides, "ValueRange":$offsets, + "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)>, // Build a SubViewOp with all dynamic entries and custom result type. - OpBuilder< - "MemRefType resultType, Value source, ValueRange offsets, " - "ValueRange sizes, ValueRange strides, " - "ArrayRef attrs = {}"> + OpBuilderDAG<(ins "MemRefType":$resultType, "Value":$source, + "ValueRange":$offsets, "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)> ]; let extraClassDeclaration = extraBaseClassDeclaration # [{ @@ -3262,15 +3270,14 @@ let builders = [ // Build a SubViewOp with mixed static and dynamic entries. - OpBuilder< - "Value source, ArrayRef staticOffsets, " - "ArrayRef staticSizes, ArrayRef staticStrides, " - "ValueRange offsets, ValueRange sizes, ValueRange strides, " - "ArrayRef attrs = {}">, + OpBuilderDAG<(ins "Value":$source, "ArrayRef":$staticOffsets, + "ArrayRef":$staticSizes, "ArrayRef":$staticStrides, + "ValueRange":$offsets, "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)>, // Build a SubViewOp with all dynamic entries. - OpBuilder< - "Value source, ValueRange offsets, ValueRange sizes, ValueRange strides, " - "ArrayRef attrs = {}"> + OpBuilderDAG<(ins "Value":$source, "ValueRange":$offsets, + "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)> ]; let extraClassDeclaration = extraBaseClassDeclaration # [{ @@ -3346,15 +3353,15 @@ let builders = [ // Build a SubViewOp with mixed static and dynamic entries. - OpBuilder< - "Value source, Value dest, ArrayRef staticOffsets, " - "ArrayRef staticSizes, ArrayRef staticStrides, " - "ValueRange offsets, ValueRange sizes, ValueRange strides, " - "ArrayRef attrs = {}">, + OpBuilderDAG<(ins "Value":$source, "Value":$dest, + "ArrayRef":$staticOffsets, "ArrayRef":$staticSizes, + "ArrayRef":$staticStrides, "ValueRange":$offsets, + "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)>, // Build a SubViewOp with all dynamic entries. - OpBuilder< - "Value source, Value dest, ValueRange offsets, ValueRange sizes, " - "ValueRange strides, ArrayRef attrs = {}"> + OpBuilderDAG<(ins "Value":$source, "Value":$dest, "ValueRange":$offsets, + "ValueRange":$sizes, "ValueRange":$strides, + CArg<"ArrayRef", "{}">:$attrs)> ]; let extraClassDeclaration = extraBaseClassDeclaration # [{ @@ -3486,11 +3493,11 @@ // TensorLoadOp is fully verified by traits. let verifier = ?; - let builders = [OpBuilder< - "Value memref", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$memref), [{ $_state.addOperands(memref); $_state.addTypes(getTensorTypeFromMemRefType(memref.getType())); - }]>]; + }]>]; let extraClassDeclaration = [{ /// The result of a tensor_load is always a tensor. @@ -3600,9 +3607,9 @@ ``` }]; - let builders = [OpBuilder< - "Value in, AffineMapAttr permutation, " - "ArrayRef attrs = {}">]; + let builders = [ + OpBuilderDAG<(ins "Value":$in, "AffineMapAttr":$permutation, + CArg<"ArrayRef", "{}">:$attrs)>]; let extraClassDeclaration = [{ static StringRef getPermutationAttrName() { return "permutation"; } @@ -3638,11 +3645,11 @@ let arguments = (ins SignlessIntegerLike:$value); let results = (outs SignlessIntegerLike); - let builders = [OpBuilder< - "Value value, Type destType", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$value, "Type":$destType), [{ $_state.addOperands(value); $_state.addTypes(destType); - }]>]; + }]>]; let parser = [{ return impl::parseCastOp(parser, result); @@ -3906,11 +3913,11 @@ let arguments = (ins SignlessIntegerLike:$value); let results = (outs SignlessIntegerLike); - let builders = [OpBuilder< - "Value value, Type destType", [{ + let builders = [ + OpBuilderDAG<(ins "Value":$value, "Type":$destType), [{ $_state.addOperands(value); $_state.addTypes(destType); - }]>]; + }]>]; let parser = [{ return impl::parseCastOp(parser, result); diff --git a/mlir/include/mlir/Dialect/Vector/VectorOps.td b/mlir/include/mlir/Dialect/Vector/VectorOps.td --- a/mlir/include/mlir/Dialect/Vector/VectorOps.td +++ b/mlir/include/mlir/Dialect/Vector/VectorOps.td @@ -149,11 +149,11 @@ ``` }]; let builders = [ - OpBuilder<"Value lhs, Value rhs, Value acc, ArrayAttr indexingMaps, " - "ArrayAttr iteratorTypes">, - OpBuilder<"Value lhs, Value rhs, Value acc, " - "ArrayRef> indexingExprs, " - "ArrayRef iteratorTypes"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs, "Value":$acc, + "ArrayAttr":$indexingMaps, "ArrayAttr":$iteratorTypes)>, + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs, "Value":$acc, + "ArrayRef>":$indexingExprs, + "ArrayRef":$iteratorTypes)> ]; let extraClassDeclaration = [{ VectorType getLhsType() { @@ -312,7 +312,7 @@ ``` }]; let builders = [ - OpBuilder<"Value v1, Value v2, ArrayRef"> + OpBuilderDAG<(ins "Value":$v1, "Value":$v2, "ArrayRef")> ]; let extraClassDeclaration = [{ static StringRef getMaskAttrName() { return "mask"; } @@ -355,8 +355,8 @@ }]; let builders = [ - OpBuilder<"Value source, int64_t position">, - OpBuilder<"Value source, Value position"> + OpBuilderDAG<(ins "Value":$source, "int64_t":$position)>, + OpBuilderDAG<(ins "Value":$source, "Value":$position)> ]; let extraClassDeclaration = [{ VectorType getVectorType() { @@ -384,10 +384,10 @@ ``` }]; let builders = [ - OpBuilder<"Value source, ArrayRef position">, + OpBuilderDAG<(ins "Value":$source, "ArrayRef":$position)>, // Convenience builder which assumes the values in `position` are defined by // ConstantIndexOp. - OpBuilder<"Value source, ValueRange position"> + OpBuilderDAG<(ins "Value":$source, "ValueRange":$position)> ]; let extraClassDeclaration = [{ static StringRef getPositionAttrName() { return "position"; } @@ -434,8 +434,8 @@ ``` }]; let builders = [ - OpBuilder<"TupleType tupleType, Value vector, ArrayRef sizes, " - "ArrayRef strides"> + OpBuilderDAG<(ins "TupleType":$tupleType, "Value":$vector, + "ArrayRef":$sizes, "ArrayRef":$strides)> ]; let extraClassDeclaration = [{ VectorType getSourceVectorType() { @@ -490,8 +490,8 @@ %ev = vector.extract_map %v[%id] : vector<32xf32> to vector<1xf32> ``` }]; - let builders = [OpBuilder< - "Value vector, Value id, int64_t multiplicity">]; + let builders = [ + OpBuilderDAG<(ins "Value":$vector, "Value":$id, "int64_t":$multiplicity)>]; let extraClassDeclaration = [{ VectorType getSourceVectorType() { return vector().getType().cast(); @@ -536,8 +536,8 @@ let verifier = ?; let assemblyFormat = "$lhs `,` $rhs `,` $acc attr-dict `:` type($lhs)"; let builders = [ - OpBuilder<"Value lhs, Value rhs, Value acc", - "build($_builder, $_state, lhs.getType(), lhs, rhs, acc);"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs, "Value":$acc), + [{build($_builder, $_state, lhs.getType(), lhs, rhs, acc);}]> ]; let extraClassDeclaration = [{ VectorType getVectorType() { return lhs().getType().cast(); } @@ -576,8 +576,8 @@ }]; let builders = [ - OpBuilder<"Value source, Value dest, int64_t position">, - OpBuilder<"Value source, Value dest, Value position"> + OpBuilderDAG<(ins "Value":$source, "Value":$dest, "int64_t":$position)>, + OpBuilderDAG<(ins "Value":$source, "Value":$dest, "Value":$position)> ]; let extraClassDeclaration = [{ Type getSourceType() { return source().getType(); } @@ -613,9 +613,10 @@ }]; let builders = [ - OpBuilder<"Value source, Value dest, ArrayRef position">, + OpBuilderDAG<(ins "Value":$source, "Value":$dest, + "ArrayRef":$position)>, // Convenience builder which assumes all values are constant indices. - OpBuilder<"Value source, Value dest, ValueRange position"> + OpBuilderDAG<(ins "Value":$source, "Value":$dest, "ValueRange":$position)> ]; let extraClassDeclaration = [{ static StringRef getPositionAttrName() { return "position"; } @@ -724,8 +725,8 @@ %v = vector.insert_map %ev %v[%id] : vector<1xf32> into vector<32xf32> ``` }]; - let builders = [OpBuilder< - "Value vector, Value dest, Value id, int64_t multiplicity">]; + let builders = [OpBuilderDAG<(ins "Value":$vector, "Value":$dest, + "Value":$id, "int64_t":$multiplicity)>]; let extraClassDeclaration = [{ VectorType getSourceVectorType() { return vector().getType().cast(); @@ -779,8 +780,8 @@ }]; let builders = [ - OpBuilder<"Value source, Value dest, ArrayRef offsets, " - "ArrayRef strides"> + OpBuilderDAG<(ins "Value":$source, "Value":$dest, + "ArrayRef":$offsets, "ArrayRef":$strides)> ]; let extraClassDeclaration = [{ static StringRef getOffsetsAttrName() { return "offsets"; } @@ -843,7 +844,7 @@ }]; let builders = [ // Build an op without mask, use the type of `acc` as the return type. - OpBuilder<"Value lhs, Value rhs, Value acc"> + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs, "Value":$acc)> ]; let extraClassDeclaration = [{ VectorType getOperandVectorTypeLHS() { @@ -1017,8 +1018,8 @@ ``` }]; let builders = [ - OpBuilder<"Value source, ArrayRef offsets, " - "ArrayRef sizes, ArrayRef strides"> + OpBuilderDAG<(ins "Value":$source, "ArrayRef":$offsets, + "ArrayRef":$sizes, "ArrayRef":$strides)> ]; let extraClassDeclaration = [{ static StringRef getOffsetsAttrName() { return "offsets"; } @@ -1182,12 +1183,13 @@ let builders = [ // Builder that sets padding to zero. - OpBuilder<"VectorType vector, Value memref, ValueRange indices, " - "AffineMap permutationMap, ArrayRef maybeMasked = {}">, + OpBuilderDAG<(ins "VectorType":$vector, "Value":$memref, + "ValueRange":$indices, "AffineMap":$permutationMap, + CArg<"ArrayRef", "{}">:$maybeMasked)>, // Builder that sets permutation map (resp. padding) to // 'getMinorIdentityMap' (resp. zero). - OpBuilder<"VectorType vector, Value memref, ValueRange indices, " - "ArrayRef maybeMasked = {}"> + OpBuilderDAG<(ins "VectorType":$vector, "Value":$memref, + "ValueRange":$indices, CArg<"ArrayRef", "{}">:$maybeMasked)> ]; let hasFolder = 1; @@ -1265,10 +1267,10 @@ let builders = [ // Builder that sets permutation map to 'getMinorIdentityMap'. - OpBuilder<"Value vector, Value memref, ValueRange indices, " - "ArrayRef maybeMasked = {}">, - OpBuilder<"Value vector, Value memref, ValueRange indices, " - "AffineMap permutationMap">, + OpBuilderDAG<(ins "Value":$vector, "Value":$memref, "ValueRange":$indices, + CArg<"ArrayRef", "{}">:$maybeMasked)>, + OpBuilderDAG<(ins "Value":$vector, "Value":$memref, "ValueRange":$indices, + "AffineMap":$permutationMap)>, ]; let hasFolder = 1; @@ -1712,9 +1714,7 @@ /// Build the canonical memRefType with a single vector. /// E.g. memref<4 x 5 x vector<6 x f32>> -> memref>. - let builders = [ - OpBuilder<"Value source"> - ]; + let builders = [OpBuilderDAG<(ins "Value":$source)>]; let extraClassDeclaration = [{ MemRefType getMemRefType() { @@ -1870,7 +1870,7 @@ ``` }]; let builders = [ - OpBuilder<"Value vector, ArrayRef transp"> + OpBuilderDAG<(ins "Value":$vector, "ArrayRef":$transp)> ]; let extraClassDeclaration = [{ VectorType getVectorType() { @@ -2015,8 +2015,8 @@ ``` }]; let builders = [ - OpBuilder<"Value lhs, Value rhs, unsigned lhsRows, unsigned lhsColumns, " - "unsigned rhsColumns", + OpBuilderDAG<(ins "Value":$lhs, "Value":$rhs, "unsigned":$lhsRows, + "unsigned":$lhsColumns, "unsigned":$rhsColumns), [{ $_state.addOperands({lhs, rhs}); $_state.addAttribute("lhs_rows",$_builder.getI32IntegerAttr(lhsRows)); diff --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td --- a/mlir/test/lib/Dialect/Test/TestOps.td +++ b/mlir/test/lib/Dialect/Test/TestOps.td @@ -661,7 +661,7 @@ let description = [{ The "test.op_funcref" is a test op with a reference to a function symbol. }]; - let builders = [OpBuilder<[{FuncOp function}]>]; + let builders = [OpBuilderDAG<(ins "FuncOp":$function)>]; } // Pattern add the argument plus a increasing static number hidden in @@ -1142,16 +1142,15 @@ // We will use this op in a nested result pattern, where we cannot deduce the // result type. So need to provide a builder not requiring result types. let builders = [ - OpBuilder< - "IntegerAttr count", - [{ - auto i32Type = $_builder.getIntegerType(32); - $_state.addTypes(i32Type); // $output1 - SmallVector types(count.getInt(), i32Type); - $_state.addTypes(types); // $output2 - $_state.addTypes(types); // $output3 - $_state.addAttribute("count", count); - }]> + OpBuilderDAG<(ins "IntegerAttr":$count), + [{ + auto i32Type = $_builder.getIntegerType(32); + $_state.addTypes(i32Type); // $output1 + SmallVector types(count.getInt(), i32Type); + $_state.addTypes(types); // $output2 + $_state.addTypes(types); // $output3 + $_state.addAttribute("count", count); + }]> ]; } @@ -1202,13 +1201,14 @@ def IllegalOpTerminator : TEST_Op<"illegal_op_terminator", [Terminator]>; def IllegalOpWithRegion : TEST_Op<"illegal_op_with_region"> { let skipDefaultBuilders = 1; - let builders = [OpBuilder<"", - [{ Region *bodyRegion = $_state.addRegion(); - OpBuilder::InsertionGuard g($_builder); - Block *body = $_builder.createBlock(bodyRegion); - $_builder.setInsertionPointToEnd(body); - $_builder.create($_state.location); - }]>]; + let builders = [OpBuilderDAG<(ins), + [{ + Region *bodyRegion = $_state.addRegion(); + OpBuilder::InsertionGuard g($_builder); + Block *body = $_builder.createBlock(bodyRegion); + $_builder.setInsertionPointToEnd(body); + $_builder.create($_state.location); + }]>]; } def IllegalOpWithRegionAnchor : TEST_Op<"illegal_op_with_region_anchor">; @@ -1245,8 +1245,8 @@ def TestRegionBuilderOp : TEST_Op<"region_builder">; def TestReturnOp : TEST_Op<"return", [ReturnLike, Terminator]> { let arguments = (ins Variadic); - let builders = [ - OpBuilder<"", [{ build($_builder, $_state, {}); }]> + let builders = [OpBuilderDAG<(ins), + [{ build($_builder, $_state, {}); }]> ]; } def TestCastOp : TEST_Op<"cast">, diff --git a/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-gen.cpp b/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-gen.cpp --- a/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-gen.cpp +++ b/mlir/tools/mlir-linalg-ods-gen/mlir-linalg-ods-gen.cpp @@ -1461,8 +1461,8 @@ let regions = (region AnyRegion:$region); let skipDefaultBuilders = 1; - let builders = [ OpBuilder< - "ValueRange inputs, ValueRange outputBuffers", + let builders = [ OpBuilderDAG< + (ins "ValueRange":$inputs, "ValueRange":$outputBuffers), [{{ $_state.addOperands(inputs); $_state.addOperands(outputBuffers); @@ -1479,9 +1479,9 @@ TypeRange(outputBuffers), TypeRange(), TypeRange()); - }]>, OpBuilder< - "TypeRange resultTensorTypes, ValueRange inputs, " - "ValueRange outputBuffers, ValueRange initTensors", + }]>, OpBuilderDAG< + (ins "TypeRange":$resultTensorTypes, "ValueRange":$inputs, + "ValueRange":$outputBuffers, "ValueRange":$initTensors), [{{ $_state.addOperands(inputs); $_state.addOperands(outputBuffers); @@ -1500,8 +1500,9 @@ TypeRange(outputBuffers), TypeRange(initTensors), resultTensorTypes); - }]>, OpBuilder< - "TypeRange resultTensorTypes, ValueRange operands, ArrayRef attributes = {{}", + }]>, OpBuilderDAG< + (ins "TypeRange":$resultTensorTypes, "ValueRange":$operands, + CArg<"ArrayRef", "{{}">:$attributes), [{{ $_state.addOperands(operands); $_state.addAttributes(attributes); diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp --- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -1232,6 +1232,11 @@ llvm::Optional params = builderDef->getValueAsOptionalString("params"); FmtContext fctx; + if (params.hasValue()) { + PrintWarning(op.getLoc(), + "Op uses a deprecated, string-based OpBuilder format; " + "use OpBuilderDAG with '(ins <...>)' instead"); + } std::string paramStr = params.hasValue() ? builderSignatureFromString(params->trim(), fctx) : builderSignatureFromDAG(