Optimized usage of new SwitchInst case values (IntegersSubset type) in Local.cpp, Execution.cpp and BitcodeWriter.cpp.

I got about 1% of compile-time improvement on my machines (Ubuntu 11.10 i386 and Ubuntu 12.04 x64).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159076 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Stepan Dyatkovskiy
2012-06-23 10:58:58 +00:00
parent fc76b8691e
commit 47cbc4e0ee
4 changed files with 64 additions and 27 deletions
+3 -4
View File
@@ -169,11 +169,11 @@ bool llvm::ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions) {
// Otherwise, we can fold this switch into a conditional branch
// instruction if it has only one non-default destination.
SwitchInst::CaseIt FirstCase = SI->case_begin();
IntegersSubset CaseRanges = FirstCase.getCaseValueEx();
if (CaseRanges.getNumItems() == 1 && CaseRanges.isSingleNumber(0)) {
IntegersSubset& Case = FirstCase.getCaseValueEx();
if (Case.isSingleNumber()) {
// FIXME: Currently work with ConstantInt based numbers.
Value *Cond = Builder.CreateICmpEQ(SI->getCondition(),
CaseRanges.getItem(0).getLow().toConstantInt(),
Case.getSingleNumber(0).toConstantInt(),
"cond");
// Insert the new branch.
@@ -183,7 +183,6 @@ bool llvm::ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions) {
// Delete the old switch.
SI->eraseFromParent();
return true;
}
}
return false;