HexagonSubtarget.h revision 276479
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 "HexagonFrameLowering.h" 18#include "HexagonInstrInfo.h" 19#include "HexagonISelLowering.h" 20#include "HexagonSelectionDAGInfo.h" 21#include "llvm/IR/DataLayout.h" 22#include "llvm/Target/TargetMachine.h" 23#include "llvm/Target/TargetSubtargetInfo.h" 24#include <string> 25 26#define GET_SUBTARGETINFO_HEADER 27#include "HexagonGenSubtargetInfo.inc" 28 29#define Hexagon_SMALL_DATA_THRESHOLD 8 30#define Hexagon_SLOTS 4 31 32namespace llvm { 33 34class HexagonSubtarget : public HexagonGenSubtargetInfo { 35 virtual void anchor(); 36 37 bool UseMemOps; 38 bool ModeIEEERndNear; 39 40public: 41 enum HexagonArchEnum { 42 V1, V2, V3, V4, V5 43 }; 44 45 HexagonArchEnum HexagonArchVersion; 46private: 47 std::string CPUString; 48 const DataLayout DL; // Calculates type size & alignment. 49 HexagonInstrInfo InstrInfo; 50 HexagonTargetLowering TLInfo; 51 HexagonSelectionDAGInfo TSInfo; 52 HexagonFrameLowering FrameLowering; 53 InstrItineraryData InstrItins; 54 55public: 56 HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS, 57 const TargetMachine &TM); 58 59 /// getInstrItins - Return the instruction itineraies based on subtarget 60 /// selection. 61 const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } 62 const HexagonInstrInfo *getInstrInfo() const { return &InstrInfo; } 63 const HexagonRegisterInfo *getRegisterInfo() const { 64 return &InstrInfo.getRegisterInfo(); 65 } 66 const HexagonTargetLowering *getTargetLowering() const { return &TLInfo; } 67 const HexagonFrameLowering *getFrameLowering() const { 68 return &FrameLowering; 69 } 70 const HexagonSelectionDAGInfo *getSelectionDAGInfo() const { return &TSInfo; } 71 const DataLayout *getDataLayout() const { return &DL; } 72 73 HexagonSubtarget &initializeSubtargetDependencies(StringRef CPU, 74 StringRef FS); 75 76 /// ParseSubtargetFeatures - Parses features string setting specified 77 /// subtarget options. Definition of function is auto generated by tblgen. 78 void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 79 80 bool hasV2TOps () const { return HexagonArchVersion >= V2; } 81 bool hasV2TOpsOnly () const { return HexagonArchVersion == V2; } 82 bool hasV3TOps () const { return HexagonArchVersion >= V3; } 83 bool hasV3TOpsOnly () const { return HexagonArchVersion == V3; } 84 bool hasV4TOps () const { return HexagonArchVersion >= V4; } 85 bool hasV4TOpsOnly () const { return HexagonArchVersion == V4; } 86 bool useMemOps () const { return HexagonArchVersion >= V4 && UseMemOps; } 87 bool hasV5TOps () const { return HexagonArchVersion >= V5; } 88 bool hasV5TOpsOnly () const { return HexagonArchVersion == V5; } 89 bool modeIEEERndNear () const { return ModeIEEERndNear; } 90 91 bool isSubtargetV2() const { return HexagonArchVersion == V2;} 92 const std::string &getCPUString () const { return CPUString; } 93 94 // Threshold for small data section 95 unsigned getSmallDataThreshold() const { 96 return Hexagon_SMALL_DATA_THRESHOLD; 97 } 98 const HexagonArchEnum &getHexagonArchVersion() const { 99 return HexagonArchVersion; 100 } 101}; 102 103} // end namespace llvm 104 105#endif 106