diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 17:16:04 +0900 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 17:16:04 +0900 |
commit | 0aa930a41f2d1ebf1fa90ec42da8f96d15a4dcbb (patch) | |
tree | 6a77b463f700e090df586672c26b9fe765fd115b /flang/lib/Frontend/FrontendActions.cpp | |
parent | ec6892d1c979ce0b84c86918d5cdbb03037b409a (diff) | |
parent | 6d16b1c5c468a79ecf867293023c89ac518ecdda (diff) | |
download | llvm-users/chapuni/cov/single/nextcount-base.zip llvm-users/chapuni/cov/single/nextcount-base.tar.gz llvm-users/chapuni/cov/single/nextcount-base.tar.bz2 |
Merge branch 'users/chapuni/cov/single/pair' into users/chapuni/cov/single/nextcount-baseusers/chapuni/cov/single/nextcount-base
Diffstat (limited to 'flang/lib/Frontend/FrontendActions.cpp')
-rw-r--r-- | flang/lib/Frontend/FrontendActions.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp index 77631f7..310cd65 100644 --- a/flang/lib/Frontend/FrontendActions.cpp +++ b/flang/lib/Frontend/FrontendActions.cpp @@ -149,7 +149,7 @@ bool PrescanAndSemaDebugAction::beginSourceFileAction() { (runSemanticChecks() || true) && (generateRtTypeTables() || true); } -static void addDependentLibs(mlir::ModuleOp &mlirModule, CompilerInstance &ci) { +static void addDependentLibs(mlir::ModuleOp mlirModule, CompilerInstance &ci) { const std::vector<std::string> &libs = ci.getInvocation().getCodeGenOpts().DependentLibs; if (libs.empty()) { @@ -171,7 +171,7 @@ static void addDependentLibs(mlir::ModuleOp &mlirModule, CompilerInstance &ci) { // Add to MLIR code target specific items which are dependent on target // configuration specified by the user. // Clang equivalent function: AMDGPUTargetCodeGenInfo::emitTargetGlobals -static void addAMDGPUSpecificMLIRItems(mlir::ModuleOp &mlirModule, +static void addAMDGPUSpecificMLIRItems(mlir::ModuleOp mlirModule, CompilerInstance &ci) { const TargetOptions &targetOpts = ci.getInvocation().getTargetOpts(); const llvm::Triple triple(targetOpts.triple); @@ -269,7 +269,7 @@ bool CodeGenAction::beginSourceFileAction() { return false; } - mlirModule = std::make_unique<mlir::ModuleOp>(module.release()); + mlirModule = std::move(module); const llvm::DataLayout &dl = targetMachine.createDataLayout(); fir::support::setMLIRDataLayout(*mlirModule, dl); return true; @@ -303,14 +303,11 @@ bool CodeGenAction::beginSourceFileAction() { ci.getInvocation().getFrontendOpts().features, targetMachine, ci.getInvocation().getTargetOpts(), ci.getInvocation().getCodeGenOpts()); - // Fetch module from lb, so we can set - mlirModule = std::make_unique<mlir::ModuleOp>(lb.getModule()); - if (ci.getInvocation().getFrontendOpts().features.IsEnabled( Fortran::common::LanguageFeature::OpenMP)) { - setOffloadModuleInterfaceAttributes(*mlirModule, + setOffloadModuleInterfaceAttributes(lb.getModule(), ci.getInvocation().getLangOpts()); - setOpenMPVersionAttribute(*mlirModule, + setOpenMPVersionAttribute(lb.getModule(), ci.getInvocation().getLangOpts().OpenMPVersion); } @@ -318,6 +315,9 @@ bool CodeGenAction::beginSourceFileAction() { Fortran::parser::Program &parseTree{*ci.getParsing().parseTree()}; lb.lower(parseTree, ci.getSemanticsContext()); + // Fetch module from lb, so we can set + mlirModule = lb.getModuleAndRelease(); + // Add target specific items like dependent libraries, target specific // constants etc. addDependentLibs(*mlirModule, ci); @@ -566,9 +566,11 @@ void DebugMeasureParseTreeAction::executeAction() { // Parse. In case of failure, report and return. ci.getParsing().Parse(llvm::outs()); - if (!ci.getParsing().messages().empty() && - (ci.getInvocation().getWarnAsErr() || - ci.getParsing().messages().AnyFatalError())) { + if ((ci.getParsing().parseTree().has_value() && + !ci.getParsing().consumedWholeFile()) || + (!ci.getParsing().messages().empty() && + (ci.getInvocation().getWarnAsErr() || + ci.getParsing().messages().AnyFatalError()))) { unsigned diagID = ci.getDiagnostics().getCustomDiagID( clang::DiagnosticsEngine::Error, "Could not parse %0"); ci.getDiagnostics().Report(diagID) << getCurrentFileOrBufferName(); @@ -961,6 +963,9 @@ static void generateMachineCodeOrAssemblyImpl(clang::DiagnosticsEngine &diags, // Run the passes codeGenPasses.run(llvmModule); + + // Cleanup + delete tlii; } void CodeGenAction::runOptimizationPipeline(llvm::raw_pwrite_stream &os) { @@ -1043,6 +1048,9 @@ void CodeGenAction::runOptimizationPipeline(llvm::raw_pwrite_stream &os) { // Run the passes. mpm.run(*llvmModule, mam); + + // Cleanup + delete tlii; } // This class handles optimization remark messages requested if |