aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-10-27 21:27:42 +0000
committerChris Lattner <sabre@nondot.org>2009-10-27 21:27:42 +0000
commit2688bcbee188c1b5071f3a2b38923cd06013f490 (patch)
tree7eb6cc33a93cc3fccc1cf6e0c728f169e7ad80e4
parent627b470981a833f847005556bea04e71f94da260 (diff)
downloadexternal_llvm-2688bcbee188c1b5071f3a2b38923cd06013f490.zip
external_llvm-2688bcbee188c1b5071f3a2b38923cd06013f490.tar.gz
external_llvm-2688bcbee188c1b5071f3a2b38923cd06013f490.tar.bz2
Random updates to passes for indbr, I need blockaddress before I can do much more.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85316 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Bitcode/LLVMBitCodes.h4
-rw-r--r--lib/Analysis/InlineCost.cpp3
-rw-r--r--lib/Analysis/SparsePropagation.cpp5
3 files changed, 10 insertions, 2 deletions
diff --git a/include/llvm/Bitcode/LLVMBitCodes.h b/include/llvm/Bitcode/LLVMBitCodes.h
index 55bd256..7cadd58 100644
--- a/include/llvm/Bitcode/LLVMBitCodes.h
+++ b/include/llvm/Bitcode/LLVMBitCodes.h
@@ -209,7 +209,7 @@ namespace bitc {
FUNC_CODE_INST_RET = 10, // RET: [opty,opval<both optional>]
FUNC_CODE_INST_BR = 11, // BR: [bb#, bb#, cond] or [bb#]
- FUNC_CODE_INST_SWITCH = 12, // SWITCH: [opty, operands...]
+ FUNC_CODE_INST_SWITCH = 12, // SWITCH: [opty, op0, op1, ...]
FUNC_CODE_INST_INVOKE = 13, // INVOKE: [attr, fnty, op0,op1, ...]
FUNC_CODE_INST_UNWIND = 14, // UNWIND
FUNC_CODE_INST_UNREACHABLE = 15, // UNREACHABLE
@@ -237,7 +237,7 @@ namespace bitc {
// new select on i1 or [N x i1]
FUNC_CODE_INST_VSELECT = 29, // VSELECT: [ty,opval,opval,predty,pred]
FUNC_CODE_INST_INBOUNDS_GEP= 30, // INBOUNDS_GEP: [n x operands]
- FUNC_CODE_INST_INDBR = 31 // INDBR: [opty, operands...]
+ FUNC_CODE_INST_INDBR = 31 // INDBR: [opty, op0, op1, ...]
};
} // End bitc namespace
} // End llvm namespace
diff --git a/lib/Analysis/InlineCost.cpp b/lib/Analysis/InlineCost.cpp
index febdd91..559f468 100644
--- a/lib/Analysis/InlineCost.cpp
+++ b/lib/Analysis/InlineCost.cpp
@@ -31,6 +31,9 @@ unsigned InlineCostAnalyzer::FunctionInfo::
// Eliminating a switch is a big win, proportional to the number of edges
// deleted.
Reduction += (SI->getNumSuccessors()-1) * 40;
+ else if (isa<IndBrInst>(*UI))
+ // Eliminating an indirect branch is a big win.
+ Reduction += 200;
else if (CallInst *CI = dyn_cast<CallInst>(*UI)) {
// Turning an indirect call into a direct call is a BIG win
Reduction += CI->getCalledValue() == V ? 500 : 0;
diff --git a/lib/Analysis/SparsePropagation.cpp b/lib/Analysis/SparsePropagation.cpp
index b7844f0..6578cb4 100644
--- a/lib/Analysis/SparsePropagation.cpp
+++ b/lib/Analysis/SparsePropagation.cpp
@@ -166,6 +166,11 @@ void SparseSolver::getFeasibleSuccessors(TerminatorInst &TI,
return;
}
+ if (IndBrInst *IBI = dyn_cast<IndBrInst>(TI)) {
+ Succs.assign(Succs.size(), true);
+ return;
+ }
+
SwitchInst &SI = cast<SwitchInst>(TI);
LatticeVal SCValue;
if (AggressiveUndef)