// Tests that `fir.local` ops are able to provide an alloca block when required. // RUN: fir-opt %s -convert-hlfir-to-fir | FileCheck %s fir.declare_reduction @add_reduction_byref_box_heap_UxUxf32 : !fir.ref>>> alloc { %0 = fir.alloca !fir.box>> fir.yield(%0 : !fir.ref>>>) } init { ^bb0(%arg0: !fir.ref>>>, %arg1: !fir.ref>>>): %cst = arith.constant 0.000000e+00 : f32 %0 = fir.load %arg1 : !fir.ref>>> hlfir.assign %cst to %0 : f32, !fir.box>> fir.yield(%arg1 : !fir.ref>>>) } combiner { ^bb0(%arg0: !fir.ref>>>, %arg1: !fir.ref>>>): fir.yield(%arg0 : !fir.ref>>>) } // CHECK-LABEL: fir.declare_reduction @add_reduction_byref_box_heap_UxUxf32 : !fir.ref>>> alloc { // CHECK: %[[VAL_0:.*]] = fir.alloca !fir.box>> // CHECK: fir.yield(%[[VAL_0]] : !fir.ref>>>) // CHECK-LABEL: } init { // CHECK: ^bb0(%[[VAL_0:.*]]: !fir.ref>>>, %[[VAL_1:.*]]: !fir.ref>>>): // CHECK: %[[VAL_2:.*]] = fir.alloca !fir.box>> // CHECK: fir.yield(%[[VAL_1]] : !fir.ref>>>) // CHECK-LABEL: } combiner { // CHECK: ^bb0(%[[VAL_0:.*]]: !fir.ref>>>, %[[VAL_1:.*]]: !fir.ref>>>): // CHECK: fir.yield(%[[VAL_0]] : !fir.ref>>>) // CHECK: }