diff options
-rw-r--r-- | flang/lib/Frontend/CompilerInvocation.cpp | 3 | ||||
-rw-r--r-- | flang/lib/Optimizer/Passes/Pipelines.cpp | 2 | ||||
-rw-r--r-- | flang/test/Driver/func-attr.f90 | 2 |
3 files changed, 6 insertions, 1 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 8e4c210..e5c6b1d 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -291,13 +291,14 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts, opts.AliasAnalysis = opts.OptimizationLevel > 0; - // -mframe-pointer=none/non-leaf/all option. + // -mframe-pointer=none/non-leaf/reserved/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("reserved", llvm::FramePointerKind::Reserved) .Case("all", llvm::FramePointerKind::All) .Default(std::nullopt); diff --git a/flang/lib/Optimizer/Passes/Pipelines.cpp b/flang/lib/Optimizer/Passes/Pipelines.cpp index 42d9e7b..dca176a 100644 --- a/flang/lib/Optimizer/Passes/Pipelines.cpp +++ b/flang/lib/Optimizer/Passes/Pipelines.cpp @@ -358,6 +358,8 @@ void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm, framePointerKind = mlir::LLVM::framePointerKind::FramePointerKind::NonLeaf; else if (config.FramePointerKind == llvm::FramePointerKind::All) framePointerKind = mlir::LLVM::framePointerKind::FramePointerKind::All; + else if (config.FramePointerKind == llvm::FramePointerKind::Reserved) + framePointerKind = mlir::LLVM::framePointerKind::FramePointerKind::Reserved; else framePointerKind = mlir::LLVM::framePointerKind::FramePointerKind::None; diff --git a/flang/test/Driver/func-attr.f90 b/flang/test/Driver/func-attr.f90 index 7442ac5..e8cab4f 100644 --- a/flang/test/Driver/func-attr.f90 +++ b/flang/test/Driver/func-attr.f90 @@ -4,6 +4,7 @@ ! RUN: %flang_fc1 -triple aarch64-none-none -mframe-pointer=none -emit-llvm -o - %s 2>&1| FileCheck %s --check-prefix=CHECK-NONEFP ! RUN: %flang_fc1 -triple aarch64-none-none -mframe-pointer=non-leaf -emit-llvm -o - %s 2>&1| FileCheck %s --check-prefix=CHECK-NONLEAFFP +! RUN: %flang_fc1 -triple aarch64-none-none -mframe-pointer=reserved -emit-llvm -o - %s 2>&1| FileCheck %s --check-prefix=CHECK-RESERVEDFP ! RUN: %flang_fc1 -triple aarch64-none-none -mframe-pointer=all -emit-llvm -o - %s 2>&1| FileCheck %s --check-prefix=CHECK-ALLFP ! RUN: not %flang_fc1 -triple aarch64-none-none -mframe-pointer=wrongval -emit-llvm -o - %s 2>&1| FileCheck %s --check-prefix=CHECK-WRONGVALUEFP @@ -20,6 +21,7 @@ end subroutine func ! CHECK-NONEFP-NOT: attributes #0 = { "frame-pointer"="{{.*}}" } ! CHECK-NONLEAFFP: attributes #0 = { "frame-pointer"="non-leaf" } +! CHECK-RESERVEDFP: attributes #0 = { "frame-pointer"="reserved" } ! CHECK-ALLFP: attributes #0 = { "frame-pointer"="all" } ! CHECK-WRONGVALUEFP:error: invalid value 'wrongval' in '-mframe-pointer=wrongval' |