diff --git a/flang/include/flang/Lower/ComplexExpr.h b/flang/include/flang/Lower/ComplexExpr.h --- a/flang/include/flang/Lower/ComplexExpr.h +++ b/flang/include/flang/Lower/ComplexExpr.h @@ -57,14 +57,18 @@ protected: template mlir::Value extract(mlir::Value cplx) { - return builder.create(loc, getComplexPartType(cplx), - cplx, createPartId()); + return builder.create( + loc, getComplexPartType(cplx), cplx, + builder.getArrayAttr({builder.getIntegerAttr( + builder.getIndexType(), static_cast(partId))})); } template mlir::Value insert(mlir::Value cplx, mlir::Value part) { - return builder.create(loc, cplx.getType(), cplx, part, - createPartId()); + return builder.create( + loc, cplx.getType(), cplx, part, + builder.getArrayAttr({builder.getIntegerAttr( + builder.getIndexType(), static_cast(partId))})); } template 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 @@ -1725,11 +1725,6 @@ let assemblyFormat = [{ $adt `,` $coor attr-dict `:` functional-type(operands, results) }]; - - let builders = [ - OpBuilder<(ins "mlir::Type":$rty, "mlir::Value":$adt, - "llvm::ArrayRef":$vcoor)> - ]; } def fir_FieldIndexOp : fir_OneResultOp<"field_index", [NoSideEffect]> { @@ -1976,11 +1971,6 @@ $adt `,` $val `,` $coor attr-dict `:` functional-type(operands, results) }]; - let builders = [ - OpBuilder<(ins "mlir::Type":$rty, "mlir::Value":$adt, "mlir::Value":$val, - "llvm::ArrayRef":$vcoor)> - ]; - let hasCanonicalizer = 1; } @@ -2011,11 +2001,6 @@ $seq `,` $val `,` $coor attr-dict `:` functional-type(operands, results) }]; - let builders = [ - OpBuilder<(ins "mlir::Type":$rty, "mlir::Value":$adt, "mlir::Value":$val, - "llvm::ArrayRef":$vcoor)> - ]; - let verifier = "return ::verify(*this);"; } diff --git a/flang/lib/Lower/CharacterExpr.cpp b/flang/lib/Lower/CharacterExpr.cpp --- a/flang/lib/Lower/CharacterExpr.cpp +++ b/flang/lib/Lower/CharacterExpr.cpp @@ -217,9 +217,10 @@ auto valTy = val.getType(); // Precondition is rhs is size 1, but it may be wrapped in a fir.array. if (auto seqTy = valTy.dyn_cast()) { - auto zero = builder.createIntegerConstant(loc, builder.getIndexType(), 0); + auto zero = builder.getIntegerAttr(builder.getIndexType(), 0); valTy = seqTy.getEleTy(); - val = builder.create(loc, valTy, val, zero); + val = builder.create(loc, valTy, val, + builder.getArrayAttr(zero)); } auto addrTy = fir::ReferenceType::get(valTy); addr = builder.createConvert(loc, addrTy, addr); diff --git a/flang/lib/Optimizer/Builder/Character.cpp b/flang/lib/Optimizer/Builder/Character.cpp --- a/flang/lib/Optimizer/Builder/Character.cpp +++ b/flang/lib/Optimizer/Builder/Character.cpp @@ -680,8 +680,9 @@ auto intType = builder.getIntegerType(bits); auto cast = builder.createConvert(loc, intType, code); auto undef = builder.create(loc, charType); - auto zero = builder.createIntegerConstant(loc, builder.getIndexType(), 0); - return builder.create(loc, charType, undef, cast, zero); + auto zero = builder.getIntegerAttr(builder.getIndexType(), 0); + return builder.create(loc, charType, undef, cast, + builder.getArrayAttr(zero)); } mlir::Value fir::factory::CharacterExprHelper::extractCodeFromSingleton( @@ -690,8 +691,9 @@ assert(type.getLen() == 1); auto bits = builder.getKindMap().getCharacterBitsize(type.getFKind()); auto intType = builder.getIntegerType(bits); - auto zero = builder.createIntegerConstant(loc, builder.getIndexType(), 0); - return builder.create(loc, intType, singleton, zero); + auto zero = builder.getIntegerAttr(builder.getIndexType(), 0); + return builder.create(loc, intType, singleton, + builder.getArrayAttr(zero)); } mlir::Value diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp --- a/flang/lib/Optimizer/Dialect/FIROps.cpp +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp @@ -1285,39 +1285,6 @@ return mlir::success(llvm::is_contained(validNames, linkage)); } -template -static void appendAsAttribute(llvm::SmallVectorImpl &attrs, - mlir::Value val) { - if (auto *op = val.getDefiningOp()) { - if (auto cop = mlir::dyn_cast(op)) { - // append the integer constant value - if (auto iattr = cop.value().dyn_cast()) { - attrs.push_back(iattr); - return; - } - } else if (auto fld = mlir::dyn_cast(op)) { - if constexpr (AllowFields) { - // append the field name and the record type - attrs.push_back(fld.field_idAttr()); - attrs.push_back(fld.on_typeAttr()); - return; - } - } - } - llvm::report_fatal_error("cannot build Op with these arguments"); -} - -template -static mlir::ArrayAttr collectAsAttributes(mlir::MLIRContext *ctxt, - OperationState &result, - llvm::ArrayRef inds) { - llvm::SmallVector attrs; - for (auto v : inds) - appendAsAttribute(attrs, v); - assert(!attrs.empty()); - return mlir::ArrayAttr::get(ctxt, attrs); -} - //===----------------------------------------------------------------------===// // GlobalLenOp //===----------------------------------------------------------------------===// @@ -1351,18 +1318,6 @@ << ", " << op.getOperation()->getAttr(fir::GlobalLenOp::intAttrName()); } -//===----------------------------------------------------------------------===// -// ExtractValueOp -//===----------------------------------------------------------------------===// - -void fir::ExtractValueOp::build(mlir::OpBuilder &builder, - OperationState &result, mlir::Type resTy, - mlir::Value aggVal, - llvm::ArrayRef inds) { - auto aa = collectAsAttributes<>(builder.getContext(), result, inds); - build(builder, result, resTy, aggVal, aa); -} - //===----------------------------------------------------------------------===// // FieldIndexOp //===----------------------------------------------------------------------===// @@ -1430,14 +1385,6 @@ // InsertOnRangeOp //===----------------------------------------------------------------------===// -void fir::InsertOnRangeOp::build(mlir::OpBuilder &builder, - OperationState &result, mlir::Type resTy, - mlir::Value aggVal, mlir::Value eleVal, - llvm::ArrayRef inds) { - auto aa = collectAsAttributes(builder.getContext(), result, inds); - build(builder, result, resTy, aggVal, eleVal, aa); -} - /// Range bounds must be nonnegative, and the range must not be empty. static mlir::LogicalResult verify(fir::InsertOnRangeOp op) { if (op.coor().size() < 2 || op.coor().size() % 2 != 0) @@ -1461,14 +1408,6 @@ // InsertValueOp //===----------------------------------------------------------------------===// -void fir::InsertValueOp::build(mlir::OpBuilder &builder, OperationState &result, - mlir::Type resTy, mlir::Value aggVal, - mlir::Value eleVal, - llvm::ArrayRef inds) { - auto aa = collectAsAttributes<>(builder.getContext(), result, inds); - build(builder, result, resTy, aggVal, eleVal, aa); -} - static bool checkIsIntegerConstant(mlir::Attribute attr, int64_t conVal) { if (auto iattr = attr.dyn_cast()) return iattr.getInt() == conVal;