Skip to content

Commit 7d673dc

Browse files
Fix lit tests on the flang/maps_for_privatized_symbols pass
1 parent bc54e00 commit 7d673dc

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
// 2. Generalize this for more than just omp.target ops.
2424
//===----------------------------------------------------------------------===//
2525

26+
#include "flang/Optimizer/Builder/FIRBuilder.h"
2627
#include "flang/Optimizer/Dialect/FIRType.h"
28+
#include "flang/Optimizer/Dialect/Support/KindMapping.h"
2729
#include "flang/Optimizer/HLFIR/HLFIROps.h"
2830
#include "flang/Optimizer/OpenMP/Passes.h"
2931
#include "mlir/Dialect/Func/IR/FuncOps.h"
@@ -54,16 +56,29 @@ class MapsForPrivatizedSymbolsPass
5456
return false;
5557
return true;
5658
}
57-
omp::MapInfoOp createMapInfo(Location loc, Value var, OpBuilder &builder) {
59+
omp::MapInfoOp createMapInfo(Location loc, Value var,
60+
fir::FirOpBuilder &builder) {
5861
uint64_t mapTypeTo = static_cast<
5962
std::underlying_type_t<llvm::omp::OpenMPOffloadMappingFlags>>(
6063
llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO);
6164
Operation *definingOp = var.getDefiningOp();
6265
auto declOp = llvm::dyn_cast_or_null<hlfir::DeclareOp>(definingOp);
6366
assert(declOp &&
6467
"Expected defining Op of privatized var to be hlfir.declare");
65-
Value varPtr = declOp.getOriginalBase();
68+
Value varPtr = declOp.getBase();
6669

70+
if (mlir::isa<fir::BaseBoxType>(varPtr.getType()) ||
71+
mlir::isa<fir::BoxCharType>(varPtr.getType())) {
72+
llvm::errs() << "Is a basebox type\n";
73+
OpBuilder::InsertPoint savedInsPoint = builder.saveInsertionPoint();
74+
mlir::Block *allocaBlock = builder.getAllocaBlock();
75+
assert(allocaBlock && "No allocablock found for a funcOp");
76+
builder.setInsertionPointToStart(allocaBlock);
77+
auto alloca = builder.create<fir::AllocaOp>(loc, varPtr.getType());
78+
builder.restoreInsertionPoint(savedInsPoint);
79+
builder.create<fir::StoreOp>(loc, varPtr, alloca);
80+
varPtr = alloca;
81+
}
6782
return builder.create<omp::MapInfoOp>(
6883
loc, varPtr.getType(), varPtr,
6984
TypeAttr::get(llvm::cast<omp::PointerLikeType>(varPtr.getType())
@@ -91,10 +106,12 @@ class MapsForPrivatizedSymbolsPass
91106
addMapInfoOp(targetOp, mapInfoOp);
92107
}
93108
void runOnOperation() override {
94-
MLIRContext *context = &getContext();
95-
OpBuilder builder(context);
109+
ModuleOp module = getOperation()->getParentOfType<ModuleOp>();
110+
fir::KindMapping kindMap = fir::getKindMapping(module);
111+
fir::FirOpBuilder builder{module, std::move(kindMap)};
96112
llvm::DenseMap<Operation *, llvm::SmallVector<omp::MapInfoOp, 4>>
97113
mapInfoOpsForTarget;
114+
98115
getOperation()->walk([&](omp::TargetOp targetOp) {
99116
if (targetOp.getPrivateVars().empty())
100117
return;
@@ -112,7 +129,9 @@ class MapsForPrivatizedSymbolsPass
112129
}
113130
builder.setInsertionPoint(targetOp);
114131
Location loc = targetOp.getLoc();
132+
llvm::errs() << "Here\n";
115133
omp::MapInfoOp mapInfoOp = createMapInfo(loc, privVar, builder);
134+
llvm::errs() << "Here again\n";
116135
mapInfoOps.push_back(mapInfoOp);
117136
LLVM_DEBUG(llvm::dbgs() << "MapsForPrivatizedSymbolsPass created ->\n");
118137
LLVM_DEBUG(mapInfoOp.dump());

flang/test/Lower/OpenMP/DelayedPrivatization/target-private-allocatable.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ end subroutine target_allocatable
6767
! CHECK-SAME: {bindc_name = "alloc_var", {{.*}}}
6868
! CHECK: %[[VAR_DECL:.*]]:2 = hlfir.declare %[[VAR_ALLOC]]
6969

70-
! CHECK: %[[MAP_VAR:.*]] = omp.map.info var_ptr(%[[VAR_DECL]]#1 : [[TYPE]], [[DESC_TYPE]])
70+
! CHECK: %[[MAP_VAR:.*]] = omp.map.info var_ptr(%[[VAR_DECL]]#0 : [[TYPE]], [[DESC_TYPE]])
7171
! CHECK-SAME: map_clauses(to) capture(ByRef) -> [[TYPE]]
7272
! CHECK: omp.target map_entries(%[[MAP_VAR]] -> %arg0 : [[TYPE]]) private(
7373
! CHECK-SAME: @[[VAR_PRIVATIZER_SYM]] %[[VAR_DECL]]#0 -> %{{.*}} : [[TYPE]]) {

flang/test/Lower/OpenMP/DelayedPrivatization/target-private-multiple-variables.f90

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,29 @@ end subroutine target_allocatable
147147
! CHECK-NEXT: }
148148

149149
! CHECK: func.func @_QPtarget_allocatable
150+
! CHECK: %[[CHAR_VAR_DESC_ALLOCA:.*]] = fir.alloca !fir.boxchar<1>
151+
! CHECK: %[[REAL_ARR_DESC_ALLOCA:.*]] = fir.alloca !fir.box<!fir.array<?xf32>>
152+
! CHECK: %[[ALLOC_VAR_ALLOCA:.*]] = fir.alloca !fir.box<!fir.heap<i32>> {bindc_name = "alloc_var", {{.*}}}
153+
! CHECK: %[[ALLOC_VAR_DECL:.*]]:2 = hlfir.declare %[[ALLOC_VAR_ALLOCA]]
150154
! CHECK: %[[MAPPED_ALLOC:.*]] = fir.alloca i32 {bindc_name = "mapped_var", {{.*}}}
151155
! CHECK-NEXT: %[[MAPPED_DECL:.*]]:2 = hlfir.declare %[[MAPPED_ALLOC]]
152-
! CHECK: %[[MAPPED_MI:.*]] = omp.map.info var_ptr(%[[MAPPED_DECL]]#1 : !fir.ref<i32>, i32)
153-
156+
! CHECK: %[[CHAR_VAR_ALLOC:.*]] = fir.alloca !fir.char<1,?>{{.*}} {bindc_name = "char_var", {{.*}}}
157+
! CHECK: %[[CHAR_VAR_DECL:.*]]:2 = hlfir.declare %[[CHAR_VAR_ALLOC]] typeparams
158+
! CHECK: %[[REAL_ARR_ALLOC:.*]] = fir.alloca !fir.array<?xf32>, {{.*}} {bindc_name = "real_arr", {{.*}}}
159+
! CHECK: %[[REAL_ARR_DECL:.*]]:2 = hlfir.declare %[[REAL_ARR_ALLOC]]({{.*}})
160+
! CHECK: %[[MAPPED_MI0:.*]] = omp.map.info var_ptr(%[[MAPPED_DECL]]#1 : !fir.ref<i32>, i32) {{.*}}
161+
! 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+
! 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+
! CHECK: fir.store %[[CHAR_VAR_DECL]]#0 to %[[CHAR_VAR_DESC_ALLOCA]] : !fir.ref<!fir.boxchar<1>>
165+
! CHECK: %[[CHAR_VAR_DESC_MAP:.*]] = omp.map.info var_ptr(%[[CHAR_VAR_DESC_ALLOCA]] : !fir.ref<!fir.boxchar<1>>, !fir.boxchar<1>)
154166
! CHECK: omp.target
155-
! CHECK-SAME: map_entries(%[[MAPPED_MI]] -> %[[MAPPED_ARG:.*]] : !fir.ref<i32>)
167+
! CHECK-SAME: map_entries(
168+
! CHECK-SAME: %[[MAPPED_MI0]] -> %[[MAPPED_ARG0:[^,]+]],
169+
! CHECK-SAME: %[[ALLOC_VAR_MAP]] -> %[[MAPPED_ARG1:[^,]+]]
170+
! CHECK-SAME %[[REAL_ARR_DESC_MAP]] -> %[[MAPPED_ARG2:[^,]+]]
171+
! CHECK_SAME %[[CHAR_VAR_DESC_MAP]] -> %[[MAPPED_ARG3:.[^,]+]] :
172+
! CHECK-SAME !fir.ref<i32>, !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<!fir.box<!fir.array<?xf32>>>, !fir.ref<!fir.boxchar<1>>)
156173
! CHECK-SAME: private(
157174
! CHECK-SAME: @[[ALLOC_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[ALLOC_ARG:[^,]+]],
158175
! CHECK-SAME: @[[REAL_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[REAL_ARG:[^,]+]],
@@ -162,7 +179,6 @@ end subroutine target_allocatable
162179
! CHECK-SAME: @[[CHAR_PRIVATIZER_SYM]] %{{[^[:space:]]+}}#0 -> %[[CHAR_ARG:[^,]+]] :
163180
! CHECK-SAME: !fir.ref<!fir.box<!fir.heap<i32>>>, !fir.ref<f32>, !fir.ref<i64>, !fir.box<!fir.array<?xf32>>, !fir.ref<!fir.complex<4>>, !fir.boxchar<1>) {
164181
! CHECK-NOT: fir.alloca
165-
! CHECK: hlfir.declare %[[MAPPED_ARG]]
166182
! CHECK: hlfir.declare %[[ALLOC_ARG]]
167183
! CHECK: hlfir.declare %[[REAL_ARG]]
168184
! CHECK: hlfir.declare %[[LB_ARG]]

0 commit comments

Comments
 (0)