diff options
Diffstat (limited to 'flang/lib')
| -rw-r--r-- | flang/lib/Frontend/FrontendActions.cpp | 36 | ||||
| -rw-r--r-- | flang/lib/Lower/OpenACC.cpp | 5 | ||||
| -rw-r--r-- | flang/lib/Parser/openmp-parsers.cpp | 12 | ||||
| -rw-r--r-- | flang/lib/Parser/unparse.cpp | 4 | ||||
| -rw-r--r-- | flang/lib/Semantics/openmp-utils.cpp | 3 | ||||
| -rw-r--r-- | flang/lib/Semantics/resolve-names.cpp | 6 |
6 files changed, 42 insertions, 24 deletions
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp index 0c630d2..159d08a 100644 --- a/flang/lib/Frontend/FrontendActions.cpp +++ b/flang/lib/Frontend/FrontendActions.cpp @@ -1019,24 +1019,40 @@ void CodeGenAction::runOptimizationPipeline(llvm::raw_pwrite_stream &os) { // Create the pass manager. llvm::ModulePassManager mpm; - if (opts.PrepareForFatLTO) { - // The module summary should be emitted by default for regular LTO - // except for ld64 targets. - bool emitSummary = opts.PrepareForThinLTO || opts.PrepareForFullLTO || - triple.getVendor() != llvm::Triple::Apple; + // The module summary should be emitted by default for regular LTO + // except for ld64 targets. + bool emitSummary = + opts.PrepareForFullLTO && (triple.getVendor() != llvm::Triple::Apple); + if (opts.PrepareForFatLTO) mpm = pb.buildFatLTODefaultPipeline(level, opts.PrepareForThinLTO, emitSummary); - } else if (opts.PrepareForFullLTO) + else if (opts.PrepareForFullLTO) mpm = pb.buildLTOPreLinkDefaultPipeline(level); else if (opts.PrepareForThinLTO) mpm = pb.buildThinLTOPreLinkDefaultPipeline(level); else mpm = pb.buildPerModuleDefaultPipeline(level); - if (action == BackendActionTy::Backend_EmitBC) - mpm.addPass(llvm::BitcodeWriterPass(os)); - else if (action == BackendActionTy::Backend_EmitLL) - mpm.addPass(llvm::PrintModulePass(os)); + if (action == BackendActionTy::Backend_EmitBC || + action == BackendActionTy::Backend_EmitLL || opts.PrepareForFatLTO) { + if (opts.PrepareForThinLTO) { + // TODO: ThinLTO module summary support is yet to be enabled. + if (action == BackendActionTy::Backend_EmitBC) + mpm.addPass(llvm::BitcodeWriterPass(os)); + else if (action == BackendActionTy::Backend_EmitLL) + mpm.addPass(llvm::PrintModulePass(os)); + } else { + if (emitSummary && !llvmModule->getModuleFlag("ThinLTO")) + llvmModule->addModuleFlag(llvm::Module::Error, "ThinLTO", uint32_t(0)); + if (action == BackendActionTy::Backend_EmitBC) + mpm.addPass(llvm::BitcodeWriterPass( + os, /*ShouldPreserveUseListOrder=*/false, emitSummary)); + else if (action == BackendActionTy::Backend_EmitLL) + mpm.addPass(llvm::PrintModulePass(os, /*Banner=*/"", + /*ShouldPreserveUseListOrder=*/false, + emitSummary)); + } + } // FIXME: This should eventually be replaced by a first-class driver option. // This should be done for both flang and clang simultaneously. diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp index 1fc59c7..d7861ac 100644 --- a/flang/lib/Lower/OpenACC.cpp +++ b/flang/lib/Lower/OpenACC.cpp @@ -816,8 +816,9 @@ static void genDeclareDataOperandOperations( Fortran::semantics::FindCommonBlockContaining(symbol)) { emitCommonGlobal( converter, builder, accObject, dataClause, - [&](mlir::OpBuilder &modBuilder, mlir::Location loc, - fir::GlobalOp globalOp, mlir::acc::DataClause clause, + [&](mlir::OpBuilder &modBuilder, [[maybe_unused]] mlir::Location loc, + [[maybe_unused]] fir::GlobalOp globalOp, + [[maybe_unused]] mlir::acc::DataClause clause, std::stringstream &asFortranStr, const std::string &ctorName) { if constexpr (std::is_same_v<EntryOp, mlir::acc::DeclareLinkOp>) { createDeclareGlobalOp< diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp index c0472ad..d1e081c 100644 --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -367,8 +367,8 @@ struct OmpArgumentListParser { }; TYPE_PARSER( // - construct<OmpTypeSpecifier>(Parser<DeclarationTypeSpec>{}) || - construct<OmpTypeSpecifier>(Parser<TypeSpec>{})) + construct<OmpTypeName>(Parser<DeclarationTypeSpec>{}) || + construct<OmpTypeName>(Parser<TypeSpec>{})) // 2.15.3.6 REDUCTION (reduction-identifier: variable-name-list) TYPE_PARSER(construct<OmpReductionIdentifier>(Parser<DefinedOperator>{}) || @@ -376,8 +376,8 @@ TYPE_PARSER(construct<OmpReductionIdentifier>(Parser<DefinedOperator>{}) || TYPE_PARSER(construct<OmpReductionSpecifier>( // Parser<OmpReductionIdentifier>{}, - ":"_tok >> nonemptyList(Parser<OmpTypeSpecifier>{}), - maybe(":"_tok >> Parser<OmpReductionCombiner>{}))) + ":"_tok >> nonemptyList(Parser<OmpTypeName>{}), + maybe(":"_tok >> Parser<OmpCombinerExpression>{}))) // --- Parsers for context traits ------------------------------------- @@ -1832,8 +1832,8 @@ TYPE_PARSER(sourced(construct<OpenMPDeclareMapperConstruct>( IsDirective(llvm::omp::Directive::OMPD_declare_mapper)) >= Parser<OmpDirectiveSpecification>{}))) -TYPE_PARSER(construct<OmpReductionCombiner>(Parser<AssignmentStmt>{}) || - construct<OmpReductionCombiner>(Parser<FunctionReference>{})) +TYPE_PARSER(construct<OmpCombinerExpression>(Parser<AssignmentStmt>{}) || + construct<OmpCombinerExpression>(Parser<FunctionReference>{})) TYPE_PARSER(sourced(construct<OpenMPCriticalConstruct>( OmpBlockConstructParser{llvm::omp::Directive::OMPD_critical}))) diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp index b172e429..2f86c76 100644 --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -2111,7 +2111,7 @@ public: Walk(std::get<OmpReductionIdentifier>(x.t)); Put(":"); Walk(std::get<OmpTypeNameList>(x.t)); - Walk(": ", std::get<std::optional<OmpReductionCombiner>>(x.t)); + Walk(": ", std::get<std::optional<OmpCombinerExpression>>(x.t)); } void Unparse(const llvm::omp::Directive &x) { unsigned ompVersion{langOpts_.OpenMPVersion}; @@ -2519,7 +2519,7 @@ public: Walk(x.u); } } - void Unparse(const OmpReductionCombiner &x) { + void Unparse(const OmpCombinerExpression &x) { // Don't let the visitor go to the normal AssignmentStmt Unparse function, // it adds an extra newline that we don't want. if (const auto *assignment{std::get_if<AssignmentStmt>(&x.u)}) { diff --git a/flang/lib/Semantics/openmp-utils.cpp b/flang/lib/Semantics/openmp-utils.cpp index cc55bb4..6b304b6 100644 --- a/flang/lib/Semantics/openmp-utils.cpp +++ b/flang/lib/Semantics/openmp-utils.cpp @@ -26,7 +26,9 @@ #include "flang/Parser/openmp-utils.h" #include "flang/Parser/parse-tree.h" #include "flang/Semantics/expression.h" +#include "flang/Semantics/scope.h" #include "flang/Semantics/semantics.h" +#include "flang/Semantics/symbol.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" @@ -505,5 +507,4 @@ bool IsStrictlyStructuredBlock(const parser::Block &block) { return false; } } - } // namespace Fortran::semantics::omp diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp index db75437..4af6cf6 100644 --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -1772,11 +1772,11 @@ public: messageHandler().set_currStmtSource(std::nullopt); } - bool Pre(const parser::OmpTypeSpecifier &x) { + bool Pre(const parser::OmpTypeName &x) { BeginDeclTypeSpec(); return true; } - void Post(const parser::OmpTypeSpecifier &x) { // + void Post(const parser::OmpTypeName &x) { // EndDeclTypeSpec(); } @@ -2007,7 +2007,7 @@ void OmpVisitor::ProcessReductionSpecifier( } } EndDeclTypeSpec(); - Walk(std::get<std::optional<parser::OmpReductionCombiner>>(spec.t)); + Walk(std::get<std::optional<parser::OmpCombinerExpression>>(spec.t)); Walk(clauses); PopScope(); } |
