blob: 702eded8b0a1c26bb0f437e07c45f5c7d6d37782 [file] [log] [blame]
//===- ReadSnapshots.cpp - View snapshots that were saved previously ------===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//
//===----------------------------------------------------------------------===//
#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm-tv/Config.h"
#include "llvm-tv/Support/FileUtils.h"
#include "llvm-tv/Support/Snapshots.h"
#include <string>
#include <vector>
using namespace llvm;
/// ReadSnapshots - load all bytecode files in a directory that haven't yet been
/// slurped in earlier.
///
void llvm::ReadSnapshots(const std::vector<std::string> &oldModules,
std::vector<Module*> &NewModules) {
std::vector<std::string> FileListing;
GetFilesInDir(snapshotsPath, FileListing);
LLVMContext &Context = getGlobalContext();
for (std::vector<std::string>::const_iterator i = FileListing.begin(),
e = FileListing.end(); i != e; ++i) {
if (std::find(oldModules.begin(), oldModules.end(), *i) != oldModules.end())
continue;
std::string ErrorMessage;
std::auto_ptr<MemoryBuffer> Buffer(MemoryBuffer::getFile((*i).c_str(),
&ErrorMessage));
Module *M = 0;
if (Buffer.get()) {
M = ParseBitcodeFile(Buffer.get(), Context, &ErrorMessage);
} else {
errs() << *i << ": could not load into memory.\n";
errs() << "Reason: " << ErrorMessage << "\n";
continue;
}
if (M == 0) {
errs() << *i << ": bitcode didn't read correctly.\n";
errs() << "Reason: " << ErrorMessage << "\n";
continue;
}
NewModules.push_back(M);
}
}