LLVM  3.7.0
NVPTXSubtarget.h
Go to the documentation of this file.
1 //=====-- NVPTXSubtarget.h - Define Subtarget for the NVPTX ---*- 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 NVPTX specific subclass of TargetSubtarget.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_TARGET_NVPTX_NVPTXSUBTARGET_H
15 #define LLVM_LIB_TARGET_NVPTX_NVPTXSUBTARGET_H
16 
17 #include "NVPTX.h"
18 #include "NVPTXFrameLowering.h"
19 #include "NVPTXISelLowering.h"
20 #include "NVPTXInstrInfo.h"
21 #include "NVPTXRegisterInfo.h"
22 #include "llvm/IR/DataLayout.h"
25 #include <string>
26 
27 #define GET_SUBTARGETINFO_HEADER
28 #include "NVPTXGenSubtargetInfo.inc"
29 
30 namespace llvm {
31 
33  virtual void anchor();
34  std::string TargetName;
35 
36  // PTX version x.y is represented as 10*x+y, e.g. 3.1 == 31
37  unsigned PTXVersion;
38 
39  // SM version x.y is represented as 10*x+y, e.g. 3.1 == 31
40  unsigned int SmVersion;
41 
42  const NVPTXTargetMachine &TM;
43  NVPTXInstrInfo InstrInfo;
44  NVPTXTargetLowering TLInfo;
46 
47  // NVPTX does not have any call stack frame, but need a NVPTX specific
48  // FrameLowering class because TargetFrameLowering is abstract.
49  NVPTXFrameLowering FrameLowering;
50 
51 public:
52  /// This constructor initializes the data members to match that
53  /// of the specified module.
54  ///
55  NVPTXSubtarget(const Triple &TT, const std::string &CPU,
56  const std::string &FS, const NVPTXTargetMachine &TM);
57 
58  const TargetFrameLowering *getFrameLowering() const override {
59  return &FrameLowering;
60  }
61  const NVPTXInstrInfo *getInstrInfo() const override { return &InstrInfo; }
62  const NVPTXRegisterInfo *getRegisterInfo() const override {
63  return &InstrInfo.getRegisterInfo();
64  }
65  const NVPTXTargetLowering *getTargetLowering() const override {
66  return &TLInfo;
67  }
68  const TargetSelectionDAGInfo *getSelectionDAGInfo() const override {
69  return &TSInfo;
70  }
71 
72  bool hasBrkPt() const { return SmVersion >= 11; }
73  bool hasAtomRedG32() const { return SmVersion >= 11; }
74  bool hasAtomRedS32() const { return SmVersion >= 12; }
75  bool hasAtomRedG64() const { return SmVersion >= 12; }
76  bool hasAtomRedS64() const { return SmVersion >= 20; }
77  bool hasAtomRedGen32() const { return SmVersion >= 20; }
78  bool hasAtomRedGen64() const { return SmVersion >= 20; }
79  bool hasAtomAddF32() const { return SmVersion >= 20; }
80  bool hasVote() const { return SmVersion >= 12; }
81  bool hasDouble() const { return SmVersion >= 13; }
82  bool reqPTX20() const { return SmVersion >= 20; }
83  bool hasF32FTZ() const { return SmVersion >= 20; }
84  bool hasFMAF32() const { return SmVersion >= 20; }
85  bool hasFMAF64() const { return SmVersion >= 13; }
86  bool hasLDG() const { return SmVersion >= 32; }
87  bool hasLDU() const { return ((SmVersion >= 20) && (SmVersion < 30)); }
88  bool hasGenericLdSt() const { return SmVersion >= 20; }
89  inline bool hasHWROT32() const { return SmVersion >= 32; }
90  inline bool hasSWROT32() const {
91  return ((SmVersion >= 20) && (SmVersion < 32));
92  }
93  inline bool hasROT32() const { return hasHWROT32() || hasSWROT32(); }
94  inline bool hasROT64() const { return SmVersion >= 20; }
95  bool hasImageHandles() const;
96 
97  unsigned int getSmVersion() const { return SmVersion; }
98  std::string getTargetName() const { return TargetName; }
99 
100  unsigned getPTXVersion() const { return PTXVersion; }
101 
104 };
105 
106 } // End llvm namespace
107 
108 #endif
bool hasAtomAddF32() const
bool hasLDG() const
bool hasBrkPt() const
bool hasROT32() const
void ParseSubtargetFeatures(StringRef CPU, StringRef FS)
NVPTXSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const NVPTXTargetMachine &TM)
This constructor initializes the data members to match that of the specified module.
bool hasROT64() const
bool hasAtomRedS64() const
bool hasAtomRedG64() const
unsigned int getSmVersion() const
bool hasGenericLdSt() const
bool hasF32FTZ() const
bool hasDouble() const
TargetSelectionDAGInfo - Targets can subclass this to parameterize the SelectionDAG lowering and inst...
const NVPTXTargetLowering * getTargetLowering() const override
bool hasFMAF32() const
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
bool hasHWROT32() const
bool hasAtomRedGen64() const
bool hasAtomRedGen32() const
Information about stack frame layout on the target.
std::string getTargetName() const
const TargetSelectionDAGInfo * getSelectionDAGInfo() const override
bool hasLDU() const
const NVPTXInstrInfo * getInstrInfo() const override
NVPTXTargetMachine.
const NVPTXRegisterInfo & getRegisterInfo() const
bool hasFMAF64() const
bool hasAtomRedG32() const
bool hasImageHandles() const
const TargetFrameLowering * getFrameLowering() const override
bool reqPTX20() const
NVPTXSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS)
bool hasAtomRedS32() const
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:40
bool hasSWROT32() const
unsigned getPTXVersion() const
const NVPTXRegisterInfo * getRegisterInfo() const override
bool hasVote() const