summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/CodeGenRegisters.h
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-09-14 16:56:21 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-09-14 16:56:21 +0000
commit779d98e1c008b30a211375a76f3f2c97502a02b5 (patch)
tree1487ccf61f066616188b089b38a1ace6ac1f7637 /llvm/utils/TableGen/CodeGenRegisters.h
parenta0e55b6403b75e6884efc1ab11599e0677d48903 (diff)
downloadbcm5719-llvm-779d98e1c008b30a211375a76f3f2c97502a02b5.tar.gz
bcm5719-llvm-779d98e1c008b30a211375a76f3f2c97502a02b5.zip
TableGen support for parameterized register class information
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
Diffstat (limited to 'llvm/utils/TableGen/CodeGenRegisters.h')
-rw-r--r--llvm/utils/TableGen/CodeGenRegisters.h32
1 files changed, 15 insertions, 17 deletions
diff --git a/llvm/utils/TableGen/CodeGenRegisters.h b/llvm/utils/TableGen/CodeGenRegisters.h
index 1ce041c2ef8..f2f1e6971af 100644
--- a/llvm/utils/TableGen/CodeGenRegisters.h
+++ b/llvm/utils/TableGen/CodeGenRegisters.h
@@ -15,6 +15,7 @@
#ifndef LLVM_UTILS_TABLEGEN_CODEGENREGISTERS_H
#define LLVM_UTILS_TABLEGEN_CODEGENREGISTERS_H
+#include "InfoByHwMode.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
@@ -319,9 +320,8 @@ namespace llvm {
public:
unsigned EnumValue;
StringRef Namespace;
- SmallVector<MVT::SimpleValueType, 4> VTs;
- unsigned SpillSize;
- unsigned SpillAlignment;
+ SmallVector<ValueTypeByHwMode, 4> VTs;
+ RegSizeInfoByHwMode RSI;
int CopyCost;
bool Allocatable;
StringRef AltOrderSelect;
@@ -338,13 +338,10 @@ namespace llvm {
const std::string &getName() const { return Name; }
std::string getQualifiedName() const;
- ArrayRef<MVT::SimpleValueType> getValueTypes() const {return VTs;}
- bool hasValueType(MVT::SimpleValueType VT) const {
- return std::find(VTs.begin(), VTs.end(), VT) != VTs.end();
- }
+ ArrayRef<ValueTypeByHwMode> getValueTypes() const { return VTs; }
unsigned getNumValueTypes() const { return VTs.size(); }
- MVT::SimpleValueType getValueTypeNum(unsigned VTNum) const {
+ ValueTypeByHwMode getValueTypeNum(unsigned VTNum) const {
if (VTNum < VTs.size())
return VTs[VTNum];
llvm_unreachable("VTNum greater than number of ValueTypes in RegClass!");
@@ -439,18 +436,15 @@ namespace llvm {
// the topological order used for the EnumValues.
struct Key {
const CodeGenRegister::Vec *Members;
- unsigned SpillSize;
- unsigned SpillAlignment;
+ RegSizeInfoByHwMode RSI;
- Key(const CodeGenRegister::Vec *M, unsigned S = 0, unsigned A = 0)
- : Members(M), SpillSize(S), SpillAlignment(A) {}
+ Key(const CodeGenRegister::Vec *M, const RegSizeInfoByHwMode &I)
+ : Members(M), RSI(I) {}
Key(const CodeGenRegisterClass &RC)
- : Members(&RC.getMembers()),
- SpillSize(RC.SpillSize),
- SpillAlignment(RC.SpillAlignment) {}
+ : Members(&RC.getMembers()), RSI(RC.RSI) {}
- // Lexicographical order of (Members, SpillSize, SpillAlignment).
+ // Lexicographical order of (Members, RegSizeInfoByHwMode).
bool operator<(const Key&) const;
};
@@ -513,6 +507,8 @@ namespace llvm {
class CodeGenRegBank {
SetTheory Sets;
+ const CodeGenHwModes &CGH;
+
std::deque<CodeGenSubRegIndex> SubRegIndices;
DenseMap<Record*, CodeGenSubRegIndex*> Def2SubRegIdx;
@@ -596,10 +592,12 @@ namespace llvm {
void computeRegUnitLaneMasks();
public:
- CodeGenRegBank(RecordKeeper&);
+ CodeGenRegBank(RecordKeeper&, const CodeGenHwModes&);
SetTheory &getSets() { return Sets; }
+ const CodeGenHwModes &getHwModes() const { return CGH; }
+
// Sub-register indices. The first NumNamedIndices are defined by the user
// in the .td files. The rest are synthesized such that all sub-registers
// have a unique name.
OpenPOWER on IntegriCloud