mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 02:06:07 +00:00
[mlgo] add 2 new features whether caller/callee is available_externally
(#96585)
AvailableExternally linkage is interesting because, in ThinLTO cases, it means the function may get elided if it survives inlining - see `elim-avail-extern` pass.
This commit is contained in:
parent
a55dc1d3ca
commit
600ff28772
@ -121,7 +121,15 @@ constexpr bool isHeuristicInlineCostFeature(InlineCostFeatureIndex Feature) {
|
||||
"number of blocks reached from a conditional instruction, in the callee") \
|
||||
M(int64_t, {1}, callee_users, \
|
||||
"number of module-internal users of the callee, +1 if the callee is " \
|
||||
"exposed externally")
|
||||
"exposed externally") \
|
||||
M(int64_t, {1}, is_callee_avail_external, \
|
||||
"Is callee an available-externally linkage type (i.e. could be DCEd if " \
|
||||
"not " \
|
||||
"fully inlined by ElimAvailExtern)") \
|
||||
M(int64_t, {1}, is_caller_avail_external, \
|
||||
"Is caller an available-externally linkage type (i.e. could be DCEd if " \
|
||||
"not " \
|
||||
"fully inlined by ElimAvailExtern)")
|
||||
|
||||
// clang-format off
|
||||
enum class FeatureIndex : size_t {
|
||||
|
@ -427,6 +427,10 @@ std::unique_ptr<InlineAdvice> MLInlineAdvisor::getAdviceImpl(CallBase &CB) {
|
||||
*ModelRunner->getTensor<int64_t>(FeatureIndex::callee_users) =
|
||||
CalleeBefore.Uses;
|
||||
*ModelRunner->getTensor<int64_t>(FeatureIndex::cost_estimate) = CostEstimate;
|
||||
*ModelRunner->getTensor<int64_t>(FeatureIndex::is_callee_avail_external) =
|
||||
Callee.hasAvailableExternallyLinkage();
|
||||
*ModelRunner->getTensor<int64_t>(FeatureIndex::is_caller_avail_external) =
|
||||
Caller.hasAvailableExternallyLinkage();
|
||||
|
||||
// Add the cost features
|
||||
for (size_t I = 0;
|
||||
|
@ -71,6 +71,8 @@ def get_input_signature():
|
||||
"nested_inlines",
|
||||
"nested_inline_cost_estimate",
|
||||
"threshold",
|
||||
"is_callee_avail_external",
|
||||
"is_caller_avail_external",
|
||||
]
|
||||
]
|
||||
|
||||
|
22
llvm/test/Transforms/Inline/ML/avail-external.ll
Normal file
22
llvm/test/Transforms/Inline/ML/avail-external.ll
Normal file
@ -0,0 +1,22 @@
|
||||
; REQUIRES: x86_64-linux
|
||||
; RUN: rm -rf %t.rundir
|
||||
; RUN: rm -rf %t.channel-basename.*
|
||||
; RUN: mkdir %t.rundir
|
||||
; RUN: cp %S/../../../../lib/Analysis/models/log_reader.py %t.rundir
|
||||
; RUN: cp %S/../../../../lib/Analysis/models/interactive_host.py %t.rundir
|
||||
; RUN: cp %S/Inputs/interactive_main.py %t.rundir
|
||||
; RUN: %python %t.rundir/interactive_main.py %t.channel-basename \
|
||||
; RUN: opt -passes=scc-oz-module-inliner -interactive-model-runner-echo-reply \
|
||||
; RUN: -enable-ml-inliner=release -inliner-interactive-channel-base=%t.channel-basename %s -S -o /dev/null | FileCheck %s
|
||||
|
||||
define available_externally void @g() {
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @f(){
|
||||
call void @g()
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: is_callee_avail_external: 1
|
||||
; CHECK: is_caller_avail_external: 0
|
Loading…
x
Reference in New Issue
Block a user