HexagonSubtarget.h revision b21ab43cfc3fa0dacf5c95f04e58b6d804b59a16
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