aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Lower/ConvertType.cpp
diff options
context:
space:
mode:
authorValentin Clement <clementval@gmail.com>2022-02-07 09:12:17 +0100
committerValentin Clement <clementval@gmail.com>2022-02-07 09:14:09 +0100
commit2c2e5a5d0f191027ab447899599baeaf744fc2eb (patch)
tree011fb9380ee2ae62f54eff24c2e64221f7717c3f /flang/lib/Lower/ConvertType.cpp
parent24562babdf16093052230e91332f1b1f13e2c4de (diff)
downloadllvm-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.cpp47
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) {