Skip to content

Commit 3b30559

Browse files
authored
[flang][OpenMP] Only use HLFIR base in privatization logic (llvm#84123)
Modifies the privatization logic so that the emitted code only used the HLFIR base (i.e. SSA value `#0` returned from `hlfir.declare`). Before that, that emitted privatization logic was a mix of using `#0` and `rust-lang#1` which leads to some difficulties trying to move to delayed privatization (see the discussion on llvm#84033).
1 parent 0f501c3 commit 3b30559

File tree

5 files changed

+49
-42
lines changed

5 files changed

+49
-42
lines changed

flang/include/flang/Optimizer/Builder/HLFIRTools.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,8 @@ translateToExtendedValue(mlir::Location loc, fir::FirOpBuilder &builder,
230230
/// on the IR.
231231
fir::ExtendedValue
232232
translateToExtendedValue(mlir::Location loc, fir::FirOpBuilder &builder,
233-
fir::FortranVariableOpInterface fortranVariable);
233+
fir::FortranVariableOpInterface fortranVariable,
234+
bool forceHlfirBase = false);
234235

235236
/// Generate declaration for a fir::ExtendedValue in memory.
236237
fir::FortranVariableOpInterface

flang/lib/Lower/Bridge.cpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
618618
assert(details && "No host-association found");
619619
const Fortran::semantics::Symbol &hsym = details->symbol();
620620
mlir::Type hSymType = genType(hsym);
621-
Fortran::lower::SymbolBox hsb = lookupSymbol(hsym);
621+
Fortran::lower::SymbolBox hsb =
622+
lookupSymbol(hsym, /*symMap=*/nullptr, /*forceHlfirBase=*/true);
622623

623624
auto allocate = [&](llvm::ArrayRef<mlir::Value> shape,
624625
llvm::ArrayRef<mlir::Value> typeParams) -> mlir::Value {
@@ -727,7 +728,8 @@ class FirConverter : public Fortran::lower::AbstractConverter {
727728
void createHostAssociateVarCloneDealloc(
728729
const Fortran::semantics::Symbol &sym) override final {
729730
mlir::Location loc = genLocation(sym.name());
730-
Fortran::lower::SymbolBox hsb = lookupSymbol(sym);
731+
Fortran::lower::SymbolBox hsb =
732+
lookupSymbol(sym, /*symMap=*/nullptr, /*forceHlfirBase=*/true);
731733

732734
fir::ExtendedValue hexv = symBoxToExtendedValue(hsb);
733735
hexv.match(
@@ -960,13 +962,14 @@ class FirConverter : public Fortran::lower::AbstractConverter {
960962
/// Find the symbol in the local map or return null.
961963
Fortran::lower::SymbolBox
962964
lookupSymbol(const Fortran::semantics::Symbol &sym,
963-
Fortran::lower::SymMap *symMap = nullptr) {
965+
Fortran::lower::SymMap *symMap = nullptr,
966+
bool forceHlfirBase = false) {
964967
symMap = symMap ? symMap : &localSymbols;
965968
if (lowerToHighLevelFIR()) {
966969
if (std::optional<fir::FortranVariableOpInterface> var =
967970
symMap->lookupVariableDefinition(sym)) {
968-
auto exv =
969-
hlfir::translateToExtendedValue(toLocation(), *builder, *var);
971+
auto exv = hlfir::translateToExtendedValue(toLocation(), *builder, *var,
972+
forceHlfirBase);
970973
return exv.match(
971974
[](mlir::Value x) -> Fortran::lower::SymbolBox {
972975
return Fortran::lower::SymbolBox::Intrinsic{x};

flang/lib/Optimizer/Builder/HLFIRTools.cpp

+17-14
Original file line numberDiff line numberDiff line change
@@ -848,36 +848,38 @@ hlfir::LoopNest hlfir::genLoopNest(mlir::Location loc,
848848

849849
static fir::ExtendedValue
850850
translateVariableToExtendedValue(mlir::Location loc, fir::FirOpBuilder &builder,
851-
hlfir::Entity variable) {
851+
hlfir::Entity variable,
852+
bool forceHlfirBase = false) {
852853
assert(variable.isVariable() && "must be a variable");
853854
/// When going towards FIR, use the original base value to avoid
854855
/// introducing descriptors at runtime when they are not required.
855-
mlir::Value firBase = variable.getFirBase();
856+
mlir::Value base =
857+
forceHlfirBase ? variable.getBase() : variable.getFirBase();
856858
if (variable.isMutableBox())
857-
return fir::MutableBoxValue(firBase, getExplicitTypeParams(variable),
859+
return fir::MutableBoxValue(base, getExplicitTypeParams(variable),
858860
fir::MutableProperties{});
859861

860-
if (firBase.getType().isa<fir::BaseBoxType>()) {
862+
if (base.getType().isa<fir::BaseBoxType>()) {
861863
if (!variable.isSimplyContiguous() || variable.isPolymorphic() ||
862864
variable.isDerivedWithLengthParameters() || variable.isOptional()) {
863865
llvm::SmallVector<mlir::Value> nonDefaultLbounds =
864866
getNonDefaultLowerBounds(loc, builder, variable);
865-
return fir::BoxValue(firBase, nonDefaultLbounds,
867+
return fir::BoxValue(base, nonDefaultLbounds,
866868
getExplicitTypeParams(variable));
867869
}
868870
// Otherwise, the variable can be represented in a fir::ExtendedValue
869871
// without the overhead of a fir.box.
870-
firBase = genVariableRawAddress(loc, builder, variable);
872+
base = genVariableRawAddress(loc, builder, variable);
871873
}
872874

873875
if (variable.isScalar()) {
874876
if (variable.isCharacter()) {
875-
if (firBase.getType().isa<fir::BoxCharType>())
876-
return genUnboxChar(loc, builder, firBase);
877+
if (base.getType().isa<fir::BoxCharType>())
878+
return genUnboxChar(loc, builder, base);
877879
mlir::Value len = genCharacterVariableLength(loc, builder, variable);
878-
return fir::CharBoxValue{firBase, len};
880+
return fir::CharBoxValue{base, len};
879881
}
880-
return firBase;
882+
return base;
881883
}
882884
llvm::SmallVector<mlir::Value> extents;
883885
llvm::SmallVector<mlir::Value> nonDefaultLbounds;
@@ -893,15 +895,16 @@ translateVariableToExtendedValue(mlir::Location loc, fir::FirOpBuilder &builder,
893895
}
894896
if (variable.isCharacter())
895897
return fir::CharArrayBoxValue{
896-
firBase, genCharacterVariableLength(loc, builder, variable), extents,
898+
base, genCharacterVariableLength(loc, builder, variable), extents,
897899
nonDefaultLbounds};
898-
return fir::ArrayBoxValue{firBase, extents, nonDefaultLbounds};
900+
return fir::ArrayBoxValue{base, extents, nonDefaultLbounds};
899901
}
900902

901903
fir::ExtendedValue
902904
hlfir::translateToExtendedValue(mlir::Location loc, fir::FirOpBuilder &builder,
903-
fir::FortranVariableOpInterface var) {
904-
return translateVariableToExtendedValue(loc, builder, var);
905+
fir::FortranVariableOpInterface var,
906+
bool forceHlfirBase) {
907+
return translateVariableToExtendedValue(loc, builder, var, forceHlfirBase);
905908
}
906909

907910
std::pair<fir::ExtendedValue, std::optional<hlfir::CleanupFunction>>

flang/test/Lower/OpenMP/parallel-private-clause-str.f90

+5-5
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
!CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C_BOX_REF]] typeparams %{{.*}} {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_allocatable_stringEc"} : (!fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>, i32) -> (!fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>, !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>)
1111
!CHECK: omp.parallel {
1212
!CHECK: %[[C_PVT_BOX_REF:.*]] = fir.alloca !fir.box<!fir.heap<!fir.char<1,?>>> {bindc_name = "c", pinned, uniq_name = "_QFtest_allocatable_stringEc"}
13-
!CHECK: %[[C_BOX:.*]] = fir.load %[[C_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>
13+
!CHECK: %[[C_BOX:.*]] = fir.load %[[C_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>
1414
!CHECK: fir.if %{{.*}} {
1515
!CHECK: %[[C_PVT_MEM:.*]] = fir.allocmem !fir.char<1,?>(%{{.*}} : index) {fir.must_be_heap = true, uniq_name = "_QFtest_allocatable_stringEc.alloc"}
1616
!CHECK: %[[C_PVT_BOX:.*]] = fir.embox %[[C_PVT_MEM]] typeparams %{{.*}} : (!fir.heap<!fir.char<1,?>>, index) -> !fir.box<!fir.heap<!fir.char<1,?>>>
1717
!CHECK: fir.store %[[C_PVT_BOX]] to %[[C_PVT_BOX_REF]] : !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>
1818
!CHECK: }
1919
!CHECK: %[[C_PVT_DECL:.*]]:2 = hlfir.declare %[[C_PVT_BOX_REF]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_allocatable_stringEc"} : (!fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>, !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>)
2020
!CHECK: fir.if %{{.*}} {
21-
!CHECK: %[[C_PVT_BOX:.*]] = fir.load %[[C_PVT_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>
21+
!CHECK: %[[C_PVT_BOX:.*]] = fir.load %[[C_PVT_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>
2222
!CHECK: %[[C_PVT_BOX_ADDR:.*]] = fir.box_addr %[[C_PVT_BOX]] : (!fir.box<!fir.heap<!fir.char<1,?>>>) -> !fir.heap<!fir.char<1,?>>
2323
!CHECK: fir.freemem %[[C_PVT_BOX_ADDR]] : !fir.heap<!fir.char<1,?>>
2424
!CHECK: }
@@ -38,16 +38,16 @@ subroutine test_allocatable_string(n)
3838
!CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C_BOX_REF]] typeparams %{{.*}} {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_allocatable_string_arrayEc"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>, i32) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>)
3939
!CHECK: omp.parallel {
4040
!CHECK: %[[C_PVT_BOX_REF:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>> {bindc_name = "c", pinned, uniq_name = "_QFtest_allocatable_string_arrayEc"}
41-
!CHECK: %{{.*}} = fir.load %[[C_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
41+
!CHECK: %{{.*}} = fir.load %[[C_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
4242
!CHECK: fir.if %{{.*}} {
4343
!CHECK: %[[C_PVT_ALLOC:.*]] = fir.allocmem !fir.array<?x!fir.char<1,?>>(%{{.*}} : index), %{{.*}} {fir.must_be_heap = true, uniq_name = "_QFtest_allocatable_string_arrayEc.alloc"}
4444
!CHECK: %[[C_PVT_BOX:.*]] = fir.embox %[[C_PVT_ALLOC]](%{{.*}}) typeparams %{{.*}} : (!fir.heap<!fir.array<?x!fir.char<1,?>>>, !fir.shapeshift<1>, index) -> !fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>
4545
!CHECK: fir.store %[[C_PVT_BOX]] to %[[C_PVT_BOX_REF]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
4646
!CHECK: }
4747
!CHECK: %[[C_PVT_DECL:.*]]:2 = hlfir.declare %[[C_PVT_BOX_REF]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_allocatable_string_arrayEc"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>)
48-
!CHECK: %{{.*}} = fir.load %[[C_PVT_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
48+
!CHECK: %{{.*}} = fir.load %[[C_PVT_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
4949
!CHECK: fir.if %{{.*}} {
50-
!CHECK: %[[C_PVT_BOX:.*]] = fir.load %[[C_PVT_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
50+
!CHECK: %[[C_PVT_BOX:.*]] = fir.load %[[C_PVT_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
5151
!CHECK: %[[C_PVT_ADDR:.*]] = fir.box_addr %[[C_PVT_BOX]] : (!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>) -> !fir.heap<!fir.array<?x!fir.char<1,?>>>
5252
!CHECK: fir.freemem %[[C_PVT_ADDR]] : !fir.heap<!fir.array<?x!fir.char<1,?>>>
5353
!CHECK: }

flang/test/Lower/OpenMP/parallel-private-clause.f90

+17-17
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ subroutine private_clause_derived_type()
150150
!FIRDialect-DAG: %[[X4_PVT:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?xi32>>> {bindc_name = "x4", pinned, uniq_name = "{{.*}}Ex4"}
151151
!FIRDialect-DAG: %[[X4_PVT_DECL:.*]]:2 = hlfir.declare %[[X4_PVT]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "{{.*}}Ex4"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>)
152152

153-
!FIRDialect-DAG: %[[TMP58:.*]] = fir.load %[[X4_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
154-
!FIRDialect-DAG: %[[TMP97:.*]] = fir.load %[[X4_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
153+
!FIRDialect-DAG: %[[TMP58:.*]] = fir.load %[[X4_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
154+
!FIRDialect-DAG: %[[TMP97:.*]] = fir.load %[[X4_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
155155
!FIRDialect-DAG: %[[TMP98:.*]]:3 = fir.box_dims %[[TMP97]], {{.*}} : (!fir.box<!fir.heap<!fir.array<?xi32>>>, index) -> (index, index, index)
156156

157157
!FIRDialect-DAG: %[[TMP101:.*]] = fir.allocmem !fir.array<?xi32>, {{.*}} {fir.must_be_heap = true, uniq_name = "{{.*}}Ex4.alloc"}
@@ -192,12 +192,12 @@ subroutine private_clause_allocatable()
192192
!FIRDialect-DAG: }
193193
!FIRDialect-DAG: %[[X5_PVT_DECL:.*]]:2 = hlfir.declare %[[X5_PVT]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFprivate_clause_real_call_allocatableEx5"} : (!fir.ref<!fir.box<!fir.heap<f32>>>) -> (!fir.ref<!fir.box<!fir.heap<f32>>>, !fir.ref<!fir.box<!fir.heap<f32>>>)
194194
!FIRDialect-DAG: fir.call @_QFprivate_clause_real_call_allocatablePhelper_private_clause_real_call_allocatable(%[[X5_PVT_DECL]]#0) fastmath<contract> : (!fir.ref<!fir.box<!fir.heap<f32>>>) -> ()
195-
!FIRDialect-DAG: %{{.*}} = fir.load %[[X5_PVT_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
195+
!FIRDialect-DAG: %{{.*}} = fir.load %[[X5_PVT_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
196196

197197
!FIRDialect-DAG: fir.if %{{.*}} {
198-
!FIRDialect-DAG: %{{.*}} = fir.load %[[X5_PVT_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
198+
!FIRDialect-DAG: %{{.*}} = fir.load %[[X5_PVT_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
199199

200-
!FIRDialect-DAG: fir.store %{{.*}} to %[[X5_PVT_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
200+
!FIRDialect-DAG: fir.store %{{.*}} to %[[X5_PVT_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
201201
!FIRDialect-DAG: }
202202
!FIRDialect-DAG: omp.terminator
203203
!FIRDialect-DAG: }
@@ -313,12 +313,12 @@ subroutine simple_loop_1
313313
print*, i
314314
end do
315315
! FIRDialect: omp.yield
316-
! FIRDialect: {{%.*}} = fir.load %[[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
316+
! FIRDialect: {{%.*}} = fir.load %[[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
317317
! FIRDialect: fir.if {{%.*}} {
318-
! FIRDialect: [[LD:%.*]] = fir.load %[[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
318+
! FIRDialect: [[LD:%.*]] = fir.load %[[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
319319
! FIRDialect: [[AD:%.*]] = fir.box_addr [[LD]] : (!fir.box<!fir.heap<f32>>) -> !fir.heap<f32>
320320
! FIRDialect: fir.freemem [[AD]] : !fir.heap<f32>
321-
! FIRDialect: fir.store {{%.*}} to %[[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
321+
! FIRDialect: fir.store {{%.*}} to %[[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
322322
!$OMP END DO
323323
! FIRDialect: omp.terminator
324324
!$OMP END PARALLEL
@@ -351,12 +351,12 @@ subroutine simple_loop_2
351351
print*, i
352352
end do
353353
! FIRDialect: omp.yield
354-
! FIRDialect: {{%.*}} = fir.load %[[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
354+
! FIRDialect: {{%.*}} = fir.load %[[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
355355
! FIRDialect: fir.if {{%.*}} {
356-
! FIRDialect: [[LD:%.*]] = fir.load %[[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
356+
! FIRDialect: [[LD:%.*]] = fir.load %[[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
357357
! FIRDialect: [[AD:%.*]] = fir.box_addr [[LD]] : (!fir.box<!fir.heap<f32>>) -> !fir.heap<f32>
358358
! FIRDialect: fir.freemem [[AD]] : !fir.heap<f32>
359-
! FIRDialect: fir.store {{%.*}} to %[[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
359+
! FIRDialect: fir.store {{%.*}} to %[[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
360360
!$OMP END DO
361361
! FIRDialect: omp.terminator
362362
!$OMP END PARALLEL
@@ -388,12 +388,12 @@ subroutine simple_loop_3
388388
print*, i
389389
end do
390390
! FIRDialect: omp.yield
391-
! FIRDialect: {{%.*}} = fir.load [[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
391+
! FIRDialect: {{%.*}} = fir.load [[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
392392
! FIRDialect: fir.if {{%.*}} {
393-
! FIRDialect: [[LD:%.*]] = fir.load [[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
393+
! FIRDialect: [[LD:%.*]] = fir.load [[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
394394
! FIRDialect: [[AD:%.*]] = fir.box_addr [[LD]] : (!fir.box<!fir.heap<f32>>) -> !fir.heap<f32>
395395
! FIRDialect: fir.freemem [[AD]] : !fir.heap<f32>
396-
! FIRDialect: fir.store {{%.*}} to [[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
396+
! FIRDialect: fir.store {{%.*}} to [[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
397397
!$OMP END PARALLEL DO
398398
! FIRDialect: omp.terminator
399399
end subroutine
@@ -421,10 +421,10 @@ subroutine simd_loop_1
421421
end do
422422
!$OMP END SIMD
423423
! FIRDialect: omp.yield
424-
! FIRDialect: {{%.*}} = fir.load [[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
424+
! FIRDialect: {{%.*}} = fir.load [[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
425425
! FIRDialect: fir.if {{%.*}} {
426-
! FIRDialect: [[LD:%.*]] = fir.load [[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
426+
! FIRDialect: [[LD:%.*]] = fir.load [[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
427427
! FIRDialect: [[AD:%.*]] = fir.box_addr [[LD]] : (!fir.box<!fir.heap<f32>>) -> !fir.heap<f32>
428428
! FIRDialect: fir.freemem [[AD]] : !fir.heap<f32>
429-
! FIRDialect: fir.store {{%.*}} to [[R_DECL]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
429+
! FIRDialect: fir.store {{%.*}} to [[R_DECL]]#0 : !fir.ref<!fir.box<!fir.heap<f32>>>
430430
end subroutine

0 commit comments

Comments
 (0)