HexagonSubtarget.h revision 234353
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
26namespace llvm {
27
28class HexagonSubtarget : public HexagonGenSubtargetInfo {
29
30  bool UseMemOps;
31
32public:
33  enum HexagonArchEnum {
34    V1, V2, V3, V4
35  };
36
37  HexagonArchEnum HexagonArchVersion;
38  std::string CPUString;
39  InstrItineraryData InstrItins;
40
41public:
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