Allow deadargelim to change return types even though now values were dead. This
authorMatthijs Kooijman <matthijs@stdin.nl>
Tue, 15 Jul 2008 14:42:31 +0000 (14:42 +0000)
committerMatthijs Kooijman <matthijs@stdin.nl>
Tue, 15 Jul 2008 14:42:31 +0000 (14:42 +0000)
again canonicalizes {i32} into i32 and {} into void.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53610 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/DeadArgumentElimination.cpp

index c6d6fec7b87634700a340a5a281f2b38bfae1059..5f1920b0618a92ddae999d701f5398160085835f 100644 (file)
@@ -601,8 +601,6 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
   const Type *RetTy = FTy->getReturnType();
   const Type *NRetTy = NULL;
   unsigned RetCount = NumRetVals(F);
-  // Explicitly track if anything changed, for debugging.
-  bool Changed = false;
   // -1 means unused, other numbers are the new index
   SmallVector<int, 5> NewRetIdxs(RetCount, -1);
   std::vector<const Type*> RetTypes;
@@ -621,7 +619,6 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
           ++NumRetValsEliminated;
           DOUT << "DAE - Removing return value " << i << " from "
                << F->getNameStart() << "\n";
-          Changed = true;
         }
       }
     else
@@ -633,9 +630,8 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
         DOUT << "DAE - Removing return value from " << F->getNameStart()
              << "\n";
         ++NumRetValsEliminated;
-        Changed = true;
       }
-    if (RetTypes.size() > 1 || (STy && STy->getNumElements()==RetTypes.size()))
+    if (RetTypes.size() > 1)
       // More than one return type? Return a struct with them. Also, if we used
       // to return a struct and didn't change the number of return values,
       // return a struct again. This prevents changing {something} into
@@ -688,7 +684,6 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
       ++NumArgumentsEliminated;
       DOUT << "DAE - Removing argument " << i << " (" << I->getNameStart()
            << ") from " << F->getNameStart() << "\n";
-      Changed = true;
     }
   }
 
@@ -714,11 +709,6 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
   if (NFTy == FTy)
     return false;
 
-  // The function type is only allowed to be different if we actually left out
-  // an argument or return value.
-  assert(Changed && "Function type changed while no arguments or return values"
-                    "were removed!");
-
   // Create the new function body and insert it into the module...
   Function *NF = Function::Create(NFTy, F->getLinkage());
   NF->copyAttributesFrom(F);