LLVM  9.0.0svn
TargetOptionsImpl.cpp
Go to the documentation of this file.
1 //===-- TargetOptionsImpl.cpp - Options that apply to all targets ----------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the methods in the TargetOptions.
10 //
11 //===----------------------------------------------------------------------===//
12 
17 #include "llvm/IR/Function.h"
18 #include "llvm/IR/Module.h"
20 using namespace llvm;
21 
22 /// DisableFramePointerElim - This returns true if frame pointer elimination
23 /// optimization should be disabled for the given machine function.
25  // Check to see if the target want to forcably keep frame pointer.
27  return true;
28 
29  const Function &F = MF.getFunction();
30 
31  // TODO: Remove support for old `fp elim` function attributes after fully
32  // migrate to use "frame-pointer"
33  if (!F.hasFnAttribute("frame-pointer")) {
34  // Check to see if we should eliminate all frame pointers.
35  if (F.getFnAttribute("no-frame-pointer-elim").getValueAsString() == "true")
36  return true;
37 
38  // Check to see if we should eliminate non-leaf frame pointers.
39  if (F.hasFnAttribute("no-frame-pointer-elim-non-leaf"))
40  return MF.getFrameInfo().hasCalls();
41 
42  return false;
43  }
44 
45  StringRef FP = F.getFnAttribute("frame-pointer").getValueAsString();
46  if (FP == "all")
47  return true;
48  if (FP == "non-leaf")
49  return MF.getFrameInfo().hasCalls();
50  if (FP == "none")
51  return false;
52  llvm_unreachable("unknown frame pointer flag");
53 }
54 
55 /// HonorSignDependentRoundingFPMath - Return true if the codegen must assume
56 /// that the rounding mode of the FPU can change from its default.
59 }
This class represents lattice values for constants.
Definition: AllocatorList.h:23
virtual bool keepFramePointer(const MachineFunction &MF) const
Return true if the target wants to keep the frame pointer regardless of the function attribute "frame...
bool HonorSignDependentRoundingFPMath() const
HonorSignDependentRoundingFPMath - Return true if the codegen must assume that the rounding mode of t...
bool hasFnAttribute(Attribute::AttrKind Kind) const
Return true if the function has the attribute.
Definition: Function.h:323
F(f)
bool DisableFramePointerElim(const MachineFunction &MF) const
DisableFramePointerElim - This returns true if frame pointer elimination optimization should be disab...
unsigned UnsafeFPMath
UnsafeFPMath - This flag is enabled when the -enable-unsafe-fp-math flag is specified on the command ...
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Module.h This file contains the declarations for the Module class.
const Function & getFunction() const
Return the LLVM function that this machine code represents.
StringRef getValueAsString() const
Return the attribute's value as a string.
Definition: Attributes.cpp:194
virtual const TargetFrameLowering * getFrameLowering() const
unsigned HonorSignDependentRoundingFPMathOption
HonorSignDependentRoundingFPMath - This returns true when the -enable-sign-dependent-rounding-fp-math...
Attribute getFnAttribute(Attribute::AttrKind Kind) const
Return the attribute for the given attribute kind.
Definition: Function.h:333
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
bool hasCalls() const
Return true if the current function has any function calls.