1
//===- SubtargetEmitter.h - Generate subtarget enumerations -----*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This tablegen backend emits subtarget enumerations.
12
//===----------------------------------------------------------------------===//
14
#ifndef SUBTARGET_EMITTER_H
15
#define SUBTARGET_EMITTER_H
17
#include "TableGenBackend.h"
18
#include "llvm/Target/TargetInstrItineraries.h"
26
class SubtargetEmitter : public TableGenBackend {
28
RecordKeeper &Records;
32
void Enumeration(raw_ostream &OS, const char *ClassName, bool isBits);
33
void FeatureKeyValues(raw_ostream &OS);
34
void CPUKeyValues(raw_ostream &OS);
35
unsigned CollectAllItinClasses(raw_ostream &OS,
36
std::map<std::string, unsigned> &ItinClassesMap);
37
void FormItineraryStageString(Record *ItinData, std::string &ItinString,
39
void FormItineraryOperandCycleString(Record *ItinData, std::string &ItinString,
40
unsigned &NOperandCycles);
41
void EmitStageAndOperandCycleData(raw_ostream &OS, unsigned NItinClasses,
42
std::map<std::string, unsigned> &ItinClassesMap,
43
std::vector<std::vector<InstrItinerary> > &ProcList);
44
void EmitProcessorData(raw_ostream &OS,
45
std::vector<std::vector<InstrItinerary> > &ProcList);
46
void EmitProcessorLookup(raw_ostream &OS);
47
void EmitData(raw_ostream &OS);
48
void ParseFeaturesFunction(raw_ostream &OS);
51
SubtargetEmitter(RecordKeeper &R) : Records(R), HasItineraries(false) {}
53
// run - Output the subtarget enumerations, returning true on failure.
54
void run(raw_ostream &o);
59
} // End llvm namespace