[flang-commits] [flang] 8fc0024 - [flang] Pass SemanticsContext to the LoweringBridge
Valentin Clement via flang-commits
flang-commits at lists.llvm.org
Fri Aug 12 12:23:11 PDT 2022
Author: Valentin Clement
Date: 2022-08-12T21:23:05+02:00
New Revision: 8fc00247cea5ac8290657867581e22b876a09d3b
URL: https://github.com/llvm/llvm-project/commit/8fc00247cea5ac8290657867581e22b876a09d3b
DIFF: https://github.com/llvm/llvm-project/commit/8fc00247cea5ac8290657867581e22b876a09d3b.diff
LOG: [flang] Pass SemanticsContext to the LoweringBridge
The SemanticsContext is needed to analyze expression later in the
lowering for directive languages. This patch allows to keep a reference of
the SemanticsContext in the LoweringBridge.
Building block for D131765
Reviewed By: razvanlupusoru
Differential Revision: https://reviews.llvm.org/D131764
Added:
Modified:
flang/include/flang/Lower/Bridge.h
flang/lib/Frontend/FrontendActions.cpp
flang/lib/Lower/Bridge.cpp
flang/tools/bbc/bbc.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Lower/Bridge.h b/flang/include/flang/Lower/Bridge.h
index 70a171e598d3e..dcc61bfb00d9a 100644
--- a/flang/include/flang/Lower/Bridge.h
+++ b/flang/include/flang/Lower/Bridge.h
@@ -49,14 +49,16 @@ class LoweringBridge {
/// Create a lowering bridge instance.
static LoweringBridge
create(mlir::MLIRContext &ctx,
+ Fortran::semantics::SemanticsContext &semanticsContext,
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds,
const Fortran::evaluate::IntrinsicProcTable &intrinsics,
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics,
const Fortran::parser::AllCookedSources &allCooked,
llvm::StringRef triple, fir::KindMapping &kindMap,
const Fortran::lower::LoweringOptions &loweringOptions) {
- return LoweringBridge(ctx, defaultKinds, intrinsics, targetCharacteristics,
- allCooked, triple, kindMap, loweringOptions);
+ return LoweringBridge(ctx, semanticsContext, defaultKinds, intrinsics,
+ targetCharacteristics, allCooked, triple, kindMap,
+ loweringOptions);
}
//===--------------------------------------------------------------------===//
@@ -92,6 +94,10 @@ class LoweringBridge {
/// Create a folding context. Careful: this is very expensive.
Fortran::evaluate::FoldingContext createFoldingContext() const;
+ Fortran::semantics::SemanticsContext &getSemanticsContext() const {
+ return semanticsContext;
+ }
+
bool validModule() { return getModule(); }
//===--------------------------------------------------------------------===//
@@ -109,6 +115,7 @@ class LoweringBridge {
private:
explicit LoweringBridge(
mlir::MLIRContext &ctx,
+ Fortran::semantics::SemanticsContext &semanticsContext,
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds,
const Fortran::evaluate::IntrinsicProcTable &intrinsics,
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics,
@@ -118,6 +125,7 @@ class LoweringBridge {
LoweringBridge() = delete;
LoweringBridge(const LoweringBridge &) = delete;
+ Fortran::semantics::SemanticsContext &semanticsContext;
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds;
const Fortran::evaluate::IntrinsicProcTable &intrinsics;
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics;
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index 4ebe2eaa2e9e4..b56d949b270e0 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -142,10 +142,11 @@ bool CodeGenAction::beginSourceFileAction() {
// Create a LoweringBridge
const common::IntrinsicTypeDefaultKinds &defKinds =
ci.getInvocation().getSemanticsContext().defaultKinds();
- fir::KindMapping kindMap(mlirCtx.get(),
- llvm::ArrayRef<fir::KindTy>{fir::fromDefaultKinds(defKinds)});
+ fir::KindMapping kindMap(mlirCtx.get(), llvm::ArrayRef<fir::KindTy>{
+ fir::fromDefaultKinds(defKinds)});
lower::LoweringBridge lb = Fortran::lower::LoweringBridge::create(
- *mlirCtx, defKinds, ci.getInvocation().getSemanticsContext().intrinsics(),
+ *mlirCtx, ci.getInvocation().getSemanticsContext(), defKinds,
+ ci.getInvocation().getSemanticsContext().intrinsics(),
ci.getInvocation().getSemanticsContext().targetCharacteristics(),
ci.getParsing().allCooked(), ci.getInvocation().getTargetOpts().triple,
kindMap, ci.getInvocation().getLoweringOpts());
@@ -425,8 +426,8 @@ void GetDefinitionAction::executeAction() {
clang::DiagnosticsEngine::Error, "Symbol not found");
auto gdv = ci.getInvocation().getFrontendOpts().getDefVals;
- auto charBlock{cs.GetCharBlockFromLineAndColumns(
- gdv.line, gdv.startColumn, gdv.endColumn)};
+ auto charBlock{cs.GetCharBlockFromLineAndColumns(gdv.line, gdv.startColumn,
+ gdv.endColumn)};
if (!charBlock) {
ci.getDiagnostics().Report(diagID);
return;
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index f094e0b2f173f..22938b3c8c193 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -3248,15 +3248,17 @@ void Fortran::lower::LoweringBridge::parseSourceFile(llvm::SourceMgr &srcMgr) {
Fortran::lower::LoweringBridge::LoweringBridge(
mlir::MLIRContext &context,
+ Fortran::semantics::SemanticsContext &semanticsContext,
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds,
const Fortran::evaluate::IntrinsicProcTable &intrinsics,
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics,
const Fortran::parser::AllCookedSources &cooked, llvm::StringRef triple,
fir::KindMapping &kindMap,
const Fortran::lower::LoweringOptions &loweringOptions)
- : defaultKinds{defaultKinds}, intrinsics{intrinsics},
- targetCharacteristics{targetCharacteristics}, cooked{&cooked},
- context{context}, kindMap{kindMap}, loweringOptions{loweringOptions} {
+ : semanticsContext{semanticsContext}, defaultKinds{defaultKinds},
+ intrinsics{intrinsics}, targetCharacteristics{targetCharacteristics},
+ cooked{&cooked}, context{context}, kindMap{kindMap},
+ loweringOptions{loweringOptions} {
// Register the diagnostic handler.
context.getDiagEngine().registerHandler([](mlir::Diagnostic &diag) {
llvm::raw_ostream &os = llvm::errs();
diff --git a/flang/tools/bbc/bbc.cpp b/flang/tools/bbc/bbc.cpp
index 8259f8d5f1f26..133da66b7355e 100644
--- a/flang/tools/bbc/bbc.cpp
+++ b/flang/tools/bbc/bbc.cpp
@@ -220,7 +220,7 @@ static mlir::LogicalResult convertFortranSourceToMLIR(
// Use default lowering options for bbc.
Fortran::lower::LoweringOptions loweringOptions{};
auto burnside = Fortran::lower::LoweringBridge::create(
- ctx, defKinds, semanticsContext.intrinsics(),
+ ctx, semanticsContext, defKinds, semanticsContext.intrinsics(),
semanticsContext.targetCharacteristics(), parsing.allCooked(), "",
kindMap, loweringOptions);
burnside.lower(parseTree, semanticsContext);
More information about the flang-commits
mailing list