summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Linker/LinkModules.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-12-08 13:29:33 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-12-08 13:29:33 +0000
commit40d7ebed8ab2ae5ca73b7d4edd67e5b33d9e6b81 (patch)
tree9e6121fab86fa2acbf48e2bda7d887ad05d156b4 /llvm/lib/Linker/LinkModules.cpp
parent3431b7506939e742197fe803f9db412061778f2f (diff)
downloadbcm5719-llvm-40d7ebed8ab2ae5ca73b7d4edd67e5b33d9e6b81.tar.gz
bcm5719-llvm-40d7ebed8ab2ae5ca73b7d4edd67e5b33d9e6b81.zip
Move materialize/Dematerialize calls to linkFunctionBody. NFC.
Just less code duplication. llvm-svn: 223653
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r--llvm/lib/Linker/LinkModules.cpp27
1 files changed, 12 insertions, 15 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp
index 87f195ead2f..9834502a0dd 100644
--- a/llvm/lib/Linker/LinkModules.cpp
+++ b/llvm/lib/Linker/LinkModules.cpp
@@ -492,7 +492,7 @@ private:
void linkAppendingVarInit(const AppendingVarInfo &AVI);
void linkGlobalInits();
- void linkFunctionBody(Function *Dst, Function *Src);
+ bool linkFunctionBody(Function *Dst, Function *Src);
void linkAliasBodies();
void linkNamedMDNodes();
};
@@ -1170,9 +1170,13 @@ void ModuleLinker::linkGlobalInits() {
/// Copy the source function over into the dest function and fix up references
/// to values. At this point we know that Dest is an external function, and
/// that Src is not.
-void ModuleLinker::linkFunctionBody(Function *Dst, Function *Src) {
+bool ModuleLinker::linkFunctionBody(Function *Dst, Function *Src) {
assert(Src && Dst && Dst->isDeclaration() && !Src->isDeclaration());
+ // Materialize if needed.
+ if (std::error_code EC = Src->materialize())
+ return emitError(EC.message());
+
// Go through and convert function arguments over, remembering the mapping.
Function::arg_iterator DI = Dst->arg_begin();
for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end();
@@ -1200,6 +1204,8 @@ void ModuleLinker::linkFunctionBody(Function *Dst, Function *Src) {
I != E; ++I)
ValueMap.erase(I);
+ Src->Dematerialize();
+ return false;
}
/// Insert all of the aliases in Src into the Dest module.
@@ -1485,16 +1491,12 @@ bool ModuleLinker::run() {
DF->setPrologueData(MapValue(
SF->getPrologueData(), ValueMap, RF_None, &TypeMap, &ValMaterializer));
- // Materialize if needed.
- if (std::error_code EC = SF->materialize())
- return emitError(EC.message());
-
// Skip if no body (function is external).
if (SF->isDeclaration())
continue;
- linkFunctionBody(DF, SF);
- SF->Dematerialize();
+ if (linkFunctionBody(DF, SF))
+ return true;
}
// Resolve all uses of aliases with aliasees.
@@ -1525,14 +1527,9 @@ bool ModuleLinker::run() {
&TypeMap, &ValMaterializer));
}
- // Materialize if needed.
- if (std::error_code EC = SF->materialize())
- return emitError(EC.message());
-
// Link in function body.
- assert(!SF->isDeclaration());
- linkFunctionBody(DF, SF);
- SF->Dematerialize();
+ if (linkFunctionBody(DF, SF))
+ return true;
}
return false;
OpenPOWER on IntegriCloud