[llvm-commits] [llvm] r52536 - /llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp

Matthijs Kooijman matthijs at stdin.nl
Fri Jun 20 07:28:52 PDT 2008


Author: matthijs
Date: Fri Jun 20 09:28:52 2008
New Revision: 52536

URL: http://llvm.org/viewvc/llvm-project?rev=52536&view=rev
Log:
Explicitely track if any arguments or return values were removed in
DeadArgumentElimination and assert that the function type does not change if
nothing was changed. This should catch subtle changes in function type that are
not intended.


Modified:
    llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp

Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=52536&r1=52535&r2=52536&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Fri Jun 20 09:28:52 2008
@@ -568,6 +568,8 @@
   const Type *RetTy = FTy->getReturnType();
   const Type *NRetTy;
   unsigned RetCount = NumRetVals(F);
+  // Explicitely 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;
@@ -582,7 +584,8 @@
           NewRetIdxs[i] = RetTypes.size() - 1;
         } else {
           ++NumRetValsEliminated;
-        DOUT << "DAE - Removing return value " << i << " from " << F->getNameStart() << "\n";
+          DOUT << "DAE - Removing return value " << i << " from " << F->getNameStart() << "\n";
+          Changed = true;
         }
       }
     else
@@ -593,6 +596,7 @@
       } else {
         DOUT << "DAE - Removing return value from " << F->getNameStart() << "\n";
         ++NumRetValsEliminated;
+        Changed = true;
       } 
     if (RetTypes.size() == 0)
       // No return types? Make it void
@@ -632,6 +636,7 @@
     } else {
       ++NumArgumentsEliminated;
       DOUT << "DAE - Removing argument " << i << " (" << I->getNameStart() << ") from " << F->getNameStart() << "\n";
+      Changed = true;
     }
   }
 
@@ -657,6 +662,10 @@
   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 retrurn values were removed!");
+
   // Create the new function body and insert it into the module...
   Function *NF = Function::Create(NFTy, F->getLinkage());
   NF->copyAttributesFrom(F);





More information about the llvm-commits mailing list