[flang-commits] [flang] [Flang][HLFIR] Lower PACK(array, .TRUE.) to hlfir.reshape (PR #213603)

Tom Eccles via flang-commits flang-commits at lists.llvm.org
Mon Aug 3 05:31:19 PDT 2026


================
@@ -209,6 +210,45 @@ class HlfirReshapeLowering : public HlfirTransformationalIntrinsic {
             mlir::Type stmtResultType) override;
 };
 
+class HlfirPackAsReshapeLowering : public HlfirTransformationalIntrinsic {
+public:
+  using HlfirTransformationalIntrinsic::HlfirTransformationalIntrinsic;
+
+protected:
+  mlir::Value
+  lowerImpl(const Fortran::lower::PreparedActualArguments &loweredActuals,
+            const fir::IntrinsicArgumentLoweringRules *argLowering,
+            mlir::Type stmtResultType) override {
+    auto operands = getOperandVector(loweredActuals, argLowering);
+    assert(operands.size() >= 2);
+    mlir::Value array = operands[0];
+    mlir::Type resultType = computeResultType(array, stmtResultType);
+    mlir::Value sizeArray = array;
+    if (!fir::isa_box_type(array.getType())) {
+      hlfir::Entity arrayEntity = loweredActuals[0]->getActual(loc, builder);
+      auto [exv, cleanup] =
+          hlfir::translateToExtendedValue(loc, builder, arrayEntity);
+      addCleanup(cleanup);
+      sizeArray = builder.createBox(loc, exv);
+    }
+    mlir::Value totalSize = fir::runtime::genSize(builder, loc, sizeArray);
+    mlir::Type indexType = builder.getIndexType();
+    mlir::Type extentType = builder.getDefaultIntegerType();
----------------
tblah wrote:

Default integer can be i32, but `totalSize` will be i64.

https://github.com/llvm/llvm-project/pull/213603


More information about the flang-commits mailing list