[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

llvm-svn: 330988
This commit is contained in:
Roman Tereshin 2018-04-26 20:22:17 +00:00
parent 51738f834e
commit 38489ed416
3 changed files with 17 additions and 3 deletions

View File

@ -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

View File

@ -218,6 +218,12 @@ bool InstructionSelect::runOnMachineFunction(MachineFunction &MF) {
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()

View File

@ -38,12 +38,17 @@ void CodeGenCoverage::setCovered(uint64_t RuleID) {
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();