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 27namespace llvm { 28 29class HexagonSubtarget : public HexagonGenSubtargetInfo { 30 31 bool UseMemOps; 32 bool ModeIEEERndNear; 33 34public: 35 enum HexagonArchEnum { 36 V1, V2, V3, V4, V5 37 }; 38 39 HexagonArchEnum HexagonArchVersion; 40 std::string CPUString; 41 InstrItineraryData InstrItins; 42 43public: 44 HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS); 45 46 /// getInstrItins - Return the instruction itineraies based on subtarget 47 /// selection. 48 const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } 49 50 51 /// ParseSubtargetFeatures - Parses features string setting specified 52 /// subtarget options. Definition of function is auto generated by tblgen. 53 void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 54 55 bool hasV2TOps () const { return HexagonArchVersion >= V2; } 56 bool hasV2TOpsOnly () const { return HexagonArchVersion == V2; } 57 bool hasV3TOps () const { return HexagonArchVersion >= V3; } 58 bool hasV3TOpsOnly () const { return HexagonArchVersion == V3; } 59 bool hasV4TOps () const { return HexagonArchVersion >= V4; } 60 bool hasV4TOpsOnly () const { return HexagonArchVersion == V4; } 61 bool useMemOps () const { return HexagonArchVersion >= V4 && UseMemOps; } 62 bool hasV5TOps () const { return HexagonArchVersion >= V5; } 63 bool hasV5TOpsOnly () const { return HexagonArchVersion == V5; } 64 bool modeIEEERndNear () const { return ModeIEEERndNear; } 65 66 bool isSubtargetV2() const { return HexagonArchVersion == V2;} 67 const std::string &getCPUString () const { return CPUString; } 68 69 // Threshold for small data section 70 unsigned getSmallDataThreshold() const { 71 return Hexagon_SMALL_DATA_THRESHOLD; 72 } 73 const HexagonArchEnum &getHexagonArchVersion() const { 74 return HexagonArchVersion; 75 } 76}; 77 78} // end namespace llvm 79 80#endif 81