[weak vtables] Remove a bunch of weak vtables
[oota-llvm.git] / lib / Target / Hexagon / HexagonSubtarget.h
1 //===-- HexagonSubtarget.h - Define Subtarget for the Hexagon ---*- 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 Hexagon specific subclass of TargetSubtarget.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef Hexagon_SUBTARGET_H
15 #define Hexagon_SUBTARGET_H
16
17 #include "llvm/Target/TargetMachine.h"
18 #include "llvm/Target/TargetSubtargetInfo.h"
19 #include <string>
20
21 #define GET_SUBTARGETINFO_HEADER
22 #include "HexagonGenSubtargetInfo.inc"
23
24 #define Hexagon_SMALL_DATA_THRESHOLD 8
25 #define Hexagon_SLOTS 4
26
27 namespace llvm {
28
29 class HexagonSubtarget : public HexagonGenSubtargetInfo {
30
31   bool UseMemOps;
32   bool ModeIEEERndNear;
33
34 public:
35   enum HexagonArchEnum {
36     V1, V2, V3, V4, V5
37   };
38
39   HexagonArchEnum HexagonArchVersion;
40   std::string CPUString;
41   InstrItineraryData InstrItins;
42
43 public:
44   HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS);
45   virtual ~HexagonSubtarget();
46
47   /// getInstrItins - Return the instruction itineraies based on subtarget
48   /// selection.
49   const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
50
51
52   /// ParseSubtargetFeatures - Parses features string setting specified
53   /// subtarget options.  Definition of function is auto generated by tblgen.
54   void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
55
56   bool hasV2TOps () const { return HexagonArchVersion >= V2; }
57   bool hasV2TOpsOnly () const { return HexagonArchVersion == V2; }
58   bool hasV3TOps () const { return HexagonArchVersion >= V3; }
59   bool hasV3TOpsOnly () const { return HexagonArchVersion == V3; }
60   bool hasV4TOps () const { return HexagonArchVersion >= V4; }
61   bool hasV4TOpsOnly () const { return HexagonArchVersion == V4; }
62   bool useMemOps () const { return HexagonArchVersion >= V4 && UseMemOps; }
63   bool hasV5TOps () const { return HexagonArchVersion >= V5; }
64   bool hasV5TOpsOnly () const { return HexagonArchVersion == V5; }
65   bool modeIEEERndNear () const { return ModeIEEERndNear; }
66
67   bool isSubtargetV2() const { return HexagonArchVersion == V2;}
68   const std::string &getCPUString () const { return CPUString; }
69
70   // Threshold for small data section
71   unsigned getSmallDataThreshold() const {
72     return Hexagon_SMALL_DATA_THRESHOLD;
73   }
74   const HexagonArchEnum &getHexagonArchVersion() const {
75     return  HexagonArchVersion;
76   }
77 };
78
79 } // end namespace llvm
80
81 #endif