@@ -38,95 +38,81 @@ end subroutine target_allocatable
38
38
!
39
39
! CHECK: omp.private {type = private}
40
40
! CHECK-SAME: @[[CHAR_PRIVATIZER_SYM:[^[:space:]]+char_var[^[:space:]]+]]
41
- ! CHECK-SAME: : [[CHAR_TYPE:!fir.boxchar<1>]] alloc {
41
+ ! CHECK-SAME: : [[CHAR_TYPE:!fir.boxchar<1>]] init {
42
42
!
43
- ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[CHAR_TYPE]]):
43
+ ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[CHAR_TYPE]], %[[UNUSED:.*]]: [[CHAR_TYPE]] ):
44
44
! CHECK-NEXT: %[[UNBOX:.*]]:2 = fir.unboxchar %[[PRIV_ARG]]
45
- ! CHECK: %[[PRIV_ALLOC:.*]] = fir.alloca !fir.char<1,?>(%[[UNBOX]]#1 : index)
46
- ! CHECK-NEXT : %[[PRIV_DECL :.*]]:2 = hlfir.declare %[[PRIV_ALLOC]] typeparams %[[UNBOX]]#1
47
- ! CHECK-NEXT: omp.yield(%[[PRIV_DECL]]#0 : [[CHAR_TYPE]])
48
- ! CHECK-NEXT: }
45
+ ! CHECK: %[[PRIV_ALLOC:.*]] = fir.allocmem !fir.char<1,?>(%[[UNBOX]]#1 : index)
46
+ ! CHECK: %[[BOXCHAR :.*]] = fir.emboxchar %[[PRIV_ALLOC]], %[[UNBOX]]#1
47
+ ! CHECK-NEXT: omp.yield(%[[BOXCHAR]] : [[CHAR_TYPE]])
48
+ ! CHECK-NEXT: } dealloc {
49
49
50
50
! Test the privatizer for `complex`
51
51
!
52
52
! CHECK: omp.private {type = private}
53
53
! CHECK-SAME: @[[COMP_PRIVATIZER_SYM:[^[:space:]]+comp_var[^[:space:]]+]]
54
- ! CHECK-SAME: : [[COMP_TYPE:!fir.ref<complex<f32>>]] alloc {
55
- !
56
- ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[COMP_TYPE]]):
57
- ! CHECK-NEXT: %[[PRIV_ALLOC:.*]] = fir.alloca complex<f32>
58
- ! CHECK-NEXT: %[[PRIV_DECL:.*]]:2 = hlfir.declare %[[PRIV_ALLOC]]
59
- ! CHECK-NEXT: omp.yield(%[[PRIV_DECL]]#0 : [[COMP_TYPE]])
60
- ! CHECK-NEXT: }
54
+ ! CHECK-SAME: : [[COMP_TYPE:complex<f32>]]{{$}}
61
55
62
56
! Test the privatizer for `real(:)`
63
57
!
64
58
! CHECK: omp.private {type = private}
65
59
! CHECK-SAME: @[[ARR_PRIVATIZER_SYM:[^[:space:]]+real_arr[^[:space:]]+]]
66
- ! CHECK-SAME: : [[ARR_TYPE:!fir.box<!fir.array<\?xf32>>]] alloc {
67
- !
68
- ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[ARR_TYPE]]):
69
- ! CHECK: %[[C0:.*]] = arith.constant 0 : index
70
- ! CHECK-NEXT: %[[DIMS:.*]]:3 = fir.box_dims %[[PRIV_ARG]], %[[C0]] : ([[ARR_TYPE]], index)
71
- ! CHECK: %[[PRIV_ALLOCA:.*]] = fir.alloca !fir.array<{{\?}}xf32>
72
- ! CHECK-NEXT: %[[SHAPE_SHIFT:.*]] = fir.shape_shift %[[DIMS]]#0, %[[DIMS]]#1
73
- ! CHECK-NEXT: %[[PRIV_DECL:.*]]:2 = hlfir.declare %[[PRIV_ALLOCA]](%[[SHAPE_SHIFT]])
74
- ! CHECK-NEXT: omp.yield(%[[PRIV_DECL]]#0 : [[ARR_TYPE]])
60
+ ! CHECK-SAME: : [[ARR_TYPE:!fir.box<!fir.array<\?xf32>>]] init {
61
+ !
62
+ ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: !fir.ref<[[ARR_TYPE]]>, %[[PRIV_ALLOC:.*]]: !fir.ref<[[ARR_TYPE]]>):
63
+ ! CHECK-NEXT: %[[MOLD:.*]] = fir.load %[[PRIV_ARG]]
64
+ ! CHECK-NEXT: %[[C0:.*]] = arith.constant 0 : index
65
+ ! CHECK-NEXT: %[[BOX_DIMS:.*]]:3 = fir.box_dims %[[MOLD]], %[[C0]]
66
+ ! CHECK-NEXT: %[[SHAPE:.*]] = fir.shape %[[BOX_DIMS]]#1
67
+ ! CHECK-NEXT: %[[DATA_ALLOC:.*]] = fir.allocmem !fir.array<?xf32>, %[[BOX_DIMS]]#1
68
+ ! CHECK-NEXT: %[[TRUE:.*]] = arith.constant true
69
+ ! CHECK-NEXT: %[[DECL:.*]]:2 = hlfir.declare %[[DATA_ALLOC:.*]](%[[SHAPE]])
70
+ ! CHECK-NEXT: %[[C0_2:.*]] = arith.constant 0 : index
71
+ ! CHECK-NEXT: %[[BOX_DIMS_2:.*]]:3 = fir.box_dims %[[MOLD]], %[[C0_2]]
72
+ ! CHECK-NEXT: %[[SHAPE_SHIFT:.*]] = fir.shape_shift %[[BOX_DIMS_2]]#0, %[[BOX_DIMS_2]]#1
73
+ ! CHECK-NEXT: %[[BOX:.*]] = fir.rebox %[[DECL]]#0(%[[SHAPE_SHIFT]])
74
+ ! CHECK-NEXT: fir.store %[[BOX]] to %[[PRIV_ALLOC]]
75
+ ! CHECK-NEXT: omp.yield(%[[PRIV_ALLOC]] : !fir.ref<[[ARR_TYPE]]>)
75
76
! CHECK-NEXT: }
76
77
77
78
! Test the privatizer for `real(:)`'s lower bound
78
79
!
79
80
! CHECK: omp.private {type = private}
80
81
! CHECK-SAME: @[[LB_PRIVATIZER_SYM:[^[:space:]]+lb[^[:space:]]+]]
81
- ! CHECK-SAME: : [[LB_TYPE:!fir.ref<i64>]] alloc {
82
-
83
- ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[LB_TYPE]]):
84
- ! CHECK-NEXT: %[[PRIV_ALLOCA:.*]] = fir.alloca i64
85
- ! CHECK-NEXT: %[[PRIV_DECL:.*]]:2 = hlfir.declare %[[PRIV_ALLOCA]]
86
- ! CHECK-NEXT: omp.yield(%[[PRIV_DECL]]#0 : [[LB_TYPE]])
87
- ! CHECK-NEXT: }
82
+ ! CHECK-SAME: : [[LB_TYPE:i64]]{{$}}
88
83
89
84
! Test the privatizer for `real`
90
85
!
91
86
! CHECK: omp.private {type = private}
92
87
! CHECK-SAME: @[[REAL_PRIVATIZER_SYM:[^[:space:]]+real_var[^[:space:]]+]]
93
- ! CHECK-SAME: : [[REAL_TYPE:!fir.ref<f32>]] alloc {
94
-
95
- ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[REAL_TYPE]]):
96
- ! CHECK-NEXT: %[[PRIV_ALLOCA:.*]] = fir.alloca f32
97
- ! CHECK-NEXT: %[[PRIV_DECL:.*]]:2 = hlfir.declare %[[PRIV_ALLOCA]]
98
- ! CHECK-NEXT: omp.yield(%[[PRIV_DECL]]#0 : [[REAL_TYPE]])
99
- ! CHECK-NEXT: }
88
+ ! CHECK-SAME: : [[REAL_TYPE:f32]]{{$}}
100
89
101
90
! Test the privatizer for `allocatable`
102
91
!
103
92
! CHECK: omp.private {type = private}
104
93
! CHECK-SAME: @[[ALLOC_PRIVATIZER_SYM:[^[:space:]]+alloc_var[^[:space:]]+]]
105
- ! CHECK-SAME: : [[ALLOC_TYPE:!fir.ref<!fir. box<!fir.heap<i32>>> ]] alloc {
94
+ ! CHECK-SAME: : [[ALLOC_TYPE:!fir.box<!fir.heap<i32>>]] init {
106
95
!
107
- ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[ALLOC_TYPE]]):
108
- ! CHECK: %[[PRIV_ALLOC:.*]] = fir.alloca !fir.box<!fir.heap<i32>>
96
+ ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: !fir.ref<[[ALLOC_TYPE]]>, %[[PRIV_ALLOC:.*]]: !fir.ref<[[ALLOC_TYPE]]>):
109
97
! CHECK-NEXT: %[[PRIV_ARG_VAL:.*]] = fir.load %[[PRIV_ARG]] : !fir.ref<!fir.box<!fir.heap<i32>>>
110
98
! CHECK-NEXT: %[[PRIV_ARG_BOX:.*]] = fir.box_addr %[[PRIV_ARG_VAL]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
111
99
! CHECK-NEXT: %[[PRIV_ARG_ADDR:.*]] = fir.convert %[[PRIV_ARG_BOX]] : (!fir.heap<i32>) -> i64
112
100
! CHECK-NEXT: %[[C0:.*]] = arith.constant 0 : i64
113
- ! CHECK-NEXT: %[[ALLOC_COND:.*]] = arith.cmpi ne , %[[PRIV_ARG_ADDR]], %[[C0]] : i64
101
+ ! CHECK-NEXT: %[[ALLOC_COND:.*]] = arith.cmpi eq , %[[PRIV_ARG_ADDR]], %[[C0]] : i64
114
102
!
115
103
! CHECK-NEXT: fir.if %[[ALLOC_COND]] {
116
- ! CHECK: %[[PRIV_ALLOCMEM:.*]] = fir.allocmem i32 {fir.must_be_heap = true, {{.*}}}
104
+ ! CHECK-NEXT: %[[ZERO_BOX:.*]] = fir.embox %[[PRIV_ARG_BOX]] : (!fir.heap<i32>) -> !fir.box<!fir.heap<i32>>
105
+ ! CHECK-NEXT: fir.store %[[ZERO_BOX]] to %[[PRIV_ALLOC]] : !fir.ref<!fir.box<!fir.heap<i32>>>
106
+ ! CHECK-NEXT: } else {
107
+ ! CHECK: %[[PRIV_ALLOCMEM:.*]] = fir.allocmem i32
117
108
! CHECK-NEXT: %[[PRIV_ALLOCMEM_BOX:.*]] = fir.embox %[[PRIV_ALLOCMEM]] : (!fir.heap<i32>) -> !fir.box<!fir.heap<i32>>
118
109
! CHECK-NEXT: fir.store %[[PRIV_ALLOCMEM_BOX]] to %[[PRIV_ALLOC]] : !fir.ref<!fir.box<!fir.heap<i32>>>
119
- ! CHECK-NEXT: } else {
120
- ! CHECK-NEXT: %[[ZERO_BITS:.*]] = fir.zero_bits !fir.heap<i32>
121
- ! CHECK-NEXT: %[[ZERO_BOX:.*]] = fir.embox %[[ZERO_BITS]] : (!fir.heap<i32>) -> !fir.box<!fir.heap<i32>>
122
- ! CHECK-NEXT: fir.store %[[ZERO_BOX]] to %[[PRIV_ALLOC]] : !fir.ref<!fir.box<!fir.heap<i32>>>
123
110
! CHECK-NEXT: }
124
111
!
125
- ! CHECK-NEXT: %[[PRIV_DECL:.*]]:2 = hlfir.declare %[[PRIV_ALLOC]]
126
- ! CHECK-NEXT: omp.yield(%[[PRIV_DECL]]#0 : [[ALLOC_TYPE]])
112
+ ! CHECK-NEXT: omp.yield(%[[PRIV_ALLOC]] : !fir.ref<[[ALLOC_TYPE]]>)
127
113
!
128
114
! CHECK-NEXT: } dealloc {
129
- ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: [[ALLOC_TYPE]]):
115
+ ! CHECK-NEXT: ^bb0(%[[PRIV_ARG:.*]]: !fir.ref< [[ALLOC_TYPE]]> ):
130
116
!
131
117
! CHECK-NEXT: %[[PRIV_VAL:.*]] = fir.load %[[PRIV_ARG]]
132
118
! CHECK-NEXT: %[[PRIV_ADDR:.*]] = fir.box_addr %[[PRIV_VAL]]
@@ -135,12 +121,7 @@ end subroutine target_allocatable
135
121
! CHECK-NEXT: %[[PRIV_NULL_COND:.*]] = arith.cmpi ne, %[[PRIV_ADDR_I64]], %[[C0]] : i64
136
122
!
137
123
! CHECK-NEXT: fir.if %[[PRIV_NULL_COND]] {
138
- ! CHECK: %[[PRIV_VAL_2:.*]] = fir.load %[[PRIV_ARG]]
139
- ! CHECK-NEXT: %[[PRIV_ADDR_2:.*]] = fir.box_addr %[[PRIV_VAL_2]]
140
- ! CHECK-NEXT: fir.freemem %[[PRIV_ADDR_2]]
141
- ! CHECK-NEXT: %[[ZEROS:.*]] = fir.zero_bits
142
- ! CHECK-NEXT: %[[ZEROS_BOX:.*]] = fir.embox %[[ZEROS]]
143
- ! CHECK-NEXT: fir.store %[[ZEROS_BOX]] to %[[PRIV_ARG]]
124
+ ! CHECK-NEXT: fir.freemem %[[PRIV_ADDR]]
144
125
! CHECK-NEXT: }
145
126
!
146
127
! CHECK-NEXT: omp.yield
@@ -157,9 +138,9 @@ end subroutine target_allocatable
157
138
! CHECK: %[[CHAR_VAR_DECL:.*]]:2 = hlfir.declare %[[CHAR_VAR_ALLOC]] typeparams
158
139
! CHECK: %[[REAL_ARR_ALLOC:.*]] = fir.alloca !fir.array<?xf32>, {{.*}} {bindc_name = "real_arr", {{.*}}}
159
140
! CHECK: %[[REAL_ARR_DECL:.*]]:2 = hlfir.declare %[[REAL_ARR_ALLOC]]({{.*}})
141
+ ! CHECK: fir.store %[[REAL_ARR_DECL]]#0 to %[[REAL_ARR_DESC_ALLOCA]] : !fir.ref<!fir.box<!fir.array<?xf32>>>
160
142
! CHECK: %[[MAPPED_MI0:.*]] = omp.map.info var_ptr(%[[MAPPED_DECL]]#1 : !fir.ref<i32>, i32) {{.*}}
161
143
! CHECK: %[[ALLOC_VAR_MAP:.*]] = omp.map.info var_ptr(%[[ALLOC_VAR_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.box<!fir.heap<i32>>)
162
- ! CHECK: fir.store %[[REAL_ARR_DECL]]#0 to %[[REAL_ARR_DESC_ALLOCA]] : !fir.ref<!fir.box<!fir.array<?xf32>>>
163
144
! CHECK: %[[REAL_ARR_DESC_MAP:.*]] = omp.map.info var_ptr(%[[REAL_ARR_DESC_ALLOCA]] : !fir.ref<!fir.box<!fir.array<?xf32>>>, !fir.box<!fir.array<?xf32>>)
164
145
! CHECK: fir.store %[[CHAR_VAR_DECL]]#0 to %[[CHAR_VAR_DESC_ALLOCA]] : !fir.ref<!fir.boxchar<1>>
165
146
! CHECK: %[[CHAR_VAR_DESC_MAP:.*]] = omp.map.info var_ptr(%[[CHAR_VAR_DESC_ALLOCA]] : !fir.ref<!fir.boxchar<1>>, !fir.boxchar<1>)
@@ -174,16 +155,15 @@ end subroutine target_allocatable
174
155
! CHECK-SAME: @[[ALLOC_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[ALLOC_ARG:[^,]+]] [map_idx=1],
175
156
! CHECK-SAME: @[[REAL_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[REAL_ARG:[^,]+]],
176
157
! CHECK-SAME: @[[LB_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[LB_ARG:[^,]+]],
177
- ! CHECK-SAME: @[[ARR_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[ARR_ARG:[^,]+]] [map_idx=2],
158
+ ! CHECK-SAME: @[[ARR_PRIVATIZER_SYM]] %{{[^[:space:]]+}} -> %[[ARR_ARG:[^,]+]] [map_idx=2],
178
159
! CHECK-SAME: @[[COMP_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[COMP_ARG:[^,]+]],
179
160
! CHECK-SAME: @[[CHAR_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[CHAR_ARG:[^,]+]] [map_idx=3] :
180
- ! CHECK-SAME: !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<f32>, !fir.ref<i64>, !fir.box<!fir.array<?xf32>>, !fir.ref<complex<f32>>, !fir.boxchar<1>) {
161
+ ! CHECK-SAME: !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<f32>, !fir.ref<i64>, !fir.ref<!fir. box<!fir.array<?xf32> >>, !fir.ref<complex<f32>>, !fir.boxchar<1>) {
181
162
! CHECK-NOT: fir.alloca
182
163
! CHECK: hlfir.declare %[[ALLOC_ARG]]
183
164
! CHECK: hlfir.declare %[[REAL_ARG]]
184
165
! CHECK: hlfir.declare %[[LB_ARG]]
185
- ! CHECK: %[[ARR_ARG_ADDR:.*]] = fir.box_addr %[[ARR_ARG]]
186
- ! CHECK: hlfir.declare %[[ARR_ARG_ADDR]]
166
+ ! CHECK: hlfir.declare %[[ARR_ARG]]
187
167
! CHECK: hlfir.declare %[[COMP_ARG]]
188
168
! CHECK: %[[CHAR_ARG_UNBOX:.*]]:2 = fir.unboxchar %[[CHAR_ARG]]
189
169
! CHECK: hlfir.declare %[[CHAR_ARG_UNBOX]]
0 commit comments