llvm-6502/test/Transforms/Inline/switch.ll
Chandler Carruth d6d57bc3fb [inliner] Significantly improve the compile time in cases like PR19499
by avoiding inlining massive switches merely because they have no
instructions in them. These switches still show up where we fail to form
lookup tables, and in those cases they are actually going to cause
a very significant code size hit anyways, so inlining them is not the
right call. The right way to fix any performance regressions stemming
from this is to enhance the switch-to-lookup-table logic to fire in more
places.

This makes PR19499 about 5x less bad. It uncovers a second compile time
problem in that test case that is unrelated (surprisingly!).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207403 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-28 08:52:44 +00:00

61 lines
859 B
LLVM

; RUN: opt < %s -inline -inline-threshold=20 -S | FileCheck %s
define i32 @callee(i32 %a) {
switch i32 %a, label %sw.default [
i32 0, label %sw.bb0
i32 1, label %sw.bb1
i32 2, label %sw.bb2
i32 3, label %sw.bb3
i32 4, label %sw.bb4
i32 5, label %sw.bb5
i32 6, label %sw.bb6
i32 7, label %sw.bb7
i32 8, label %sw.bb8
i32 9, label %sw.bb9
]
sw.default:
br label %return
sw.bb0:
br label %return
sw.bb1:
br label %return
sw.bb2:
br label %return
sw.bb3:
br label %return
sw.bb4:
br label %return
sw.bb5:
br label %return
sw.bb6:
br label %return
sw.bb7:
br label %return
sw.bb8:
br label %return
sw.bb9:
br label %return
return:
ret i32 42
}
define i32 @caller(i32 %a) {
; CHECK-LABEL: @caller(
; CHECK: call i32 @callee(
%result = call i32 @callee(i32 %a)
ret i32 %result
}