From b22fa8659ad370b10d357b22f244f88f22673c25 Mon Sep 17 00:00:00 2001 From: Jean Perier Date: Thu, 15 Dec 2022 11:13:54 +0100 Subject: [PATCH] [flang][NFC] add builder to simplify fir.shape creation Differential Revision: https://reviews.llvm.org/D140031 --- flang/include/flang/Optimizer/Dialect/FIROps.td | 2 ++ flang/lib/Lower/ConvertExpr.cpp | 3 +-- flang/lib/Optimizer/Builder/FIRBuilder.cpp | 3 +-- flang/lib/Optimizer/Builder/MutableBox.cpp | 4 +--- flang/lib/Optimizer/Dialect/FIROps.cpp | 6 ++++++ flang/unittests/Optimizer/FortranVariableTest.cpp | 3 +-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/flang/include/flang/Optimizer/Dialect/FIROps.td b/flang/include/flang/Optimizer/Dialect/FIROps.td index a6b84ee..1e29710 100644 --- a/flang/include/flang/Optimizer/Dialect/FIROps.td +++ b/flang/include/flang/Optimizer/Dialect/FIROps.td @@ -1773,6 +1773,8 @@ def fir_ShapeOp : fir_Op<"shape", [NoMemoryEffect]> { }]; let hasVerifier = 1; + + let builders = [OpBuilder<(ins "mlir::ValueRange":$extents)>]; } def fir_ShapeShiftOp : fir_Op<"shape_shift", [NoMemoryEffect]> { diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp index e45eb8f..e0dc827 100644 --- a/flang/lib/Lower/ConvertExpr.cpp +++ b/flang/lib/Lower/ConvertExpr.cpp @@ -4375,8 +4375,7 @@ private: llvm::SmallVector idxShape; for (auto s : shape) idxShape.push_back(builder.createConvert(loc, idxTy, s)); - auto shapeTy = fir::ShapeType::get(builder.getContext(), idxShape.size()); - return builder.create(loc, shapeTy, idxShape); + return builder.create(loc, idxShape); } fir::ShapeOp genShapeOp(llvm::ArrayRef shape) { diff --git a/flang/lib/Optimizer/Builder/FIRBuilder.cpp b/flang/lib/Optimizer/Builder/FIRBuilder.cpp index a4644a6..0c66ed7 100644 --- a/flang/lib/Optimizer/Builder/FIRBuilder.cpp +++ b/flang/lib/Optimizer/Builder/FIRBuilder.cpp @@ -379,8 +379,7 @@ fir::StringLitOp fir::FirOpBuilder::createStringLitOp(mlir::Location loc, mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc, llvm::ArrayRef exts) { - auto shapeType = fir::ShapeType::get(getContext(), exts.size()); - return create(loc, shapeType, exts); + return create(loc, exts); } mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc, diff --git a/flang/lib/Optimizer/Builder/MutableBox.cpp b/flang/lib/Optimizer/Builder/MutableBox.cpp index c470044..7bdcb81 100644 --- a/flang/lib/Optimizer/Builder/MutableBox.cpp +++ b/flang/lib/Optimizer/Builder/MutableBox.cpp @@ -34,9 +34,7 @@ createNewFirBox(fir::FirOpBuilder &builder, mlir::Location loc, mlir::Value shape; if (!extents.empty()) { if (lbounds.empty()) { - auto shapeType = - fir::ShapeType::get(builder.getContext(), extents.size()); - shape = builder.create(loc, shapeType, extents); + shape = builder.create(loc, extents); } else { llvm::SmallVector shapeShiftBounds; for (auto [lb, extent] : llvm::zip(lbounds, extents)) { diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp index 800bd23..79313b9 100644 --- a/flang/lib/Optimizer/Dialect/FIROps.cpp +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp @@ -3086,6 +3086,12 @@ mlir::LogicalResult fir::ShapeOp::verify() { return mlir::success(); } +void fir::ShapeOp::build(mlir::OpBuilder &builder, mlir::OperationState &result, + mlir::ValueRange extents) { + auto type = fir::ShapeType::get(builder.getContext(), extents.size()); + build(builder, result, type, extents); +} + //===----------------------------------------------------------------------===// // ShapeShiftOp //===----------------------------------------------------------------------===// diff --git a/flang/unittests/Optimizer/FortranVariableTest.cpp b/flang/unittests/Optimizer/FortranVariableTest.cpp index 4526223..42ed225 100644 --- a/flang/unittests/Optimizer/FortranVariableTest.cpp +++ b/flang/unittests/Optimizer/FortranVariableTest.cpp @@ -36,8 +36,7 @@ public: } mlir::Value createShape(llvm::ArrayRef extents) { - mlir::Type shapeType = fir::ShapeType::get(&context, extents.size()); - return builder->create(getLoc(), shapeType, extents); + return builder->create(getLoc(), extents); } mlir::MLIRContext context; std::unique_ptr builder; -- 2.7.4