Skip to content

Commit 8fc0024

Browse files
committed
[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
1 parent 532564d commit 8fc0024

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

flang/include/flang/Lower/Bridge.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,16 @@ class LoweringBridge {
4949
/// Create a lowering bridge instance.
5050
static LoweringBridge
5151
create(mlir::MLIRContext &ctx,
52+
Fortran::semantics::SemanticsContext &semanticsContext,
5253
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds,
5354
const Fortran::evaluate::IntrinsicProcTable &intrinsics,
5455
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics,
5556
const Fortran::parser::AllCookedSources &allCooked,
5657
llvm::StringRef triple, fir::KindMapping &kindMap,
5758
const Fortran::lower::LoweringOptions &loweringOptions) {
58-
return LoweringBridge(ctx, defaultKinds, intrinsics, targetCharacteristics,
59-
allCooked, triple, kindMap, loweringOptions);
59+
return LoweringBridge(ctx, semanticsContext, defaultKinds, intrinsics,
60+
targetCharacteristics, allCooked, triple, kindMap,
61+
loweringOptions);
6062
}
6163

6264
//===--------------------------------------------------------------------===//
@@ -92,6 +94,10 @@ class LoweringBridge {
9294
/// Create a folding context. Careful: this is very expensive.
9395
Fortran::evaluate::FoldingContext createFoldingContext() const;
9496

97+
Fortran::semantics::SemanticsContext &getSemanticsContext() const {
98+
return semanticsContext;
99+
}
100+
95101
bool validModule() { return getModule(); }
96102

97103
//===--------------------------------------------------------------------===//
@@ -109,6 +115,7 @@ class LoweringBridge {
109115
private:
110116
explicit LoweringBridge(
111117
mlir::MLIRContext &ctx,
118+
Fortran::semantics::SemanticsContext &semanticsContext,
112119
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds,
113120
const Fortran::evaluate::IntrinsicProcTable &intrinsics,
114121
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics,
@@ -118,6 +125,7 @@ class LoweringBridge {
118125
LoweringBridge() = delete;
119126
LoweringBridge(const LoweringBridge &) = delete;
120127

128+
Fortran::semantics::SemanticsContext &semanticsContext;
121129
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds;
122130
const Fortran::evaluate::IntrinsicProcTable &intrinsics;
123131
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics;

flang/lib/Frontend/FrontendActions.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,11 @@ bool CodeGenAction::beginSourceFileAction() {
142142
// Create a LoweringBridge
143143
const common::IntrinsicTypeDefaultKinds &defKinds =
144144
ci.getInvocation().getSemanticsContext().defaultKinds();
145-
fir::KindMapping kindMap(mlirCtx.get(),
146-
llvm::ArrayRef<fir::KindTy>{fir::fromDefaultKinds(defKinds)});
145+
fir::KindMapping kindMap(mlirCtx.get(), llvm::ArrayRef<fir::KindTy>{
146+
fir::fromDefaultKinds(defKinds)});
147147
lower::LoweringBridge lb = Fortran::lower::LoweringBridge::create(
148-
*mlirCtx, defKinds, ci.getInvocation().getSemanticsContext().intrinsics(),
148+
*mlirCtx, ci.getInvocation().getSemanticsContext(), defKinds,
149+
ci.getInvocation().getSemanticsContext().intrinsics(),
149150
ci.getInvocation().getSemanticsContext().targetCharacteristics(),
150151
ci.getParsing().allCooked(), ci.getInvocation().getTargetOpts().triple,
151152
kindMap, ci.getInvocation().getLoweringOpts());
@@ -425,8 +426,8 @@ void GetDefinitionAction::executeAction() {
425426
clang::DiagnosticsEngine::Error, "Symbol not found");
426427

427428
auto gdv = ci.getInvocation().getFrontendOpts().getDefVals;
428-
auto charBlock{cs.GetCharBlockFromLineAndColumns(
429-
gdv.line, gdv.startColumn, gdv.endColumn)};
429+
auto charBlock{cs.GetCharBlockFromLineAndColumns(gdv.line, gdv.startColumn,
430+
gdv.endColumn)};
430431
if (!charBlock) {
431432
ci.getDiagnostics().Report(diagID);
432433
return;

flang/lib/Lower/Bridge.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3248,15 +3248,17 @@ void Fortran::lower::LoweringBridge::parseSourceFile(llvm::SourceMgr &srcMgr) {
32483248

32493249
Fortran::lower::LoweringBridge::LoweringBridge(
32503250
mlir::MLIRContext &context,
3251+
Fortran::semantics::SemanticsContext &semanticsContext,
32513252
const Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds,
32523253
const Fortran::evaluate::IntrinsicProcTable &intrinsics,
32533254
const Fortran::evaluate::TargetCharacteristics &targetCharacteristics,
32543255
const Fortran::parser::AllCookedSources &cooked, llvm::StringRef triple,
32553256
fir::KindMapping &kindMap,
32563257
const Fortran::lower::LoweringOptions &loweringOptions)
3257-
: defaultKinds{defaultKinds}, intrinsics{intrinsics},
3258-
targetCharacteristics{targetCharacteristics}, cooked{&cooked},
3259-
context{context}, kindMap{kindMap}, loweringOptions{loweringOptions} {
3258+
: semanticsContext{semanticsContext}, defaultKinds{defaultKinds},
3259+
intrinsics{intrinsics}, targetCharacteristics{targetCharacteristics},
3260+
cooked{&cooked}, context{context}, kindMap{kindMap},
3261+
loweringOptions{loweringOptions} {
32603262
// Register the diagnostic handler.
32613263
context.getDiagEngine().registerHandler([](mlir::Diagnostic &diag) {
32623264
llvm::raw_ostream &os = llvm::errs();

flang/tools/bbc/bbc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ static mlir::LogicalResult convertFortranSourceToMLIR(
220220
// Use default lowering options for bbc.
221221
Fortran::lower::LoweringOptions loweringOptions{};
222222
auto burnside = Fortran::lower::LoweringBridge::create(
223-
ctx, defKinds, semanticsContext.intrinsics(),
223+
ctx, semanticsContext, defKinds, semanticsContext.intrinsics(),
224224
semanticsContext.targetCharacteristics(), parsing.allCooked(), "",
225225
kindMap, loweringOptions);
226226
burnside.lower(parseTree, semanticsContext);

0 commit comments

Comments
 (0)