diff options
author | Chris Lattner <sabre@nondot.org> | 2003-10-14 20:52:55 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-10-14 20:52:55 +0000 |
commit | a5a96a9ed9d90014769ffc86ca48c486cf753ad5 (patch) | |
tree | 40dd22fccc94013dedde3dc8e381e2f0de186741 /tools | |
parent | c2b81f69ed34754c38c9f5caf3277d058df00c58 (diff) | |
download | llvm-a5a96a9ed9d90014769ffc86ca48c486cf753ad5.tar.gz llvm-a5a96a9ed9d90014769ffc86ca48c486cf753ad5.tar.bz2 llvm-a5a96a9ed9d90014769ffc86ca48c486cf753ad5.tar.xz |
Eliminate the bugpoint -mode option, by making bugpoint automatically infer the root of all of your problems
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9115 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/bugpoint/BugDriver.cpp | 51 | ||||
-rw-r--r-- | tools/bugpoint/Miscompilation.cpp | 7 |
2 files changed, 22 insertions, 36 deletions
diff --git a/tools/bugpoint/BugDriver.cpp b/tools/bugpoint/BugDriver.cpp index 0801108557..f03a197310 100644 --- a/tools/bugpoint/BugDriver.cpp +++ b/tools/bugpoint/BugDriver.cpp @@ -27,14 +27,6 @@ namespace { cl::opt<std::string> OutputFile("output", cl::desc("Specify a reference program output " "(for miscompilation detection)")); - - enum DebugType { DebugCompile, DebugCodegen }; - cl::opt<DebugType> - DebugMode("mode", cl::desc("Debug mode for bugpoint:"), cl::Prefix, - cl::values(clEnumValN(DebugCompile, "compile", " Compilation"), - clEnumValN(DebugCodegen, "codegen", " Code generation"), - 0), - cl::init(DebugCompile)); } /// getPassesString - Turn a list of passes into a string which indicates the @@ -134,8 +126,6 @@ bool BugDriver::run() { return debugCrash(); } - std::cout << "Checking for a miscompilation...\n"; - // Set up the execution environment, selecting a method to run LLVM bytecode. if (initializeExecutionEnvironment()) return true; @@ -146,33 +136,36 @@ bool BugDriver::run() { bool CreatedOutput = false; if (ReferenceOutputFile.empty()) { std::cout << "Generating reference output from raw program..."; - if (DebugCodegen) { - ReferenceOutputFile = executeProgramWithCBE("bugpoint.reference.out"); - } else { - ReferenceOutputFile = executeProgram("bugpoint.reference.out"); - } + ReferenceOutputFile = executeProgramWithCBE("bugpoint.reference.out"); CreatedOutput = true; std::cout << "Reference output is: " << ReferenceOutputFile << "\n"; - } + } - bool Result; - switch (DebugMode) { - default: assert(0 && "Bad value for DebugMode!"); - case DebugCompile: + // Make sure the reference output file gets deleted on exit from this + // function, if appropriate. + struct Remover { + bool DeleteIt; const std::string &Filename; + Remover(bool deleteIt, const std::string &filename) + : DeleteIt(deleteIt), Filename(filename) {} + ~Remover() { + if (DeleteIt) removeFile(Filename); + } + } RemoverInstance(CreatedOutput, ReferenceOutputFile); + + // Diff the output of the raw program against the reference output. If it + // matches, then we have a miscompilation bug. + std::cout << "*** Checking the code generator...\n"; + if (!diffProgram()) { std::cout << "\n*** Debugging miscompilation!\n"; - Result = debugMiscompilation(); - break; - case DebugCodegen: - std::cout << "Debugging code generator problem!\n"; - Result = debugCodeGenerator(); + return debugMiscompilation(); } - if (CreatedOutput) removeFile(ReferenceOutputFile); - return Result; + std::cout << "\n*** Input program does not match reference diff!\n"; + std::cout << "Debugging code generator problem!\n"; + return debugCodeGenerator(); } -void BugDriver::PrintFunctionList(const std::vector<Function*> &Funcs) -{ +void BugDriver::PrintFunctionList(const std::vector<Function*> &Funcs) { for (unsigned i = 0, e = Funcs.size(); i != e; ++i) { if (i) std::cout << ", "; std::cout << Funcs[i]->getName(); diff --git a/tools/bugpoint/Miscompilation.cpp b/tools/bugpoint/Miscompilation.cpp index b88f87c9b1..2ede067b1e 100644 --- a/tools/bugpoint/Miscompilation.cpp +++ b/tools/bugpoint/Miscompilation.cpp @@ -261,13 +261,6 @@ bool ReduceMiscompilingFunctions::TestFuncs(const std::vector<Function*> &Funcs, /// input. /// bool BugDriver::debugMiscompilation() { - - if (diffProgram()) { - std::cout << "\n*** Input program does not match reference diff!\n" - << " Must be problem with input source!\n"; - return false; // Problem found - } - // Make sure something was miscompiled... if (!ReduceMiscompilingPasses(*this).reduceList(PassesToRun)) { std::cerr << "*** Optimized program matches reference output! No problem " |