
This requires DominatorTree be updated, which we do in the ml inliner case, but not in the default case, and the cost of doing so is noticeable to compile time for the latter[1]. So the patch only affects the ML inliner. [1] https://llvm-compile-time-tracker.com/compare.php?from=9fc0aa45e3312944431ba7e1ca0cec99c613992b&to=7af461b1ce0d9138211ef5f883f35d5b9ddf47be&stat=wall-time Differential Revision: https://reviews.llvm.org/D127899
47 lines
956 B
LLVM
47 lines
956 B
LLVM
; Test skipping inlining when the callsite is unreachable (for both mandatory
|
|
; and non-mandatory cases)
|
|
; REQUIRES: llvm_inliner_model_autogenerated
|
|
; RUN: opt -passes=inliner-ml-advisor-release -S < %s | FileCheck %s --check-prefix=CHECK
|
|
|
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-grtev4-linux-gnu"
|
|
|
|
; Mandatory case
|
|
define i32 @f1() {
|
|
entry:
|
|
br label %exit
|
|
some_bb: ; unreachable - has no predecessors
|
|
%r = call i32 @f2()
|
|
br label %exit
|
|
exit:
|
|
ret i32 1
|
|
}
|
|
|
|
define i32 @f2() #0 {
|
|
ret i32 2
|
|
}
|
|
|
|
; Non-mandatory case
|
|
define i32 @f3() {
|
|
entry:
|
|
br label %exit
|
|
some_bb: ; unreachable - has no predecessors
|
|
%r = call i32 @f4()
|
|
br label %exit
|
|
exit:
|
|
ret i32 1
|
|
}
|
|
|
|
define i32 @f4() {
|
|
ret i32 2
|
|
}
|
|
|
|
attributes #0 = { alwaysinline }
|
|
|
|
; CHECK-LABEL: @f1
|
|
; CHECK-LABEL: some_bb
|
|
; CHECK-NEXT: call i32 @f2
|
|
; CHECK-LABEL: @f3
|
|
; CHECK-LABEL: some_bb
|
|
; CHECK-NEXT: call i32 @f4
|