brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 311f51d Raw
49 lines · plain
1// Tests that for `boxchar` local values, we use the value yielded by the `init`2// region rather than the local allocated storage.3 4// RUN: fir-opt --split-input-file --simplify-fir-operations %s | FileCheck %s5 6fir.local {type = local} @_QFtestEx_private_boxchar_c8xU : !fir.boxchar<1> init {7^bb0(%arg0: !fir.boxchar<1>, %arg1: !fir.boxchar<1>):8  %0:2 = fir.unboxchar %arg0 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)9  %1 = fir.allocmem !fir.char<1,?>(%0#1 : index) {bindc_name = "", uniq_name = ""}10  %2 = fir.emboxchar %1, %0#1 : (!fir.heap<!fir.char<1,?>>, index) -> !fir.boxchar<1>11  fir.yield(%2 : !fir.boxchar<1>)12} dealloc {13^bb0(%arg0: !fir.boxchar<1>):14  %0:2 = fir.unboxchar %arg0 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)15  %1 = fir.convert %0#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.heap<!fir.char<1,?>>16  fir.freemem %1 : !fir.heap<!fir.char<1,?>>17  fir.yield18}19func.func @_QPtest(%arg0: !fir.boxchar<1> {fir.bindc_name = "x"}) {20  %0 = fir.dummy_scope : !fir.dscope21  %1:2 = fir.unboxchar %arg0 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)22  %2:2 = hlfir.declare %1#0 typeparams %1#1 dummy_scope %0 {uniq_name = "_QFtestEx"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)23  %c1 = arith.constant 1 : index24  %c10 = arith.constant 10 : index25  fir.do_concurrent {26    %5 = fir.alloca i32 {bindc_name = "i"}27    %6:2 = hlfir.declare %5 {uniq_name = "_QFtestEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)28    fir.do_concurrent.loop (%arg1) = (%c1) to (%c10) step (%c1) local(@_QFtestEx_private_boxchar_c8xU %2#0 -> %arg2 : !fir.boxchar<1>) {29      %7 = fir.convert %arg1 : (index) -> i3230      fir.store %7 to %6#0 : !fir.ref<i32>31      %8:2 = fir.unboxchar %arg2 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)32    }33  }34  return35}36 37// CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFtestEx"}38// CHECK: fir.do_loop %{{.*}} = %{{.*}} unordered {39// CHECK:   %[[X_UNBOX:.*]]:2 = fir.unboxchar %[[X_DECL:.*]]#040 41// Verify that the value yielded by the `init` region is the one used through42// out the loop region rather than the local allocation.43// CHECK:   %[[LOCAL_ALLOC:.*]] = fir.allocmem !fir.char<1,?>(%[[X_UNBOX]]#1 : index)44// CHECK:   %[[LOCAL_BOX:.*]] = fir.emboxchar %[[LOCAL_ALLOC]], %[[X_UNBOX]]#145// CHECK:   %[[LOCAL_UNBOX:.*]]:2 = fir.unboxchar %[[LOCAL_BOX]]46// CHECK:   %[[LOCAL_CVT:.*]] = fir.convert %[[LOCAL_UNBOX]]#047// CHECK:   fir.freemem %[[LOCAL_CVT]]48// CHECK: }49