13#ifndef FORTRAN_LOWER_BRIDGE_H
14#define FORTRAN_LOWER_BRIDGE_H
16#include "flang/Common/Fortran.h"
17#include "flang/Frontend/CodeGenOptions.h"
19#include "flang/Lower/AbstractConverter.h"
20#include "flang/Lower/EnvironmentDefault.h"
22#include "flang/Lower/StatementContext.h"
23#include "flang/Optimizer/Builder/FIRBuilder.h"
24#include "flang/Optimizer/Dialect/Support/KindMapping.h"
25#include "mlir/IR/BuiltinOps.h"
26#include "mlir/IR/OwningOpRef.h"
35class IntrinsicTypeDefaultKinds;
38class IntrinsicProcTable;
39class TargetCharacteristics;
42class AllCookedSources;
46class SemanticsContext;
64 const Fortran::evaluate::IntrinsicProcTable &intrinsics,
69 const std::vector<Fortran::lower::EnvironmentDefault> &envDefaults,
71 const llvm::TargetMachine &targetMachine,
74 return LoweringBridge(ctx, semanticsContext, defaultKinds, intrinsics,
75 targetCharacteristics, allCooked, triple, kindMap,
76 loweringOptions, envDefaults, languageFeatures,
77 targetMachine, targetOptions, codeGenOptions);
84 mlir::MLIRContext &getMLIRContext() {
return context; }
88 mlir::ModuleOp getModuleAndRelease() {
return module.release(); }
93 const Fortran::evaluate::IntrinsicProcTable &getIntrinsicTable()
const {
97 getTargetCharacteristics()
const {
98 return targetCharacteristics;
108 return loweringOptions;
111 const std::vector<Fortran::lower::EnvironmentDefault> &
112 getEnvironmentDefaults()
const {
117 return languageFeatures;
124 return semanticsContext;
131 bool validModule() {
return getModule(); }
142 void lower(
const Fortran::parser::Program &program,
146 explicit LoweringBridge(
147 mlir::MLIRContext &ctx,
150 const Fortran::evaluate::IntrinsicProcTable &intrinsics,
155 const std::vector<Fortran::lower::EnvironmentDefault> &envDefaults,
157 const llvm::TargetMachine &targetMachine,
160 LoweringBridge() =
delete;
161 LoweringBridge(
const LoweringBridge &) =
delete;
167 const Fortran::evaluate::IntrinsicProcTable &intrinsics;
170 mlir::MLIRContext &context;
171 mlir::OwningOpRef<mlir::ModuleOp> module;
174 const std::vector<Fortran::lower::EnvironmentDefault> &envDefaults;
176 std::set<std::string> tempNames;
Definition: default-kinds.h:26
Definition: Fortran-features.h:84
Definition: CodeGenOptions.h:49
Options for controlling the target.
Definition: TargetOptions.h:27
void parseSourceFile(llvm::SourceMgr &)
Definition: Bridge.cpp:6139
mlir::ModuleOp getModule()
Get the ModuleOp. It can never be null, which is asserted in the ctor.
Definition: Bridge.h:87
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, const std::vector< Fortran::lower::EnvironmentDefault > &envDefaults, const Fortran::common::LanguageFeatureControl &languageFeatures, const llvm::TargetMachine &targetMachine, const Fortran::frontend::TargetOptions &targetOptions, const Fortran::frontend::CodeGenOptions &codeGenOptions)
Create a lowering bridge instance.
Definition: Bridge.h:61
const fir::KindMapping & getKindMap() const
Get the kind map.
Definition: Bridge.h:105
Fortran::evaluate::FoldingContext createFoldingContext()
Create a folding context. Careful: this is very expensive.
Definition: Bridge.cpp:6123
void lower(const Fortran::parser::Program &program, const Fortran::semantics::SemanticsContext &semanticsContext)
Cross the bridge from the Fortran parse-tree, etc. to MLIR dialects.
Definition: Bridge.cpp:6128
Definition: LoweringOptions.h:34
Definition: StatementContext.h:46
Definition: provenance.h:281
Definition: semantics.h:67
Definition: KindMapping.h:48
Definition: bit-population-count.h:20