brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.4 KiB · 613c8e2 Raw
389 lines · plain
1// RUN: tco %s | FileCheck %s2// RUN: %flang_fc1 -emit-llvm  %s -o - | FileCheck %s3 4// UNSUPPORTED: system-windows5// Disabled on 32-bit targets due to the additional `trunc` opcodes required6// UNSUPPORTED: target-x867// UNSUPPORTED: target=sparc-{{.*}}8// UNSUPPORTED: target=sparcel-{{.*}}9 10// CHECK-LABEL: define ptr @alloca_scalar_nonchar()11// CHECK: alloca i32, i64 112func.func @alloca_scalar_nonchar() -> !fir.ref<i32> {13  %1 = fir.alloca i3214  return %1 : !fir.ref<i32>15}16 17// CHECK-LABEL: define ptr @alloca_scalars_nonchar()18// CHECK: alloca i32, i64 10019func.func @alloca_scalars_nonchar() -> !fir.ref<i32> {20  %0 = arith.constant 100 : index21  %1 = fir.alloca i32, %022  return %1 : !fir.ref<i32>23}24 25// CHECK-LABEL: define ptr @allocmem_scalar_nonchar(26// CHECK: call ptr @malloc(i64 4)27func.func @allocmem_scalar_nonchar() -> !fir.heap<i32> {28  %1 = fir.allocmem i3229  return %1 : !fir.heap<i32>30}31 32// CHECK-LABEL: define ptr @allocmem_scalars_nonchar(33// CHECK: call ptr @malloc(i64 400)34func.func @allocmem_scalars_nonchar() -> !fir.heap<i32> {35  %0 = arith.constant 100 : index36  %1 = fir.allocmem i32, %037  return %1 : !fir.heap<i32>38}39 40// CHECK-LABEL: define ptr @alloca_scalar_char(41// CHECK: alloca [10 x i8], i64 142func.func @alloca_scalar_char() -> !fir.ref<!fir.char<1,10>> {43  %1 = fir.alloca !fir.char<1,10>44  return %1 : !fir.ref<!fir.char<1,10>>45}46 47// CHECK-LABEL: define ptr @alloca_scalar_char_kind(48// CHECK: alloca [10 x i16], i64 149func.func @alloca_scalar_char_kind() -> !fir.ref<!fir.char<2,10>> {50  %1 = fir.alloca !fir.char<2,10>51  return %1 : !fir.ref<!fir.char<2,10>>52}53 54// CHECK-LABEL: define ptr @allocmem_scalar_char(55// CHECK: call ptr @malloc(i64 10)56func.func @allocmem_scalar_char() -> !fir.heap<!fir.char<1,10>> {57  %1 = fir.allocmem !fir.char<1,10>58  return %1 : !fir.heap<!fir.char<1,10>>59}60 61// CHECK-LABEL: define ptr @allocmem_scalar_char_kind(62// CHECK: call ptr @malloc(i64 20)63func.func @allocmem_scalar_char_kind() -> !fir.heap<!fir.char<2,10>> {64  %1 = fir.allocmem !fir.char<2,10>65  return %1 : !fir.heap<!fir.char<2,10>>66}67 68// CHECK-LABEL: define ptr @alloca_scalar_dynchar(69// CHECK-SAME: i32 %[[len:.*]])70// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i6471// CHECK: alloca i8, i64 %[[mul1]]72func.func @alloca_scalar_dynchar(%l : i32) -> !fir.ref<!fir.char<1,?>> {73  %1 = fir.alloca !fir.char<1,?>(%l : i32)74  return %1 : !fir.ref<!fir.char<1,?>>75}76 77// CHECK-LABEL: define ptr @alloca_scalar_dynchar_kind(78// CHECK-SAME: i32 %[[len:.*]])79// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i6480// CHECK: alloca i16, i64 %[[mul1]]81func.func @alloca_scalar_dynchar_kind(%l : i32) -> !fir.ref<!fir.char<2,?>> {82  %1 = fir.alloca !fir.char<2,?>(%l : i32)83  return %1 : !fir.ref<!fir.char<2,?>>84}85 86// CHECK-LABEL: define ptr @allocmem_scalar_dynchar(87// CHECK-SAME: i32 %[[len:.*]])88// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i6489// CHECK: %[[mul2:.*]] = mul i64 1, %[[mul1]]90// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 091// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 192// CHECK: call ptr @malloc(i64 %[[size]])93func.func @allocmem_scalar_dynchar(%l : i32) -> !fir.heap<!fir.char<1,?>> {94  %1 = fir.allocmem !fir.char<1,?>(%l : i32)95  return %1 : !fir.heap<!fir.char<1,?>>96}97 98// CHECK-LABEL: define ptr @allocmem_scalar_dynchar_kind(99// CHECK-SAME: i32 %[[len:.*]])100// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64101// CHECK: %[[mul2:.*]] = mul i64 2, %[[mul1]]102// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0103// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1104// CHECK: call ptr @malloc(i64 %[[size]])105func.func @allocmem_scalar_dynchar_kind(%l : i32) -> !fir.heap<!fir.char<2,?>>{106  %1 = fir.allocmem !fir.char<2,?>(%l : i32)107  return %1 : !fir.heap<!fir.char<2,?>>108}109 110// CHECK-LABEL: define ptr @alloca_ptr_to_dynarray_nonchar(111// CHECK: %1 = alloca ptr, i64 1112func.func @alloca_ptr_to_dynarray_nonchar() -> !fir.ref<!fir.ptr<!fir.array<?xi32>>> {113  %1 = fir.alloca !fir.ptr<!fir.array<?xi32>>114  return %1 : !fir.ref<!fir.ptr<!fir.array<?xi32>>>115}116 117// CHECK-LABEL: define ptr @alloca_array_of_nonchar(118// CHECK: alloca [3 x [3 x i32]], i64 1119func.func @alloca_array_of_nonchar() -> !fir.ref<!fir.array<3x3xi32>> {120  %1 = fir.alloca !fir.array<3x3xi32>121  return %1 : !fir.ref<!fir.array<3x3xi32>>122}123 124// CHECK-LABEL: define ptr @alloca_array_of_char(125// CHECK: alloca [3 x [3 x [10 x i8]]], i64 1126func.func @alloca_array_of_char() -> !fir.ref<!fir.array<3x3x!fir.char<1,10>>> {127  %1 = fir.alloca !fir.array<3x3x!fir.char<1,10>>128  return %1 : !fir.ref<!fir.array<3x3x!fir.char<1,10>>>129}130 131// CHECK-LABEL: define ptr @alloca_array_of_dynchar(132// CHECK-SAME: i32 %[[len:.*]])133// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64134// CHECK: %[[mul2:.*]] = mul i64 %[[mul1]], 9135// CHECK: alloca i8, i64 %[[mul2]]136func.func @alloca_array_of_dynchar(%l: i32) -> !fir.ref<!fir.array<3x3x!fir.char<1,?>>> {137  %1 = fir.alloca !fir.array<3x3x!fir.char<1,?>>(%l : i32)138  return %1 : !fir.ref<!fir.array<3x3x!fir.char<1,?>>>139}140 141// CHECK-LABEL: define ptr @allocmem_array_of_nonchar(142// CHECK: call ptr @malloc(i64 36)143func.func @allocmem_array_of_nonchar() -> !fir.heap<!fir.array<3x3xi32>> {144  %1 = fir.allocmem !fir.array<3x3xi32>145  return %1 : !fir.heap<!fir.array<3x3xi32>>146}147 148// CHECK-LABEL: define ptr @allocmem_array_of_char(149// CHECK: call ptr @malloc(i64 90)150func.func @allocmem_array_of_char() -> !fir.heap<!fir.array<3x3x!fir.char<1,10>>> {151  %1 = fir.allocmem !fir.array<3x3x!fir.char<1,10>>152  return %1 : !fir.heap<!fir.array<3x3x!fir.char<1,10>>>153}154 155// CHECK-LABEL: define ptr @allocmem_array_of_dynchar(156// CHECK-SAME: i32 %[[len:.*]])157// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64158// CHECK: %[[mul2:.*]] = mul i64 9, %[[mul1]]159// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0160// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1161// CHECK: call ptr @malloc(i64 %[[size]])162func.func @allocmem_array_of_dynchar(%l: i32) -> !fir.heap<!fir.array<3x3x!fir.char<1,?>>> {163  %1 = fir.allocmem !fir.array<3x3x!fir.char<1,?>>(%l : i32)164  return %1 : !fir.heap<!fir.array<3x3x!fir.char<1,?>>>165}166 167// CHECK-LABEL: define ptr @alloca_dynarray_of_nonchar(168// CHECK-SAME: i64 %[[extent:.*]])169// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 1170// CHECK: alloca [3 x i32], i64 %[[prod1]]171func.func @alloca_dynarray_of_nonchar(%e: index) -> !fir.ref<!fir.array<3x?xi32>> {172  %1 = fir.alloca !fir.array<3x?xi32>, %e173  return %1 : !fir.ref<!fir.array<3x?xi32>>174}175 176// CHECK-LABEL: define ptr @alloca_dynarray_of_nonchar2(177// CHECK-SAME: i64 %[[extent:.*]])178// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 1179// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]180// CHECK: alloca i32, i64 %[[prod2]]181func.func @alloca_dynarray_of_nonchar2(%e: index) -> !fir.ref<!fir.array<?x?xi32>> {182  %1 = fir.alloca !fir.array<?x?xi32>, %e, %e183  return %1 : !fir.ref<!fir.array<?x?xi32>>184}185 186// CHECK-LABEL: define ptr @allocmem_dynarray_of_nonchar(187// CHECK-SAME: i64 %[[extent:.*]])188// CHECK: %[[prod1:.*]] = mul i64 12, %[[extent]]189// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod1]], 0190// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod1]], i64 1191// CHECK: call ptr @malloc(i64 %[[size]])192func.func @allocmem_dynarray_of_nonchar(%e: index) -> !fir.heap<!fir.array<3x?xi32>> {193  %1 = fir.allocmem !fir.array<3x?xi32>, %e194  return %1 : !fir.heap<!fir.array<3x?xi32>>195}196 197// CHECK-LABEL: define ptr @allocmem_dynarray_of_nonchar2(198// CHECK-SAME: i64 %[[extent:.*]])199// CHECK: %[[prod1:.*]] = mul i64 4, %[[extent]]200// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]201// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod2]], 0202// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod2]], i64 1203// CHECK: call ptr @malloc(i64 %[[size]])204func.func @allocmem_dynarray_of_nonchar2(%e: index) -> !fir.heap<!fir.array<?x?xi32>> {205  %1 = fir.allocmem !fir.array<?x?xi32>, %e, %e206  return %1 : !fir.heap<!fir.array<?x?xi32>>207}208 209// CHECK-LABEL: define ptr @alloca_dynarray_of_char(210// CHECK-SAME: i64 %[[extent:.*]])211// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 1212// CHECK: alloca [3 x [10 x i16]], i64 %[[prod1]]213func.func @alloca_dynarray_of_char(%e : index) -> !fir.ref<!fir.array<3x?x!fir.char<2,10>>> {214  %1 = fir.alloca !fir.array<3x?x!fir.char<2,10>>, %e215  return %1 : !fir.ref<!fir.array<3x?x!fir.char<2,10>>>216}217 218// CHECK-LABEL: define ptr @alloca_dynarray_of_char2(219// CHECK-SAME: i64 %[[extent:.*]])220// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 1221// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]222// CHECK: alloca [10 x i16], i64 %[[prod2]]223func.func @alloca_dynarray_of_char2(%e : index) -> !fir.ref<!fir.array<?x?x!fir.char<2,10>>> {224  %1 = fir.alloca !fir.array<?x?x!fir.char<2,10>>, %e, %e225  return %1 : !fir.ref<!fir.array<?x?x!fir.char<2,10>>>226}227 228// CHECK-LABEL: define ptr @allocmem_dynarray_of_char(229// CHECK-SAME: i64 %[[extent:.*]])230// CHECK: %[[prod1:.*]] = mul i64 60, %[[extent]]231// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod1]], 0232// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod1]], i64 1233// CHECK: call ptr @malloc(i64 %[[size]])234func.func @allocmem_dynarray_of_char(%e : index) -> !fir.heap<!fir.array<3x?x!fir.char<2,10>>> {235  %1 = fir.allocmem !fir.array<3x?x!fir.char<2,10>>, %e236  return %1 : !fir.heap<!fir.array<3x?x!fir.char<2,10>>>237}238 239// CHECK-LABEL: define ptr @allocmem_dynarray_of_char2(240// CHECK-SAME: i64 %[[extent:.*]])241// CHECK: %[[prod1:.*]] = mul i64 20, %[[extent]]242// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]243// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod2]], 0244// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1245// CHECK: call ptr @malloc(i64 %[[size]])246func.func @allocmem_dynarray_of_char2(%e : index) -> !fir.heap<!fir.array<?x?x!fir.char<2,10>>> {247  %1 = fir.allocmem !fir.array<?x?x!fir.char<2,10>>, %e, %e248  return %1 : !fir.heap<!fir.array<?x?x!fir.char<2,10>>>249}250 251// CHECK-LABEL: define ptr @alloca_dynarray_of_dynchar(252// CHECK-SAME: i32 %[[len:.*]], i64 %[[extent:.*]])253// CHECK: %[[prod1:.*]] = sext i32 %[[len]] to i64254// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], 3255// CHECK: %[[prod3:.*]] = mul i64 %[[prod2]], %[[extent]]256// CHECK: alloca i16, i64 %[[prod3]]257func.func @alloca_dynarray_of_dynchar(%l: i32, %e : index) -> !fir.ref<!fir.array<3x?x!fir.char<2,?>>> {258  %1 = fir.alloca !fir.array<3x?x!fir.char<2,?>>(%l : i32), %e259  return %1 : !fir.ref<!fir.array<3x?x!fir.char<2,?>>>260}261 262// CHECK-LABEL: define ptr @alloca_dynarray_of_dynchar2(263// CHECK-SAME: i32 %[[len:.*]], i64 %[[extent:.*]])264// CHECK: %[[prod1:.*]] = sext i32 %[[len]] to i64265// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]266// CHECK: %[[prod3:.*]] = mul i64 %[[prod2]], %[[extent]]267// CHECK: alloca i16, i64 %[[prod3]]268func.func @alloca_dynarray_of_dynchar2(%l: i32, %e : index) -> !fir.ref<!fir.array<?x?x!fir.char<2,?>>> {269  %1 = fir.alloca !fir.array<?x?x!fir.char<2,?>>(%l : i32), %e, %e270  return %1 : !fir.ref<!fir.array<?x?x!fir.char<2,?>>>271}272 273// CHECK-LABEL: define ptr @allocmem_dynarray_of_dynchar(274// CHECK-SAME: i32 %[[len:.*]], i64 %[[extent:.*]])275// CHECK: %[[prod1:.*]] = sext i32 %[[len]] to i64276// CHECK: %[[prod2:.*]] = mul i64 6, %[[prod1]]277// CHECK: %[[prod3:.*]] = mul i64 %[[prod2]], %[[extent]]278// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod3]], 0279// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod3]], i64 1280// CHECK: call ptr @malloc(i64 %[[size]])281func.func @allocmem_dynarray_of_dynchar(%l: i32, %e : index) -> !fir.heap<!fir.array<3x?x!fir.char<2,?>>> {282  %1 = fir.allocmem !fir.array<3x?x!fir.char<2,?>>(%l : i32), %e283  return %1 : !fir.heap<!fir.array<3x?x!fir.char<2,?>>>284}285 286// CHECK-LABEL: define ptr @allocmem_dynarray_of_dynchar2(287// CHECK-SAME: i32 %[[len:.*]], i64 %[[extent:.*]])288// CHECK: %[[a:.*]] = sext i32 %[[len]] to i64289// CHECK: %[[prod1:.*]] = mul i64 2, %[[a]]290// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]291// CHECK: %[[prod3:.*]] = mul i64 %[[prod2]], %[[extent]]292// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod3]], 0293// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod3]], i64 1294// CHECK: call ptr @malloc(i64 %[[size]])295func.func @allocmem_dynarray_of_dynchar2(%l: i32, %e : index) -> !fir.heap<!fir.array<?x?x!fir.char<2,?>>> {296  %1 = fir.allocmem !fir.array<?x?x!fir.char<2,?>>(%l : i32), %e, %e297  return %1 : !fir.heap<!fir.array<?x?x!fir.char<2,?>>>298}299 300// CHECK-LABEL: define ptr @alloca_array_with_holes_nonchar(301// CHECK-SAME: i64 %[[a:.*]], i64 %[[b:.*]])302// CHECK: %[[prod1:.*]] = mul i64 15, %[[a]]303// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[b]]304// CHECK: alloca [4 x i32], i64 %[[prod2]]305func.func @alloca_array_with_holes_nonchar(%0 : index, %1 : index) -> !fir.ref<!fir.array<4x?x3x?x5xi32>> {306  %a = fir.alloca !fir.array<4x?x3x?x5xi32>, %0, %1307  return %a : !fir.ref<!fir.array<4x?x3x?x5xi32>>308}309 310// CHECK-LABEL: define ptr @alloca_array_with_holes_char(311// CHECK-SAME: i64 %[[e:.*]])312// CHECK: %[[mul:.*]] = mul i64 4, %[[e]]313// CHECK: alloca [3 x [10 x i16]], i64 %[[mul]]314func.func @alloca_array_with_holes_char(%e: index) -> !fir.ref<!fir.array<3x?x4x!fir.char<2,10>>> {315  %1 = fir.alloca !fir.array<3x?x4x!fir.char<2,10>>, %e316  return %1 : !fir.ref<!fir.array<3x?x4x!fir.char<2,10>>>317}318 319// CHECK-LABEL: define ptr @alloca_array_with_holes_dynchar(320// CHECK-SAME: i64 %[[len:.*]], i64 %[[extent:.*]])321// CHECK: %[[a:.*]] = mul i64 %[[len]], 12322// CHECK: %[[b:.*]] = mul i64 %[[a]], %[[extent]]323// CHECK: alloca i16, i64 %[[b]]324func.func @alloca_array_with_holes_dynchar(%arg0: index, %arg1: index) -> !fir.ref<!fir.array<3x?x4x!fir.char<2,?>>> {325  %1 = fir.alloca !fir.array<3x?x4x!fir.char<2,?>>(%arg0 : index), %arg1326  return %1 : !fir.ref<!fir.array<3x?x4x!fir.char<2,?>>>327}328 329// CHECK-LABEL: define ptr @allocmem_array_with_holes_nonchar(330// CHECK-SAME: i64 %[[e1:.*]], i64 %[[e2:.*]])331// CHECK: %[[a:.*]] = mul i64 240, %[[e1]]332// CHECK: %[[b:.*]] = mul i64 %3, %[[e2]]333// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[b]], 0334// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[b]], i64 1335// CHECK: call ptr @malloc(i64 %[[size]])336func.func @allocmem_array_with_holes_nonchar(%0 : index, %1 : index) -> !fir.heap<!fir.array<4x?x3x?x5xi32>> {337  %a = fir.allocmem !fir.array<4x?x3x?x5xi32>, %0, %1338  return %a : !fir.heap<!fir.array<4x?x3x?x5xi32>>339}340 341// CHECK-LABEL: define ptr @allocmem_array_with_holes_char(342// CHECK-SAME: i64 %[[e:.*]])343// CHECK: %[[mul:.*]] = mul i64 240, %[[e]]344// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul]], 0345// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul]], i64 1346// CHECK: call ptr @malloc(i64 %[[size]])347func.func @allocmem_array_with_holes_char(%e: index) -> !fir.heap<!fir.array<3x?x4x!fir.char<2,10>>> {348  %1 = fir.allocmem !fir.array<3x?x4x!fir.char<2,10>>, %e349  return %1 : !fir.heap<!fir.array<3x?x4x!fir.char<2,10>>>350}351 352// CHECK-LABEL: define ptr @allocmem_array_with_holes_dynchar(353// CHECK-SAME: i64 %[[len:.*]], i64 %[[extent:.*]])354// CHECK: %[[a:.*]] = mul i64 24, %[[len]]355// CHECK: %[[b:.*]] = mul i64 %[[a]], %[[extent]]356// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[b]], 0357// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[b]], i64 1358// CHECK: call ptr @malloc(i64 %[[size]])359func.func @allocmem_array_with_holes_dynchar(%arg0: index, %arg1: index) -> !fir.heap<!fir.array<3x?x4x!fir.char<2,?>>> {360  %1 = fir.allocmem !fir.array<3x?x4x!fir.char<2,?>>(%arg0 : index), %arg1361  return %1 : !fir.heap<!fir.array<3x?x4x!fir.char<2,?>>>362}363 364// CHECK-LABEL: define void @alloca_unlimited_polymorphic_box365// CHECK:    %[[VAL_1:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]], ptr, [1 x i64] }, i64 1366// CHECK:    %[[VAL_0:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, i64 1367// CHECK:    %[[VAL_3:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]], ptr, [1 x i64] }, i64 1368// CHECK:    %[[VAL_2:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, i64 1369 370func.func @alloca_unlimited_polymorphic_box() {371  %0 = fir.alloca !fir.class<none>372  %1 = fir.alloca !fir.class<!fir.array<?xnone>>373  %2 = fir.alloca !fir.box<none>374  %3 = fir.alloca !fir.box<!fir.array<?xnone>>375  // Add real uses so allocas are not trivially dead.376  fir.call @__use_class_none(%0) : (!fir.ref<!fir.class<none>>) -> ()377  fir.call @__use_class_array(%1) : (!fir.ref<!fir.class<!fir.array<?xnone>>>) -> ()378  fir.call @__use_box_none(%2) : (!fir.ref<!fir.box<none>>) -> ()379  fir.call @__use_box_array(%3) : (!fir.ref<!fir.box<!fir.array<?xnone>>>) -> ()380  return381}382func.func private @__use_class_none(!fir.ref<!fir.class<none>>) -> ()383func.func private @__use_class_array(!fir.ref<!fir.class<!fir.array<?xnone>>>) -> ()384func.func private @__use_box_none(!fir.ref<!fir.box<none>>) -> ()385func.func private @__use_box_array(!fir.ref<!fir.box<!fir.array<?xnone>>>) -> ()386// Note: allocmem of fir.box are not possible (fir::HeapType::verify does not387// accept box types), so there is no equivalent of388// alloca_unlimited_polymorphic_box for allocmem.389