From: Cong Hou Date: Wed, 23 Sep 2015 00:20:27 +0000 (+0000) Subject: Fixed an issue on updating profile data when lowering switch statement. X-Git-Tag: android-x86-7.1-r4~43340 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=20afacc0596e89cff23e30dbafd68117e0f93aea;p=android-x86%2Fexternal-llvm.git Fixed an issue on updating profile data when lowering switch statement. Fixed the issue that when there is an edge from the jump table to the default statement, we should check it directly instead of checking if the sibling of the jump table header is a successor of the jump table header, which may not be the default statment but a successor of it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248354 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 44f222aeafd..97caa9d014a 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -8146,13 +8146,13 @@ void SelectionDAGBuilder::lowerWorkItem(SwitchWorkListItem W, Value *Cond, uint32_t JumpWeight = I->Weight; uint32_t FallthroughWeight = UnhandledWeights; - // If Fallthrough is a target of the jump table, we evenly distribute - // the weight on the edge to Fallthrough to successors of CurMBB. - // Also update the weight on the edge from JumpMBB to Fallthrough. + // If the default statement is a target of the jump table, we evenly + // distribute the default weight to successors of CurMBB. Also update + // the weight on the edge from JumpMBB to Fallthrough. for (MachineBasicBlock::succ_iterator SI = JumpMBB->succ_begin(), SE = JumpMBB->succ_end(); SI != SE; ++SI) { - if (*SI == Fallthrough) { + if (*SI == DefaultMBB) { JumpWeight += DefaultWeight / 2; FallthroughWeight -= DefaultWeight / 2; JumpMBB->setSuccWeight(SI, DefaultWeight / 2);