diff options
| author | Tim Northover <tnorthover@apple.com> | 2017-01-27 17:53:42 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2017-01-27 17:53:42 +0000 |
| commit | 3b34a9b5d9fb08130124f17cb969c2c6bc0419f9 (patch) | |
| tree | e1da3695c75fd757ba6fa09d121477b7d5e26249 | |
| parent | d8f7ea381f8958b94d3eb82103be427e8a283347 (diff) | |
| download | bcm5719-llvm-3b34a9b5d9fb08130124f17cb969c2c6bc0419f9.tar.gz bcm5719-llvm-3b34a9b5d9fb08130124f17cb969c2c6bc0419f9.zip | |
ARM-Darwin: re-enable -momit-leaf-frame-pointer.
In r279546 I disabled all frame pointer elimination at the front-end on
ARM-Darwin (and warned about it) because before that the backend had been
silently ignoring these options. It turns out we didn't ignore
-momit-leaf-frame-pointer though, just the more general -fomit-frame-pointer.
So this re-enables passing that down to CodeGen so that everything really does
continue working as before (with better diagnostics).
llvm-svn: 293311
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 7 | ||||
| -rw-r--r-- | clang/test/Driver/frame-pointer-elim.c | 4 |
3 files changed, 5 insertions, 10 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 73bc734aec6..c9bb9f76c69 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -1109,10 +1109,6 @@ Darwin::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, options::OPT_fno_omit_frame_pointer, false)) getDriver().Diag(clang::diag::warn_drv_unsupported_opt_for_target) << "-fomit-frame-pointer" << BoundArch; - if (Args.hasFlag(options::OPT_momit_leaf_frame_pointer, - options::OPT_mno_omit_leaf_frame_pointer, false)) - getDriver().Diag(clang::diag::warn_drv_unsupported_opt_for_target) - << "-momit-leaf-frame-pointer" << BoundArch; } return DAL; diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index ca12a533e97..b431ff3e6ff 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -3455,7 +3455,7 @@ static bool areOptimizationsEnabled(const ArgList &Args) { return false; } -static bool mustUseFramePointerForTarget(const llvm::Triple &Triple) { +static bool mustUseNonLeafFramePointerForTarget(const llvm::Triple &Triple) { switch (Triple.getArch()){ default: return false; @@ -3521,7 +3521,7 @@ static bool shouldUseFramePointer(const ArgList &Args, if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer) || - mustUseFramePointerForTarget(Triple); + mustUseNonLeafFramePointerForTarget(Triple); if (Args.hasArg(options::OPT_pg)) return true; @@ -3533,8 +3533,7 @@ static bool shouldUseLeafFramePointer(const ArgList &Args, const llvm::Triple &Triple) { if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) - return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer) || - mustUseFramePointerForTarget(Triple); + return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); if (Args.hasArg(options::OPT_pg)) return true; diff --git a/clang/test/Driver/frame-pointer-elim.c b/clang/test/Driver/frame-pointer-elim.c index e1d816ea9fd..e39499a55c2 100644 --- a/clang/test/Driver/frame-pointer-elim.c +++ b/clang/test/Driver/frame-pointer-elim.c @@ -49,9 +49,9 @@ // RUN: %clang -### -target armv7s-apple-ios8.0 -momit-leaf-frame-pointer %s 2>&1 | \ // RUN: FileCheck --check-prefix=WARN-OMIT-LEAF-7S %s -// WARN-OMIT-LEAF-7S: warning: optimization flag '-momit-leaf-frame-pointer' is not supported for target 'armv7s' +// WARN-OMIT-LEAF-7S-NOT: warning: optimization flag '-momit-leaf-frame-pointer' is not supported for target 'armv7s' // WARN-OMIT-LEAF-7S: "-mdisable-fp-elim" -// WARN-OMIT-LEAF-7S-NOT: "-momit-leaf-frame-pointer" +// WARN-OMIT-LEAF-7S: "-momit-leaf-frame-pointer" // On the PS4, we default to omitting the frame pointer on leaf functions // (OMIT_LEAF check line is above) |

