diff options
author | Valentin Clement <clementval@gmail.com> | 2022-02-07 09:12:17 +0100 |
---|---|---|
committer | Valentin Clement <clementval@gmail.com> | 2022-02-07 09:14:09 +0100 |
commit | 2c2e5a5d0f191027ab447899599baeaf744fc2eb (patch) | |
tree | 011fb9380ee2ae62f54eff24c2e64221f7717c3f /flang/lib/Lower/ConvertType.cpp | |
parent | 24562babdf16093052230e91332f1b1f13e2c4de (diff) | |
download | llvm-2c2e5a5d0f191027ab447899599baeaf744fc2eb.zip llvm-2c2e5a5d0f191027ab447899599baeaf744fc2eb.tar.gz llvm-2c2e5a5d0f191027ab447899599baeaf744fc2eb.tar.bz2 |
[flang] Basic local variable lowering
This patch add lowering for simple local variable.
- The signatures in `ConvertType.h` have been simplified to take advantage of the `AbstractConverter`.
- The lowering make use of the `allocateLocal` from the `FirOpBuilder`.
This lowering is used in patch D118982
This patch is part of the upstreaming effort from fir-dev branch.
Reviewed By: kiranchandramohan, jeanPerier, schweitz
Differential Revision: https://reviews.llvm.org/D118978
Diffstat (limited to 'flang/lib/Lower/ConvertType.cpp')
-rw-r--r-- | flang/lib/Lower/ConvertType.cpp | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/flang/lib/Lower/ConvertType.cpp b/flang/lib/Lower/ConvertType.cpp index a411c0f..ffff36d 100644 --- a/flang/lib/Lower/ConvertType.cpp +++ b/flang/lib/Lower/ConvertType.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "flang/Lower/ConvertType.h" +#include "flang/Lower/AbstractConverter.h" #include "flang/Lower/PFTBuilder.h" #include "flang/Lower/Utils.h" #include "flang/Optimizer/Dialect/FIRType.h" @@ -177,11 +178,8 @@ namespace { /// mlir::Type. The type returned may be an MLIR standard or FIR type. class TypeBuilder { public: - /// Constructor. - explicit TypeBuilder( - mlir::MLIRContext *context, - const Fortran::common::IntrinsicTypeDefaultKinds &defaults) - : context{context}, defaults{defaults} {} + TypeBuilder(Fortran::lower::AbstractConverter &converter) + : converter{converter}, context{&converter.getMLIRContext()} {} //===--------------------------------------------------------------------===// // Generate type entry points @@ -221,7 +219,7 @@ public: return genVariant(dref); } - mlir::Type gen(const Fortran::lower::pft::Variable &var) { + mlir::Type genVariableType(const Fortran::lower::pft::Variable &var) { return genSymbolHelper(var.getSymbol(), var.isHeapAlloc(), var.isPointer()); } @@ -425,9 +423,7 @@ private: int defaultKind() { return defaultKind(TC); } - int defaultKind(Fortran::common::TypeCategory TC) { - return defaults.GetDefaultKind(TC); - } + int defaultKind(Fortran::common::TypeCategory TC) { return 0; } fir::SequenceType::Shape seqShapeHelper(Fortran::semantics::SymbolRef symbol, fir::SequenceType::Shape &bounds) { @@ -469,8 +465,8 @@ private: //===--------------------------------------------------------------------===// + Fortran::lower::AbstractConverter &converter; mlir::MLIRContext *context; - const Fortran::common::IntrinsicTypeDefaultKinds &defaults; }; } // namespace @@ -520,39 +516,32 @@ mlir::Type Fortran::lower::getFIRType(mlir::MLIRContext *context, return genFIRType(context, tc, kind); } -mlir::Type Fortran::lower::getFIRType( - mlir::MLIRContext *context, - const Fortran::common::IntrinsicTypeDefaultKinds &defaults, - Fortran::common::TypeCategory tc) { - return TypeBuilder{context, defaults}.genFIRTy(tc); +mlir::Type +Fortran::lower::getFIRType(Fortran::lower::AbstractConverter &converter, + Fortran::common::TypeCategory tc) { + return TypeBuilder{converter}.genFIRTy(tc); } mlir::Type Fortran::lower::translateDataRefToFIRType( - mlir::MLIRContext *context, - const Fortran::common::IntrinsicTypeDefaultKinds &defaults, + Fortran::lower::AbstractConverter &converter, const Fortran::evaluate::DataRef &dataRef) { - return TypeBuilder{context, defaults}.gen(dataRef); + return TypeBuilder{converter}.gen(dataRef); } mlir::Type Fortran::lower::translateSomeExprToFIRType( - mlir::MLIRContext *context, - const Fortran::common::IntrinsicTypeDefaultKinds &defaults, - const SomeExpr *expr) { - return TypeBuilder{context, defaults}.gen(*expr); + Fortran::lower::AbstractConverter &converter, const SomeExpr *expr) { + return TypeBuilder{converter}.gen(*expr); } mlir::Type Fortran::lower::translateSymbolToFIRType( - mlir::MLIRContext *context, - const Fortran::common::IntrinsicTypeDefaultKinds &defaults, - const SymbolRef symbol) { - return TypeBuilder{context, defaults}.gen(symbol); + Fortran::lower::AbstractConverter &converter, const SymbolRef symbol) { + return TypeBuilder{converter}.gen(symbol); } mlir::Type Fortran::lower::translateVariableToFIRType( - mlir::MLIRContext *context, - const Fortran::common::IntrinsicTypeDefaultKinds &defaults, + Fortran::lower::AbstractConverter &converter, const Fortran::lower::pft::Variable &var) { - return TypeBuilder{context, defaults}.gen(var); + return TypeBuilder{converter}.genVariableType(var); } mlir::Type Fortran::lower::convertReal(mlir::MLIRContext *context, int kind) { |