Return std::unique_ptr from SplitFunctionsOutOfModule. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 9 Dec 2015 00:34:10 +0000 (00:34 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 9 Dec 2015 00:34:10 +0000 (00:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255084 91177308-0d34-0410-b5e6-96231b3b80d8

tools/bugpoint/BugDriver.h
tools/bugpoint/ExtractFunction.cpp
tools/bugpoint/Miscompilation.cpp

index 45fcf74aa6bf2ff7036457af7afc9b0b7ee5c398..20efff3fda5f7e7e9599ca25af901010b8938232 100644 (file)
@@ -331,11 +331,11 @@ void DeleteGlobalInitializer(GlobalVariable *GV);
 //
 void DeleteFunctionBody(Function *F);
 
-/// SplitFunctionsOutOfModule - Given a module and a list of functions in the
-/// module, split the functions OUT of the specified module, and place them in
-/// the new module.
-Module *SplitFunctionsOutOfModule(Module *M, const std::vector<Function*> &F,
-                                  ValueToValueMapTy &VMap);
+/// Given a module and a list of functions in the module, split the functions
+/// OUT of the specified module, and place them in the new module.
+std::unique_ptr<Module>
+SplitFunctionsOutOfModule(Module *M, const std::vector<Function *> &F,
+                          ValueToValueMapTy &VMap);
 
 } // End llvm namespace
 
index 62c3f3e9f2533517d7824b52431479fca88360b2..fe0ab69dc162d8f1ebfb287eb1ca1f3dadc6fc52 100644 (file)
@@ -303,13 +303,8 @@ static void SplitStaticCtorDtor(const char *GlobalName, Module *M1, Module *M2,
   }
 }
 
-
-/// SplitFunctionsOutOfModule - Given a module and a list of functions in the
-/// module, split the functions OUT of the specified module, and place them in
-/// the new module.
-Module *
-llvm::SplitFunctionsOutOfModule(Module *M,
-                                const std::vector<Function*> &F,
+std::unique_ptr<Module>
+llvm::SplitFunctionsOutOfModule(Module *M, const std::vector<Function *> &F,
                                 ValueToValueMapTy &VMap) {
   // Make sure functions & globals are all external so that linkage
   // between the two modules will work.
@@ -323,7 +318,7 @@ llvm::SplitFunctionsOutOfModule(Module *M,
   }
 
   ValueToValueMapTy NewVMap;
-  Module *New = CloneModule(M, NewVMap).release();
+  std::unique_ptr<Module> New = CloneModule(M, NewVMap);
 
   // Remove the Test functions from the Safe module
   std::set<Function *> TestFunctions;
@@ -364,9 +359,9 @@ llvm::SplitFunctionsOutOfModule(Module *M,
 
   // Make sure that there is a global ctor/dtor array in both halves of the
   // module if they both have static ctor/dtor functions.
-  SplitStaticCtorDtor("llvm.global_ctors", M, New, NewVMap);
-  SplitStaticCtorDtor("llvm.global_dtors", M, New, NewVMap);
-  
+  SplitStaticCtorDtor("llvm.global_ctors", M, New.get(), NewVMap);
+  SplitStaticCtorDtor("llvm.global_dtors", M, New.get(), NewVMap);
+
   return New;
 }
 
index d2aba92c7c990c3d5172345035f1ac7074c9275b..0c8b313c6a8aed89818245082decc73657a573bd 100644 (file)
@@ -280,8 +280,8 @@ bool ReduceMiscompilingFunctions::TestFuncs(const std::vector<Function*> &Funcs,
   // Split the module into the two halves of the program we want.
   VMap.clear();
   Module *ToNotOptimize = CloneModule(BD.getProgram(), VMap).release();
-  Module *ToOptimize = SplitFunctionsOutOfModule(ToNotOptimize, FuncsOnClone,
-                                                 VMap);
+  Module *ToOptimize =
+      SplitFunctionsOutOfModule(ToNotOptimize, FuncsOnClone, VMap).release();
 
   // Run the predicate, note that the predicate will delete both input modules.
   bool Broken = TestFn(BD, ToOptimize, ToNotOptimize, Error);
@@ -319,8 +319,8 @@ static bool ExtractLoops(BugDriver &BD,
     ValueToValueMapTy VMap;
     std::unique_ptr<Module> ToNotOptimize = CloneModule(BD.getProgram(), VMap);
     Module *ToOptimize = SplitFunctionsOutOfModule(ToNotOptimize.get(),
-                                                   MiscompiledFunctions,
-                                                   VMap);
+                                                   MiscompiledFunctions, VMap)
+                             .release();
     std::unique_ptr<Module> ToOptimizeLoopExtracted =
         BD.extractLoop(ToOptimize);
     if (!ToOptimizeLoopExtracted) {
@@ -519,9 +519,8 @@ bool ReduceMiscompiledBlocks::TestFuncs(const std::vector<BasicBlock*> &BBs,
   VMap.clear();
 
   Module *ToNotOptimize = CloneModule(BD.getProgram(), VMap).release();
-  Module *ToOptimize = SplitFunctionsOutOfModule(ToNotOptimize,
-                                                 FuncsOnClone,
-                                                 VMap);
+  Module *ToOptimize =
+      SplitFunctionsOutOfModule(ToNotOptimize, FuncsOnClone, VMap).release();
 
   // Try the extraction.  If it doesn't work, then the block extractor crashed
   // or something, in which case bugpoint can't chase down this possibility.
@@ -580,9 +579,9 @@ static bool ExtractBlocks(BugDriver &BD,
 
   ValueToValueMapTy VMap;
   Module *ProgClone = CloneModule(BD.getProgram(), VMap).release();
-  Module *ToExtract = SplitFunctionsOutOfModule(ProgClone,
-                                                MiscompiledFunctions,
-                                                VMap);
+  Module *ToExtract =
+      SplitFunctionsOutOfModule(ProgClone, MiscompiledFunctions, VMap)
+          .release();
   std::unique_ptr<Module> Extracted =
       BD.extractMappedBlocksFromModule(Blocks, ToExtract);
   if (!Extracted) {
@@ -762,9 +761,9 @@ void BugDriver::debugMiscompilation(std::string *Error) {
   outs() << "Outputting reduced bitcode files which expose the problem:\n";
   ValueToValueMapTy VMap;
   Module *ToNotOptimize = CloneModule(getProgram(), VMap).release();
-  Module *ToOptimize = SplitFunctionsOutOfModule(ToNotOptimize,
-                                                 MiscompiledFunctions,
-                                                 VMap);
+  Module *ToOptimize =
+      SplitFunctionsOutOfModule(ToNotOptimize, MiscompiledFunctions, VMap)
+          .release();
 
   outs() << "  Non-optimized portion: ";
   EmitProgressBitcode(ToNotOptimize, "tonotoptimize", true);
@@ -1038,7 +1037,8 @@ bool BugDriver::debugCodeGenerator(std::string *Error) {
   // Split the module into the two halves of the program we want.
   ValueToValueMapTy VMap;
   Module *ToNotCodeGen = CloneModule(getProgram(), VMap).release();
-  Module *ToCodeGen = SplitFunctionsOutOfModule(ToNotCodeGen, Funcs, VMap);
+  Module *ToCodeGen =
+      SplitFunctionsOutOfModule(ToNotCodeGen, Funcs, VMap).release();
 
   // Condition the modules
   CleanupAndPrepareModules(*this, ToCodeGen, ToNotCodeGen);