wrap long lines, preserve calling conventions when cloning functions and

turning calls into invokes


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21797 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2005-05-09 01:04:34 +00:00
parent 42e3c81c5f
commit c154cef9a1
2 changed files with 14 additions and 6 deletions

View File

@@ -47,21 +47,27 @@ Module *llvm::CloneModule(const Module *M) {
// new module. Here we add them to the ValueMap and to the new Module. We // 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. // 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) for (Module::const_global_iterator I = M->global_begin(), E = M->global_end();
I != E; ++I)
ValueMap[I] = new GlobalVariable(I->getType()->getElementType(), false, ValueMap[I] = new GlobalVariable(I->getType()->getElementType(), false,
GlobalValue::ExternalLinkage, 0, GlobalValue::ExternalLinkage, 0,
I->getName(), New); I->getName(), New);
// Loop over the functions in the module, making external functions as before // 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) for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) {
ValueMap[I]=new Function(cast<FunctionType>(I->getType()->getElementType()), Function *NF =
GlobalValue::ExternalLinkage, I->getName(), New); new Function(cast<FunctionType>(I->getType()->getElementType()),
GlobalValue::ExternalLinkage, I->getName(), New);
NF->setCallingConv(I->getCallingConv());
ValueMap[I]= NF;
}
// Now that all of the things that global variable initializer can refer to // Now that all of the things that global variable initializer can refer to
// have been created, loop through and copy the global variable referrers // have been created, loop through and copy the global variable referrers
// over... We also set the attributes on the global now. // over... We also set the attributes on the global now.
// //
for (Module::const_global_iterator I = M->global_begin(), E = M->global_end(); I != E; ++I) { for (Module::const_global_iterator I = M->global_begin(), E = M->global_end();
I != E; ++I) {
GlobalVariable *GV = cast<GlobalVariable>(ValueMap[I]); GlobalVariable *GV = cast<GlobalVariable>(ValueMap[I]);
if (I->hasInitializer()) if (I->hasInitializer())
GV->setInitializer(cast<Constant>(MapValue(I->getInitializer(), GV->setInitializer(cast<Constant>(MapValue(I->getInitializer(),
@@ -75,7 +81,8 @@ Module *llvm::CloneModule(const Module *M) {
Function *F = cast<Function>(ValueMap[I]); Function *F = cast<Function>(ValueMap[I]);
if (!I->isExternal()) { if (!I->isExternal()) {
Function::arg_iterator DestI = F->arg_begin(); Function::arg_iterator DestI = F->arg_begin();
for (Function::const_arg_iterator J = I->arg_begin(); J != I->arg_end(); ++J) { for (Function::const_arg_iterator J = I->arg_begin(); J != I->arg_end();
++J) {
DestI->setName(J->getName()); DestI->setName(J->getName());
ValueMap[J] = DestI++; ValueMap[J] = DestI++;
} }

View File

@@ -153,6 +153,7 @@ bool llvm::InlineFunction(CallSite CS) {
new InvokeInst(CI->getCalledValue(), Split, InvokeDest, new InvokeInst(CI->getCalledValue(), Split, InvokeDest,
std::vector<Value*>(CI->op_begin()+1, CI->op_end()), std::vector<Value*>(CI->op_begin()+1, CI->op_end()),
CI->getName(), BB->getTerminator()); CI->getName(), BB->getTerminator());
II->setCallingConv(CI->getCallingConv());
// Make sure that anything using the call now uses the invoke! // Make sure that anything using the call now uses the invoke!
CI->replaceAllUsesWith(II); CI->replaceAllUsesWith(II);