forked from OSchip/llvm-project
[SDAGBuilder] Don't create a binary tree for switches in minsize mode
This bloats codesize - all of the non-leaf nodes are extra code. llvm-svn: 280932
This commit is contained in:
parent
7771462b28
commit
c6a6144966
|
|
@ -9237,7 +9237,8 @@ void SelectionDAGBuilder::visitSwitch(const SwitchInst &SI) {
|
|||
WorkList.pop_back();
|
||||
unsigned NumClusters = W.LastCluster - W.FirstCluster + 1;
|
||||
|
||||
if (NumClusters > 3 && TM.getOptLevel() != CodeGenOpt::None) {
|
||||
if (NumClusters > 3 && TM.getOptLevel() != CodeGenOpt::None &&
|
||||
!DefaultMBB->getParent()->getFunction()->optForMinSize()) {
|
||||
// For optimized builds, lower large range as a balanced binary tree.
|
||||
splitWorkItem(WorkList, W, SI.getCondition(), SwitchMBB);
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
; RUN: llc < %s | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"
|
||||
target triple = "thumbv7-apple-ios8.0.0"
|
||||
|
||||
; CHECK: beq
|
||||
; CHECK: beq
|
||||
; CHECK: beq
|
||||
; CHECK: cbnz
|
||||
declare void @g(i32)
|
||||
define void @f(i32 %val) optsize minsize {
|
||||
switch i32 %val, label %def [
|
||||
i32 0, label %one
|
||||
i32 9, label %two
|
||||
i32 994, label %three
|
||||
i32 1154, label %four
|
||||
]
|
||||
|
||||
one:
|
||||
call void @g(i32 1)
|
||||
ret void
|
||||
two:
|
||||
call void @g(i32 001)
|
||||
ret void
|
||||
three:
|
||||
call void @g(i32 78)
|
||||
ret void
|
||||
four:
|
||||
call void @g(i32 87)
|
||||
ret void
|
||||
def:
|
||||
call void @g(i32 11)
|
||||
ret void
|
||||
}
|
||||
Loading…
Reference in New Issue