Leporacanthicus created this revision.
Herald added a reviewer: awarzynski.
Herald added projects: Flang, All.
Leporacanthicus requested review of this revision.
Herald added subscribers: cfe-commits, jdoerfert, MaskRay.
Herald added a project: clang.
Posted to satisfy depenences of another patch. Still work in progress.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D141307
Files:
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Flang.cpp
flang/include/flang/Frontend/CodeGenOptions.def
flang/lib/Frontend/CompilerInvocation.cpp
flang/lib/Frontend/FrontendActions.cpp
flang/tools/bbc/bbc.cpp
flang/tools/tco/tco.cpp
Index: flang/tools/tco/tco.cpp
===================================================================
--- flang/tools/tco/tco.cpp
+++ flang/tools/tco/tco.cpp
@@ -122,7 +122,7 @@
fir::createDefaultFIRCodeGenPassPipeline(pm);
} else {
// Run tco with O2 by default.
- fir::createMLIRToLLVMPassPipeline(pm, llvm::OptimizationLevel::O2);
+ fir::createMLIRToLLVMPassPipeline(pm, false, llvm::OptimizationLevel::O2);
}
fir::addLLVMDialectToLLVMPass(pm, out.os());
}
Index: flang/tools/bbc/bbc.cpp
===================================================================
--- flang/tools/bbc/bbc.cpp
+++ flang/tools/bbc/bbc.cpp
@@ -273,7 +273,8 @@
pm.addPass(std::make_unique<Fortran::lower::VerifierPass>());
// Add O2 optimizer pass pipeline.
- fir::createDefaultFIROptimizerPassPipeline(pm, llvm::OptimizationLevel::O2);
+ fir::createDefaultFIROptimizerPassPipeline(pm, false,
+ llvm::OptimizationLevel::O2);
}
if (mlir::succeeded(pm.run(mlirModule))) {
Index: flang/lib/Frontend/FrontendActions.cpp
===================================================================
--- flang/lib/Frontend/FrontendActions.cpp
+++ flang/lib/Frontend/FrontendActions.cpp
@@ -541,7 +541,7 @@
pm.enableVerifier(/*verifyPasses=*/true);
// Create the pass pipeline
- fir::createMLIRToLLVMPassPipeline(pm, level);
+ fir::createMLIRToLLVMPassPipeline(pm, opts.LoopVersioning, level);
mlir::applyPassManagerCLOptions(pm);
// run the pass manager
Index: flang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- flang/lib/Frontend/CompilerInvocation.cpp
+++ flang/lib/Frontend/CompilerInvocation.cpp
@@ -126,6 +126,11 @@
clang::driver::options::OPT_fno_debug_pass_manager, false))
opts.DebugPassManager = 1;
+ if (args.hasFlag(clang::driver::options::OPT_floop_versioning,
+ clang::driver::options::OPT_fno_loop_versioning, false)) {
+ opts.LoopVersioning = 1;
+ }
+
for (auto *a : args.filtered(clang::driver::options::OPT_fpass_plugin_EQ))
opts.LLVMPassPlugins.push_back(a->getValue());
Index: flang/include/flang/Frontend/CodeGenOptions.def
===================================================================
--- flang/include/flang/Frontend/CodeGenOptions.def
+++ flang/include/flang/Frontend/CodeGenOptions.def
@@ -24,6 +24,7 @@
CODEGENOPT(DebugPassManager, 1, 0) ///< Prints debug information for the new
///< pass manager.
+CODEGENOPT(LoopVersioning, 1, 0) ///< PIC level of the LLVM module.
CODEGENOPT(PICLevel, 2, 0) ///< PIC level of the LLVM module.
CODEGENOPT(IsPIE, 1, 0) ///< PIE level is the same as PIC Level.
Index: clang/lib/Driver/ToolChains/Flang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Flang.cpp
+++ clang/lib/Driver/ToolChains/Flang.cpp
@@ -57,6 +57,12 @@
options::OPT_fintrinsic_modules_path, options::OPT_pedantic,
options::OPT_std_EQ, options::OPT_W_Joined,
options::OPT_fconvert_EQ, options::OPT_fpass_plugin_EQ});
+ Arg *loopVersioning =
+ Args.getLastArg(options::OPT_Ofast, options::OPT_floop_versioning,
+ options::OPT_fno_loop_versioning);
+ if (loopVersioning &&
+ !loopVersioning->getOption().matches(options::OPT_fno_loop_versioning))
+ CmdArgs.push_back("-floop-versioning");
}
void Flang::addPicOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -5052,6 +5052,11 @@
def fno_automatic : Flag<["-"], "fno-automatic">, Group<f_Group>,
HelpText<"Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE">;
+def floop_versioning : Flag<["-"], "floop-versioning">, Group<f_Group>,
+ HelpText<"Attempt to version loops">;
+def fno_loop_versioning : Flag<["-"], "fno-loop-versioning">, Group<f_Group>,
+ HelpText<"Do not version loops (default)">;
+
} // let Flags = [FC1Option, FlangOption, FlangOnlyOption]
def J : JoinedOrSeparate<["-"], "J">,
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits