mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
Check to see if all blocks are extractible first.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13491 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d99e1d3afb
commit
68bee938e5
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user