Skip to content

Commit 77e238d

Browse files
committed
Revert "[flang] Attach proper storage to [hl]fir.declare in lowering. (llvm#155742)"
This reverts commit 83da8d0.
1 parent 6009aa4 commit 77e238d

40 files changed

+280
-555
lines changed

flang/include/flang/Lower/AbstractConverter.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -108,21 +108,6 @@ class AbstractConverter {
108108
/// added or replaced at the inner-most level of the local symbol map.
109109
virtual void bindSymbol(SymbolRef sym, const fir::ExtendedValue &exval) = 0;
110110

111-
/// Binds the symbol's physical storage to a storage descriptor,
112-
/// which is the base address of the storage and the offset
113-
/// within the storage, where the symbol begins.
114-
/// The symbol binding will be added or replaced at the innermost level
115-
/// of the local symbol map.
116-
virtual void
117-
bindSymbolStorage(SymbolRef sym,
118-
Fortran::lower::SymMap::StorageDesc storage) = 0;
119-
120-
/// Returns the storage descriptor previously bound to this symbol.
121-
/// If there is no bound storage, the descriptor will contain
122-
/// nullptr base address.
123-
virtual Fortran::lower::SymMap::StorageDesc
124-
getSymbolStorage(SymbolRef sym) = 0;
125-
126111
/// Override lowering of expression with pre-lowered values.
127112
/// Associate mlir::Value to evaluate::Expr. All subsequent call to
128113
/// genExprXXX() will replace any occurrence of an overridden

flang/include/flang/Lower/ConvertVariable.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,10 @@ void defineCommonBlocks(
9292
/// The COMMON block is a global structure. \p commonValue is the base address
9393
/// of the COMMON block. As the offset from the symbol \p sym, generate the
9494
/// COMMON block member value (commonValue + offset) for the symbol.
95-
/// \p commonSize specifies the syze of the COMMON block in bytes.
96-
/// The size is used to represent a COMMON block reference as
97-
/// a !fir.ref<!fir.array<SIZExi8>>.
9895
mlir::Value genCommonBlockMember(AbstractConverter &converter,
9996
mlir::Location loc,
10097
const Fortran::semantics::Symbol &sym,
101-
mlir::Value commonValue,
102-
std::size_t commonSize);
98+
mlir::Value commonValue);
10399

104100
/// Lower a symbol attributes given an optional storage \p and add it to the
105101
/// provided symbol map. If \preAlloc is not provided, a temporary storage will

flang/include/flang/Lower/SymbolMap.h

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -146,22 +146,14 @@ struct SymbolBox : public fir::details::matcher<SymbolBox> {
146146
class SymMap {
147147
public:
148148
using AcDoVar = llvm::StringRef;
149-
/// Descriptor of a symbol's storage consists of the base address
150-
/// of the storage and the offset within that storage.
151-
using StorageDesc = std::pair<mlir::Value, std::uint64_t>;
152149

153150
SymMap() { pushScope(); }
154151
SymMap(const SymMap &) = delete;
155152

156-
void pushScope() {
157-
symbolMapStack.emplace_back();
158-
storageMapStack.emplace_back();
159-
}
153+
void pushScope() { symbolMapStack.emplace_back(); }
160154
void popScope() {
161155
symbolMapStack.pop_back();
162156
assert(symbolMapStack.size() >= 1);
163-
storageMapStack.pop_back();
164-
assert(storageMapStack.size() >= 1);
165157
}
166158

167159
/// Add an extended value to the symbol table.
@@ -295,8 +287,6 @@ class SymMap {
295287
symbolMapStack.emplace_back();
296288
assert(symbolMapStack.size() == 1);
297289
impliedDoStack.clear();
298-
storageMapStack.clear();
299-
storageMapStack.emplace_back();
300290
}
301291

302292
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &os,
@@ -325,16 +315,6 @@ class SymMap {
325315
return std::nullopt;
326316
}
327317

328-
/// Register the symbol's storage at the innermost level
329-
/// of the symbol table. If the storage is already registered,
330-
/// it will be replaced.
331-
void registerStorage(semantics::SymbolRef sym, StorageDesc storage);
332-
/// Lookup the symbol's storage at the innermost level of the symbol table.
333-
StorageDesc lookupStorage(semantics::SymbolRef sym);
334-
StorageDesc lookupStorage(const semantics::Symbol *sym) {
335-
return lookupStorage(*sym);
336-
}
337-
338318
private:
339319
/// Bind `box` to `symRef` in the symbol map.
340320
void makeSym(semantics::SymbolRef symRef, const SymbolBox &box,
@@ -352,10 +332,6 @@ class SymMap {
352332
// Implied DO induction variables are not represented as Se::Symbol in
353333
// Ev::Expr. Keep the variable markers in their own stack.
354334
llvm::SmallVector<std::pair<AcDoVar, mlir::Value>> impliedDoStack;
355-
356-
// A stack of maps between the symbols and their storage descriptors.
357-
llvm::SmallVector<llvm::DenseMap<const semantics::Symbol *, StorageDesc>>
358-
storageMapStack;
359335
};
360336

361337
/// RAII wrapper for SymMap.

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,7 @@ fir::FortranVariableOpInterface
224224
genDeclare(mlir::Location loc, fir::FirOpBuilder &builder,
225225
const fir::ExtendedValue &exv, llvm::StringRef name,
226226
fir::FortranVariableFlagsAttr flags,
227-
mlir::Value dummyScope = nullptr, mlir::Value storage = nullptr,
228-
std::uint64_t storageOffset = 0,
227+
mlir::Value dummyScope = nullptr,
229228
cuf::DataAttributeAttr dataAttr = {});
230229

231230
/// Generate an hlfir.associate to build a variable from an expression value.

flang/include/flang/Optimizer/HLFIR/HLFIROps.td

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,10 @@ def hlfir_DeclareOp
109109
attr-dict `:` functional-type(operands, results)
110110
}];
111111

112-
let builders = [OpBuilder<(ins "mlir::Value":$memref,
113-
"llvm::StringRef":$uniq_name, CArg<"mlir::Value", "{}">:$shape,
114-
CArg<"mlir::ValueRange", "{}">:$typeparams,
112+
let builders = [
113+
OpBuilder<(ins "mlir::Value":$memref, "llvm::StringRef":$uniq_name,
114+
CArg<"mlir::Value", "{}">:$shape, CArg<"mlir::ValueRange", "{}">:$typeparams,
115115
CArg<"mlir::Value", "{}">:$dummy_scope,
116-
CArg<"mlir::Value", "{}">:$storage,
117-
CArg<"std::uint64_t", "0">:$storage_offset,
118116
CArg<"fir::FortranVariableFlagsAttr", "{}">:$fortran_attrs,
119117
CArg<"cuf::DataAttributeAttr", "{}">:$data_attr)>];
120118

flang/lib/Lower/Bridge.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -631,17 +631,6 @@ class FirConverter : public Fortran::lower::AbstractConverter {
631631
addSymbol(sym, exval, /*forced=*/true);
632632
}
633633

634-
void bindSymbolStorage(
635-
Fortran::lower::SymbolRef sym,
636-
Fortran::lower::SymMap::StorageDesc storage) override final {
637-
localSymbols.registerStorage(sym, std::move(storage));
638-
}
639-
640-
Fortran::lower::SymMap::StorageDesc
641-
getSymbolStorage(Fortran::lower::SymbolRef sym) override final {
642-
return localSymbols.lookupStorage(sym);
643-
}
644-
645634
void
646635
overrideExprValues(const Fortran::lower::ExprToValueMap *map) override final {
647636
exprValueOverrides = map;

flang/lib/Lower/ConvertArrayConstructor.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,9 @@ class RuntimeTempStrategy : public StrategyBase {
315315
mlir::Value tempStorage = builder.createHeapTemporary(
316316
loc, declaredType, tempName, extents, lengths);
317317
mlir::Value shape = builder.genShape(loc, extents);
318-
declare = hlfir::DeclareOp::create(builder, loc, tempStorage, tempName,
319-
shape, lengths);
318+
declare = hlfir::DeclareOp::create(
319+
builder, loc, tempStorage, tempName, shape, lengths,
320+
/*dummy_scope=*/nullptr, fir::FortranVariableFlagsAttr{});
320321
initialBoxValue =
321322
builder.createBox(loc, boxType, declare->getOriginalBase(), shape,
322323
/*slice=*/mlir::Value{}, lengths, /*tdesc=*/{});

flang/lib/Lower/ConvertExprToHLFIR.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1813,8 +1813,10 @@ class HlfirBuilder {
18131813
// Allocate scalar temporary that will be initialized
18141814
// with the values specified by the constructor.
18151815
mlir::Value storagePtr = builder.createTemporary(loc, recTy);
1816-
auto varOp = hlfir::EntityWithAttributes{
1817-
hlfir::DeclareOp::create(builder, loc, storagePtr, "ctor.temp")};
1816+
auto varOp = hlfir::EntityWithAttributes{hlfir::DeclareOp::create(
1817+
builder, loc, storagePtr, "ctor.temp", /*shape=*/nullptr,
1818+
/*typeparams=*/mlir::ValueRange{}, /*dummy_scope=*/nullptr,
1819+
fir::FortranVariableFlagsAttr{})};
18181820

18191821
// Initialize any components that need initialization.
18201822
mlir::Value box = builder.createBox(loc, fir::ExtendedValue{varOp});

flang/lib/Lower/ConvertVariable.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,7 +1413,6 @@ static void instantiateAlias(Fortran::lower::AbstractConverter &converter,
14131413
mlir::Value bytePtr = fir::CoordinateOp::create(
14141414
builder, loc, i8Ptr, storeAddr, mlir::ValueRange{offset});
14151415
mlir::Value typedPtr = castAliasToPointer(builder, loc, symType, bytePtr);
1416-
converter.bindSymbolStorage(sym, {storeAddr, off});
14171416
Fortran::lower::StatementContext stmtCtx;
14181417
mapSymbolAttributes(converter, var, symMap, stmtCtx, typedPtr);
14191418
// Default initialization is possible for equivalence members: see
@@ -1656,15 +1655,13 @@ void Fortran::lower::defineCommonBlocks(
16561655

16571656
mlir::Value Fortran::lower::genCommonBlockMember(
16581657
Fortran::lower::AbstractConverter &converter, mlir::Location loc,
1659-
const Fortran::semantics::Symbol &sym, mlir::Value commonValue,
1660-
std::size_t commonSize) {
1658+
const Fortran::semantics::Symbol &sym, mlir::Value commonValue) {
16611659
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
16621660

16631661
std::size_t byteOffset = sym.GetUltimate().offset();
16641662
mlir::IntegerType i8Ty = builder.getIntegerType(8);
16651663
mlir::Type i8Ptr = builder.getRefType(i8Ty);
1666-
fir::SequenceType::Shape shape(1, commonSize);
1667-
mlir::Type seqTy = builder.getRefType(fir::SequenceType::get(shape, i8Ty));
1664+
mlir::Type seqTy = builder.getRefType(builder.getVarLenSeqTy(i8Ty));
16681665
mlir::Value base = builder.createConvert(loc, seqTy, commonValue);
16691666

16701667
mlir::Value offs =
@@ -1673,8 +1670,6 @@ mlir::Value Fortran::lower::genCommonBlockMember(
16731670
mlir::ValueRange{offs});
16741671
mlir::Type symType = converter.genType(sym);
16751672

1676-
converter.bindSymbolStorage(sym, {base, byteOffset});
1677-
16781673
return Fortran::semantics::FindEquivalenceSet(sym) != nullptr
16791674
? castAliasToPointer(builder, loc, symType, varAddr)
16801675
: builder.createConvert(loc, builder.getRefType(symType), varAddr);
@@ -1703,8 +1698,7 @@ static void instantiateCommon(Fortran::lower::AbstractConverter &converter,
17031698
symMap.addSymbol(common, commonAddr);
17041699
}
17051700

1706-
mlir::Value local =
1707-
genCommonBlockMember(converter, loc, varSym, commonAddr, common.size());
1701+
mlir::Value local = genCommonBlockMember(converter, loc, varSym, commonAddr);
17081702
Fortran::lower::StatementContext stmtCtx;
17091703
mapSymbolAttributes(converter, var, symMap, stmtCtx, local);
17101704
}
@@ -1976,8 +1970,7 @@ static void genDeclareSymbol(Fortran::lower::AbstractConverter &converter,
19761970
// Declare a local pointer variable.
19771971
auto newBase = hlfir::DeclareOp::create(
19781972
builder, loc, boxAlloc, name, /*shape=*/nullptr, lenParams,
1979-
/*dummy_scope=*/nullptr, /*storage=*/nullptr,
1980-
/*storage_offset=*/0, attributes);
1973+
/*dummy_scope=*/nullptr, attributes);
19811974
mlir::Value nullAddr = builder.createNullConstant(
19821975
loc, llvm::cast<fir::BaseBoxType>(ptrBoxType).getEleTy());
19831976

@@ -2007,10 +2000,9 @@ static void genDeclareSymbol(Fortran::lower::AbstractConverter &converter,
20072000
mlir::Value dummyScope;
20082001
if (converter.isRegisteredDummySymbol(sym))
20092002
dummyScope = converter.dummyArgsScopeValue();
2010-
auto [storage, storageOffset] = converter.getSymbolStorage(sym);
2011-
auto newBase = hlfir::DeclareOp::create(
2012-
builder, loc, base, name, shapeOrShift, lenParams, dummyScope, storage,
2013-
storageOffset, attributes, dataAttr);
2003+
auto newBase =
2004+
hlfir::DeclareOp::create(builder, loc, base, name, shapeOrShift,
2005+
lenParams, dummyScope, attributes, dataAttr);
20142006
symMap.addVariableDefinition(sym, newBase, force);
20152007
return;
20162008
}
@@ -2068,10 +2060,8 @@ void Fortran::lower::genDeclareSymbol(
20682060
base = genPackArray(converter, sym, exv);
20692061
dummyScope = converter.dummyArgsScopeValue();
20702062
}
2071-
auto [storage, storageOffset] = converter.getSymbolStorage(sym);
2072-
hlfir::EntityWithAttributes declare =
2073-
hlfir::genDeclare(loc, builder, base, name, attributes, dummyScope,
2074-
storage, storageOffset, dataAttr);
2063+
hlfir::EntityWithAttributes declare = hlfir::genDeclare(
2064+
loc, builder, base, name, attributes, dummyScope, dataAttr);
20752065
symMap.addVariableDefinition(sym, declare.getIfVariableInterface(), force);
20762066
return;
20772067
}

flang/lib/Lower/OpenACC.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,10 +1212,12 @@ mlir::acc::FirstprivateRecipeOp Fortran::lower::createOrGetFirstprivateRecipe(
12121212

12131213
auto leftDeclOp = hlfir::DeclareOp::create(
12141214
builder, loc, recipe.getCopyRegion().getArgument(0), llvm::StringRef{},
1215-
shape);
1215+
shape, llvm::ArrayRef<mlir::Value>{}, /*dummy_scope=*/nullptr,
1216+
fir::FortranVariableFlagsAttr{});
12161217
auto rightDeclOp = hlfir::DeclareOp::create(
12171218
builder, loc, recipe.getCopyRegion().getArgument(1), llvm::StringRef{},
1218-
shape);
1219+
shape, llvm::ArrayRef<mlir::Value>{}, /*dummy_scope=*/nullptr,
1220+
fir::FortranVariableFlagsAttr{});
12191221

12201222
hlfir::DesignateOp::Subscripts triplets =
12211223
getSubscriptsFromArgs(recipe.getCopyRegion().getArguments());
@@ -1521,10 +1523,14 @@ static void genCombiner(fir::FirOpBuilder &builder, mlir::Location loc,
15211523
auto shape =
15221524
genShapeFromBoundsOrArgs(loc, builder, seqTy, bounds,
15231525
recipe.getCombinerRegion().getArguments());
1524-
auto v1DeclareOp = hlfir::DeclareOp::create(builder, loc, value1,
1525-
llvm::StringRef{}, shape);
1526-
auto v2DeclareOp = hlfir::DeclareOp::create(builder, loc, value2,
1527-
llvm::StringRef{}, shape);
1526+
auto v1DeclareOp = hlfir::DeclareOp::create(
1527+
builder, loc, value1, llvm::StringRef{}, shape,
1528+
llvm::ArrayRef<mlir::Value>{},
1529+
/*dummy_scope=*/nullptr, fir::FortranVariableFlagsAttr{});
1530+
auto v2DeclareOp = hlfir::DeclareOp::create(
1531+
builder, loc, value2, llvm::StringRef{}, shape,
1532+
llvm::ArrayRef<mlir::Value>{},
1533+
/*dummy_scope=*/nullptr, fir::FortranVariableFlagsAttr{});
15281534
hlfir::DesignateOp::Subscripts triplets = getTripletsFromArgs(recipe);
15291535

15301536
llvm::SmallVector<mlir::Value> lenParamsLeft;

0 commit comments

Comments
 (0)