mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
e880bbaf88
Source Drift happens when the sources are updated after profiling the binary but before building the final optimized binary. If the source has changed since the profiles were obtained, optimizing basic blocks might be sub-optimal. This only applies to BasicBlockSection::List as it creates clusters of basic blocks using basic block ids. Source drift can invalidate these groupings leading to sub-optimal code generation with regards to performance. PGO source drift for a particular function can be detected using function metadata added in D95495. When source drift is deected, disable basic block clusters by default which can be re-enabled with -mllvm option bbsections-detect-source-drift=false. Differential Revision: https://reviews.llvm.org/D95593
20 lines
724 B
LLVM
20 lines
724 B
LLVM
; RUN: echo "!foo" > %t.order.txt
|
|
; RUN: llc < %s -mtriple=x86_64-pc-linux -basic-block-sections=%t.order.txt | FileCheck --check-prefix=SOURCE-DRIFT %s
|
|
; RUN: llc < %s -mtriple=x86_64-pc-linux -basic-block-sections=%t.order.txt -bbsections-detect-source-drift=false | FileCheck --check-prefix=HASH-CHECK-DISABLED %s
|
|
|
|
define dso_local i32 @foo(i1 zeroext %0, i1 zeroext %1) !annotation !1 {
|
|
br i1 %0, label %5, label %3
|
|
|
|
3: ; preds = %2
|
|
%4 = select i1 %1, i32 2, i32 0
|
|
ret i32 %4
|
|
|
|
5: ; preds = %2
|
|
ret i32 1
|
|
}
|
|
|
|
!1 = !{!"instr_prof_hash_mismatch"}
|
|
|
|
; SOURCE-DRIFT-NOT: .section .text
|
|
; HASH-CHECK-DISABLED: .section .text
|