diff options
| author | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-08-23 10:09:25 +0000 | 
|---|---|---|
| committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-08-23 10:09:25 +0000 | 
| commit | 499807079bfedb05bacee91c95cfb8acd96bf910 (patch) | |
| tree | 38c135799069033c237adc88dcc7cb95bc8d9850 | |
| parent | 06d9eda1500943253795c2af5791880f63fd6049 (diff) | |
| download | bcm5719-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.td | 21 | ||||
| -rw-r--r-- | llvm/utils/TableGen/GlobalISelEmitter.cpp | 9 | 
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";  | 

