make -fno-rtti the default unless a directory builds with REQUIRES_RTTI.
[oota-llvm.git] / lib / Transforms / Utils / CloneModule.cpp
index e75f915cb9ef5cf1d20e324c6d705d5c023a57c8..a163f89cc37f5de10820256a23593e4eb979d088 100644 (file)
@@ -35,7 +35,7 @@ Module *llvm::CloneModule(const Module *M) {
 Module *llvm::CloneModule(const Module *M,
                           DenseMap<const Value*, Value*> &ValueMap) {
   // First off, we need to create the new module...
-  Module *New = new Module(M->getModuleIdentifier());
+  Module *New = new Module(M->getModuleIdentifier(), M->getContext());
   New->setDataLayout(M->getDataLayout());
   New->setTargetTriple(M->getTargetTriple());
   New->setModuleInlineAsm(M->getModuleInlineAsm());
@@ -55,21 +55,23 @@ Module *llvm::CloneModule(const Module *M,
   // don't worry about attributes or initializers, they will come later.
   //
   for (Module::const_global_iterator I = M->global_begin(), E = M->global_end();
-       I != E; ++I)
-    ValueMap[I] = new GlobalVariable(I->getType()->getElementType(), false,
-                                     GlobalValue::ExternalLinkage, 0,
-                                     I->getName(), New);
+       I != E; ++I) {
+    GlobalVariable *GV = new GlobalVariable(*New, 
+                                            I->getType()->getElementType(),
+                                            false,
+                                            GlobalValue::ExternalLinkage, 0,
+                                            I->getName());
+    GV->setAlignment(I->getAlignment());
+    ValueMap[I] = GV;
+  }
 
   // Loop over the functions in the module, making external functions as before
   for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) {
     Function *NF =
       Function::Create(cast<FunctionType>(I->getType()->getElementType()),
                        GlobalValue::ExternalLinkage, I->getName(), New);
-    NF->setCallingConv(I->getCallingConv());
-    NF->setParamAttrs(I->getParamAttrs());
-    if (I->hasCollector())
-      NF->setCollector(I->getCollector());
-    ValueMap[I]= NF;
+    NF->copyAttributesFrom(I);
+    ValueMap[I] = NF;
   }
 
   // Loop over the aliases in the module
@@ -105,7 +107,7 @@ Module *llvm::CloneModule(const Module *M,
         ValueMap[J] = DestI++;
       }
 
-      std::vector<ReturnInst*> Returns;  // Ignore returns cloned...
+      SmallVector<ReturnInst*, 8> Returns;  // Ignore returns cloned.
       CloneFunctionInto(F, I, ValueMap, Returns);
     }