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/TargetSubtargetInfo.h" 18 #include "llvm/Target/TargetMachine.h" 19 #include <string> 20 21 #define GET_SUBTARGETINFO_HEADER 22 #include "HexagonGenSubtargetInfo.inc" 23 24 #define Hexagon_SMALL_DATA_THRESHOLD 8 25 26 namespace llvm { 27 28 class HexagonSubtarget : public HexagonGenSubtargetInfo { 29 30 bool UseMemOps; 31 32 public: 33 enum HexagonArchEnum { 34 V1, V2, V3, V4 35 }; 36 37 HexagonArchEnum HexagonArchVersion; 38 std::string CPUString; 39 InstrItineraryData InstrItins; 40 41 public: 42 HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS); 43 44 /// getInstrItins - Return the instruction itineraies based on subtarget 45 /// selection. 46 const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } 47 48 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); 52 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; } 59 60 bool isSubtargetV2() const { return HexagonArchVersion == V2;} 61 const std::string &getCPUString () const { return CPUString; } 62 63 // Threshold for small data section 64 unsigned getSmallDataThreshold() const { 65 return Hexagon_SMALL_DATA_THRESHOLD; 66 } 67 const HexagonArchEnum &getHexagonArchVersion() const { 68 return HexagonArchVersion; 69 } 70 }; 71 72 } // end namespace llvm 73 74 #endif 75