MCSubtargetInfo.h revision 94214703d97d8d9dfca88174ffc7e94820a85e62
194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//==-- llvm/MC/MCSubtargetInfo.h - Subtarget Information ---------*- C++ -*-==//
294214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//
394214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//                     The LLVM Compiler Infrastructure
494214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//
594214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng// This file is distributed under the University of Illinois Open Source
694214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng// License. See LICENSE.TXT for details.
794214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//
894214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//===----------------------------------------------------------------------===//
994214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//
1094214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng// This file describes the subtarget options of a Target machine.
1194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//
1294214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//===----------------------------------------------------------------------===//
1394214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
1494214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#ifndef LLVM_MC_MCSUBTARGET_H
1594214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#define LLVM_MC_MCSUBTARGET_H
1694214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
1794214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#include "llvm/MC/SubtargetFeature.h"
1894214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#include "llvm/MC/MCInstrItineraries.h"
1994214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
2094214703d97d8d9dfca88174ffc7e94820a85e62Evan Chengnamespace llvm {
2194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
2294214703d97d8d9dfca88174ffc7e94820a85e62Evan Chengclass StringRef;
2394214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
2494214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng//===----------------------------------------------------------------------===//
2594214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng///
2694214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng/// MCSubtargetInfo - Generic base class for all target subtargets.
2794214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng///
2894214703d97d8d9dfca88174ffc7e94820a85e62Evan Chengclass MCSubtargetInfo {
2994214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  const SubtargetFeatureKV *ProcFeatures;  // Processor feature list
3094214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  const SubtargetFeatureKV *ProcDesc;  // Processor descriptions
3194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  const SubtargetInfoKV *ProcItins;    // Scheduling itineraries
3294214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  const InstrStage *Stages;            // Instruction stages
3394214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  const unsigned *OperandCycles;       // Operand cycles
3494214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  const unsigned *ForwardingPathes;    // Forwarding pathes
3594214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  unsigned NumFeatures;                // Number of processor features
3694214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  unsigned NumProcs;                   // Number of processors
3794214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
3894214703d97d8d9dfca88174ffc7e94820a85e62Evan Chengpublic:
3994214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  void InitMCSubtargetInfo(const SubtargetFeatureKV *PF,
4094214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng                           const SubtargetFeatureKV *PD,
4194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng                           const SubtargetInfoKV *PI, const InstrStage *IS,
4294214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng                           const unsigned *OC, const unsigned *FP,
4394214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng                           unsigned NF, unsigned NP) {
4494214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    ProcFeatures = PF;
4594214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    ProcDesc = PD;
4694214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    ProcItins = PI;
4794214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    Stages = IS;
4894214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    OperandCycles = OC;
4994214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    ForwardingPathes = FP;
5094214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    NumFeatures = NF;
5194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng    NumProcs = NP;
5294214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  }
5394214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
5494214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  /// getInstrItineraryForCPU - Get scheduling itinerary of a CPU.
5594214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  ///
5694214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng  InstrItineraryData getInstrItineraryForCPU(StringRef CPU) const;
5794214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng};
5894214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
5994214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng} // End llvm namespace
6094214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
6194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#endif
62