diff options
author | Chris Lattner <sabre@nondot.org> | 2004-05-12 16:08:01 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-05-12 16:08:01 +0000 |
commit | 6c0c313daf5fef8c003cd729672d8b4aa082e74a (patch) | |
tree | 05f8b17197ced56b6bb1eaa27a2f0b07b5aa8ec5 /llvm/tools/bugpoint/Miscompilation.cpp | |
parent | 13d2ddfe9c74c847cafa76f45ffb1a8a8473ca68 (diff) | |
download | bcm5719-llvm-6c0c313daf5fef8c003cd729672d8b4aa082e74a.tar.gz bcm5719-llvm-6c0c313daf5fef8c003cd729672d8b4aa082e74a.zip |
Check to see if all blocks are extractible first.
llvm-svn: 13491
Diffstat (limited to 'llvm/tools/bugpoint/Miscompilation.cpp')
-rw-r--r-- | llvm/tools/bugpoint/Miscompilation.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/llvm/tools/bugpoint/Miscompilation.cpp b/llvm/tools/bugpoint/Miscompilation.cpp index 4c957ac480e..f17bfaa64a1 100644 --- a/llvm/tools/bugpoint/Miscompilation.cpp +++ b/llvm/tools/bugpoint/Miscompilation.cpp @@ -354,11 +354,15 @@ namespace { bool ReduceMiscompiledBlocks::TestFuncs(const std::vector<BasicBlock*> &BBs) { // Test to see if the function is misoptimized if we ONLY run it on the // functions listed in Funcs. - std::cout << "Checking to see if the program is misoptimized when all but " - << "these " << BBs.size() << " blocks are extracted: "; - for (unsigned i = 0, e = BBs.size() < 10 ? BBs.size() : 10; i != e; ++i) - std::cout << BBs[i]->getName() << " "; - if (BBs.size() > 10) std::cout << "..."; + std::cout << "Checking to see if the program is misoptimized when all "; + if (!BBs.empty()) { + std::cout << "but these " << BBs.size() << " blocks are extracted: "; + for (unsigned i = 0, e = BBs.size() < 10 ? BBs.size() : 10; i != e; ++i) + std::cout << BBs[i]->getName() << " "; + if (BBs.size() > 10) std::cout << "..."; + } else { + std::cout << "blocks are extracted."; + } std::cout << "\n"; // Split the module into the two halves of the program we want. @@ -399,9 +403,16 @@ static bool ExtractBlocks(BugDriver &BD, // obscuring the bug. The Blocks list will end up containing blocks that must // be retained from the original program. unsigned OldSize = Blocks.size(); - ReduceMiscompiledBlocks(BD, TestFn, MiscompiledFunctions).reduceList(Blocks); - if (Blocks.size() == OldSize) - return false; + + // Check to see if all blocks are extractible first. + if (ReduceMiscompiledBlocks(BD, TestFn, + MiscompiledFunctions).TestFuncs(std::vector<BasicBlock*>())) { + Blocks.clear(); + } else { + ReduceMiscompiledBlocks(BD, TestFn,MiscompiledFunctions).reduceList(Blocks); + if (Blocks.size() == OldSize) + return false; + } Module *ProgClone = CloneModule(BD.getProgram()); Module *ToExtract = SplitFunctionsOutOfModule(ProgClone, |