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(const std::string &Names,
38
Record *ItinData, std::string &ItinString,
40
void FormItineraryOperandCycleString(Record *ItinData, std::string &ItinString,
41
unsigned &NOperandCycles);
42
void EmitStageAndOperandCycleData(raw_ostream &OS, unsigned NItinClasses,
43
std::map<std::string, unsigned> &ItinClassesMap,
44
std::vector<std::vector<InstrItinerary> > &ProcList);
45
void EmitProcessorData(raw_ostream &OS,
46
std::vector<std::vector<InstrItinerary> > &ProcList);
47
void EmitProcessorLookup(raw_ostream &OS);
48
void EmitData(raw_ostream &OS);
49
void ParseFeaturesFunction(raw_ostream &OS);
52
SubtargetEmitter(RecordKeeper &R) : Records(R), HasItineraries(false) {}
54
// run - Output the subtarget enumerations, returning true on failure.
55
void run(raw_ostream &o);
60
} // End llvm namespace