[llvm-commits] CVS: llvm/tools/bugpoint/ExtractFunction.cpp ListReducer.h Miscompilation.cpp
Chris Lattner
lattner at cs.uiuc.edu
Mon Nov 15 22:31:52 PST 2004
Changes in directory llvm/tools/bugpoint:
ExtractFunction.cpp updated: 1.39 -> 1.40
ListReducer.h updated: 1.10 -> 1.11
Miscompilation.cpp updated: 1.53 -> 1.54
---
Log message:
Make this code not depend on LinkModules leaving the second argument unmolested.
---
Diffs of the changes: (+41 -22)
Index: llvm/tools/bugpoint/ExtractFunction.cpp
diff -u llvm/tools/bugpoint/ExtractFunction.cpp:1.39 llvm/tools/bugpoint/ExtractFunction.cpp:1.40
--- llvm/tools/bugpoint/ExtractFunction.cpp:1.39 Sun Sep 19 23:48:05 2004
+++ llvm/tools/bugpoint/ExtractFunction.cpp Tue Nov 16 00:31:37 2004
@@ -143,9 +143,18 @@
// Check to see if we created any new functions. If not, no loops were
// extracted and we should return null.
- if (M->size() == NewM->size()) {
+ static unsigned NumExtracted = 15;
+
+ if (M->size() == NewM->size() || --NumExtracted == 0) {
delete NewM;
return 0;
+ } else {
+ assert(M->size() < NewM->size() && "Loop extract removed functions?");
+ Module::iterator MI = NewM->begin();
+ for (unsigned i = 0, e = M->size(); i != e; ++i)
+ ++MI;
+ for (; MI != NewM->end(); ++MI)
+ std::cerr << "NEW FUNCTION: " << *MI;
}
return NewM;
Index: llvm/tools/bugpoint/ListReducer.h
diff -u llvm/tools/bugpoint/ListReducer.h:1.10 llvm/tools/bugpoint/ListReducer.h:1.11
--- llvm/tools/bugpoint/ListReducer.h:1.10 Tue May 11 15:41:07 2004
+++ llvm/tools/bugpoint/ListReducer.h Tue Nov 16 00:31:38 2004
@@ -90,7 +90,7 @@
// could. If there is more two elements in the list, try deleting interior
// elements and testing that.
//
- if (TheList.size() > 2) {
+ if (0 && TheList.size() > 2) {
bool Changed = true;
std::vector<ElTy> EmptyList;
while (Changed) {
Index: llvm/tools/bugpoint/Miscompilation.cpp
diff -u llvm/tools/bugpoint/Miscompilation.cpp:1.53 llvm/tools/bugpoint/Miscompilation.cpp:1.54
--- llvm/tools/bugpoint/Miscompilation.cpp:1.53 Sun Nov 14 17:00:08 2004
+++ llvm/tools/bugpoint/Miscompilation.cpp Tue Nov 16 00:31:38 2004
@@ -171,13 +171,16 @@
bool DeleteInputs) {
// Link the two portions of the program back to together.
std::string ErrorMsg;
- if (!DeleteInputs) M1 = CloneModule(M1);
+ if (!DeleteInputs) {
+ M1 = CloneModule(M1);
+ M2 = CloneModule(M2);
+ }
if (LinkModules(M1, M2, &ErrorMsg)) {
std::cerr << BD.getToolName() << ": Error linking modules together:"
<< ErrorMsg << '\n';
exit(1);
}
- if (DeleteInputs) delete M2; // We are done with this module...
+ delete M2; // We are done with this module.
Module *OldProgram = BD.swapProgramIn(M1);
@@ -289,6 +292,12 @@
std::cout << "*** Loop extraction successful!\n";
+ std::vector<std::pair<std::string, const FunctionType*> > MisCompFunctions;
+ for (Module::iterator I = ToOptimizeLoopExtracted->begin(),
+ E = ToOptimizeLoopExtracted->end(); I != E; ++I)
+ MisCompFunctions.push_back(std::make_pair(I->getName(),
+ I->getFunctionType()));
+
// Okay, great! Now we know that we extracted a loop and that loop
// extraction both didn't break the program, and didn't mask the problem.
// Replace the current program with the loop extracted version, and try to
@@ -299,21 +308,18 @@
<< ErrorMsg << '\n';
exit(1);
}
+ delete ToOptimizeLoopExtracted;
// All of the Function*'s in the MiscompiledFunctions list are in the old
// module. Update this list to include all of the functions in the
// optimized and loop extracted module.
MiscompiledFunctions.clear();
- for (Module::iterator I = ToOptimizeLoopExtracted->begin(),
- E = ToOptimizeLoopExtracted->end(); I != E; ++I) {
- if (!I->isExternal()) {
- Function *NewF = ToNotOptimize->getFunction(I->getName(),
- I->getFunctionType());
- assert(NewF && "Function not found??");
- MiscompiledFunctions.push_back(NewF);
- }
+ for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
+ Function *NewF = ToNotOptimize->getFunction(MisCompFunctions[i].first,
+ MisCompFunctions[i].second);
+ assert(NewF && "Function not found??");
+ MiscompiledFunctions.push_back(NewF);
}
- delete ToOptimizeLoopExtracted;
BD.setNewProgram(ToNotOptimize);
MadeChange = true;
@@ -423,12 +429,19 @@
// together.
delete ToExtract;
+ std::vector<std::pair<std::string, const FunctionType*> > MisCompFunctions;
+ for (Module::iterator I = Extracted->begin(), E = Extracted->end();
+ I != E; ++I)
+ MisCompFunctions.push_back(std::make_pair(I->getName(),
+ I->getFunctionType()));
+
std::string ErrorMsg;
if (LinkModules(ProgClone, Extracted, &ErrorMsg)) {
std::cerr << BD.getToolName() << ": Error linking modules together:"
<< ErrorMsg << '\n';
exit(1);
}
+ delete Extracted;
// Set the new program and delete the old one.
BD.setNewProgram(ProgClone);
@@ -436,15 +449,12 @@
// Update the list of miscompiled functions.
MiscompiledFunctions.clear();
- 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;
+ for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
+ Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first,
+ MisCompFunctions[i].second);
+ assert(NewF && "Function not found??");
+ MiscompiledFunctions.push_back(NewF);
+ }
return true;
}
More information about the llvm-commits
mailing list