forked from OSchip/llvm-project
Add initial support for debug counting
Summary: We have support for bisection, and bugpoint can reduce testcases often to a single pass. But that doesn't help reduce it to a single transform by a single pass. Which debug counting lets us do. Debug counting lets you instrument a pass so that it only executes a certain thing (rwhatever you want) after skipping it a certain time of times, and then only does a certain number of executions before saying "skip" again. To make it concrete, for predicateinfo, if i instrument use renaming, i can make it so it skips renaming the first N uses, renames the next N, and then skips the rest. This lets you narrow down a miscompilation to, often, a single transformation, and then also debug it (by using the same command line parameters). Reviewers: chandlerc, davide, mehdi_amini Subscribers: mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D29998 llvm-svn: 295593
This commit is contained in:
parent
3cc0d4e058
commit
25f1db1111
|
@ -343,6 +343,9 @@ public:
|
||||||
|
|
||||||
virtual void printOptionValue(size_t GlobalWidth, bool Force) const = 0;
|
virtual void printOptionValue(size_t GlobalWidth, bool Force) const = 0;
|
||||||
|
|
||||||
|
static void printHelpStr(StringRef HelpStr, size_t Indent,
|
||||||
|
size_t FirstLineIndentedBy);
|
||||||
|
|
||||||
virtual void getExtraOptionNames(SmallVectorImpl<StringRef> &) {}
|
virtual void getExtraOptionNames(SmallVectorImpl<StringRef> &) {}
|
||||||
|
|
||||||
// addOccurrence - Wrapper around handleOccurrence that enforces Flags.
|
// addOccurrence - Wrapper around handleOccurrence that enforces Flags.
|
||||||
|
|
|
@ -47,6 +47,7 @@ add_llvm_library(LLVMSupport
|
||||||
CrashRecoveryContext.cpp
|
CrashRecoveryContext.cpp
|
||||||
DataExtractor.cpp
|
DataExtractor.cpp
|
||||||
Debug.cpp
|
Debug.cpp
|
||||||
|
DebugCounter.cpp
|
||||||
DeltaAlgorithm.cpp
|
DeltaAlgorithm.cpp
|
||||||
DAGDeltaAlgorithm.cpp
|
DAGDeltaAlgorithm.cpp
|
||||||
Dwarf.cpp
|
Dwarf.cpp
|
||||||
|
|
|
@ -1404,7 +1404,7 @@ static StringRef getValueStr(const Option &O, StringRef DefaultMsg) {
|
||||||
// Return the width of the option tag for printing...
|
// Return the width of the option tag for printing...
|
||||||
size_t alias::getOptionWidth() const { return ArgStr.size() + 6; }
|
size_t alias::getOptionWidth() const { return ArgStr.size() + 6; }
|
||||||
|
|
||||||
static void printHelpStr(StringRef HelpStr, size_t Indent,
|
void Option::printHelpStr(StringRef HelpStr, size_t Indent,
|
||||||
size_t FirstLineIndentedBy) {
|
size_t FirstLineIndentedBy) {
|
||||||
std::pair<StringRef, StringRef> Split = HelpStr.split('\n');
|
std::pair<StringRef, StringRef> Split = HelpStr.split('\n');
|
||||||
outs().indent(Indent - FirstLineIndentedBy) << " - " << Split.first << "\n";
|
outs().indent(Indent - FirstLineIndentedBy) << " - " << Split.first << "\n";
|
||||||
|
@ -1448,7 +1448,7 @@ void basic_parser_impl::printOptionInfo(const Option &O,
|
||||||
if (!ValName.empty())
|
if (!ValName.empty())
|
||||||
outs() << "=<" << getValueStr(O, ValName) << '>';
|
outs() << "=<" << getValueStr(O, ValName) << '>';
|
||||||
|
|
||||||
printHelpStr(O.HelpStr, GlobalWidth, getOptionWidth(O));
|
Option::printHelpStr(O.HelpStr, GlobalWidth, getOptionWidth(O));
|
||||||
}
|
}
|
||||||
|
|
||||||
void basic_parser_impl::printOptionName(const Option &O,
|
void basic_parser_impl::printOptionName(const Option &O,
|
||||||
|
@ -1587,7 +1587,7 @@ void generic_parser_base::printOptionInfo(const Option &O,
|
||||||
size_t GlobalWidth) const {
|
size_t GlobalWidth) const {
|
||||||
if (O.hasArgStr()) {
|
if (O.hasArgStr()) {
|
||||||
outs() << " -" << O.ArgStr;
|
outs() << " -" << O.ArgStr;
|
||||||
printHelpStr(O.HelpStr, GlobalWidth, O.ArgStr.size() + 6);
|
Option::printHelpStr(O.HelpStr, GlobalWidth, O.ArgStr.size() + 6);
|
||||||
|
|
||||||
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
|
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
|
||||||
size_t NumSpaces = GlobalWidth - getOption(i).size() - 8;
|
size_t NumSpaces = GlobalWidth - getOption(i).size() - 8;
|
||||||
|
@ -1600,7 +1600,7 @@ void generic_parser_base::printOptionInfo(const Option &O,
|
||||||
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
|
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
|
||||||
auto Option = getOption(i);
|
auto Option = getOption(i);
|
||||||
outs() << " -" << Option;
|
outs() << " -" << Option;
|
||||||
printHelpStr(getDescription(i), GlobalWidth, Option.size() + 8);
|
Option::printHelpStr(getDescription(i), GlobalWidth, Option.size() + 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue