summaryrefslogtreecommitdiff
path: root/lib/Transforms/IPO
diff options
context:
space:
mode:
authorMatthijs Kooijman <matthijs@stdin.nl>2008-06-20 14:28:52 +0000
committerMatthijs Kooijman <matthijs@stdin.nl>2008-06-20 14:28:52 +0000
commit9cb6ec26b3041ff4879579fd9ecee48b616154d8 (patch)
tree2ecedd3e0cd1174bf09b8b15fb3fa68ae342de56 /lib/Transforms/IPO
parent1b492b2f8d2999b1cbc4aaf48874b091e81796a0 (diff)
downloadllvm-9cb6ec26b3041ff4879579fd9ecee48b616154d8.tar.gz
llvm-9cb6ec26b3041ff4879579fd9ecee48b616154d8.tar.bz2
llvm-9cb6ec26b3041ff4879579fd9ecee48b616154d8.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52536 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO')
-rw-r--r--lib/Transforms/IPO/DeadArgumentElimination.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/Transforms/IPO/DeadArgumentElimination.cpp b/lib/Transforms/IPO/DeadArgumentElimination.cpp
index 36be6f8f4d..6f00c89bf5 100644
--- a/lib/Transforms/IPO/DeadArgumentElimination.cpp
+++ b/lib/Transforms/IPO/DeadArgumentElimination.cpp
@@ -568,6 +568,8 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
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 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
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 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
} 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 @@ bool DAE::RemoveDeadStuffFromFunction(Function *F) {
} else {
++NumArgumentsEliminated;
DOUT << "DAE - Removing argument " << i << " (" << I->getNameStart() << ") from " << F->getNameStart() << "\n";
+ Changed = true;
}
}
@@ -657,6 +662,10 @@ 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 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);