[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