[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:
parent
51738f834e
commit
38489ed416
|
@ -23,15 +23,18 @@ protected:
|
||||||
BitVector RuleCoverage;
|
BitVector RuleCoverage;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
using const_covered_iterator = BitVector::const_set_bits_iterator;
|
||||||
|
|
||||||
CodeGenCoverage();
|
CodeGenCoverage();
|
||||||
|
|
||||||
void setCovered(uint64_t RuleID);
|
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 parse(MemoryBuffer &Buffer, StringRef BackendName);
|
||||||
bool emit(StringRef FilePrefix, StringRef BackendName) const;
|
bool emit(StringRef FilePrefix, StringRef BackendName) const;
|
||||||
void reset();
|
void reset();
|
||||||
};
|
};
|
||||||
} // end namespace llvm
|
} // namespace llvm
|
||||||
|
|
||||||
#endif // ifndef LLVM_SUPPORT_CODEGENCOVERAGE_H
|
#endif // ifndef LLVM_SUPPORT_CODEGENCOVERAGE_H
|
||||||
|
|
|
@ -218,6 +218,12 @@ bool InstructionSelect::runOnMachineFunction(MachineFunction &MF) {
|
||||||
auto &TLI = *MF.getSubtarget().getTargetLowering();
|
auto &TLI = *MF.getSubtarget().getTargetLowering();
|
||||||
TLI.finalizeLowering(MF);
|
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,
|
CoverageInfo.emit(CoveragePrefix,
|
||||||
MF.getSubtarget()
|
MF.getSubtarget()
|
||||||
.getTargetLowering()
|
.getTargetLowering()
|
||||||
|
|
|
@ -38,12 +38,17 @@ void CodeGenCoverage::setCovered(uint64_t RuleID) {
|
||||||
RuleCoverage[RuleID] = true;
|
RuleCoverage[RuleID] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CodeGenCoverage::isCovered(uint64_t RuleID) {
|
bool CodeGenCoverage::isCovered(uint64_t RuleID) const {
|
||||||
if (RuleCoverage.size() <= RuleID)
|
if (RuleCoverage.size() <= RuleID)
|
||||||
return false;
|
return false;
|
||||||
return RuleCoverage[RuleID];
|
return RuleCoverage[RuleID];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iterator_range<CodeGenCoverage::const_covered_iterator>
|
||||||
|
CodeGenCoverage::covered() const {
|
||||||
|
return RuleCoverage.set_bits();
|
||||||
|
}
|
||||||
|
|
||||||
bool CodeGenCoverage::parse(MemoryBuffer &Buffer, StringRef BackendName) {
|
bool CodeGenCoverage::parse(MemoryBuffer &Buffer, StringRef BackendName) {
|
||||||
const char *CurPtr = Buffer.getBufferStart();
|
const char *CurPtr = Buffer.getBufferStart();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue