1 //==-- HexagonSubtarget.h - Define Subtarget for the Hexagon ----*- C++ -*-==//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file declares the Hexagon specific subclass of TargetSubtarget.
12 //===----------------------------------------------------------------------===//
14 #ifndef Hexagon_SUBTARGET_H
15 #define Hexagon_SUBTARGET_H
17 #include "llvm/Target/TargetSubtargetInfo.h"
18 #include "llvm/Target/TargetMachine.h"
21 #define GET_SUBTARGETINFO_HEADER
22 #include "HexagonGenSubtargetInfo.inc"
24 #define Hexagon_SMALL_DATA_THRESHOLD 8
28 class HexagonSubtarget : public HexagonGenSubtargetInfo {
33 enum HexagonArchEnum {
37 HexagonArchEnum HexagonArchVersion;
38 std::string CPUString;
39 InstrItineraryData InstrItins;
42 HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS);
44 /// getInstrItins - Return the instruction itineraies based on subtarget
46 const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
49 /// ParseSubtargetFeatures - Parses features string setting specified
50 /// subtarget options. Definition of function is auto generated by tblgen.
51 void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
53 bool hasV2TOps () const { return HexagonArchVersion >= V2; }
54 bool hasV2TOpsOnly () const { return HexagonArchVersion == V2; }
55 bool hasV3TOps () const { return HexagonArchVersion >= V3; }
56 bool hasV3TOpsOnly () const { return HexagonArchVersion == V3; }
57 bool hasV4TOps () const { return HexagonArchVersion >= V4; }
58 bool useMemOps () const { return HexagonArchVersion >= V4 && UseMemOps; }
60 bool isSubtargetV2() const { return HexagonArchVersion == V2;}
61 const std::string &getCPUString () const { return CPUString; }
63 // Threshold for small data section
64 unsigned getSmallDataThreshold() const {
65 return Hexagon_SMALL_DATA_THRESHOLD;
67 const HexagonArchEnum &getHexagonArchVersion() const {
68 return HexagonArchVersion;
72 } // end namespace llvm