OSDN Git Service

[globalisel][tablegen] Add tests for FeatureBitsets and ComplexPattern predicates.
authorDaniel Sanders <daniel_l_sanders@apple.com>
Wed, 23 Aug 2017 10:09:25 +0000 (10:09 +0000)
committerDaniel Sanders <daniel_l_sanders@apple.com>
Wed, 23 Aug 2017 10:09:25 +0000 (10:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311542 91177308-0d34-0410-b5e6-96231b3b80d8

test/TableGen/GlobalISelEmitter.td
utils/TableGen/GlobalISelEmitter.cpp

index b479240..cb3974a 100644 (file)
@@ -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();
index 0e4eade..9f53ac4 100644 (file)
@@ -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";