From c2086906b5acfec5f16f7d3d79fe2a90354d830c Mon Sep 17 00:00:00 2001 From: Daniel Sanders Date: Wed, 23 Aug 2017 10:09:25 +0000 Subject: [PATCH] [globalisel][tablegen] Add tests for FeatureBitsets and ComplexPattern predicates. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311542 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/TableGen/GlobalISelEmitter.td | 21 ++++++++++++++++++++- utils/TableGen/GlobalISelEmitter.cpp | 9 ++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/test/TableGen/GlobalISelEmitter.td b/test/TableGen/GlobalISelEmitter.td index b479240d765..cb3974a1cf1 100644 --- a/test/TableGen/GlobalISelEmitter.td +++ b/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/utils/TableGen/GlobalISelEmitter.cpp b/utils/TableGen/GlobalISelEmitter.cpp index 0e4eade442c..9f53ac40e3a 100644 --- a/utils/TableGen/GlobalISelEmitter.cpp +++ b/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"; -- 2.50.1