[flang-commits] [flang] 3121da5 - Revert "[flang] In AllocMemOp lowering, convert types for calling malloc on 32-bit (#129308)"

via flang-commits flang-commits at lists.llvm.org
Fri Mar 7 18:44:38 PST 2025


Author: R
Date: 2025-03-08T02:42:24Z
New Revision: 3121da52aa788199185585aa11f3d55b03adc93d

URL: https://github.com/llvm/llvm-project/commit/3121da52aa788199185585aa11f3d55b03adc93d
DIFF: https://github.com/llvm/llvm-project/commit/3121da52aa788199185585aa11f3d55b03adc93d.diff

LOG: Revert "[flang] In AllocMemOp lowering, convert types for calling malloc on 32-bit (#129308)"

This reverts commit cf1964af5a461196904b663ede04c26555fcff69.

This causes breakage on all the non-x86 buildbots as they don't have the i686
target enabled. This was missed in pre-commit CI.

Added: 
    

Modified: 
    flang/lib/Optimizer/CodeGen/CodeGen.cpp
    flang/lib/Optimizer/CodeGen/TypeConverter.cpp
    flang/test/Fir/alloc.fir
    flang/test/Integration/OpenMP/private-global.f90
    flang/test/Lower/OpenMP/parallel-reduction-mixed.f90
    flang/test/Lower/forall/character-1.f90

Removed: 
    flang/test/Fir/alloc-32.fir


################################################################################
diff  --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index caae5e6465d3c..a2743edd7844a 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -982,8 +982,7 @@ struct EmboxCharOpConversion : public fir::FIROpConversion<fir::EmboxCharOp> {
 template <typename ModuleOp>
 static mlir::SymbolRefAttr
 getMallocInModule(ModuleOp mod, fir::AllocMemOp op,
-                  mlir::ConversionPatternRewriter &rewriter,
-                  mlir::Type indexType) {
+                  mlir::ConversionPatternRewriter &rewriter) {
   static constexpr char mallocName[] = "malloc";
   if (auto mallocFunc =
           mod.template lookupSymbol<mlir::LLVM::LLVMFuncOp>(mallocName))
@@ -993,6 +992,7 @@ getMallocInModule(ModuleOp mod, fir::AllocMemOp op,
     return mlir::SymbolRefAttr::get(userMalloc);
 
   mlir::OpBuilder moduleBuilder(mod.getBodyRegion());
+  auto indexType = mlir::IntegerType::get(op.getContext(), 64);
   auto mallocDecl = moduleBuilder.create<mlir::LLVM::LLVMFuncOp>(
       op.getLoc(), mallocName,
       mlir::LLVM::LLVMFunctionType::get(getLlvmPtrType(op.getContext()),
@@ -1002,13 +1002,12 @@ getMallocInModule(ModuleOp mod, fir::AllocMemOp op,
 }
 
 /// Return the LLVMFuncOp corresponding to the standard malloc call.
-static mlir::SymbolRefAttr getMalloc(fir::AllocMemOp op,
-                                     mlir::ConversionPatternRewriter &rewriter,
-                                     mlir::Type indexType) {
+static mlir::SymbolRefAttr
+getMalloc(fir::AllocMemOp op, mlir::ConversionPatternRewriter &rewriter) {
   if (auto mod = op->getParentOfType<mlir::gpu::GPUModuleOp>())
-    return getMallocInModule(mod, op, rewriter, indexType);
+    return getMallocInModule(mod, op, rewriter);
   auto mod = op->getParentOfType<mlir::ModuleOp>();
-  return getMallocInModule(mod, op, rewriter, indexType);
+  return getMallocInModule(mod, op, rewriter);
 }
 
 /// Helper function for generating the LLVM IR that computes the distance
@@ -1068,12 +1067,7 @@ struct AllocMemOpConversion : public fir::FIROpConversion<fir::AllocMemOp> {
     for (mlir::Value opnd : adaptor.getOperands())
       size = rewriter.create<mlir::LLVM::MulOp>(
           loc, ity, size, integerCast(loc, rewriter, ity, opnd));
-    auto mallocTyWidth = lowerTy().getIndexTypeBitwidth();
-    auto mallocTy =
-        mlir::IntegerType::get(rewriter.getContext(), mallocTyWidth);
-    if (mallocTyWidth != ity.getIntOrFloatBitWidth())
-      size = integerCast(loc, rewriter, mallocTy, size);
-    heap->setAttr("callee", getMalloc(heap, rewriter, mallocTy));
+    heap->setAttr("callee", getMalloc(heap, rewriter));
     rewriter.replaceOpWithNewOp<mlir::LLVM::CallOp>(
         heap, ::getLlvmPtrType(heap.getContext()), size,
         addLLVMOpBundleAttrs(rewriter, heap->getAttrs(), 1));

diff  --git a/flang/lib/Optimizer/CodeGen/TypeConverter.cpp b/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
index 1a1d3a8cfb870..89f498433806e 100644
--- a/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
+++ b/flang/lib/Optimizer/CodeGen/TypeConverter.cpp
@@ -28,27 +28,10 @@
 
 namespace fir {
 
-static mlir::LowerToLLVMOptions MakeLowerOptions(mlir::ModuleOp module) {
-  llvm::StringRef dataLayoutString;
-  auto dataLayoutAttr = module->template getAttrOfType<mlir::StringAttr>(
-      mlir::LLVM::LLVMDialect::getDataLayoutAttrName());
-  if (dataLayoutAttr)
-    dataLayoutString = dataLayoutAttr.getValue();
-
-  auto options = mlir::LowerToLLVMOptions(module.getContext());
-  auto llvmDL = llvm::DataLayout(dataLayoutString);
-  if (llvmDL.getPointerSizeInBits(0) == 32) {
-    // FIXME: Should translateDataLayout in the MLIR layer be doing this?
-    options.overrideIndexBitwidth(32);
-  }
-  options.dataLayout = llvmDL;
-  return options;
-}
-
 LLVMTypeConverter::LLVMTypeConverter(mlir::ModuleOp module, bool applyTBAA,
                                      bool forceUnifiedTBAATree,
                                      const mlir::DataLayout &dl)
-    : mlir::LLVMTypeConverter(module.getContext(), MakeLowerOptions(module)),
+    : mlir::LLVMTypeConverter(module.getContext()),
       kindMapping(getKindMapping(module)),
       specifics(CodeGenSpecifics::get(
           module.getContext(), getTargetTriple(module), getKindMapping(module),

diff  --git a/flang/test/Fir/alloc-32.fir b/flang/test/Fir/alloc-32.fir
deleted file mode 100644
index db38ccb5e0381..0000000000000
--- a/flang/test/Fir/alloc-32.fir
+++ /dev/null
@@ -1,29 +0,0 @@
-// RUN: %flang_fc1 -triple i686 -emit-llvm  %s -o - | FileCheck %s
-
-// This is a check for calling malloc using i32 when on a 32-bit target (only).
-// It doesn't contain the comprehensive tests that alloc.fir has, and
-// that file should be used to exercise most code paths.
-
-module attributes {
-    fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.target_triple = "i686"
-} {
-
-// CHECK-LABEL: define ptr @allocmem_scalar_nonchar(
-// CHECK: call ptr @malloc(i32 4)
-func.func @allocmem_scalar_nonchar() -> !fir.heap<i32> {
-  %1 = fir.allocmem i32
-  return %1 : !fir.heap<i32>
-}
-
-// CHECK-LABEL: define ptr @allocmem_scalar_dynchar(
-// CHECK-SAME: i32 %[[len:.*]])
-// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
-// CHECK: %[[mul2:.*]] = mul i64 1, %[[mul1]]
-// CHECK: %[[trunc:.*]] = trunc i64 %[[mul2]] to i32
-// CHECK: call ptr @malloc(i32 %[[trunc]])
-func.func @allocmem_scalar_dynchar(%l : i32) -> !fir.heap<!fir.char<1,?>> {
-  %1 = fir.allocmem !fir.char<1,?>(%l : i32)
-  return %1 : !fir.heap<!fir.char<1,?>>
-}
-
-}

diff  --git a/flang/test/Fir/alloc.fir b/flang/test/Fir/alloc.fir
index 421c06a4780ea..ba9b08dad7764 100644
--- a/flang/test/Fir/alloc.fir
+++ b/flang/test/Fir/alloc.fir
@@ -2,9 +2,6 @@
 // RUN: %flang_fc1 -emit-llvm  %s -o - | FileCheck %s
 
 // UNSUPPORTED: system-windows
-// UNSUPPORTED: target-x86
-// UNSUPPORTED: target=sparc-{{.*}}
-// UNSUPPORTED: target=sparcel-{{.*}}
 
 // CHECK-LABEL: define ptr @alloca_scalar_nonchar()
 // CHECK: alloca i32, i64 1

diff  --git a/flang/test/Integration/OpenMP/private-global.f90 b/flang/test/Integration/OpenMP/private-global.f90
index a177c0e57ae47..1aacfb4c87198 100644
--- a/flang/test/Integration/OpenMP/private-global.f90
+++ b/flang/test/Integration/OpenMP/private-global.f90
@@ -1,7 +1,4 @@
 !RUN: %flang_fc1 -emit-llvm -fopenmp %s -o - | FileCheck %s
-!UNSUPPORTED: target-x86
-!UNSUPPORTED: target=sparc-{{.*}}
-!UNSUPPORTED: target=sparcel-{{.*}}
 
 ! Regression test for https://github.com/llvm/llvm-project/issues/106297
 
@@ -39,7 +36,7 @@ program bug
 ! CHECK:         %[[FIFTY_BOX_VAL:.*]] = insertvalue { ptr, i64, i32, i8, i8, i8, i8 } { ptr undef, i64 4, i32 20240719, i8 0, i8 9, i8 0, i8 0 }, ptr %[[FIFTY]], 0
 ! CHECK:         store { ptr, i64, i32, i8, i8, i8, i8 } %[[FIFTY_BOX_VAL]], ptr %[[BOXED_FIFTY]], align 8
 ! CHECK:         call void @llvm.memcpy.p0.p0.i32(ptr %[[TABLE_BOX_ADDR2]], ptr %[[INTERMEDIATE]], i32 48, i1 false)
-! CHECK:         call void @_FortranAAssign(ptr %[[TABLE_BOX_ADDR2]], ptr %[[BOXED_FIFTY]], ptr @{{.*}}, i32 12)
+! CHECK:         call void @_FortranAAssign(ptr %[[TABLE_BOX_ADDR2]], ptr %[[BOXED_FIFTY]], ptr @{{.*}}, i32 9)
 ! CHECK:         call void @llvm.memcpy.p0.p0.i32(ptr %[[TABLE_BOX_ADDR]], ptr %[[PRIV_BOX_ALLOC]], i32 48, i1 false)
 ! CHECK:         %[[PRIV_TABLE:.*]] = call ptr @malloc(i64 40)
 ! ...

diff  --git a/flang/test/Lower/OpenMP/parallel-reduction-mixed.f90 b/flang/test/Lower/OpenMP/parallel-reduction-mixed.f90
index 953cc2cf2b999..be25169e7d83e 100644
--- a/flang/test/Lower/OpenMP/parallel-reduction-mixed.f90
+++ b/flang/test/Lower/OpenMP/parallel-reduction-mixed.f90
@@ -4,10 +4,6 @@
 ! RUN: %flang_fc1 -emit-llvm -fopenmp -o - %s 2>&1 \
 ! RUN: | FileCheck %s
 
-! UNSUPPORTED: target-x86
-! UNSUPPORTED: target=sparc-{{.*}}
-! UNSUPPORTED: target=sparcel-{{.*}}
-
 subroutine proc
   implicit none
   real(8),allocatable :: F(:)

diff  --git a/flang/test/Lower/forall/character-1.f90 b/flang/test/Lower/forall/character-1.f90
index ef15f5b0cc3c2..d5f968ba93450 100644
--- a/flang/test/Lower/forall/character-1.f90
+++ b/flang/test/Lower/forall/character-1.f90
@@ -2,9 +2,6 @@
 ! RUN: %flang -emit-llvm -flang-deprecated-no-hlfir -S -mmlir -disable-external-name-interop %s -o - | FileCheck %s
 ! Test from Fortran source through to LLVM IR.
 ! UNSUPPORTED: system-windows
-! UNSUPPORTED: target-x86
-! UNSUPPORTED: target=sparc-{{.*}}
-! UNSUPPORTED: target=sparcel-{{.*}}
 
 ! Assumed size array of assumed length character.
 program test


        


More information about the flang-commits mailing list