@@ -87,7 +87,9 @@ func.func @alloca_scalar_dynchar_kind(%l : i32) -> !fir.ref<!fir.char<2,?>> {
8787// CHECK-SAME: i32 %[[len:.*]])
8888// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
8989// CHECK: %[[mul2:.*]] = mul i64 1, %[[mul1]]
90- // CHECK: call ptr @malloc(i64 %[[mul2]])
90+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0
91+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
92+ // CHECK: call ptr @malloc(i64 %[[size]])
9193func.func @allocmem_scalar_dynchar(%l : i32) -> !fir.heap<!fir.char<1,?>> {
9294 %1 = fir.allocmem !fir.char<1,?>(%l : i32)
9395 return %1 : !fir.heap<!fir.char<1,?>>
@@ -97,7 +99,9 @@ func.func @allocmem_scalar_dynchar(%l : i32) -> !fir.heap<!fir.char<1,?>> {
9799// CHECK-SAME: i32 %[[len:.*]])
98100// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
99101// CHECK: %[[mul2:.*]] = mul i64 2, %[[mul1]]
100- // CHECK: call ptr @malloc(i64 %[[mul2]])
102+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0
103+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
104+ // CHECK: call ptr @malloc(i64 %[[size]])
101105func.func @allocmem_scalar_dynchar_kind(%l : i32) -> !fir.heap<!fir.char<2,?>>{
102106 %1 = fir.allocmem !fir.char<2,?>(%l : i32)
103107 return %1 : !fir.heap<!fir.char<2,?>>
@@ -152,7 +156,9 @@ func.func @allocmem_array_of_char() -> !fir.heap<!fir.array<3x3x!fir.char<1,10>>
152156// CHECK-SAME: i32 %[[len:.*]])
153157// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
154158// CHECK: %[[mul2:.*]] = mul i64 9, %[[mul1]]
155- // CHECK: call ptr @malloc(i64 %[[mul2]])
159+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0
160+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
161+ // CHECK: call ptr @malloc(i64 %[[size]])
156162func.func @allocmem_array_of_dynchar(%l: i32) -> !fir.heap<!fir.array<3x3x!fir.char<1,?>>> {
157163 %1 = fir.allocmem !fir.array<3x3x!fir.char<1,?>>(%l : i32)
158164 return %1 : !fir.heap<!fir.array<3x3x!fir.char<1,?>>>
@@ -180,7 +186,9 @@ func.func @alloca_dynarray_of_nonchar2(%e: index) -> !fir.ref<!fir.array<?x?xi32
180186// CHECK-LABEL: define ptr @allocmem_dynarray_of_nonchar(
181187// CHECK-SAME: i64 %[[extent:.*]])
182188// CHECK: %[[prod1:.*]] = mul i64 12, %[[extent]]
183- // CHECK: call ptr @malloc(i64 %[[prod1]])
189+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod1]], 0
190+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod1]], i64 1
191+ // CHECK: call ptr @malloc(i64 %[[size]])
184192func.func @allocmem_dynarray_of_nonchar(%e: index) -> !fir.heap<!fir.array<3x?xi32>> {
185193 %1 = fir.allocmem !fir.array<3x?xi32>, %e
186194 return %1 : !fir.heap<!fir.array<3x?xi32>>
@@ -190,7 +198,9 @@ func.func @allocmem_dynarray_of_nonchar(%e: index) -> !fir.heap<!fir.array<3x?xi
190198// CHECK-SAME: i64 %[[extent:.*]])
191199// CHECK: %[[prod1:.*]] = mul i64 4, %[[extent]]
192200// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]
193- // CHECK: call ptr @malloc(i64 %[[prod2]])
201+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod2]], 0
202+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod2]], i64 1
203+ // CHECK: call ptr @malloc(i64 %[[size]])
194204func.func @allocmem_dynarray_of_nonchar2(%e: index) -> !fir.heap<!fir.array<?x?xi32>> {
195205 %1 = fir.allocmem !fir.array<?x?xi32>, %e, %e
196206 return %1 : !fir.heap<!fir.array<?x?xi32>>
@@ -218,7 +228,9 @@ func.func @alloca_dynarray_of_char2(%e : index) -> !fir.ref<!fir.array<?x?x!fir.
218228// CHECK-LABEL: define ptr @allocmem_dynarray_of_char(
219229// CHECK-SAME: i64 %[[extent:.*]])
220230// CHECK: %[[prod1:.*]] = mul i64 60, %[[extent]]
221- // CHECK: call ptr @malloc(i64 %[[prod1]])
231+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod1]], 0
232+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod1]], i64 1
233+ // CHECK: call ptr @malloc(i64 %[[size]])
222234func.func @allocmem_dynarray_of_char(%e : index) -> !fir.heap<!fir.array<3x?x!fir.char<2,10>>> {
223235 %1 = fir.allocmem !fir.array<3x?x!fir.char<2,10>>, %e
224236 return %1 : !fir.heap<!fir.array<3x?x!fir.char<2,10>>>
@@ -228,7 +240,9 @@ func.func @allocmem_dynarray_of_char(%e : index) -> !fir.heap<!fir.array<3x?x!fi
228240// CHECK-SAME: i64 %[[extent:.*]])
229241// CHECK: %[[prod1:.*]] = mul i64 20, %[[extent]]
230242// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]
231- // CHECK: call ptr @malloc(i64 %[[prod2]])
243+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod2]], 0
244+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
245+ // CHECK: call ptr @malloc(i64 %[[size]])
232246func.func @allocmem_dynarray_of_char2(%e : index) -> !fir.heap<!fir.array<?x?x!fir.char<2,10>>> {
233247 %1 = fir.allocmem !fir.array<?x?x!fir.char<2,10>>, %e, %e
234248 return %1 : !fir.heap<!fir.array<?x?x!fir.char<2,10>>>
@@ -261,7 +275,9 @@ func.func @alloca_dynarray_of_dynchar2(%l: i32, %e : index) -> !fir.ref<!fir.arr
261275// CHECK: %[[prod1:.*]] = sext i32 %[[len]] to i64
262276// CHECK: %[[prod2:.*]] = mul i64 6, %[[prod1]]
263277// CHECK: %[[prod3:.*]] = mul i64 %[[prod2]], %[[extent]]
264- // CHECK: call ptr @malloc(i64 %[[prod3]])
278+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod3]], 0
279+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod3]], i64 1
280+ // CHECK: call ptr @malloc(i64 %[[size]])
265281func.func @allocmem_dynarray_of_dynchar(%l: i32, %e : index) -> !fir.heap<!fir.array<3x?x!fir.char<2,?>>> {
266282 %1 = fir.allocmem !fir.array<3x?x!fir.char<2,?>>(%l : i32), %e
267283 return %1 : !fir.heap<!fir.array<3x?x!fir.char<2,?>>>
@@ -273,7 +289,9 @@ func.func @allocmem_dynarray_of_dynchar(%l: i32, %e : index) -> !fir.heap<!fir.a
273289// CHECK: %[[prod1:.*]] = mul i64 2, %[[a]]
274290// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]
275291// CHECK: %[[prod3:.*]] = mul i64 %[[prod2]], %[[extent]]
276- // CHECK: call ptr @malloc(i64 %[[prod3]])
292+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod3]], 0
293+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod3]], i64 1
294+ // CHECK: call ptr @malloc(i64 %[[size]])
277295func.func @allocmem_dynarray_of_dynchar2(%l: i32, %e : index) -> !fir.heap<!fir.array<?x?x!fir.char<2,?>>> {
278296 %1 = fir.allocmem !fir.array<?x?x!fir.char<2,?>>(%l : i32), %e, %e
279297 return %1 : !fir.heap<!fir.array<?x?x!fir.char<2,?>>>
@@ -312,7 +330,9 @@ func.func @alloca_array_with_holes_dynchar(%arg0: index, %arg1: index) -> !fir.r
312330// CHECK-SAME: i64 %[[e1:.*]], i64 %[[e2:.*]])
313331// CHECK: %[[a:.*]] = mul i64 240, %[[e1]]
314332// CHECK: %[[b:.*]] = mul i64 %3, %[[e2]]
315- // CHECK: call ptr @malloc(i64 %[[b]])
333+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[b]], 0
334+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[b]], i64 1
335+ // CHECK: call ptr @malloc(i64 %[[size]])
316336func.func @allocmem_array_with_holes_nonchar(%0 : index, %1 : index) -> !fir.heap<!fir.array<4x?x3x?x5xi32>> {
317337 %a = fir.allocmem !fir.array<4x?x3x?x5xi32>, %0, %1
318338 return %a : !fir.heap<!fir.array<4x?x3x?x5xi32>>
@@ -321,7 +341,9 @@ func.func @allocmem_array_with_holes_nonchar(%0 : index, %1 : index) -> !fir.hea
321341// CHECK-LABEL: define ptr @allocmem_array_with_holes_char(
322342// CHECK-SAME: i64 %[[e:.*]])
323343// CHECK: %[[mul:.*]] = mul i64 240, %[[e]]
324- // CHECK: call ptr @malloc(i64 %[[mul]])
344+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul]], 0
345+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul]], i64 1
346+ // CHECK: call ptr @malloc(i64 %[[size]])
325347func.func @allocmem_array_with_holes_char(%e: index) -> !fir.heap<!fir.array<3x?x4x!fir.char<2,10>>> {
326348 %1 = fir.allocmem !fir.array<3x?x4x!fir.char<2,10>>, %e
327349 return %1 : !fir.heap<!fir.array<3x?x4x!fir.char<2,10>>>
@@ -331,7 +353,9 @@ func.func @allocmem_array_with_holes_char(%e: index) -> !fir.heap<!fir.array<3x?
331353// CHECK-SAME: i64 %[[len:.*]], i64 %[[extent:.*]])
332354// CHECK: %[[a:.*]] = mul i64 24, %[[len]]
333355// CHECK: %[[b:.*]] = mul i64 %[[a]], %[[extent]]
334- // CHECK: call ptr @malloc(i64 %[[b]])
356+ // CHECK: %[[cmp:.*]] = icmp sgt i64 %[[b]], 0
357+ // CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[b]], i64 1
358+ // CHECK: call ptr @malloc(i64 %[[size]])
335359func.func @allocmem_array_with_holes_dynchar(%arg0: index, %arg1: index) -> !fir.heap<!fir.array<3x?x4x!fir.char<2,?>>> {
336360 %1 = fir.allocmem !fir.array<3x?x4x!fir.char<2,?>>(%arg0 : index), %arg1
337361 return %1 : !fir.heap<!fir.array<3x?x4x!fir.char<2,?>>>
0 commit comments