Random updates to passes for indbr, I need blockaddress before I can do much more.
authorChris Lattner <sabre@nondot.org>
Tue, 27 Oct 2009 21:27:42 +0000 (21:27 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 27 Oct 2009 21:27:42 +0000 (21:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85316 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/LLVMBitCodes.h
lib/Analysis/InlineCost.cpp
lib/Analysis/SparsePropagation.cpp

index 55bd2566badd31b356037173f0df07cef9a41b9d..7cadd5807fa64c03571184822d7717eb43922844 100644 (file)
@@ -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
index febdd9101c87fc6c6a1050936af2ffd716a99b8d..559f468bd64a7786d88bb22eec2f29a32c46d664 100644 (file)
@@ -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;
index b7844f022765cb4a31ff174c3dbe78724548151a..6578cb4681e4129044796694e3f222dfd4052b56 100644 (file)
@@ -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)