[PATCH] D115797: [Flang][NFC] Add test with shape for allocmem and freemem

Kiran Chandramohan via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 15 05:15:17 PST 2021


kiranchandramohan created this revision.
kiranchandramohan added reviewers: AlexisPerry, clementval, awarzynski, rovka.
Herald added a project: Flang.
kiranchandramohan requested review of this revision.
Herald added subscribers: llvm-commits, jdoerfert.
Herald added a project: LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D115797

Files:
  flang/test/Fir/convert-to-llvm.fir


Index: flang/test/Fir/convert-to-llvm.fir
===================================================================
--- flang/test/Fir/convert-to-llvm.fir
+++ flang/test/Fir/convert-to-llvm.fir
@@ -202,6 +202,58 @@
 // CHECK:              llvm.call @free([[B2]])
 // CHECK:              llvm.return
 
+
+func @test_with_shape(%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.allocmem !fir.array<?x?xf32>, %1, %3 {bindc_name = "aa", uniq_name = "_QFss2Eaa"}
+  fir.freemem %4 : !fir.heap<!fir.array<?x?xf32>>
+  return
+}
+
+// CHECK-LABEL: llvm.func @test_with_shape
+// CHECK-SAME: %[[ARG0:.*]]: !llvm.ptr<i32>, %[[ARG1:.*]]: !llvm.ptr<i32>
+// CHECK:   %[[M:.*]] = llvm.load %[[ARG0]] : !llvm.ptr<i32>
+// CHECK:   %[[M_EXT:.*]] = llvm.sext %[[M]] : i32 to i64
+// CHECK:   %[[N:.*]] = llvm.load %[[ARG1]] : !llvm.ptr<i32>
+// CHECK:   %[[N_EXT:.*]] = llvm.sext %[[N]] : i32 to i64
+// CHECK:   %[[FOUR:.*]] = llvm.mlir.constant(4 : i64) : i64
+// CHECK:   %[[DIM1_SIZE:.*]] = llvm.mul %[[FOUR]], %[[M_EXT]]  : i64
+// CHECK:   %[[TOTAL_SIZE:.*]] = llvm.mul %[[DIM1_SIZE]], %[[N_EXT]]  : i64
+// CHECK:   %[[MEM:.*]] = llvm.call @malloc(%[[TOTAL_SIZE]]) {{.*}}bindc_name = "aa"
+// CHECK:   %[[B1:.*]] = llvm.bitcast %[[MEM]] : !llvm.ptr<i8> to !llvm.ptr<f32>
+// CHECK:   %[[B2:.*]] = llvm.bitcast %[[B1]] : !llvm.ptr<f32> to !llvm.ptr<i8>
+// CHECK:   llvm.call @free(%[[B2]]) : (!llvm.ptr<i8>) -> ()
+// CHECK:   llvm.return
+// CHECK: }
+
+func @test_string_with_shape(%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.allocmem !fir.array<?x!fir.char<1,?>>(%0 : i32), %4 {bindc_name = "s", uniq_name = "_QFsbEs"}
+  fir.freemem %6 : !fir.heap<!fir.array<?x!fir.char<1,?>>>
+  return
+}
+
+// CHECK-LABEL: llvm.func @test_string_with_shape
+// CHECK-SAME: %[[ARG0:.*]]: !llvm.ptr<i32>, %[[ARG1:.*]]: !llvm.ptr<i32>)
+// CHECK:   %[[LEN:.*]] = llvm.load %[[ARG0]] : !llvm.ptr<i32>
+// CHECK:   %[[N:.*]] = llvm.load %[[ARG1]] : !llvm.ptr<i32>
+// CHECK:   %[[N_EXT:.*]] = llvm.sext %[[N]] : i32 to i64
+// CHECK:   %[[ONE:.*]] = llvm.mlir.constant(1 : i64) : i64
+// CHECK:   %[[LEN_EXT:.*]] = llvm.sext %[[LEN]] : i32 to i64
+// CHECK:   %[[LEN_SIZE:.*]] = llvm.mul %[[ONE]], %[[LEN_EXT]]  : i64
+// CHECK:   %[[TOTAL_SIZE:.*]] = llvm.mul %[[LEN_SIZE]], %[[N_EXT]]  : i64
+// CHECK:   %[[MEM:.*]] = llvm.call @malloc(%6) {{.*}}bindc_name = "s"
+// CHECK:   %[[B1:.*]] = llvm.bitcast %[[MEM]] : !llvm.ptr<i8> to !llvm.ptr<i8>
+// CHECK:   %[[B2:.*]] = llvm.bitcast %[[B1]] : !llvm.ptr<i8> to !llvm.ptr<i8>
+// CHECK:   llvm.call @free(%[[B2]]) : (!llvm.ptr<i8>) -> ()
+// CHECK:   llvm.return
+// CHECK: }
+
 // -----
 
 // Verify that fir.unreachable is transformed to llvm.unreachable


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115797.394531.patch
Type: text/x-patch
Size: 2978 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211215/20781252/attachment.bin>


More information about the llvm-commits mailing list