diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2015-05-23 01:14:08 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2015-05-23 01:14:08 +0000 |
commit | ddf76aa36fdd48e4c8bad9cb069cc5588e0ed149 (patch) | |
tree | d9a432cf75b8f65bc27c3c6b8d3f11330a6a2f47 /llvm/lib/CodeGen/TargetOptionsImpl.cpp | |
parent | bd881834c5eeb75f1e5cd8a0d56c25dfe122daa5 (diff) | |
download | bcm5719-llvm-ddf76aa36fdd48e4c8bad9cb069cc5588e0ed149.tar.gz bcm5719-llvm-ddf76aa36fdd48e4c8bad9cb069cc5588e0ed149.zip |
Stop resetting NoFramePointerElim in TargetMachine::resetTargetOptions.
This is part of the work to remove TargetMachine::resetTargetOptions.
In this patch, instead of updating global variable NoFramePointerElim in
resetTargetOptions, its use in DisableFramePointerElim is replaced with a call
to TargetFrameLowering::noFramePointerElim. This function determines on a
per-function basis if frame pointer elimination should be disabled.
There is no change in functionality except that cl:opt option "disable-fp-elim"
can now override function attribute "no-frame-pointer-elim".
llvm-svn: 238080
Diffstat (limited to 'llvm/lib/CodeGen/TargetOptionsImpl.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetOptionsImpl.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/TargetOptionsImpl.cpp b/llvm/lib/CodeGen/TargetOptionsImpl.cpp index c855ae51ce4..9d1c27ef51e 100644 --- a/llvm/lib/CodeGen/TargetOptionsImpl.cpp +++ b/llvm/lib/CodeGen/TargetOptionsImpl.cpp @@ -12,23 +12,26 @@ //===----------------------------------------------------------------------===// #include "llvm/IR/Function.h" +#include "llvm/IR/Module.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" +#include "llvm/Target/TargetFrameLowering.h" #include "llvm/Target/TargetOptions.h" +#include "llvm/Target/TargetSubtargetInfo.h" using namespace llvm; /// DisableFramePointerElim - This returns true if frame pointer elimination /// optimization should be disabled for the given machine function. bool TargetOptions::DisableFramePointerElim(const MachineFunction &MF) const { - // Check to see if we should eliminate non-leaf frame pointers and then - // check to see if we should eliminate all frame pointers. - if (MF.getFunction()->hasFnAttribute("no-frame-pointer-elim-non-leaf") && - !NoFramePointerElim) { - const MachineFrameInfo *MFI = MF.getFrameInfo(); - return MFI->hasCalls(); - } + // Check to see if we should eliminate all frame pointers. + if (MF.getSubtarget().getFrameLowering()->noFramePointerElim(MF)) + return true; + + // Check to see if we should eliminate non-leaf frame pointers. + if (MF.getFunction()->hasFnAttribute("no-frame-pointer-elim-non-leaf")) + return MF.getFrameInfo()->hasCalls(); - return NoFramePointerElim; + return false; } /// LessPreciseFPMAD - This flag return true when -enable-fp-mad option @@ -53,7 +56,9 @@ StringRef TargetOptions::getTrapFunctionName() const { } -void llvm::setFunctionAttributes(StringRef CPU, StringRef Features, Module &M) { +void llvm::setFunctionAttributes(StringRef CPU, StringRef Features, + const TargetOptions &Options, Module &M, + bool AlwaysRecordAttrs) { for (auto &F : M) { auto &Ctx = F.getContext(); AttributeSet Attrs = F.getAttributes(), NewAttrs; @@ -66,6 +71,11 @@ void llvm::setFunctionAttributes(StringRef CPU, StringRef Features, Module &M) { NewAttrs = NewAttrs.addAttribute(Ctx, AttributeSet::FunctionIndex, "target-features", Features); + if (Options.NoFramePointerElimOverride || AlwaysRecordAttrs) + NewAttrs = NewAttrs.addAttribute( + Ctx, AttributeSet::FunctionIndex, "no-frame-pointer-elim", + Options.NoFramePointerElim ? "true" : "false"); + // Let NewAttrs override Attrs. NewAttrs = Attrs.addAttributes(Ctx, AttributeSet::FunctionIndex, NewAttrs); F.setAttributes(NewAttrs); |