summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Linker/LinkModules.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-12-05 21:04:36 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-12-05 21:04:36 +0000
commit28a2451b35bde35c09a28ef608a73c6da2bd8333 (patch)
tree7b39e48d2fc815dc203aeb1e8a5c5b15c300be3b /llvm/lib/Linker/LinkModules.cpp
parent2f02fe0bd3db6a9e3c73cc6c0cc4ad3bc500dbfc (diff)
downloadbcm5719-llvm-28a2451b35bde35c09a28ef608a73c6da2bd8333.tar.gz
bcm5719-llvm-28a2451b35bde35c09a28ef608a73c6da2bd8333.zip
Simplify the loop linking function bodies. NFC.
llvm-svn: 223512
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r--llvm/lib/Linker/LinkModules.cpp58
1 files changed, 21 insertions, 37 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp
index 1d4dae4c479..c7cf9f69003 100644
--- a/llvm/lib/Linker/LinkModules.cpp
+++ b/llvm/lib/Linker/LinkModules.cpp
@@ -1514,48 +1514,32 @@ bool ModuleLinker::run() {
linkGlobalInits();
// Process vector of lazily linked in functions.
- bool LinkedInAnyFunctions;
- do {
- LinkedInAnyFunctions = false;
-
- for(std::vector<Function*>::iterator I = LazilyLinkFunctions.begin(),
- E = LazilyLinkFunctions.end(); I != E; ++I) {
- Function *SF = *I;
- if (!SF)
- continue;
-
- Function *DF = cast<Function>(ValueMap[SF]);
- if (SF->hasPrefixData()) {
- // Link in the prefix data.
- DF->setPrefixData(MapValue(SF->getPrefixData(),
- ValueMap,
- RF_None,
- &TypeMap,
- &ValMaterializer));
- }
+ while (!LazilyLinkFunctions.empty()) {
+ Function *SF = LazilyLinkFunctions.back();
+ LazilyLinkFunctions.pop_back();
- // Materialize if needed.
- if (std::error_code EC = SF->materialize())
- return emitError(EC.message());
+ if (!SF)
+ continue;
- // Skip if no body (function is external).
- if (SF->isDeclaration())
- continue;
+ Function *DF = cast<Function>(ValueMap[SF]);
+ if (SF->hasPrefixData()) {
+ // Link in the prefix data.
+ DF->setPrefixData(MapValue(SF->getPrefixData(), ValueMap, RF_None,
+ &TypeMap, &ValMaterializer));
+ }
- // Erase from vector *before* the function body is linked - linkFunctionBody could
- // invalidate I.
- LazilyLinkFunctions.erase(I);
+ // Materialize if needed.
+ if (std::error_code EC = SF->materialize())
+ return emitError(EC.message());
- // Link in function body.
- linkFunctionBody(DF, SF);
- SF->Dematerialize();
+ // Skip if no body (function is external).
+ if (SF->isDeclaration())
+ continue;
- // Set flag to indicate we may have more functions to lazily link in
- // since we linked in a function.
- LinkedInAnyFunctions = true;
- break;
- }
- } while (LinkedInAnyFunctions);
+ // Link in function body.
+ linkFunctionBody(DF, SF);
+ SF->Dematerialize();
+ }
return false;
}
OpenPOWER on IntegriCloud