1*c7c5666aSjeanPerier// Test hlfir.where masked region cleanup lowering (the freemem in the tests). 2*c7c5666aSjeanPerier// RUN: fir-opt %s --lower-hlfir-ordered-assignments | FileCheck %s 3*c7c5666aSjeanPerier 4*c7c5666aSjeanPerierfunc.func @loop_cleanup(%mask : !fir.ref<!fir.array<2x!fir.logical<4>>>, %x : !fir.ref<!fir.array<2xf32>>, %y : !fir.ref<!fir.array<2xf32>>) { 5*c7c5666aSjeanPerier hlfir.where { 6*c7c5666aSjeanPerier %1 = fir.allocmem !fir.array<10xi32> 7*c7c5666aSjeanPerier hlfir.yield %mask : !fir.ref<!fir.array<2x!fir.logical<4>>> cleanup { 8*c7c5666aSjeanPerier fir.freemem %1 : !fir.heap<!fir.array<10xi32>> 9*c7c5666aSjeanPerier } 10*c7c5666aSjeanPerier } do { 11*c7c5666aSjeanPerier hlfir.region_assign { 12*c7c5666aSjeanPerier %1 = fir.allocmem !fir.array<1xi32> 13*c7c5666aSjeanPerier %2 = fir.allocmem !fir.array<2xi32> 14*c7c5666aSjeanPerier hlfir.yield %x : !fir.ref<!fir.array<2xf32>> cleanup { 15*c7c5666aSjeanPerier fir.freemem %2 : !fir.heap<!fir.array<2xi32>> 16*c7c5666aSjeanPerier fir.freemem %1 : !fir.heap<!fir.array<1xi32>> 17*c7c5666aSjeanPerier } 18*c7c5666aSjeanPerier } to { 19*c7c5666aSjeanPerier %1 = fir.allocmem !fir.array<3xi32> 20*c7c5666aSjeanPerier %2 = fir.allocmem !fir.array<4xi32> 21*c7c5666aSjeanPerier hlfir.yield %y : !fir.ref<!fir.array<2xf32>> cleanup { 22*c7c5666aSjeanPerier fir.freemem %2 : !fir.heap<!fir.array<4xi32>> 23*c7c5666aSjeanPerier fir.freemem %1 : !fir.heap<!fir.array<3xi32>> 24*c7c5666aSjeanPerier } 25*c7c5666aSjeanPerier } 26*c7c5666aSjeanPerier } 27*c7c5666aSjeanPerier return 28*c7c5666aSjeanPerier} 29*c7c5666aSjeanPerier// CHECK-LABEL: func.func @loop_cleanup( 30*c7c5666aSjeanPerier// CHECK: %[[VAL_3:.*]] = fir.allocmem !fir.array<10xi32> 31*c7c5666aSjeanPerier// CHECK: fir.do_loop 32*c7c5666aSjeanPerier// CHECK: fir.if 33*c7c5666aSjeanPerier// CHECK: %[[VAL_11:.*]] = fir.allocmem !fir.array<1xi32> 34*c7c5666aSjeanPerier// CHECK: %[[VAL_12:.*]] = fir.allocmem !fir.array<2xi32> 35*c7c5666aSjeanPerier// CHECK: %[[VAL_14:.*]] = fir.allocmem !fir.array<3xi32> 36*c7c5666aSjeanPerier// CHECK: %[[VAL_15:.*]] = fir.allocmem !fir.array<4xi32> 37*c7c5666aSjeanPerier// CHECK: hlfir.assign 38*c7c5666aSjeanPerier// CHECK: fir.freemem %[[VAL_15]] : !fir.heap<!fir.array<4xi32>> 39*c7c5666aSjeanPerier// CHECK: fir.freemem %[[VAL_14]] : !fir.heap<!fir.array<3xi32>> 40*c7c5666aSjeanPerier// CHECK: fir.freemem %[[VAL_12]] : !fir.heap<!fir.array<2xi32>> 41*c7c5666aSjeanPerier// CHECK: fir.freemem %[[VAL_11]] : !fir.heap<!fir.array<1xi32>> 42*c7c5666aSjeanPerier// CHECK: } 43*c7c5666aSjeanPerier// CHECK: } 44*c7c5666aSjeanPerier// CHECK: fir.freemem %[[VAL_3]] : !fir.heap<!fir.array<10xi32>> 45