summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Sanders <daniel_l_sanders@apple.com>2017-08-23 10:09:25 +0000
committerDaniel Sanders <daniel_l_sanders@apple.com>2017-08-23 10:09:25 +0000
commit499807079bfedb05bacee91c95cfb8acd96bf910 (patch)
tree38c135799069033c237adc88dcc7cb95bc8d9850
parent06d9eda1500943253795c2af5791880f63fd6049 (diff)
downloadbcm5719-llvm-499807079bfedb05bacee91c95cfb8acd96bf910.tar.gz
bcm5719-llvm-499807079bfedb05bacee91c95cfb8acd96bf910.zip
[globalisel][tablegen] Add tests for FeatureBitsets and ComplexPattern predicates.
llvm-svn: 311542
-rw-r--r--llvm/test/TableGen/GlobalISelEmitter.td21
-rw-r--r--llvm/utils/TableGen/GlobalISelEmitter.cpp9
2 files changed, 26 insertions, 4 deletions
diff --git a/llvm/test/TableGen/GlobalISelEmitter.td b/llvm/test/TableGen/GlobalISelEmitter.td
index b479240d765..cb3974a1cf1 100644
--- a/llvm/test/TableGen/GlobalISelEmitter.td
+++ b/llvm/test/TableGen/GlobalISelEmitter.td
@@ -83,13 +83,32 @@ def HasC : Predicate<"Subtarget->hasC()"> { let RecomputePerFunction = 1; }
// CHECK-NEXT: return Features;
// CHECK-NEXT: }
-// CHECK-LABEL: enum {
+// CHECK-LABEL: // LLT Objects.
+// CHECK-NEXT: enum {
// CHECK-NEXT: GILLT_s32,
// CHECK-NEXT: }
// CHECK-NEXT: const static LLT TypeObjects[] = {
// CHECK-NEXT: LLT::scalar(32),
// CHECK-NEXT: };
+// CHECK-LABEL: // Feature bitsets.
+// CHECK-NEXT: enum {
+// CHECK-NEXT: GIFBS_Invalid,
+// CHECK-NEXT: GIFBS_HasA,
+// CHECK-NEXT: GIFBS_HasA_HasB_HasC,
+// CHECK-NEXT: }
+// CHECK-NEXT: const static PredicateBitset FeatureBitsets[] {
+// CHECK-NEXT: {}, // GIFBS_Invalid
+// CHECK-NEXT: {Feature_HasABit, },
+// CHECK-NEXT: {Feature_HasABit, Feature_HasBBit, Feature_HasCBit, },
+// CHECK-NEXT: };
+
+// CHECK-LABEL: // ComplexPattern predicates.
+// CHECK-NEXT: enum {
+// CHECK-NEXT: GICP_Invalid,
+// CHECK-NEXT: GICP_gi_complex,
+// CHECK-NEXT: };
+
// CHECK: bool MyTargetInstructionSelector::selectImpl(MachineInstr &I) const {
// CHECK-NEXT: MachineFunction &MF = *I.getParent()->getParent();
// CHECK-NEXT: MachineRegisterInfo &MRI = MF.getRegInfo();
diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp
index 0e4eade442c..9f53ac40e3a 100644
--- a/llvm/utils/TableGen/GlobalISelEmitter.cpp
+++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp
@@ -2567,7 +2567,8 @@ void GlobalISelEmitter::run(raw_ostream &OS) {
for (const auto &Ty : LLTOperandMatcher::KnownTypes)
TypeObjects.push_back(Ty);
std::sort(TypeObjects.begin(), TypeObjects.end());
- OS << "enum {\n";
+ OS << "// LLT Objects.\n"
+ << "enum {\n";
for (const auto &TypeObject : TypeObjects) {
OS << " ";
TypeObject.emitCxxEnumValue(OS);
@@ -2605,7 +2606,8 @@ void GlobalISelEmitter::run(raw_ostream &OS) {
FeatureBitsets.erase(
std::unique(FeatureBitsets.begin(), FeatureBitsets.end()),
FeatureBitsets.end());
- OS << "enum {\n"
+ OS << "// Feature bitsets.\n"
+ << "enum {\n"
<< " GIFBS_Invalid,\n";
for (const auto &FeatureBitset : FeatureBitsets) {
if (FeatureBitset.empty())
@@ -2629,7 +2631,8 @@ void GlobalISelEmitter::run(raw_ostream &OS) {
OS << "};\n\n";
// Emit complex predicate table and an enum to reference them with.
- OS << "enum {\n"
+ OS << "// ComplexPattern predicates.\n"
+ << "enum {\n"
<< " GICP_Invalid,\n";
for (const auto &Record : ComplexPredicates)
OS << " GICP_" << Record->getName() << ",\n";
OpenPOWER on IntegriCloud