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