mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 21:35:07 +00:00
Re-added the part where it tries to remove all global variables first.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31225 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2ac33c447d
commit
b3d83a3ed5
@ -357,22 +357,47 @@ static bool DebugACrash(BugDriver &BD, bool (*TestFn)(BugDriver &, Module *)) {
|
||||
if (BD.getProgram()->global_begin() != BD.getProgram()->global_end()) {
|
||||
// Now try to reduce the number of global variable initializers in the
|
||||
// module to something small.
|
||||
std::vector<GlobalVariable*> GVs;
|
||||
Module *M = CloneModule(BD.getProgram());
|
||||
bool DeletedInit = false;
|
||||
|
||||
for (Module::global_iterator I = BD.getProgram()->global_begin(),
|
||||
E = BD.getProgram()->global_end(); I != E; ++I)
|
||||
if (I->hasInitializer())
|
||||
GVs.push_back(I);
|
||||
for (Module::global_iterator I = M->global_begin(), E = M->global_end();
|
||||
I != E; ++I)
|
||||
if (I->hasInitializer()) {
|
||||
I->setInitializer(0);
|
||||
I->setLinkage(GlobalValue::ExternalLinkage);
|
||||
DeletedInit = true;
|
||||
}
|
||||
|
||||
if (GVs.size() > 1 && !BugpointIsInterrupted) {
|
||||
std::cout << "\n*** Attempting to reduce the number of global variables "
|
||||
<< "in the testcase\n";
|
||||
if (!DeletedInit) {
|
||||
delete M; // No change made...
|
||||
} else {
|
||||
// See if the program still causes a crash...
|
||||
std::cout << "\nChecking to see if we can delete global inits: ";
|
||||
|
||||
unsigned OldSize = GVs.size();
|
||||
ReduceCrashingGlobalVariables(BD, TestFn).reduceList(GVs);
|
||||
if (TestFn(BD, M)) { // Still crashes?
|
||||
BD.setNewProgram(M);
|
||||
std::cout << "\n*** Able to remove all global initializers!\n";
|
||||
} else { // No longer crashes?
|
||||
std::cout << " - Removing all global inits hides problem!\n";
|
||||
delete M;
|
||||
|
||||
if (GVs.size() < OldSize)
|
||||
BD.EmitProgressBytecode("reduced-global-variables");
|
||||
std::vector<GlobalVariable*> GVs;
|
||||
|
||||
for (Module::global_iterator I = BD.getProgram()->global_begin(),
|
||||
E = BD.getProgram()->global_end(); I != E; ++I)
|
||||
if (I->hasInitializer())
|
||||
GVs.push_back(I);
|
||||
|
||||
if (GVs.size() > 1 && !BugpointIsInterrupted) {
|
||||
std::cout << "\n*** Attempting to reduce the number of global "
|
||||
<< "variables in the testcase\n";
|
||||
|
||||
unsigned OldSize = GVs.size();
|
||||
ReduceCrashingGlobalVariables(BD, TestFn).reduceList(GVs);
|
||||
|
||||
if (GVs.size() < OldSize)
|
||||
BD.EmitProgressBytecode("reduced-global-variables");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user