MCSubtargetInfo.h revision 2661b411ccc81b1fe19194d3f43b2630cbef3f28
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 *ProcSchedModel; // Scheduler machine model
34  const InstrStage *Stages;            // Instruction itinerary stages
35  const unsigned *OperandCycles;       // Itinerary operand cycles
36  const unsigned *ForwardingPaths;     // Forwarding paths
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 *ProcSched,
46                           const InstrStage *IS,
47                           const unsigned *OC, const unsigned *FP,
48                           unsigned NF, unsigned NP);
49
50  /// getTargetTriple - Return the target triple string.
51  StringRef getTargetTriple() const {
52    return TargetTriple;
53  }
54
55  /// getFeatureBits - Return the feature bits.
56  ///
57  uint64_t getFeatureBits() const {
58    return FeatureBits;
59  }
60
61  /// ReInitMCSubtargetInfo - Change CPU (and optionally supplemented with
62  /// feature string), recompute and return feature bits.
63  uint64_t ReInitMCSubtargetInfo(StringRef CPU, StringRef FS);
64
65  /// ToggleFeature - Toggle a feature and returns the re-computed feature
66  /// bits. This version does not change the implied bits.
67  uint64_t ToggleFeature(uint64_t FB);
68
69  /// ToggleFeature - Toggle a feature and returns the re-computed feature
70  /// bits. This version will also change all implied bits.
71  uint64_t ToggleFeature(StringRef FS);
72
73  /// getSchedModelForCPU - Get the machine model of a CPU.
74  ///
75  MCSchedModel *getSchedModelForCPU(StringRef CPU) const;
76
77  /// getInstrItineraryForCPU - Get scheduling itinerary of a CPU.
78  ///
79  InstrItineraryData getInstrItineraryForCPU(StringRef CPU) const;
80};
81
82} // End llvm namespace
83
84#endif
85