Preserve calling conventions when doing IPO
authorChris Lattner <sabre@nondot.org>
Mon, 9 May 2005 01:05:50 +0000 (01:05 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 9 May 2005 01:05:50 +0000 (01:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21798 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/ArgumentPromotion.cpp
lib/Transforms/IPO/DeadArgumentElimination.cpp
lib/Transforms/IPO/PruneEH.cpp

index fd5a5d0215f066efe31b9d04437144a082eae922..59232ed2bcea29084c1f1c49f3b2affacb9a2cb3 100644 (file)
@@ -394,6 +394,7 @@ Function *ArgPromotion::DoPromotion(Function *F,
 
    // Create the new function body and insert it into the module...
   Function *NF = new Function(NFTy, F->getLinkage(), F->getName());
+  NF->setCallingConv(F->getCallingConv());
   F->getParent()->getFunctionList().insert(F, NF);
 
   // Get the alias analysis information that we need to update to reflect our
@@ -411,7 +412,8 @@ Function *ArgPromotion::DoPromotion(Function *F,
     // Loop over the operands, inserting GEP and loads in the caller as
     // appropriate.
     CallSite::arg_iterator AI = CS.arg_begin();
-    for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E; ++I, ++AI)
+    for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
+         I != E; ++I, ++AI)
       if (!ArgsToPromote.count(I))
         Args.push_back(*AI);          // Unmodified argument
       else if (!I->use_empty()) {
@@ -441,8 +443,10 @@ Function *ArgPromotion::DoPromotion(Function *F,
     if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
       New = new InvokeInst(NF, II->getNormalDest(), II->getUnwindDest(),
                            Args, "", Call);
+      cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
     } else {
       New = new CallInst(NF, Args, "", Call);
+      cast<CallInst>(New)->setCallingConv(CS.getCallingConv());
       if (cast<CallInst>(Call)->isTailCall())
         cast<CallInst>(New)->setTailCall();
     }
index 2dbc5c3169ab602cdf1ba589d9a6926ed9151bcc..05fae52bfe19850c2cdbb9e4673fd856004f74b4 100644 (file)
@@ -400,6 +400,7 @@ void DAE::RemoveDeadArgumentsFromFunction(Function *F) {
 
   // Create the new function body and insert it into the module...
   Function *NF = new Function(NFTy, F->getLinkage(), F->getName());
+  NF->setCallingConv(F->getCallingConv());
   F->getParent()->getFunctionList().insert(F, NF);
 
   // Loop over all of the callers of the function, transforming the call sites
@@ -428,8 +429,10 @@ void DAE::RemoveDeadArgumentsFromFunction(Function *F) {
     if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
       New = new InvokeInst(NF, II->getNormalDest(), II->getUnwindDest(),
                            Args, "", Call);
+      cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
     } else {
       New = new CallInst(NF, Args, "", Call);
+      cast<CallInst>(New)->setCallingConv(CS.getCallingConv());
       if (cast<CallInst>(Call)->isTailCall())
         cast<CallInst>(New)->setTailCall();
     }
index f7bf24188245370962faaa5a152f05196195297a..7b979d36f23ee7636f2d6ffbc351184984157404 100644 (file)
@@ -144,10 +144,11 @@ bool PruneEH::SimplifyFunction(Function *F) {
         if (DoesNotUnwind.count(CG[F])) {
           // Insert a call instruction before the invoke...
           std::string Name = II->getName();  II->setName("");
-          Value *Call = new CallInst(II->getCalledValue(),
-                                     std::vector<Value*>(II->op_begin()+3,
-                                                         II->op_end()),
-                                     Name, II);
+          CallInst *Call = new CallInst(II->getCalledValue(),
+                                        std::vector<Value*>(II->op_begin()+3,
+                                                            II->op_end()),
+                                        Name, II);
+          Call->setCallingConv(II->getCallingConv());
           
           // Anything that used the value produced by the invoke instruction
           // now uses the value produced by the call instruction.