diff options
author | Radu Salavat <radu.salavat@arm.com> | 2023-12-28 17:41:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-28 15:41:27 +0000 |
commit | 04873773821b891277a054e94282fe66e09e0aff (patch) | |
tree | d45bf05a169e3a047ecfdbb08c0ae7094086b227 /flang/lib/Frontend/CompilerInvocation.cpp | |
parent | 554feb0058980ae3c6159a61ffdae2c2d345bf7a (diff) | |
download | llvm-04873773821b891277a054e94282fe66e09e0aff.zip llvm-04873773821b891277a054e94282fe66e09e0aff.tar.gz llvm-04873773821b891277a054e94282fe66e09e0aff.tar.bz2 |
[flang] Pass to add frame pointer attribute (#74598)
Pass to add frame pointer attribute in Flang
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | flang/lib/Frontend/CompilerInvocation.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 4ce6171..b65b6e3 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -245,6 +245,23 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts, opts.AliasAnalysis = opts.OptimizationLevel > 0; + // -mframe-pointer=none/non-leaf/all option. + if (const llvm::opt::Arg *a = + args.getLastArg(clang::driver::options::OPT_mframe_pointer_EQ)) { + std::optional<llvm::FramePointerKind> val = + llvm::StringSwitch<std::optional<llvm::FramePointerKind>>(a->getValue()) + .Case("none", llvm::FramePointerKind::None) + .Case("non-leaf", llvm::FramePointerKind::NonLeaf) + .Case("all", llvm::FramePointerKind::All) + .Default(std::nullopt); + + if (!val.has_value()) { + diags.Report(clang::diag::err_drv_invalid_value) + << a->getAsString(args) << a->getValue(); + } else + opts.setFramePointer(val.value()); + } + for (auto *a : args.filtered(clang::driver::options::OPT_fpass_plugin_EQ)) opts.LLVMPassPlugins.push_back(a->getValue()); |