[llvm] r330988 - [GlobalISel] Reporting rules covered as part of the InstructionSelect's debug-only printing

Roman Tereshin via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 26 13:22:17 PDT 2018


Author: rtereshin
Date: Thu Apr 26 13:22:17 2018
New Revision: 330988

URL: http://llvm.org/viewvc/llvm-project?rev=330988&view=rev
Log:
[GlobalISel] Reporting rules covered as part of the InstructionSelect's debug-only printing

The main goal of this change is to make it much easier to track which
rules are actually covered by Testgen'erated regression tests.

Reviewers: aemerson, dsanders

Differential Revision: https://reviews.llvm.org/D46095

Modified:
    llvm/trunk/include/llvm/Support/CodeGenCoverage.h
    llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp
    llvm/trunk/lib/Support/CodeGenCoverage.cpp

Modified: llvm/trunk/include/llvm/Support/CodeGenCoverage.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CodeGenCoverage.h?rev=330988&r1=330987&r2=330988&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/CodeGenCoverage.h (original)
+++ llvm/trunk/include/llvm/Support/CodeGenCoverage.h Thu Apr 26 13:22:17 2018
@@ -23,15 +23,18 @@ protected:
   BitVector RuleCoverage;
 
 public:
+  using const_covered_iterator = BitVector::const_set_bits_iterator;
+
   CodeGenCoverage();
 
   void setCovered(uint64_t RuleID);
-  bool isCovered(uint64_t RuleID);
+  bool isCovered(uint64_t RuleID) const;
+  iterator_range<const_covered_iterator> covered() const;
 
   bool parse(MemoryBuffer &Buffer, StringRef BackendName);
   bool emit(StringRef FilePrefix, StringRef BackendName) const;
   void reset();
 };
-} // end namespace llvm
+} // namespace llvm
 
 #endif // ifndef LLVM_SUPPORT_CODEGENCOVERAGE_H

Modified: llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp?rev=330988&r1=330987&r2=330988&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp Thu Apr 26 13:22:17 2018
@@ -218,6 +218,12 @@ bool InstructionSelect::runOnMachineFunc
   auto &TLI = *MF.getSubtarget().getTargetLowering();
   TLI.finalizeLowering(MF);
 
+  DEBUG({
+    dbgs() << "Rules covered by selecting function: " << MF.getName() << ":";
+    for (auto RuleID : CoverageInfo.covered())
+      dbgs() << " id" << RuleID;
+    dbgs() << "\n\n";
+  });
   CoverageInfo.emit(CoveragePrefix,
                     MF.getSubtarget()
                         .getTargetLowering()

Modified: llvm/trunk/lib/Support/CodeGenCoverage.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CodeGenCoverage.cpp?rev=330988&r1=330987&r2=330988&view=diff
==============================================================================
--- llvm/trunk/lib/Support/CodeGenCoverage.cpp (original)
+++ llvm/trunk/lib/Support/CodeGenCoverage.cpp Thu Apr 26 13:22:17 2018
@@ -38,12 +38,17 @@ void CodeGenCoverage::setCovered(uint64_
   RuleCoverage[RuleID] = true;
 }
 
-bool CodeGenCoverage::isCovered(uint64_t RuleID) {
+bool CodeGenCoverage::isCovered(uint64_t RuleID) const {
   if (RuleCoverage.size() <= RuleID)
     return false;
   return RuleCoverage[RuleID];
 }
 
+iterator_range<CodeGenCoverage::const_covered_iterator>
+CodeGenCoverage::covered() const {
+  return RuleCoverage.set_bits();
+}
+
 bool CodeGenCoverage::parse(MemoryBuffer &Buffer, StringRef BackendName) {
   const char *CurPtr = Buffer.getBufferStart();
 




More information about the llvm-commits mailing list