Skip to content

Commit

Permalink
[llvm-profgen] Fix total samples related issues
Browse files Browse the repository at this point in the history
Since total sample and body sample are used to compute hotness threshold in compiler, we found in some services changing the total samples computation will cause noticeable regression. Hence, here we will revert the changes and just keep all total samples number identical to the old tool.

Three changes in this diff:

1. Revert previous diff(https://reviews.llvm.org/D112672: [llvm-profgen] Update total samples by accumulating all its body samples) and put it under a switch.

2. Keep the negative line number. Although compiler doesn't consume the count but it will be used to compute hot threshold.

3. Change to accumulate total samples per byte instead of per instruction.

Reviewed By: hoy, wenlei

Differential Revision: https://reviews.llvm.org/D115013
  • Loading branch information
wlei-llvm committed Dec 8, 2021
1 parent 505a900 commit 484a569
Show file tree
Hide file tree
Showing 20 changed files with 296 additions and 215 deletions.
18 changes: 9 additions & 9 deletions llvm/test/tools/llvm-profgen/cold-profile-trimming.test
@@ -1,17 +1,17 @@
; RUN: llvm-profgen --format=text --unsymbolized-profile=%S/Inputs/cold-profile-trimming.raw.prof --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t1 --use-offset=0 --trim-cold-profile=0
; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK-NOTRIM
; RUN: llvm-profgen --format=text --unsymbolized-profile=%S/Inputs/cold-profile-trimming.raw.prof --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t1 --use-offset=0 --trim-cold-profile=1 --profile-summary-cold-count=100
; RUN: llvm-profgen --format=text --unsymbolized-profile=%S/Inputs/cold-profile-trimming.raw.prof --binary=%S/Inputs/inline-noprobe2.perfbin --output=%t1 --use-offset=0 --trim-cold-profile=1 --profile-summary-cold-count=1000
; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK-TRIM

;CHECK-NOTRIM: partition_pivot_last:1091:7
;CHECK-NOTRIM: partition_pivot_first:365:5
;CHECK-NOTRIM: quick_sort:83:25
;CHECK-NOTRIM: main:52:0
;CHECK-NOTRIM: partition_pivot_last:5187:7
;CHECK-NOTRIM: partition_pivot_first:3010:5
;CHECK-NOTRIM: quick_sort:903:25
;CHECK-NOTRIM: main:820:0

;CHECK-TRIM: partition_pivot_last:1091:7
;CHECK-TRIM: partition_pivot_first:365:5
;CHECK-TRIM-NOT: quick_sort:83:25
;CHECK-TRIM-NOT: main:52:0
;CHECK-TRIM: partition_pivot_last:5187:7
;CHECK-TRIM: partition_pivot_first:3010:5
;CHECK-TRIM-NOT: quick_sort:903:25
;CHECK-TRIM-NOT: main:820:0

; original code:
; clang -O3 -g -fno-optimize-sibling-calls -fdebug-info-for-profiling qsort.c -o a.out
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-profgen/coroutine.test
Expand Up @@ -2,7 +2,7 @@
; RUN: FileCheck %s --input-file %t --check-prefix=CHECK

; Check that the head sample count for ticker is 0.
; CHECK: _Z6tickeri:67:0
; CHECK: _Z6tickeri:1566:0
; CHECK-NOT: _Z6tickeri.resume


Expand Down
8 changes: 4 additions & 4 deletions llvm/test/tools/llvm-profgen/cs-interrupt.test
Expand Up @@ -6,14 +6,14 @@
>>>>>>> 02ea7084c370 ([llvm-profgen] Support LBR only perf script)
; RUN: FileCheck %s --input-file %t

; CHECK:[main:1 @ foo:3 @ bar]:17:5
; CHECK:[main:1 @ foo]:88:0
; CHECK: 2: 5
; CHECK: 3: 5 bar:5
; CHECK:[main:1 @ foo:3 @ bar]:74:5
; CHECK: 0: 5
; CHECK: 1: 5
; CHECK: 2: 3
; CHECK: 5: 4
; CHECK:[main:1 @ foo]:10:0
; CHECK: 2: 5
; CHECK: 3: 5 bar:5

; CHECK-UNWINDER: [main:1 @ foo]
; CHECK-UNWINDER-NEXT: 3
Expand Down
21 changes: 12 additions & 9 deletions llvm/test/tools/llvm-profgen/cs-preinline.test
Expand Up @@ -11,41 +11,44 @@
; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-NO-PREINL

; Test cold profile trimming. Only base profiles should be dropped.
; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/inline-cs-noprobe.perfscript --binary=%S/Inputs/inline-cs-noprobe.perfbin --output=%t --csspgo-preinliner=1 --trim-cold-profile=1 --profile-summary-hot-count=250
; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/inline-cs-noprobe.perfscript --binary=%S/Inputs/inline-cs-noprobe.perfbin --output=%t --csspgo-preinliner=1 --trim-cold-profile=1 --profile-summary-hot-count=400

; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-TRIM

; CHECK-DEFAULT: [main:1 @ foo]:44:0
; CHECK-DEFAULT: [main:1 @ foo]:309:0
; CHECK-DEFAULT-NEXT: 2.1: 14
; CHECK-DEFAULT-NEXT: 3: 15
; CHECK-DEFAULT-NEXT: 3.1: 14 bar:14
; CHECK-DEFAULT-NEXT: 3.2: 1
; CHECK-DEFAULT-NEXT: 65526: 14
; CHECK-DEFAULT-NEXT: !Attributes: 1
; CHECK-DEFAULT-NEXT:[main:1 @ foo:3.1 @ bar]:14:0
; CHECK-DEFAULT-NEXT:[main:1 @ foo:3.1 @ bar]:84:0
; CHECK-DEFAULT-NEXT: 1: 14
; CHECK-DEFAULT-NEXT: !Attributes: 1

; CHECK-PREINL: [foo]:44:0
; CHECK-PREINL: [foo]:309:0
; CHECK-PREINL-NEXT: 2.1: 14
; CHECK-PREINL-NEXT: 3: 15
; CHECK-PREINL-NEXT: 3.1: 14 bar:14
; CHECK-PREINL-NEXT: 3.2: 1
; CHECK-PREINL-NEXT: 65526: 14
; CHECK-PREINL-NEXT: !Attributes: 1
; CHECK-PREINL-NEXT:[foo:3.1 @ bar]:14:0
; CHECK-PREINL-NEXT:[foo:3.1 @ bar]:84:0
; CHECK-PREINL-NEXT: 1: 14
; CHECK-PREINL-NEXT: !Attributes: 3

; CHECK-NO-PREINL: [foo]:44:0
; CHECK-NO-PREINL: [foo]:309:0
; CHECK-NO-PREINL-NEXT: 2.1: 14
; CHECK-NO-PREINL-NEXT: 3: 15
; CHECK-NO-PREINL-NEXT: 3.1: 14 bar:14
; CHECK-NO-PREINL-NEXT: 3.2: 1
; CHECK-NO-PREINL-NEXT: 65526: 14
; CHECK-NO-PREINL-NEXT: !Attributes: 1
; CHECK-NO-PREINL-NEXT:[bar]:14:0
; CHECK-NO-PREINL-NEXT:[bar]:84:0
; CHECK-NO-PREINL-NEXT: 1: 14
; CHECK-NO-PREINL-NEXT: !Attributes: 1

; CHECK-TRIM-NOT: [foo]
; CHECK-TRIM:[foo:3.1 @ bar]:14:0
; CHECK-TRIM-NOT: [foo]:309:0
; CHECK-TRIM:[foo:3.1 @ bar]:84:0
; CHECK-TRIM-NEXT: 1: 14
; CHECK-TRIM-NEXT: !Attributes: 3
4 changes: 2 additions & 2 deletions llvm/test/tools/llvm-profgen/fname-canonicalization.test
Expand Up @@ -2,10 +2,10 @@
; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/unique-linkage-name-dwarf.perfscript --binary=%S/Inputs/unique-linkage-name-dwarf.perfbin --output=%t --profile-summary-cold-count=0
; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-DWARF-FNAME

; CHECK-DWARF-FNAME:[main:1 @ foo]:43:0
; CHECK-DWARF-FNAME:[main:1 @ foo]:309:0
; CHECK-DWARF-FNAME: 2: 14
; CHECK-DWARF-FNAME: 3: 29 bar.__uniq.26267048767521081047744692097241227776:14
; CHECK-DWARF-FNAME:[main:1 @ foo:3 @ bar.__uniq.26267048767521081047744692097241227776]:14:0
; CHECK-DWARF-FNAME:[main:1 @ foo:3 @ bar.__uniq.26267048767521081047744692097241227776]:84:0
; CHECK-DWARF-FNAME: 1: 14


Expand Down
48 changes: 26 additions & 22 deletions llvm/test/tools/llvm-profgen/fs-discriminator.test
Expand Up @@ -5,7 +5,7 @@

;CHECK-SECTION: ProfileSummarySection - Offset: [[#]], Size: [[#]], Flags: {fs-discriminator}

;CHECK: partition_pivot_last:88:1
;CHECK: partition_pivot_last:507:1
;CHECK: 1: 4
;CHECK: 2: 4
;CHECK: 3: 4
Expand All @@ -22,7 +22,7 @@
;CHECK: 5.5120: 2
;CHECK: 6: 3
;CHECK: 7: 3
;CHECK: 5: swap:18
;CHECK: 5: swap:80
;CHECK: 1: 2
;CHECK: 1.1024: 2
;CHECK: 1.4096: 2
Expand All @@ -32,12 +32,29 @@
;CHECK: 3: 2
;CHECK: 3.512: 2
;CHECK: 3.3584: 2
;CHECK: 6: swap:12
;CHECK: 65532: 2
;CHECK: 6: swap:51
;CHECK: 1.14336: 3
;CHECK: 2.7168: 3
;CHECK: 2.11776: 3
;CHECK: 3.13824: 3
;CHECK: partition_pivot_first:41:1
;CHECK: main:369:0
;CHECK: 0: 0
;CHECK: 3: 0
;CHECK: 4.1: 1
;CHECK: 4.3: 1
;CHECK: 5.3: 4
;CHECK: 5.1537: 4
;CHECK: 6: 4
;CHECK: 6.1: 3
;CHECK: 6.3: 4
;CHECK: 7: 1
;CHECK: 8: 1 quick_sort:1
;CHECK: 9: 1
;CHECK: 11: 0
;CHECK: 14: 0
;CHECK: 65499: 2
;CHECK: partition_pivot_first:298:1
;CHECK: 0: 1
;CHECK: 1: 1
;CHECK: 2: 1
Expand All @@ -50,38 +67,25 @@
;CHECK: 4.3: 4
;CHECK: 5: 1
;CHECK: 6: 1
;CHECK: 4.2: swap:6
;CHECK: 65516: 1
;CHECK: 4.2: swap:24
;CHECK: 1.7168: 2
;CHECK: 2: 2
;CHECK: 3.4608: 2
;CHECK: 5: swap:4
;CHECK: 5: swap:17
;CHECK: 1: 1
;CHECK: 2.229376: 1
;CHECK: 2.589824: 1
;CHECK: 3: 1
;CHECK: main:24:0
;CHECK: 0: 0
;CHECK: 3: 0
;CHECK: 4.1: 1
;CHECK: 4.3: 1
;CHECK: 5.3: 4
;CHECK: 5.1537: 4
;CHECK: 6: 4
;CHECK: 6.1: 3
;CHECK: 6.3: 4
;CHECK: 7: 1
;CHECK: 8: 1 quick_sort:1
;CHECK: 9: 1
;CHECK: 11: 0
;CHECK: 14: 0
;CHECK: quick_sort:13:2
;CHECK: quick_sort:122:2
;CHECK: 0: 2
;CHECK: 1: 2
;CHECK: 1.15360: 2
;CHECK: 2: 2 partition_pivot_first:1 partition_pivot_last:1
;CHECK: 3: 1 quick_sort:1
;CHECK: 4: 2
;CHECK: 6: 2
;CHECK: 65507: 2


; original code:
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/tools/llvm-profgen/func-split.test
Expand Up @@ -3,26 +3,26 @@
; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/func-split.perfscript --binary=%S/Inputs/func-split.perfbin --output=%t --ignore-stack-samples
; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-STRIP-CTX

;CHECK: [foo]:82:0
;CHECK: [foo]:409:0
;CHECK: 2.1: 27
;CHECK: 3: 27
;CHECK: 3.1: 2 bar:2
;CHECK: 3.2: 26
;CHECK: [foo:3.1 @ bar]:2:0
;CHECK: [foo:3.1 @ bar]:8:0
;CHECK: 1: 1
;CHECK: 5: 1
;CHECK: [bar]:0:1

;CHECK-NOT: foo.cold

;CHECK-STRIP-CTX: foo:81:0
;CHECK-STRIP-CTX: foo:1334:0
;CHECK-STRIP-CTX: 0: 0
;CHECK-STRIP-CTX: 2.1: 27
;CHECK-STRIP-CTX: 3: 27
;CHECK-STRIP-CTX: 3.1: 1 bar:1
;CHECK-STRIP-CTX: 3.2: 26
;CHECK-STRIP-CTX: 4: 0
;CHECK-STRIP-CTX: bar:2:1
;CHECK-STRIP-CTX: bar:27:1
;CHECK-STRIP-CTX: 1: 1
;CHECK-STRIP-CTX: 5: 1

Expand Down
21 changes: 12 additions & 9 deletions llvm/test/tools/llvm-profgen/inline-cs-noprobe.test
Expand Up @@ -13,19 +13,21 @@
; CHECK-SYM-LIST: foo
; CHECK-SYM-LIST: main

; CHECK:[main:1 @ foo]:44:0
; CHECK:[main:1 @ foo]:309:0
; CHECK: 2.1: 14
; CHECK: 3: 15
; CHECK: 3.1: 14 bar:14
; CHECK: 3.2: 1
; CHECK:[main:1 @ foo:3.1 @ bar]:14:0
; CHECK: 65526: 14
; CHECK:[main:1 @ foo:3.1 @ bar]:84:0
; CHECK: 1: 14

; CHECK-UNWINDER: [main:1 @ foo]
; CHECK-UNWINDER: 3
; CHECK-UNWINDER: 670-69b:1
; CHECK-UNWINDER: 67e-69b:14
; CHECK-UNWINDER: 6bf-6c8:14
; CHECK-UNWINDER: 4
; CHECK-UNWINDER: 670-6ad:1
; CHECK-UNWINDER: 67e-69b:1
; CHECK-UNWINDER: 67e-6ad:13
; CHECK-UNWINDER: 6bd-6c8:14
; CHECK-UNWINDER: 2
; CHECK-UNWINDER: 69b->670:1
; CHECK-UNWINDER: 6c8->67e:15
Expand All @@ -34,16 +36,17 @@
; CHECK-UNWINDER: 6af-6bb:14
; CHECK-UNWINDER: 0

; CHECK-STRIP-CTX: main:44:0
; CHECK-STRIP-CTX: main:1109:0
; CHECK-STRIP-CTX: 0: 0
; CHECK-STRIP-CTX: 2: 0
; CHECK-STRIP-CTX: 1: foo:44
; CHECK-STRIP-CTX: 1: foo:1109
; CHECK-STRIP-CTX: 2.1: 14
; CHECK-STRIP-CTX: 3: 15
; CHECK-STRIP-CTX: 3.2: 1
; CHECK-STRIP-CTX: 4: 0
; CHECK-STRIP-CTX: 7: 0
; CHECK-STRIP-CTX: 3.1: bar:14
; CHECK-STRIP-CTX: 65526: 14
; CHECK-STRIP-CTX: 3.1: bar:196
; CHECK-STRIP-CTX: 1: 14

; original code:
Expand Down
8 changes: 5 additions & 3 deletions llvm/test/tools/llvm-profgen/inline-force-dwarf.test
@@ -1,15 +1,17 @@
; RUN: llvm-profgen --format=text --ignore-stack-samples --use-dwarf-correlation --perfscript=%S/Inputs/inline-cs-pseudoprobe.perfscript --binary=%S/Inputs/inline-cs-pseudoprobe.perfbin --output=%t --profile-summary-cold-count=0
; RUN: FileCheck %s --input-file %t

; CHECK: main:43:0
; CHECK: main:1109:0
; CHECK-NEXT: 0: 0
; CHECK-NEXT: 2: 0
; CHECK-NEXT: 1: foo:43
; CHECK-NEXT: 1: foo:1109
; CHECK-NEXT: 2: 14
; CHECK-NEXT: 3: 15
; CHECK-NEXT: 4: 0
; CHECK-NEXT: 3: bar:14
; CHECK-NEXT: 65526: 14
; CHECK-NEXT: 3: bar:224
; CHECK-NEXT: 1: 14
; CHECK-NEXT: 65533: 14


; clang -O3 -fexperimental-new-pass-manager -fuse-ld=lld -fpseudo-probe-for-profiling
Expand Down

0 comments on commit 484a569

Please sign in to comment.