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