diff --git a/flang/include/flang/Optimizer/Dialect/FIROps.td b/flang/include/flang/Optimizer/Dialect/FIROps.td --- a/flang/include/flang/Optimizer/Dialect/FIROps.td +++ b/flang/include/flang/Optimizer/Dialect/FIROps.td @@ -140,37 +140,37 @@ } // Base builder for allocate operations -def fir_AllocateOpBuilder : OpBuilder< - "OpBuilder &builder, OperationState &result, Type inType," - "ValueRange lenParams = {}, ValueRange sizes = {}," - "ArrayRef attributes = {}", +def fir_AllocateOpBuilder : + OpBuilderDAG<(ins "Type":$inType, CArg<"ValueRange", "{}">:$lenParams, + CArg<"ValueRange", "{}">:$sizes, + CArg<"ArrayRef", "{}">:$attributes), [{ - result.addTypes(getRefTy(inType)); - result.addAttribute("in_type", TypeAttr::get(inType)); - result.addOperands(sizes); - result.addAttributes(attributes); + $_state.addTypes(getRefTy(inType)); + $_state.addAttribute("in_type", TypeAttr::get(inType)); + $_state.addOperands(sizes); + $_state.addAttributes(attributes); }]>; -def fir_NamedAllocateOpBuilder : OpBuilder< - "OpBuilder &builder, OperationState &result, Type inType, StringRef name," - "ValueRange lenParams = {}, ValueRange sizes = {}," - "ArrayRef attributes = {}", +def fir_NamedAllocateOpBuilder : + OpBuilderDAG<(ins "Type":$inType, "StringRef":$name, + CArg<"ValueRange", "{}">:$lenParams, CArg<"ValueRange", "{}">:$sizes, + CArg<"ArrayRef", "{}">:$attributes), [{ - result.addTypes(getRefTy(inType)); - result.addAttribute("in_type", TypeAttr::get(inType)); - result.addAttribute("name", builder.getStringAttr(name)); - result.addOperands(sizes); - result.addAttributes(attributes); + $_state.addTypes(getRefTy(inType)); + $_state.addAttribute("in_type", TypeAttr::get(inType)); + $_state.addAttribute("name", $_builder.getStringAttr(name)); + $_state.addOperands(sizes); + $_state.addAttributes(attributes); }]>; -def fir_OneResultOpBuilder : OpBuilder< - "OpBuilder &, OperationState &result, Type resultType," - "ValueRange operands, ArrayRef attributes = {}", +def fir_OneResultOpBuilder : + OpBuilderDAG<(ins "Type":$resultType, "ValueRange":$operands, + CArg<"ArrayRef", "{}">:$attributes), [{ if (resultType) - result.addTypes(resultType); - result.addOperands(operands); - result.addAttributes(attributes); + $_state.addTypes(resultType); + $_state.addOperands(operands); + $_state.addAttributes(attributes); }]>; // Base class of FIR operations that return 1 result @@ -185,8 +185,8 @@ let builders = [fir_OneResultOpBuilder]; } -class fir_TwoBuilders { - list builders = [b1, b2]; +class fir_TwoBuilders { + list builders = [b1, b2]; } class fir_AllocatableBaseOp traits = []> : @@ -370,18 +370,17 @@ let arguments = (ins AnyReferenceLike:$memref); - let builders = [OpBuilder< - "OpBuilder &builder, OperationState &result, Value refVal", + let builders = [ + OpBuilderDAG<(ins "Value":$refVal), [{ if (!refVal) { - mlir::emitError(result.location, "LoadOp has null argument"); + mlir::emitError($_state.location, "LoadOp has null argument"); return; } auto refTy = refVal.getType().cast(); - result.addOperands(refVal); - result.addTypes(refTy.getEleTy()); - }] - >]; + $_state.addOperands(refVal); + $_state.addTypes(refTy.getEleTy()); + }]>]; let parser = [{ mlir::Type type; @@ -606,27 +605,27 @@ list traits = []> : fir_SwitchTerminatorOp { let skipDefaultBuilders = 1; - let builders = [OpBuilder< - "OpBuilder &builder, OperationState &result, Value selector," - "ArrayRef compareOperands, ArrayRef destinations," - "ArrayRef destOperands = {}," - "ArrayRef attributes = {}", + let builders = [ + OpBuilderDAG<(ins "Value":$selector, "ArrayRef":$compareOperands, + "ArrayRef":$destinations, + CArg<"ArrayRef", "{}">:$destOperands, + CArg<"ArrayRef", "{}">:$attributes), [{ - result.addOperands(selector); + $_state.addOperands(selector); llvm::SmallVector ivalues; for (auto iv : compareOperands) - ivalues.push_back(builder.getI64IntegerAttr(iv)); - ivalues.push_back(builder.getUnitAttr()); - result.addAttribute(getCasesAttr(), builder.getArrayAttr(ivalues)); + ivalues.push_back($_builder.getI64IntegerAttr(iv)); + ivalues.push_back($_builder.getUnitAttr()); + $_state.addAttribute(getCasesAttr(), $_builder.getArrayAttr(ivalues)); const auto count = destinations.size(); for (auto d : destinations) - result.addSuccessors(d); + $_state.addSuccessors(d); const auto opCount = destOperands.size(); llvm::SmallVector argOffs; int32_t sumArgs = 0; for (std::remove_const_t i = 0; i != count; ++i) { if (i < opCount) { - result.addOperands(destOperands[i]); + $_state.addOperands(destOperands[i]); const auto argSz = destOperands[i].size(); argOffs.push_back(argSz); sumArgs += argSz; @@ -634,13 +633,12 @@ argOffs.push_back(0); } } - result.addAttribute(getOperandSegmentSizeAttr(), - builder.getI32VectorAttr({1, 0, sumArgs})); - result.addAttribute(getTargetOffsetAttr(), - builder.getI32VectorAttr(argOffs)); - result.addAttributes(attributes); - }] - >]; + $_state.addAttribute(getOperandSegmentSizeAttr(), + $_builder.getI32VectorAttr({1, 0, sumArgs})); + $_state.addAttribute(getTargetOffsetAttr(), + $_builder.getI32VectorAttr(argOffs)); + $_state.addAttributes(attributes); + }]>]; let parser = [{ mlir::OpAsmParser::OperandType selector; @@ -795,14 +793,16 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"OpBuilder &builder, OperationState &result, Value selector," - "ArrayRef compareAttrs, ArrayRef cmpOperands," - "ArrayRef destinations, ArrayRef destOperands = {}," - "ArrayRef attributes = {}">, - OpBuilder<"OpBuilder &builder, OperationState &result, Value selector," - "ArrayRef compareAttrs, ArrayRef cmpOpList," - "ArrayRef destinations, ArrayRef destOperands = {}," - "ArrayRef attributes = {}">]; + OpBuilderDAG<(ins "Value":$selector, + "ArrayRef":$compareAttrs, + "ArrayRef":$cmpOperands, "ArrayRef":$destinations, + CArg<"ArrayRef", "{}">:$destOperands, + CArg<"ArrayRef", "{}">:$attributes)>, + OpBuilderDAG<(ins "Value":$selector, + "ArrayRef":$compareAttrs, "ArrayRef":$cmpOpList, + "ArrayRef":$destinations, + CArg<"ArrayRef", "{}">:$destOperands, + CArg<"ArrayRef", "{}">:$attributes)>]; let parser = "return parseSelectCase(parser, result);"; @@ -887,23 +887,24 @@ }]; let skipDefaultBuilders = 1; - let builders = [OpBuilder< - "OpBuilder &builder, OperationState &result, Value selector," - "ArrayRef typeOperands," - "ArrayRef destinations, ArrayRef destOperands = {}," - "ArrayRef attributes = {}", + let builders = [ + OpBuilderDAG<(ins "Value":$selector, + "ArrayRef":$typeOperands, + "ArrayRef":$destinations, + CArg<"ArrayRef", "{}">:$destOperands, + CArg<"ArrayRef", "{}">:$attributes), [{ - result.addOperands(selector); - result.addAttribute(getCasesAttr(), builder.getArrayAttr(typeOperands)); + $_state.addOperands(selector); + $_state.addAttribute(getCasesAttr(), $_builder.getArrayAttr(typeOperands)); const auto count = destinations.size(); for (auto d : destinations) - result.addSuccessors(d); + $_state.addSuccessors(d); const auto opCount = destOperands.size(); llvm::SmallVector argOffs; int32_t sumArgs = 0; for (std::remove_const_t i = 0; i != count; ++i) { if (i < opCount) { - result.addOperands(destOperands[i]); + $_state.addOperands(destOperands[i]); const auto argSz = destOperands[i].size(); argOffs.push_back(argSz); sumArgs += argSz; @@ -911,13 +912,12 @@ argOffs.push_back(0); } } - result.addAttribute(getOperandSegmentSizeAttr(), - builder.getI32VectorAttr({1, 0, sumArgs})); - result.addAttribute(getTargetOffsetAttr(), - builder.getI32VectorAttr(argOffs)); - result.addAttributes(attributes); - }] - >]; + $_state.addAttribute(getOperandSegmentSizeAttr(), + $_builder.getI32VectorAttr({1, 0, sumArgs})); + $_state.addAttribute(getTargetOffsetAttr(), + $_builder.getI32VectorAttr(argOffs)); + $_state.addAttributes(attributes); + }]>]; let parser = "return parseSelectType(parser, result);"; @@ -1598,12 +1598,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "Type type, Value ref, ValueRange coor," - "ArrayRef attrs = {}">, - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "Type type, ValueRange operands," - "ArrayRef attrs = {}">]; + OpBuilderDAG<(ins "Type":$type, "Value":$ref, "ValueRange":$coor, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "Type":$type, "ValueRange":$operands, + CArg<"ArrayRef", "{}">:$attrs)>]; let extraClassDeclaration = [{ static constexpr llvm::StringRef baseType() { return "base_type"; } @@ -1709,15 +1707,14 @@ } }]; - let builders = [OpBuilder< - "OpBuilder &builder, OperationState &result, StringRef fieldName," - "Type recTy, ValueRange operands = {}", + let builders = [ + OpBuilderDAG<(ins "StringRef":$fieldName, "Type":$recTy, + CArg<"ValueRange", "{}">:$operands), [{ - result.addAttribute(fieldAttrName(), builder.getStringAttr(fieldName)); - result.addAttribute(typeAttrName(), TypeAttr::get(recTy)); - result.addOperands(operands); - }] - >]; + $_state.addAttribute(fieldAttrName(), $_builder.getStringAttr(fieldName)); + $_state.addAttribute(typeAttrName(), TypeAttr::get(recTy)); + $_state.addOperands(operands); + }]>]; let extraClassDeclaration = [{ static constexpr llvm::StringRef fieldAttrName() { return "field_id"; } @@ -1833,13 +1830,12 @@ << getAttr(typeAttrName()); }]; - let builders = [OpBuilder< - "OpBuilder &builder, OperationState &result, StringRef fieldName, Type recTy", + let builders = [ + OpBuilderDAG<(ins "StringRef":$fieldName, "Type":$recTy), [{ - result.addAttribute(fieldAttrName(), builder.getStringAttr(fieldName)); - result.addAttribute(typeAttrName(), TypeAttr::get(recTy)); - }] - >]; + $_state.addAttribute(fieldAttrName(), $_builder.getStringAttr(fieldName)); + $_state.addAttribute(typeAttrName(), TypeAttr::get(recTy)); + }]>]; let extraClassDeclaration = [{ static constexpr llvm::StringRef fieldAttrName() { return "field_id"; } @@ -1868,7 +1864,8 @@ let arguments = (ins Variadic:$results); let builders = [ - OpBuilder<"OpBuilder &builder, OperationState &result", "/* do nothing */"> + OpBuilderDAG<(ins), + [{/* do nothing */}]> ]; let assemblyFormat = "($results^ `:` type($results))? attr-dict"; @@ -1923,11 +1920,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "mlir::Value lowerBound, mlir::Value upperBound," - "mlir::Value step, bool unordered = false," - "ValueRange iterArgs = llvm::None," - "ArrayRef attributes = {}"> + OpBuilderDAG<(ins "mlir::Value":$lowerBound, "mlir::Value":$upperBound, + "mlir::Value":$step, CArg<"bool", "false">:$unordered, + CArg<"ValueRange", "llvm::None">:$iterArgs, + CArg<"ArrayRef", "{}">:$attributes)> ]; let extraClassDeclaration = [{ @@ -2000,10 +1996,9 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"OpBuilder &builder, OperationState &result, " - "Value cond, bool withOtherRegion">, - OpBuilder<"OpBuilder &builder, OperationState &result, " - "TypeRange resultTypes, Value cond, bool withOtherRegion"> + OpBuilderDAG<(ins "Value":$cond, "bool":$withOtherRegion)>, + OpBuilderDAG<(ins "TypeRange":$resultTypes, "Value":$cond, + "bool":$withOtherRegion)> ]; let extraClassDeclaration = [{ @@ -2047,11 +2042,10 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "mlir::Value lowerBound, mlir::Value upperBound," - "mlir::Value step, mlir::Value iterate," - "ValueRange iterArgs = llvm::None," - "ArrayRef attributes = {}"> + OpBuilderDAG<(ins "mlir::Value":$lowerBound, "mlir::Value":$upperBound, + "mlir::Value":$step, "mlir::Value":$iterate, + CArg<"ValueRange", "llvm::None">:$iterArgs, + CArg<"ArrayRef", "{}">:$attributes)> ]; let extraClassDeclaration = [{ @@ -2370,10 +2364,10 @@ let results = (outs AnyLogicalLike); - let builders = [OpBuilder< - "OpBuilder &builder, OperationState &result, CmpFPredicate predicate," - "Value lhs, Value rhs", [{ - buildCmpFOp(builder, result, predicate, lhs, rhs); + let builders = [ + OpBuilderDAG<(ins "CmpFPredicate":$predicate, "Value":$lhs, "Value":$rhs), + [{ + buildCmpFOp($_builder, $_state, predicate, lhs, rhs); }]>]; let parser = [{ return parseCmpfOp(parser, result); }]; @@ -2479,10 +2473,10 @@ let printer = "printCmpcOp(p, *this);"; - let builders = [OpBuilder< - "OpBuilder &builder, OperationState &result, CmpFPredicate predicate," - "Value lhs, Value rhs", [{ - buildCmpCOp(builder, result, predicate, lhs, rhs); + let builders = [ + OpBuilderDAG<(ins "CmpFPredicate":$predicate, "Value":$lhs, "Value":$rhs), + [{ + buildCmpCOp($_builder, $_state, predicate, lhs, rhs); }]>]; let extraClassDeclaration = [{ @@ -2612,7 +2606,7 @@ }]; let builders = [ - OpBuilder<"OpBuilder &, OperationState &result, mlir::TypeAttr inty"> + OpBuilderDAG<(ins "mlir::TypeAttr":$inty)> ]; let verifier = [{ @@ -2717,26 +2711,22 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "StringRef name, Type type, ArrayRef attrs = {}">, - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "StringRef name, bool isConstant, Type type," - "ArrayRef attrs = {}">, - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "StringRef name, Type type, StringAttr linkage = {}," - "ArrayRef attrs = {}">, - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "StringRef name, bool isConstant, Type type," - "StringAttr linkage = {}," - "ArrayRef attrs = {}">, - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "StringRef name, Type type, Attribute initVal," - "StringAttr linkage = {}," - "ArrayRef attrs = {}">, - OpBuilder<"mlir::OpBuilder &builder, OperationState &result," - "StringRef name, bool isConstant, Type type," - "Attribute initVal, StringAttr linkage = {}," - "ArrayRef attrs = {}">, + OpBuilderDAG<(ins "StringRef":$name, "Type":$type, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "StringRef":$name, "bool":$isConstant, "Type":$type, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "StringRef":$name, "Type":$type, + CArg<"StringAttr", "{}">:$linkage, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "StringRef":$name, "bool":$isConstant, "Type":$type, + CArg<"StringAttr", "{}">:$linkage, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "StringRef":$name, "Type":$type, "Attribute":$initVal, + CArg<"StringAttr", "{}">:$linkage, + CArg<"ArrayRef", "{}">:$attrs)>, + OpBuilderDAG<(ins "StringRef":$name, "bool":$isConstant, "Type":$type, + "Attribute":$initVal, CArg<"StringAttr", "{}">:$linkage, + CArg<"ArrayRef", "{}">:$attrs)>, ]; let extraClassDeclaration = [{ @@ -2895,12 +2885,12 @@ let skipDefaultBuilders = 1; let builders = [ - OpBuilder<"mlir::OpBuilder &builder, OperationState *result," - "StringRef name, Type type, ArrayRef attrs = {}", + OpBuilderDAG<(ins "StringRef":$name, "Type":$type, + CArg<"ArrayRef", "{}">:$attrs), [{ - result->addAttribute(mlir::SymbolTable::getSymbolAttrName(), - builder.getStringAttr(name)); - result->addAttributes(attrs); + $_state.addAttribute(mlir::SymbolTable::getSymbolAttrName(), + $_builder.getStringAttr(name)); + $_state.addAttributes(attrs); }]> ];