Files
clang-p2996/llvm/test/Transforms/Inline/inline-threshold.ll
Daniil Suchkov 5c97507e2b [InlineCost] Introduce attributes to override InlineCost for inliner testing
This patch introduces four new string attributes: function-inline-cost,
function-inline-threshold, call-inline-cost and call-threshold-bonus.
These attributes allow you to selectively override some aspects of
InlineCost analysis. That would allow us to test inliner separately from
the InlineCost analysis.

That could be useful when you're trying to write tests for inliner and
you need to test some very specific situation, like "the inline cost has
to be this high", or "the threshold has to be this low". Right now every
time someone does that, they have get creative to come up with a way to
make the InlineCost give them the number they need (like adding ~30
load/add pairs for a trivial test). This process can be somewhat tedious
which can discourage some people from writing enough tests for their
changes. Also, that results in tests that are fragile and can be easily
broken without anyone noticing it because the test writer can't
explicitly control what input the inliner will get from the inline cost
analysis.

These new attributes will alleviate those problems to an extent.

Reviewed By: mtrofin

Differential Revision: https://reviews.llvm.org/D109033
2021-09-02 17:35:06 +00:00

30 lines
870 B
LLVM

; Test that -inline-threshold overrides thresholds derived from opt levels.
; RUN: opt < %s -O2 -inline-threshold=500 -S | FileCheck %s
; RUN: opt < %s -O3 -inline-threshold=500 -S | FileCheck %s
; RUN: opt < %s -Os -inline-threshold=500 -S | FileCheck %s
; RUN: opt < %s -Oz -inline-threshold=500 -S | FileCheck %s
@a = global i32 4
define i32 @simpleFunction(i32 %a) #0 {
entry:
%a1 = load volatile i32, i32* @a
%x1 = add i32 %a1, %a
ret i32 %x1
}
; Function Attrs: nounwind readnone uwtable
define i32 @bar(i32 %a) #0 {
; CHECK-LABEL: @bar
; CHECK: load volatile
; CHECK-NEXT: add i32
; CHECK-NEXT: call i32 @simpleFunction
; CHECK: ret
entry:
%i = tail call i32 @simpleFunction(i32 6) "function-inline-cost"="749"
%j = tail call i32 @simpleFunction(i32 %i) "function-inline-cost"="750"
ret i32 %j
}
attributes #0 = { nounwind readnone uwtable }