mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-08 19:25:47 +00:00
Simplify the performFinalCleanups interface
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9740 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -158,11 +158,11 @@ private:
|
|||||||
Module *deleteInstructionFromProgram(Instruction *I, unsigned Simp) const;
|
Module *deleteInstructionFromProgram(Instruction *I, unsigned Simp) const;
|
||||||
|
|
||||||
/// performFinalCleanups - This method clones the current Program and performs
|
/// performFinalCleanups - This method clones the current Program and performs
|
||||||
/// a series of cleanups intended to get rid of extra cruft on the module
|
/// a series of cleanups intended to get rid of extra cruft on the module. If
|
||||||
/// before handing it to the user... if the module parameter is specified, it
|
/// the MayModifySemantics argument is true, then the cleanups is allowed to
|
||||||
/// operates directly on the specified Module, modifying it in place.
|
/// modify how the code behaves.
|
||||||
///
|
///
|
||||||
Module *performFinalCleanups(Module *M = 0) const;
|
void performFinalCleanups(Module *M, bool MayModifySemantics = false) const;
|
||||||
|
|
||||||
/// initializeExecutionEnvironment - This method is used to set up the
|
/// initializeExecutionEnvironment - This method is used to set up the
|
||||||
/// environment for executing LLVM programs.
|
/// environment for executing LLVM programs.
|
||||||
|
@@ -224,8 +224,8 @@ bool ReduceMisCodegenFunctions::TestFuncs(const std::vector<Function*> &Funcs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clean up the modules, removing extra cruft that we don't need anymore...
|
// Clean up the modules, removing extra cruft that we don't need anymore...
|
||||||
SafeModule = BD.performFinalCleanups(SafeModule);
|
BD.performFinalCleanups(SafeModule);
|
||||||
TestModule = BD.performFinalCleanups(TestModule);
|
BD.performFinalCleanups(TestModule);
|
||||||
|
|
||||||
if (BD.writeProgramToFile(TestModuleBC, TestModule)) {
|
if (BD.writeProgramToFile(TestModuleBC, TestModule)) {
|
||||||
std::cerr << "Error writing bytecode to `" << SafeModuleBC << "'\nExiting.";
|
std::cerr << "Error writing bytecode to `" << SafeModuleBC << "'\nExiting.";
|
||||||
|
@@ -378,7 +378,8 @@ bool BugDriver::debugCrash() {
|
|||||||
|
|
||||||
// Try to clean up the testcase by running funcresolve and globaldce...
|
// Try to clean up the testcase by running funcresolve and globaldce...
|
||||||
std::cout << "\n*** Attempting to perform final cleanups: ";
|
std::cout << "\n*** Attempting to perform final cleanups: ";
|
||||||
Module *M = performFinalCleanups();
|
Module *M = CloneModule(Program);
|
||||||
|
performFinalCleanups(M, true);
|
||||||
std::swap(Program, M);
|
std::swap(Program, M);
|
||||||
|
|
||||||
// Find out if the pass still crashes on the cleaned up program...
|
// Find out if the pass still crashes on the cleaned up program...
|
||||||
|
@@ -93,15 +93,13 @@ Module *BugDriver::deleteInstructionFromProgram(Instruction *I,
|
|||||||
/// a series of cleanups intended to get rid of extra cruft on the module
|
/// a series of cleanups intended to get rid of extra cruft on the module
|
||||||
/// before handing it to the user...
|
/// before handing it to the user...
|
||||||
///
|
///
|
||||||
Module *BugDriver::performFinalCleanups(Module *InM) const {
|
void BugDriver::performFinalCleanups(Module *M, bool MayModifySemantics) const {
|
||||||
Module *M = InM ? InM : CloneModule(Program);
|
|
||||||
|
|
||||||
// Allow disabling these passes if they crash bugpoint.
|
// Allow disabling these passes if they crash bugpoint.
|
||||||
//
|
//
|
||||||
// FIXME: This should eventually run these passes in a pass list to prevent
|
// FIXME: This should eventually run these passes in a pass list to prevent
|
||||||
// them from being able to crash bugpoint at all!
|
// them from being able to crash bugpoint at all!
|
||||||
//
|
//
|
||||||
if (NoFinalCleanup) return M;
|
if (NoFinalCleanup) return;
|
||||||
|
|
||||||
// Make all functions external, so GlobalDCE doesn't delete them...
|
// Make all functions external, so GlobalDCE doesn't delete them...
|
||||||
for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I)
|
for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I)
|
||||||
@@ -113,8 +111,7 @@ Module *BugDriver::performFinalCleanups(Module *InM) const {
|
|||||||
CleanupPasses.add(createFunctionResolvingPass());
|
CleanupPasses.add(createFunctionResolvingPass());
|
||||||
CleanupPasses.add(createGlobalDCEPass());
|
CleanupPasses.add(createGlobalDCEPass());
|
||||||
CleanupPasses.add(createDeadTypeEliminationPass());
|
CleanupPasses.add(createDeadTypeEliminationPass());
|
||||||
CleanupPasses.add(createDeadArgEliminationPass(InM == 0));
|
CleanupPasses.add(createDeadArgEliminationPass(MayModifySemantics));
|
||||||
CleanupPasses.add(createVerifierPass());
|
CleanupPasses.add(createVerifierPass());
|
||||||
CleanupPasses.run(*M);
|
CleanupPasses.run(*M);
|
||||||
return M;
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user