[flang][NFC] add builder to simplify fir.shape creation
authorJean Perier <jperier@nvidia.com>
Thu, 15 Dec 2022 10:13:54 +0000 (11:13 +0100)
committerJean Perier <jperier@nvidia.com>
Thu, 15 Dec 2022 10:14:14 +0000 (11:14 +0100)
Differential Revision: https://reviews.llvm.org/D140031

flang/include/flang/Optimizer/Dialect/FIROps.td
flang/lib/Lower/ConvertExpr.cpp
flang/lib/Optimizer/Builder/FIRBuilder.cpp
flang/lib/Optimizer/Builder/MutableBox.cpp
flang/lib/Optimizer/Dialect/FIROps.cpp
flang/unittests/Optimizer/FortranVariableTest.cpp

index a6b84ee9efcbffaf340bff005d2f3ce8272da7ce..1e29710e39d7a637ac8302178ca11c11fc696f2e 100644 (file)
@@ -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]> {
index e45eb8f213370485e65c60f6a824a9a5be2a4f85..e0dc8275e6a00d02801d82ad7f2f230fedf65d1d 100644 (file)
@@ -4375,8 +4375,7 @@ private:
     llvm::SmallVector<mlir::Value> 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<fir::ShapeOp>(loc, shapeTy, idxShape);
+    return builder.create<fir::ShapeOp>(loc, idxShape);
   }
 
   fir::ShapeOp genShapeOp(llvm::ArrayRef<mlir::Value> shape) {
index a4644a64afc4eeebd05bdcb4596b0a6cc9db6f1b..0c66ed75cc01e9c6f96d3f60c0ca60d0b1f8c3c3 100644 (file)
@@ -379,8 +379,7 @@ fir::StringLitOp fir::FirOpBuilder::createStringLitOp(mlir::Location loc,
 
 mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc,
                                         llvm::ArrayRef<mlir::Value> exts) {
-  auto shapeType = fir::ShapeType::get(getContext(), exts.size());
-  return create<fir::ShapeOp>(loc, shapeType, exts);
+  return create<fir::ShapeOp>(loc, exts);
 }
 
 mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc,
index c470044f5c96bfd92836a14941c386d89acf1df8..7bdcb81b50c8418eb999c309388db0e70e1d6a50 100644 (file)
@@ -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<fir::ShapeOp>(loc, shapeType, extents);
+      shape = builder.create<fir::ShapeOp>(loc, extents);
     } else {
       llvm::SmallVector<mlir::Value> shapeShiftBounds;
       for (auto [lb, extent] : llvm::zip(lbounds, extents)) {
index 800bd2375457f8ba9bb9d6cc464a5b81cfbbcbc4..79313b9f76448f4030cee2ee166909c2fc9fe155 100644 (file)
@@ -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
 //===----------------------------------------------------------------------===//
index 45262239d6166b89b1014865ac8ffb4450130091..42ed2257f58057b812ff5abda117a75786c3cd12 100644 (file)
@@ -36,8 +36,7 @@ public:
   }
 
   mlir::Value createShape(llvm::ArrayRef<mlir::Value> extents) {
-    mlir::Type shapeType = fir::ShapeType::get(&context, extents.size());
-    return builder->create<fir::ShapeOp>(getLoc(), shapeType, extents);
+    return builder->create<fir::ShapeOp>(getLoc(), extents);
   }
   mlir::MLIRContext context;
   std::unique_ptr<mlir::OpBuilder> builder;