mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
d7917544a3
Tests with multiple benchmarks, like Embench [1], showed that the CallPenalty magic number has the most influence on inlining decisions when optimizing for size. On the other hand, there was no good default value for this parameter. Some benchmarks profited strongly from a reduced call penalty. On example is the picojpeg benchmark compiled for RISC-V, which got 6% smaller with a CallPenalty of 10 instead of 12. Other benchmarks increased in size, like matmult. This commit makes the compromise of turning the magic number constant of CallPenalty into a configurable value. This introduces the flag `--inline-call-penalty`. With that flag users can fine tune the inliner to their needs. The CallPenalty constant was also used for loops. This commit replaces the CallPenalty constant with a new LoopPenalty constant that is now used instead. This is a slimmed down version of https://reviews.llvm.org/D30899 [1]: https://github.com/embench/embench-iot Differential Revision: https://reviews.llvm.org/D105976
29 lines
778 B
LLVM
29 lines
778 B
LLVM
; Check that calls are not inlined if the call penalty is low. The value of the
|
|
; call penalty is provided with the '--inline-call-penalty' option.
|
|
;
|
|
; RUN: opt < %s -inline --inline-call-penalty=0 --inline-threshold=5 -S | FileCheck %s
|
|
; RUN: opt < %s -inline --inline-threshold=5 -S | FileCheck %s -check-prefix=DEFAULT_CALL_PENALTY
|
|
|
|
define i32 @X9(i32 %x) nounwind {
|
|
%x2 = add i32 %x, %x
|
|
%x3 = add i32 %x2, %x
|
|
%x4 = add i32 %x3, %x
|
|
%x5 = add i32 %x4, %x
|
|
%x6 = add i32 %x5, %x
|
|
%x7 = add i32 %x6, %x
|
|
%x8 = add i32 %x7, %x
|
|
%x9 = add i32 %x8, %x
|
|
|
|
ret i32 %x9
|
|
}
|
|
|
|
define i32 @f1(i32 %x) nounwind {
|
|
%res = call i32 @X9(i32 %x)
|
|
ret i32 %res
|
|
; CHECK-LABEL: @f1(
|
|
; CHECK: %res = call i32 @X9
|
|
|
|
; DEFAULT_CALL_PENALTY-LABEL: @f1(
|
|
; DEFAULT_CALL_PENALTY-NOT: call
|
|
}
|