mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
b95c2eec31
Summary: This change adds support for specifying a weight when merging profile data with the llvm-profdata tool. Weights are specified by using the --weighted-input=<weight>,<filename> option. Input files not specified with this option (normal positional list after options) are given a default weight of 1. Adding support for arbitrary weighting of input profile data allows for relative importance to be placed on the input data from multiple training runs. Both sampled and instrumented profiles are supported. Reviewers: davidxl, dnovillo, bogner, silvas Subscribers: silvas, davidxl, llvm-commits Differential Revision: http://reviews.llvm.org/D15306 llvm-svn: 255659
70 lines
4.1 KiB
Plaintext
70 lines
4.1 KiB
Plaintext
Tests for weighted merge of instrumented profiles.
|
|
|
|
1- Merge the foo and bar profiles with unity weight and verify the combined output
|
|
RUN: llvm-profdata merge -instr -weighted-input=1,%p/Inputs/weight-instr-bar.profdata -weighted-input=1,%p/Inputs/weight-instr-foo.profdata -o %t
|
|
RUN: llvm-profdata show -instr -all-functions %t | FileCheck %s -check-prefix=1X_1X_WEIGHT
|
|
RUN: llvm-profdata merge -instr -weighted-input=1,%p/Inputs/weight-instr-bar.profdata %p/Inputs/weight-instr-foo.profdata -o %t
|
|
RUN: llvm-profdata show -instr -all-functions %t | FileCheck %s -check-prefix=1X_1X_WEIGHT
|
|
1X_1X_WEIGHT: Counters:
|
|
1X_1X_WEIGHT-NEXT: usage:
|
|
1X_1X_WEIGHT-NEXT: Hash: 0x0000000000000000
|
|
1X_1X_WEIGHT-NEXT: Counters: 1
|
|
1X_1X_WEIGHT-NEXT: Function count: 0
|
|
1X_1X_WEIGHT-NEXT: foo:
|
|
1X_1X_WEIGHT-NEXT: Hash: 0x000000000000028a
|
|
1X_1X_WEIGHT-NEXT: Counters: 3
|
|
1X_1X_WEIGHT-NEXT: Function count: 866988873
|
|
1X_1X_WEIGHT-NEXT: bar:
|
|
1X_1X_WEIGHT-NEXT: Hash: 0x000000000000028a
|
|
1X_1X_WEIGHT-NEXT: Counters: 3
|
|
1X_1X_WEIGHT-NEXT: Function count: 866988873
|
|
1X_1X_WEIGHT-NEXT: main:
|
|
1X_1X_WEIGHT-NEXT: Hash: 0x7d31c47ea98f8248
|
|
1X_1X_WEIGHT-NEXT: Counters: 60
|
|
1X_1X_WEIGHT-NEXT: Function count: 2
|
|
1X_1X_WEIGHT-NEXT: Functions shown: 4
|
|
1X_1X_WEIGHT-NEXT: Total functions: 4
|
|
1X_1X_WEIGHT-NEXT: Maximum function count: 866988873
|
|
1X_1X_WEIGHT-NEXT: Maximum internal block count: 267914296
|
|
|
|
2- Merge the foo and bar profiles with weight 3x and 5x respectively and verify the combined output
|
|
RUN: llvm-profdata merge -instr -weighted-input=3,%p/Inputs/weight-instr-bar.profdata -weighted-input=5,%p/Inputs/weight-instr-foo.profdata -o %t
|
|
RUN: llvm-profdata show -instr -all-functions %t | FileCheck %s -check-prefix=3X_5X_WEIGHT
|
|
3X_5X_WEIGHT: Counters:
|
|
3X_5X_WEIGHT-NEXT: usage:
|
|
3X_5X_WEIGHT-NEXT: Hash: 0x0000000000000000
|
|
3X_5X_WEIGHT-NEXT: Counters: 1
|
|
3X_5X_WEIGHT-NEXT: Function count: 0
|
|
3X_5X_WEIGHT-NEXT: foo:
|
|
3X_5X_WEIGHT-NEXT: Hash: 0x000000000000028a
|
|
3X_5X_WEIGHT-NEXT: Counters: 3
|
|
3X_5X_WEIGHT-NEXT: Function count: 4334944365
|
|
3X_5X_WEIGHT-NEXT: bar:
|
|
3X_5X_WEIGHT-NEXT: Hash: 0x000000000000028a
|
|
3X_5X_WEIGHT-NEXT: Counters: 3
|
|
3X_5X_WEIGHT-NEXT: Function count: 2600966619
|
|
3X_5X_WEIGHT-NEXT: main:
|
|
3X_5X_WEIGHT-NEXT: Hash: 0x7d31c47ea98f8248
|
|
3X_5X_WEIGHT-NEXT: Counters: 60
|
|
3X_5X_WEIGHT-NEXT: Function count: 8
|
|
3X_5X_WEIGHT-NEXT: Functions shown: 4
|
|
3X_5X_WEIGHT-NEXT: Total functions: 4
|
|
3X_5X_WEIGHT-NEXT: Maximum function count: 4334944365
|
|
3X_5X_WEIGHT-NEXT: Maximum internal block count: 1339571480
|
|
|
|
3- Bad merge: invalid weight
|
|
RUN: not llvm-profdata merge -instr -weighted-input=3,%p/Inputs/weight-instr-bar.profdata -weighted-input=0,%p/Inputs/weight-instr-foo.profdata -o %t.out 2>&1 | FileCheck %s -check-prefix=INVALID_WEIGHT
|
|
RUN: not llvm-profdata merge -instr -weighted-input=3,%p/Inputs/weight-instr-bar.profdata -weighted-input=0.75,%p/Inputs/weight-instr-foo.profdata -o %t.out 2>&1 | FileCheck %s -check-prefix=INVALID_WEIGHT
|
|
RUN: not llvm-profdata merge -instr -weighted-input=3,%p/Inputs/weight-instr-bar.profdata -weighted-input=-5,%p/Inputs/weight-instr-foo.profdata -o %t.out 2>&1 | FileCheck %s -check-prefix=INVALID_WEIGHT
|
|
RUN: not llvm-profdata merge -instr -weighted-input=3,%p/Inputs/weight-instr-bar.profdata -weighted-input=,%p/Inputs/weight-instr-foo.profdata -o %t.out 2>&1 | FileCheck %s -check-prefix=INVALID_WEIGHT
|
|
RUN: not llvm-profdata merge -instr -weighted-input=3,%p/Inputs/weight-instr-bar.profdata -weighted-input=%p/Inputs/weight-instr-foo.profdata -o %t.out 2>&1 | FileCheck %s -check-prefix=INVALID_WEIGHT
|
|
INVALID_WEIGHT: error: Input weight must be a positive integer.
|
|
|
|
4- Bad merge: input path does not exist
|
|
RUN: not llvm-profdata merge -instr -weighted-input=3,%p/Inputs/does-not-exist.profdata -weighted-input=2,%p/Inputs/does-not-exist-either.profdata -o %t.out 2>&1 | FileCheck %s -check-prefix=INVALID_INPUT
|
|
INVALID_INPUT: {{.*}}: {{.*}}does-not-exist.profdata: {{[Nn]}}o such file or directory
|
|
|
|
5- No inputs
|
|
RUN: not llvm-profdata merge -instr -o %t.out 2>&1 | FileCheck %s -check-prefix=NO_INPUT
|
|
NO_INPUT: {{.*}}: No input files specified. See llvm-profdata{{(\.EXE|\.exe)?}} merge -help
|