aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorAnchu Rajendran S <asudhaku@amd.com>2025-09-18 08:55:20 -0700
committerGitHub <noreply@github.com>2025-09-18 08:55:20 -0700
commit5b2af16be591172cde8203160d1e01f5815a16ac (patch)
tree3f5260800a46c3b74ba0f075e4bc77d2cc32eb0e /flang/lib/Frontend/CompilerInvocation.cpp
parentf7b1b397673a234b62dc4ec68d9afa423fe4f520 (diff)
downloadllvm-5b2af16be591172cde8203160d1e01f5815a16ac.zip
llvm-5b2af16be591172cde8203160d1e01f5815a16ac.tar.gz
llvm-5b2af16be591172cde8203160d1e01f5815a16ac.tar.bz2
[flang][Driver] Enables lto-partitions and fat-lto-object. (#158125)
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--flang/lib/Frontend/CompilerInvocation.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 4729f8a..09b5173 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -332,17 +332,6 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts,
if (args.hasArg(clang::driver::options::OPT_finstrument_functions))
opts.InstrumentFunctions = 1;
- // -flto=full/thin option.
- if (const llvm::opt::Arg *a =
- args.getLastArg(clang::driver::options::OPT_flto_EQ)) {
- llvm::StringRef s = a->getValue();
- assert((s == "full" || s == "thin") && "Unknown LTO mode.");
- if (s == "full")
- opts.PrepareForFullLTO = true;
- else
- opts.PrepareForThinLTO = true;
- }
-
if (const llvm::opt::Arg *a = args.getLastArg(
clang::driver::options::OPT_mcode_object_version_EQ)) {
llvm::StringRef s = a->getValue();
@@ -1489,6 +1478,7 @@ static bool parseLinkerOptionsArgs(CompilerInvocation &invoc,
llvm::opt::ArgList &args,
clang::DiagnosticsEngine &diags) {
llvm::Triple triple = llvm::Triple(invoc.getTargetOpts().triple);
+ CodeGenOptions &opts = invoc.getCodeGenOpts();
// TODO: support --dependent-lib on other platforms when MLIR supports
// !llvm.dependent.lib
@@ -1501,8 +1491,35 @@ static bool parseLinkerOptionsArgs(CompilerInvocation &invoc,
return false;
}
- invoc.getCodeGenOpts().DependentLibs =
+ opts.DependentLibs =
args.getAllArgValues(clang::driver::options::OPT_dependent_lib);
+
+ // -flto=full/thin option.
+ if (const llvm::opt::Arg *a =
+ args.getLastArg(clang::driver::options::OPT_flto_EQ)) {
+ llvm::StringRef s = a->getValue();
+ assert((s == "full" || s == "thin") && "Unknown LTO mode.");
+ if (s == "full")
+ opts.PrepareForFullLTO = true;
+ else
+ opts.PrepareForThinLTO = true;
+ }
+
+ // -ffat-lto-objects
+ if (const llvm::opt::Arg *arg =
+ args.getLastArg(clang::driver::options::OPT_ffat_lto_objects,
+ clang::driver::options::OPT_fno_fat_lto_objects)) {
+ opts.PrepareForFatLTO =
+ arg->getOption().matches(clang::driver::options::OPT_ffat_lto_objects);
+ if (opts.PrepareForFatLTO) {
+ assert((opts.PrepareForFullLTO || opts.PrepareForThinLTO) &&
+ "Unknown LTO mode");
+
+ if (!triple.isOSBinFormatELF())
+ diags.Report(clang::diag::err_drv_unsupported_opt_for_target)
+ << arg->getAsString(args) << triple.getTriple();
+ }
+ }
return true;
}