[PATCH] D114104: [FIR] Convert fir.allocmem and fir.freemem operations to calls to malloc and free, respectively

Kiran Chandramohan via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 7 15:12:41 PST 2021


kiranchandramohan added a comment.

LGTM.

Thanks @AlexisPerry for this patch. I have some info and a request for a test.

Apologies for hijacking the patch with all the discussion about todo vs notify.



================
Comment at: flang/lib/Optimizer/CodeGen/CodeGen.cpp:41
 
+static mlir::Type getVoidPtrType(mlir::MLIRContext *context) {
+  return mlir::LLVM::LLVMPointerType::get(mlir::IntegerType::get(context, 8));
----------------
I just submitted a patch with this function. So you will have to remove on rebase.


================
Comment at: flang/lib/Optimizer/CodeGen/CodeGen.cpp:906
+static mlir::Value
+computeDerivedTypeSize(mlir::Location loc, mlir::Type ptrTy, mlir::Type idxTy,
+                       mlir::ConversionPatternRewriter &rewriter) {
----------------
This is already in.


================
Comment at: flang/lib/Optimizer/CodeGen/CodeGen.cpp:936
+    for (mlir::Value opnd : adaptor.getOperands())
+      size = rewriter.create<mlir::LLVM::MulOp>(
+          loc, ity, size, integerCast(loc, rewriter, ity, opnd));
----------------
I did not see an llvm.mul op in a test. Did we miss a case?

Can we try the following?
```
subroutine ss2(M,N)
  integer :: M, N
  real :: aa(M,N)
end
```

```
  func @_QPss2(%arg0: !fir.ref<i32>, %arg1: !fir.ref<i32>) {
    %0 = fir.load %arg0 : !fir.ref<i32>
    %1 = fir.convert %0 : (i32) -> index
    %2 = fir.load %arg1 : !fir.ref<i32>
    %3 = fir.convert %2 : (i32) -> index
    %4 = fir.alloca !fir.array<?x?xf32>, %1, %3 {bindc_name = "aa", uniq_name = "_QFss2Eaa"}
    return
  }
```

or 

```
subroutine sb(y,n)
  integer :: y, n
  character(len=y) :: s(n)
end subroutine
```
```
func @_QPsb(%arg0: !fir.ref<i32>, %arg1: !fir.ref<i32>) {
  %0 = fir.load %arg0 : !fir.ref<i32>
  %3 = fir.load %arg1 : !fir.ref<i32>
  %4 = fir.convert %3 : (i32) -> index
  %6 = fir.alloca !fir.array<?x!fir.char<1,?>>(%0 : i32), %4 {bindc_name = "s", uniq_name = "_QFsbEs"}
  return
}
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114104/new/

https://reviews.llvm.org/D114104



More information about the llvm-commits mailing list