• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  //===-- SparcSubtarget.h - Define Subtarget for the SPARC -------*- C++ -*-===//
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 declares the SPARC specific subclass of TargetSubtargetInfo.
11  //
12  //===----------------------------------------------------------------------===//
13  
14  #ifndef SPARC_SUBTARGET_H
15  #define SPARC_SUBTARGET_H
16  
17  #include "SparcFrameLowering.h"
18  #include "SparcInstrInfo.h"
19  #include "SparcISelLowering.h"
20  #include "SparcJITInfo.h"
21  #include "SparcSelectionDAGInfo.h"
22  #include "llvm/IR/DataLayout.h"
23  #include "llvm/Target/TargetFrameLowering.h"
24  #include "llvm/Target/TargetSubtargetInfo.h"
25  #include <string>
26  
27  #define GET_SUBTARGETINFO_HEADER
28  #include "SparcGenSubtargetInfo.inc"
29  
30  namespace llvm {
31  class StringRef;
32  
33  class SparcSubtarget : public SparcGenSubtargetInfo {
34    virtual void anchor();
35    bool IsV9;
36    bool V8DeprecatedInsts;
37    bool IsVIS, IsVIS2, IsVIS3;
38    bool Is64Bit;
39    bool HasHardQuad;
40    bool UsePopc;
41    const DataLayout DL;       // Calculates type size & alignment
42    SparcInstrInfo InstrInfo;
43    SparcTargetLowering TLInfo;
44    SparcSelectionDAGInfo TSInfo;
45    SparcFrameLowering FrameLowering;
46    SparcJITInfo JITInfo;
47  
48  public:
49    SparcSubtarget(const std::string &TT, const std::string &CPU,
50                   const std::string &FS, TargetMachine &TM, bool is64bit);
51  
getInstrInfo()52    const SparcInstrInfo *getInstrInfo() const { return &InstrInfo; }
getFrameLowering()53    const TargetFrameLowering *getFrameLowering() const { return &FrameLowering; }
getRegisterInfo()54    const SparcRegisterInfo *getRegisterInfo() const {
55      return &InstrInfo.getRegisterInfo();
56    }
getTargetLowering()57    const SparcTargetLowering *getTargetLowering() const { return &TLInfo; }
getSelectionDAGInfo()58    const SparcSelectionDAGInfo *getSelectionDAGInfo() const { return &TSInfo; }
getJITInfo()59    SparcJITInfo *getJITInfo() { return &JITInfo; }
getDataLayout()60    const DataLayout *getDataLayout() const { return &DL; }
61  
isV9()62    bool isV9() const { return IsV9; }
isVIS()63    bool isVIS() const { return IsVIS; }
isVIS2()64    bool isVIS2() const { return IsVIS2; }
isVIS3()65    bool isVIS3() const { return IsVIS3; }
useDeprecatedV8Instructions()66    bool useDeprecatedV8Instructions() const { return V8DeprecatedInsts; }
hasHardQuad()67    bool hasHardQuad() const { return HasHardQuad; }
usePopc()68    bool usePopc() const { return UsePopc; }
69  
70    /// ParseSubtargetFeatures - Parses features string setting specified
71    /// subtarget options.  Definition of function is auto generated by tblgen.
72    void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
73    SparcSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);
74  
is64Bit()75    bool is64Bit() const { return Is64Bit; }
76  
77    /// The 64-bit ABI uses biased stack and frame pointers, so the stack frame
78    /// of the current function is the area from [%sp+BIAS] to [%fp+BIAS].
getStackPointerBias()79    int64_t getStackPointerBias() const {
80      return is64Bit() ? 2047 : 0;
81    }
82  
83    /// Given a actual stack size as determined by FrameInfo, this function
84    /// returns adjusted framesize which includes space for register window
85    /// spills and arguments.
86    int getAdjustedFrameSize(int stackSize) const;
87  
88  };
89  
90  } // end namespace llvm
91  
92  #endif
93