@@ -87,7 +87,9 @@ func.func @alloca_scalar_dynchar_kind(%l : i32) -> !fir.ref<!fir.char<2,?>> {
87
87
// CHECK-SAME: i32 %[[len:.*]])
88
88
// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
89
89
// 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]])
91
93
func.func @allocmem_scalar_dynchar(%l : i32) -> !fir.heap<!fir.char<1,?>> {
92
94
%1 = fir.allocmem !fir.char<1,?>(%l : i32)
93
95
return %1 : !fir.heap<!fir.char<1,?>>
@@ -97,7 +99,9 @@ func.func @allocmem_scalar_dynchar(%l : i32) -> !fir.heap<!fir.char<1,?>> {
97
99
// CHECK-SAME: i32 %[[len:.*]])
98
100
// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
99
101
// 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]])
101
105
func.func @allocmem_scalar_dynchar_kind(%l : i32) -> !fir.heap<!fir.char<2,?>>{
102
106
%1 = fir.allocmem !fir.char<2,?>(%l : i32)
103
107
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>>
152
156
// CHECK-SAME: i32 %[[len:.*]])
153
157
// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
154
158
// 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]])
156
162
func.func @allocmem_array_of_dynchar(%l: i32) -> !fir.heap<!fir.array<3x3x!fir.char<1,?>>> {
157
163
%1 = fir.allocmem !fir.array<3x3x!fir.char<1,?>>(%l : i32)
158
164
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
180
186
// CHECK-LABEL: define ptr @allocmem_dynarray_of_nonchar(
181
187
// CHECK-SAME: i64 %[[extent:.*]])
182
188
// 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]])
184
192
func.func @allocmem_dynarray_of_nonchar(%e: index) -> !fir.heap<!fir.array<3x?xi32>> {
185
193
%1 = fir.allocmem !fir.array<3x?xi32>, %e
186
194
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
190
198
// CHECK-SAME: i64 %[[extent:.*]])
191
199
// CHECK: %[[prod1:.*]] = mul i64 4, %[[extent]]
192
200
// 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]])
194
204
func.func @allocmem_dynarray_of_nonchar2(%e: index) -> !fir.heap<!fir.array<?x?xi32>> {
195
205
%1 = fir.allocmem !fir.array<?x?xi32>, %e, %e
196
206
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.
218
228
// CHECK-LABEL: define ptr @allocmem_dynarray_of_char(
219
229
// CHECK-SAME: i64 %[[extent:.*]])
220
230
// 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]])
222
234
func.func @allocmem_dynarray_of_char(%e : index) -> !fir.heap<!fir.array<3x?x!fir.char<2,10>>> {
223
235
%1 = fir.allocmem !fir.array<3x?x!fir.char<2,10>>, %e
224
236
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
228
240
// CHECK-SAME: i64 %[[extent:.*]])
229
241
// CHECK: %[[prod1:.*]] = mul i64 20, %[[extent]]
230
242
// 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]])
232
246
func.func @allocmem_dynarray_of_char2(%e : index) -> !fir.heap<!fir.array<?x?x!fir.char<2,10>>> {
233
247
%1 = fir.allocmem !fir.array<?x?x!fir.char<2,10>>, %e, %e
234
248
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
261
275
// CHECK: %[[prod1:.*]] = sext i32 %[[len]] to i64
262
276
// CHECK: %[[prod2:.*]] = mul i64 6, %[[prod1]]
263
277
// 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]])
265
281
func.func @allocmem_dynarray_of_dynchar(%l: i32, %e : index) -> !fir.heap<!fir.array<3x?x!fir.char<2,?>>> {
266
282
%1 = fir.allocmem !fir.array<3x?x!fir.char<2,?>>(%l : i32), %e
267
283
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
273
289
// CHECK: %[[prod1:.*]] = mul i64 2, %[[a]]
274
290
// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]
275
291
// 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]])
277
295
func.func @allocmem_dynarray_of_dynchar2(%l: i32, %e : index) -> !fir.heap<!fir.array<?x?x!fir.char<2,?>>> {
278
296
%1 = fir.allocmem !fir.array<?x?x!fir.char<2,?>>(%l : i32), %e, %e
279
297
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
312
330
// CHECK-SAME: i64 %[[e1:.*]], i64 %[[e2:.*]])
313
331
// CHECK: %[[a:.*]] = mul i64 240, %[[e1]]
314
332
// 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]])
316
336
func.func @allocmem_array_with_holes_nonchar(%0 : index, %1 : index) -> !fir.heap<!fir.array<4x?x3x?x5xi32>> {
317
337
%a = fir.allocmem !fir.array<4x?x3x?x5xi32>, %0, %1
318
338
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
321
341
// CHECK-LABEL: define ptr @allocmem_array_with_holes_char(
322
342
// CHECK-SAME: i64 %[[e:.*]])
323
343
// 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]])
325
347
func.func @allocmem_array_with_holes_char(%e: index) -> !fir.heap<!fir.array<3x?x4x!fir.char<2,10>>> {
326
348
%1 = fir.allocmem !fir.array<3x?x4x!fir.char<2,10>>, %e
327
349
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?
331
353
// CHECK-SAME: i64 %[[len:.*]], i64 %[[extent:.*]])
332
354
// CHECK: %[[a:.*]] = mul i64 24, %[[len]]
333
355
// 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]])
335
359
func.func @allocmem_array_with_holes_dynchar(%arg0: index, %arg1: index) -> !fir.heap<!fir.array<3x?x4x!fir.char<2,?>>> {
336
360
%1 = fir.allocmem !fir.array<3x?x4x!fir.char<2,?>>(%arg0 : index), %arg1
337
361
return %1 : !fir.heap<!fir.array<3x?x4x!fir.char<2,?>>>
0 commit comments