aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-05-11 19:58:43 +0000
committerDan Gohman <gohman@apple.com>2010-05-11 19:58:43 +0000
commit124b55ddedb46d087c261f8ef84d2382a399315b (patch)
tree3486a797e05d25bcba99ca476d369c9bfae701e9
parent99dca4fde746eb76253e737cca166261c767412d (diff)
downloadexternal_llvm-124b55ddedb46d087c261f8ef84d2382a399315b.zip
external_llvm-124b55ddedb46d087c261f8ef84d2382a399315b.tar.gz
external_llvm-124b55ddedb46d087c261f8ef84d2382a399315b.tar.bz2
Teach the regular pass manager how to materialize functions as needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103493 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/VMCore/PassManager.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp
index a56938c..6883e9f 100644
--- a/lib/VMCore/PassManager.cpp
+++ b/lib/VMCore/PassManager.cpp
@@ -1444,8 +1444,16 @@ bool FPPassManager::runOnFunction(Function &F) {
bool FPPassManager::runOnModule(Module &M) {
bool Changed = doInitialization(M);
- for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
+ for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
+ Function &F = *I;
+ if (F.isMaterializable()) {
+ std::string errstr;
+ if (F.Materialize(&errstr))
+ report_fatal_error("Error reading bitcode file: " + Twine(errstr));
+ }
+
runOnFunction(*I);
+ }
return doFinalization(M) || Changed;
}