LLVM 20.0.0git
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
18#include "llvm/IR/Function.h"
20using 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 forcibly keep frame pointer.
27 return true;
28
29 const Function &F = MF.getFunction();
30
31 if (!F.hasFnAttribute("frame-pointer"))
32 return false;
33 StringRef FP = F.getFnAttribute("frame-pointer").getValueAsString();
34 if (FP == "all")
35 return true;
36 if (FP == "non-leaf")
37 return MF.getFrameInfo().hasCalls();
38 if (FP == "none" || FP == "reserved")
39 return false;
40 llvm_unreachable("unknown frame pointer flag");
41}
42
44 // Check to see if the target want to forcibly keep frame pointer.
46 return true;
47
48 const Function &F = MF.getFunction();
49
50 if (!F.hasFnAttribute("frame-pointer"))
51 return false;
52
53 StringRef FP = F.getFnAttribute("frame-pointer").getValueAsString();
55 .Cases("all", "non-leaf", "reserved", true)
56 .Case("none", false);
57}
58
59/// HonorSignDependentRoundingFPMath - Return true if the codegen must assume
60/// that the rounding mode of the FPU can change from its default.
63}
64
65/// NOTE: There are targets that still do not support the debug entry values
66/// production and that is being controlled with the SupportsDebugEntryValues.
67/// In addition, SCE debugger does not have the feature implemented, so prefer
68/// not to emit the debug entry values in that case.
69/// The EnableDebugEntryValues can be used for the testing purposes.
73}
#define F(x, y, z)
Definition: MD5.cpp:55
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
bool hasCalls() const
Return true if the current function has any function calls.
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.
Function & getFunction()
Return the LLVM function that this machine code represents.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
A switch()-like statement whose cases are string literals.
Definition: StringSwitch.h:44
StringSwitch & Case(StringLiteral S, T Value)
Definition: StringSwitch.h:69
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, T Value)
Definition: StringSwitch.h:90
virtual bool keepFramePointer(const MachineFunction &MF) const
Return true if the target wants to keep the frame pointer regardless of the function attribute "frame...
unsigned UnsafeFPMath
UnsafeFPMath - This flag is enabled when the -enable-unsafe-fp-math flag is specified on the command ...
bool HonorSignDependentRoundingFPMath() const
HonorSignDependentRoundingFPMath - Return true if the codegen must assume that the rounding mode of t...
unsigned SupportsDebugEntryValues
Set if the target supports the debug entry values by default.
unsigned HonorSignDependentRoundingFPMathOption
HonorSignDependentRoundingFPMath - This returns true when the -enable-sign-dependent-rounding-fp-math...
DebuggerKind DebuggerTuning
Which debugger to tune for.
bool FramePointerIsReserved(const MachineFunction &MF) const
FramePointerIsReserved - This returns true if the frame pointer must always either point to a new fra...
bool DisableFramePointerElim(const MachineFunction &MF) const
DisableFramePointerElim - This returns true if frame pointer elimination optimization should be disab...
unsigned EnableDebugEntryValues
When set to true, the EnableDebugEntryValues option forces production of debug entry values even if t...
bool ShouldEmitDebugEntryValues() const
NOTE: There are targets that still do not support the debug entry values production.
virtual const TargetFrameLowering * getFrameLowering() const
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
@ SCE
Tune debug info for SCE targets (e.g. PS4).