LLVM 17.0.0git
SparcSubtarget.h
Go to the documentation of this file.
1//===-- SparcSubtarget.h - Define Subtarget for the SPARC -------*- C++ -*-===//
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 declares the SPARC specific subclass of TargetSubtargetInfo.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_SPARC_SPARCSUBTARGET_H
14#define LLVM_LIB_TARGET_SPARC_SPARCSUBTARGET_H
15
16#include "SparcFrameLowering.h"
17#include "SparcISelLowering.h"
18#include "SparcInstrInfo.h"
21#include "llvm/IR/DataLayout.h"
23#include <string>
24
25#define GET_SUBTARGETINFO_HEADER
26#include "SparcGenSubtargetInfo.inc"
27
28namespace llvm {
29class StringRef;
30
32 Triple TargetTriple;
33 virtual void anchor();
34 bool UseSoftMulDiv;
35 bool IsV9;
36 bool IsLeon;
37 bool V8DeprecatedInsts;
38 bool IsVIS, IsVIS2, IsVIS3;
39 bool Is64Bit;
40 bool HasHardQuad;
41 bool UsePopc;
42 bool UseSoftFloat;
43 bool HasNoFSMULD;
44 bool HasNoFMULS;
45
46 // LEON features
47 bool HasUmacSmac;
48 bool HasLeonCasa;
49 bool HasPWRPSR;
50 bool InsertNOPLoad;
51 bool FixAllFDIVSQRT;
53 bool HasLeonCycleCounter;
54
55 SparcInstrInfo InstrInfo;
58 SparcFrameLowering FrameLowering;
59
60public:
61 SparcSubtarget(const Triple &TT, const std::string &CPU,
62 const std::string &FS, const TargetMachine &TM, bool is64bit);
63
64 const SparcInstrInfo *getInstrInfo() const override { return &InstrInfo; }
65 const TargetFrameLowering *getFrameLowering() const override {
66 return &FrameLowering;
67 }
68 const SparcRegisterInfo *getRegisterInfo() const override {
69 return &InstrInfo.getRegisterInfo();
70 }
71 const SparcTargetLowering *getTargetLowering() const override {
72 return &TLInfo;
73 }
75 return &TSInfo;
76 }
77
78 bool enableMachineScheduler() const override;
79
80 bool useSoftMulDiv() const { return UseSoftMulDiv; }
81 bool isV9() const { return IsV9; }
82 bool isLeon() const { return IsLeon; }
83 bool isVIS() const { return IsVIS; }
84 bool isVIS2() const { return IsVIS2; }
85 bool isVIS3() const { return IsVIS3; }
86 bool useDeprecatedV8Instructions() const { return V8DeprecatedInsts; }
87 bool hasHardQuad() const { return HasHardQuad; }
88 bool usePopc() const { return UsePopc; }
89 bool useSoftFloat() const { return UseSoftFloat; }
90 bool hasNoFSMULD() const { return HasNoFSMULD; }
91 bool hasNoFMULS() const { return HasNoFMULS; }
92
93 // Leon options
94 bool hasUmacSmac() const { return HasUmacSmac; }
95 bool hasLeonCasa() const { return HasLeonCasa; }
96 bool hasPWRPSR() const { return HasPWRPSR; }
97 bool insertNOPLoad() const { return InsertNOPLoad; }
98 bool fixAllFDIVSQRT() const { return FixAllFDIVSQRT; }
99 bool detectRoundChange() const { return DetectRoundChange; }
100 bool hasLeonCycleCounter() const { return HasLeonCycleCounter; }
101
102 /// ParseSubtargetFeatures - Parses features string setting specified
103 /// subtarget options. Definition of function is auto generated by tblgen.
106
107 bool is64Bit() const { return Is64Bit; }
108
109 /// The 64-bit ABI uses biased stack and frame pointers, so the stack frame
110 /// of the current function is the area from [%sp+BIAS] to [%fp+BIAS].
111 int64_t getStackPointerBias() const {
112 return is64Bit() ? 2047 : 0;
113 }
114
115 /// Given a actual stack size as determined by FrameInfo, this function
116 /// returns adjusted framesize which includes space for register window
117 /// spills and arguments.
118 int getAdjustedFrameSize(int stackSize) const;
119
120 bool isTargetLinux() const { return TargetTriple.isOSLinux(); }
121};
122
123} // end namespace llvm
124
125#endif
const char LLVMTargetMachineRef TM
return InstrInfo
Targets can subclass this to parameterize the SelectionDAG lowering and instruction selection process...
const SparcRegisterInfo * getRegisterInfo() const override
int64_t getStackPointerBias() const
The 64-bit ABI uses biased stack and frame pointers, so the stack frame of the current function is th...
bool useSoftFloat() const
const SparcTargetLowering * getTargetLowering() const override
bool hasUmacSmac() const
int getAdjustedFrameSize(int stackSize) const
Given a actual stack size as determined by FrameInfo, this function returns adjusted framesize which ...
bool hasPWRPSR() const
bool hasNoFMULS() const
bool useSoftMulDiv() const
bool hasNoFSMULD() const
bool enableMachineScheduler() const override
const TargetFrameLowering * getFrameLowering() const override
bool hasLeonCycleCounter() const
bool hasHardQuad() const
bool isTargetLinux() const
bool insertNOPLoad() const
bool usePopc() const
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
bool fixAllFDIVSQRT() const
bool hasLeonCasa() const
SparcSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS)
bool useDeprecatedV8Instructions() const
const SparcInstrInfo * getInstrInfo() const override
const SelectionDAGTargetInfo * getSelectionDAGInfo() const override
bool detectRoundChange() const
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
Information about stack frame layout on the target.
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:78
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
bool isOSLinux() const
Tests whether the OS is Linux.
Definition: Triple.h:638
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18