]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | //===-- TargetOptionsImpl.cpp - Options that apply to all targets ----------==// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | // | |
10 | // This file implements the methods in the TargetOptions. | |
11 | // | |
12 | //===----------------------------------------------------------------------===// | |
13 | ||
1a4d82fc | 14 | #include "llvm/IR/Function.h" |
223e47cc | 15 | #include "llvm/CodeGen/MachineFrameInfo.h" |
1a4d82fc | 16 | #include "llvm/CodeGen/MachineFunction.h" |
223e47cc LB |
17 | #include "llvm/Target/TargetOptions.h" |
18 | using namespace llvm; | |
19 | ||
20 | /// DisableFramePointerElim - This returns true if frame pointer elimination | |
21 | /// optimization should be disabled for the given machine function. | |
22 | bool TargetOptions::DisableFramePointerElim(const MachineFunction &MF) const { | |
23 | // Check to see if we should eliminate non-leaf frame pointers and then | |
24 | // check to see if we should eliminate all frame pointers. | |
1a4d82fc JJ |
25 | if (MF.getFunction()->hasFnAttribute("no-frame-pointer-elim-non-leaf") && |
26 | !NoFramePointerElim) { | |
223e47cc LB |
27 | const MachineFrameInfo *MFI = MF.getFrameInfo(); |
28 | return MFI->hasCalls(); | |
29 | } | |
30 | ||
31 | return NoFramePointerElim; | |
32 | } | |
33 | ||
34 | /// LessPreciseFPMAD - This flag return true when -enable-fp-mad option | |
35 | /// is specified on the command line. When this flag is off(default), the | |
36 | /// code generator is not allowed to generate mad (multiply add) if the | |
37 | /// result is "less precise" than doing those operations individually. | |
38 | bool TargetOptions::LessPreciseFPMAD() const { | |
39 | return UnsafeFPMath || LessPreciseFPMADOption; | |
40 | } | |
41 | ||
42 | /// HonorSignDependentRoundingFPMath - Return true if the codegen must assume | |
43 | /// that the rounding mode of the FPU can change from its default. | |
44 | bool TargetOptions::HonorSignDependentRoundingFPMath() const { | |
45 | return !UnsafeFPMath && HonorSignDependentRoundingFPMathOption; | |
46 | } | |
47 | ||
48 | /// getTrapFunctionName - If this returns a non-empty string, this means isel | |
49 | /// should lower Intrinsic::trap to a call to the specified function name | |
50 | /// instead of an ISD::TRAP node. | |
51 | StringRef TargetOptions::getTrapFunctionName() const { | |
52 | return TrapFuncName; | |
53 | } | |
85aaf69f SL |
54 | |
55 | /// getCFIFuncName - If this returns a non-empty string, then it is the name of | |
56 | /// the function that gets called on CFI violations in CFI non-enforcing mode | |
57 | /// (!TargetOptions::CFIEnforcing). | |
58 | StringRef TargetOptions::getCFIFuncName() const { | |
59 | return CFIFuncName; | |
60 | } |