1 // Test hlfir
.where masked region cleanup
lowering (the freemem in the tests
).
2 // RUN
: fir
-opt
%s
--lower
-hlfir
-ordered
-assignments | FileCheck
%s
4 func
.func @
loop_cleanup(%mask
: !fir.ref<!fir.array<2x!fir.logical<4>>>, %x : !fir.ref<!fir.array<2xf32>>, %y : !fir.ref<!fir.array<2xf32>>) {
6 %1 = fir
.allocmem
!fir.array<10xi32>
7 hlfir
.yield
%mask
: !fir.ref<!fir.array<2x!fir.logical<4>>> cleanup {
8 fir
.freemem
%1 : !fir.heap<!fir.array<10xi32>>
12 %1 = fir
.allocmem
!fir.array<1xi32>
13 %2 = fir
.allocmem
!fir.array<2xi32>
14 hlfir
.yield
%x
: !fir.ref<!fir.array<2xf32>> cleanup {
15 fir
.freemem
%2 : !fir.heap<!fir.array<2xi32>>
16 fir
.freemem
%1 : !fir.heap<!fir.array<1xi32>>
19 %1 = fir
.allocmem
!fir.array<3xi32>
20 %2 = fir
.allocmem
!fir.array<4xi32>
21 hlfir
.yield
%y
: !fir.ref<!fir.array<2xf32>> cleanup {
22 fir
.freemem
%2 : !fir.heap<!fir.array<4xi32>>
23 fir
.freemem
%1 : !fir.heap<!fir.array<3xi32>>
29 // CHECK
-LABEL
: func
.func @
loop_cleanup(
30 // CHECK
: %[[VAL_3
:.*]] = fir
.allocmem
!fir.array<10xi32>
33 // CHECK
: %[[VAL_11
:.*]] = fir
.allocmem
!fir.array<1xi32>
34 // CHECK
: %[[VAL_12
:.*]] = fir
.allocmem
!fir.array<2xi32>
35 // CHECK
: %[[VAL_14
:.*]] = fir
.allocmem
!fir.array<3xi32>
36 // CHECK
: %[[VAL_15
:.*]] = fir
.allocmem
!fir.array<4xi32>
37 // CHECK
: hlfir
.assign
38 // CHECK
: fir
.freemem
%[[VAL_15
]] : !fir.heap<!fir.array<4xi32>>
39 // CHECK
: fir
.freemem
%[[VAL_14
]] : !fir.heap<!fir.array<3xi32>>
40 // CHECK
: fir
.freemem
%[[VAL_12
]] : !fir.heap<!fir.array<2xi32>>
41 // CHECK
: fir
.freemem
%[[VAL_11
]] : !fir.heap<!fir.array<1xi32>>
44 // CHECK
: fir
.freemem
%[[VAL_3
]] : !fir.heap<!fir.array<10xi32>>