mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-26 05:25:47 +00:00
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:
@@ -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++;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user