mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-26 13:36:28 +00:00
Add a CloneModule call that exposes the mapping of values from the old module
to the new module. Patch provided by Nick Lewycky! llvm-svn: 28349
This commit is contained in:
parent
4252704561
commit
9a0d02f8f7
@ -37,6 +37,7 @@ class CallGraph;
|
||||
/// CloneModule - Return an exact copy of the specified module
|
||||
///
|
||||
Module *CloneModule(const Module *M);
|
||||
Module *CloneModule(const Module *M, std::map<const Value*, Value*> &ValueMap);
|
||||
|
||||
/// ClonedCodeInfo - This struct can be used to capture information about code
|
||||
/// being cloned, while it is being cloned.
|
||||
|
@ -26,6 +26,14 @@ using namespace llvm;
|
||||
/// respectively) refer to the right globals.
|
||||
///
|
||||
Module *llvm::CloneModule(const Module *M) {
|
||||
// Create the value map that maps things from the old module over to the new
|
||||
// module.
|
||||
std::map<const Value*, Value*> ValueMap;
|
||||
|
||||
return CloneModule(M, ValueMap);
|
||||
}
|
||||
|
||||
Module *llvm::CloneModule(const Module *M, std::map<const Value*, Value*> &ValueMap) {
|
||||
// First off, we need to create the new module...
|
||||
Module *New = new Module(M->getModuleIdentifier());
|
||||
New->setEndianness(M->getEndianness());
|
||||
@ -44,10 +52,6 @@ Module *llvm::CloneModule(const Module *M) {
|
||||
for (Module::lib_iterator I = M->lib_begin(), E = M->lib_end(); I != E; ++I)
|
||||
New->addLibrary(*I);
|
||||
|
||||
// Create the value map that maps things from the old module over to the new
|
||||
// module.
|
||||
std::map<const Value*, Value*> ValueMap;
|
||||
|
||||
// Loop over all of the global variables, making corresponding globals in the
|
||||
// new module. Here we add them to the ValueMap and to the new Module. We
|
||||
// don't worry about attributes or initializers, they will come later.
|
||||
|
Loading…
Reference in New Issue
Block a user