mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
f817a9b5c3
This replaces TableGen's type inference to operate on parameterized types instead of MVTs, and as a consequence, some interfaces have changed: - Uses of MVTs are replaced by ValueTypeByHwMode. - EEVT::TypeSet is replaced by TypeSetByHwMode. This affects the way that types and type sets are printed, and the tests relying on that have been updated. There are certain users of the inferred types outside of TableGen itself, namely FastISel and GlobalISel. For those users, the way that the types are accessed have changed. For typical scenarios, these replacements can be used: - TreePatternNode::getType(ResNo) -> getSimpleType(ResNo) - TreePatternNode::hasTypeSet(ResNo) -> hasConcreteType(ResNo) - TypeSet::isConcrete -> TypeSetByHwMode::isValueTypeByHwMode(false) For more information, please refer to the review page. Differential Revision: https://reviews.llvm.org/D31951 llvm-svn: 313271
65 lines
1.8 KiB
C++
65 lines
1.8 KiB
C++
//===--- CodeGenHwModes.h ---------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
// Classes to parse and store HW mode information for instruction selection.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
|
|
#define LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
|
|
|
|
#include "llvm/ADT/StringMap.h"
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
// HwModeId -> list of predicates (definition)
|
|
|
|
namespace llvm {
|
|
class Record;
|
|
class RecordKeeper;
|
|
|
|
struct CodeGenHwModes;
|
|
|
|
struct HwMode {
|
|
HwMode(Record *R);
|
|
StringRef Name;
|
|
std::string Features;
|
|
void dump() const;
|
|
};
|
|
|
|
struct HwModeSelect {
|
|
HwModeSelect(Record *R, CodeGenHwModes &CGH);
|
|
typedef std::pair<unsigned, Record*> PairType;
|
|
std::vector<PairType> Items;
|
|
void dump() const;
|
|
};
|
|
|
|
struct CodeGenHwModes {
|
|
enum : unsigned { DefaultMode = 0 };
|
|
static StringRef DefaultModeName;
|
|
|
|
CodeGenHwModes(RecordKeeper &R);
|
|
unsigned getHwModeId(StringRef Name) const;
|
|
const HwMode &getMode(unsigned Id) const {
|
|
assert(Id != 0 && "Mode id of 0 is reserved for the default mode");
|
|
return Modes[Id-1];
|
|
}
|
|
const HwModeSelect &getHwModeSelect(Record *R) const;
|
|
unsigned getNumModeIds() const { return Modes.size()+1; }
|
|
void dump() const;
|
|
|
|
private:
|
|
RecordKeeper &Records;
|
|
StringMap<unsigned> ModeIds; // HwMode (string) -> HwModeId
|
|
std::vector<HwMode> Modes;
|
|
std::map<Record*,HwModeSelect> ModeSelects;
|
|
};
|
|
}
|
|
|
|
#endif // LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
|