mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Implement the final missing bits for block extractor support. Now bugpoint
can extract basic blocks up to the limit of the block extractor implementation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13475 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
300e74b43f
commit
2290e75406
@ -403,13 +403,46 @@ static bool ExtractBlocks(BugDriver &BD,
|
||||
if (Blocks.size() == OldSize)
|
||||
return false;
|
||||
|
||||
Module *ProgClone = CloneModule(BD.getProgram());
|
||||
Module *ToExtract = SplitFunctionsOutOfModule(ProgClone,
|
||||
MiscompiledFunctions);
|
||||
Module *Extracted = BD.ExtractMappedBlocksFromModule(Blocks, ToExtract);
|
||||
if (Extracted == 0) {
|
||||
// Wierd, extraction should have worked.
|
||||
std::cerr << "Nondeterministic problem extracting blocks??\n";
|
||||
delete ProgClone;
|
||||
delete ToExtract;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Otherwise, block extraction succeeded. Link the two program fragments back
|
||||
// together.
|
||||
delete ToExtract;
|
||||
|
||||
// FIXME: This should actually update the module in the bugdriver!
|
||||
std::string ErrorMsg;
|
||||
if (LinkModules(ProgClone, Extracted, &ErrorMsg)) {
|
||||
std::cerr << BD.getToolName() << ": Error linking modules together:"
|
||||
<< ErrorMsg << "\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Set the new program and delete the old one.
|
||||
BD.setNewProgram(ProgClone);
|
||||
|
||||
// Update the list of miscompiled functions.
|
||||
MiscompiledFunctions.clear();
|
||||
|
||||
return false;
|
||||
for (Module::iterator I = Extracted->begin(), E = Extracted->end(); I != E;
|
||||
++I)
|
||||
if (!I->isExternal()) {
|
||||
Function *NF = ProgClone->getFunction(I->getName(), I->getFunctionType());
|
||||
assert(NF && "Mapped function not found!");
|
||||
MiscompiledFunctions.push_back(NF);
|
||||
}
|
||||
|
||||
delete Extracted;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user