mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-01 15:19:05 +00:00
Return std::unique_ptr from SplitFunctionsOutOfModule. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255084 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4ed1f8cb98
commit
18d705086f
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user