MCSubtargetInfo.h revision 59ee62d2418df8db499eca1ae17f5900dc2dcbba
1//==-- llvm/MC/MCSubtargetInfo.h - Subtarget Information ---------*- 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 describes the subtarget options of a Target machine.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_MC_MCSUBTARGET_H
15#define LLVM_MC_MCSUBTARGET_H
16
17#include "llvm/MC/SubtargetFeature.h"
18#include "llvm/MC/MCInstrItineraries.h"
19#include <string>
20
21namespace llvm {
22
23class StringRef;
24
25//===----------------------------------------------------------------------===//
26///
27/// MCSubtargetInfo - Generic base class for all target subtargets.
28///
29class MCSubtargetInfo {
30  std::string TargetTriple;            // Target triple
31  const SubtargetFeatureKV *ProcFeatures;  // Processor feature list
32  const SubtargetFeatureKV *ProcDesc;  // Processor descriptions
33  const SubtargetInfoKV *ProcItins;    // Scheduling itineraries
34  const InstrStage *Stages;            // Instruction stages
35  const unsigned *OperandCycles;       // Operand cycles
36  const unsigned *ForwardingPathes;    // Forwarding pathes
37  unsigned NumFeatures;                // Number of processor features
38  unsigned NumProcs;                   // Number of processors
39  uint64_t FeatureBits;                // Feature bits for current CPU + FS
40
41public:
42  void InitMCSubtargetInfo(StringRef TT, StringRef CPU, StringRef FS,
43                           const SubtargetFeatureKV *PF,
44                           const SubtargetFeatureKV *PD,
45                           const SubtargetInfoKV *PI, const InstrStage *IS,
46                           const unsigned *OC, const unsigned *FP,
47                           unsigned NF, unsigned NP);
48
49  /// getTargetTriple - Return the target triple string.
50  StringRef getTargetTriple() const {
51    return TargetTriple;
52  }
53
54  /// getFeatureBits - Return the feature bits.
55  ///
56  uint64_t getFeatureBits() const {
57    return FeatureBits;
58  }
59
60  /// ReInitMCSubtargetInfo - Change CPU (and optionally supplemented with
61  /// feature string), recompute and return feature bits.
62  uint64_t ReInitMCSubtargetInfo(StringRef CPU, StringRef FS);
63
64  /// ToggleFeature - Toggle a feature and returns the re-computed feature
65  /// bits. This version does not change the implied bits.
66  uint64_t ToggleFeature(uint64_t FB);
67
68  /// ToggleFeature - Toggle a feature and returns the re-computed feature
69  /// bits. This version will also change all implied bits.
70  uint64_t ToggleFeature(StringRef FS);
71
72  /// getInstrItineraryForCPU - Get scheduling itinerary of a CPU.
73  ///
74  InstrItineraryData getInstrItineraryForCPU(StringRef CPU) const;
75};
76
77} // End llvm namespace
78
79#endif
80