|  | Some basic tests for supplementing instrumentation profile with sample profile. | 
|  |  | 
|  | Test all of goo's counters will be set to PseudoHot. | 
|  | RUN: llvm-profdata merge \ | 
|  | RUN:     -supplement-instr-with-sample=%p/Inputs/mix_sample.proftext \ | 
|  | RUN:     -suppl-min-size-threshold=0 %p/Inputs/mix_instr.proftext -o %t | 
|  | RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX1 | 
|  |  | 
|  | MIX1: foo: | 
|  | MIX1-NEXT: Hash: 0x0000000000000007 | 
|  | MIX1-NEXT: Counters: 5 | 
|  | MIX1-NEXT: Block counts: [12, 13, 0, 0, 0] | 
|  | MIX1: goo: | 
|  | MIX1-NEXT: Hash: 0x0000000000000005 | 
|  | MIX1-NEXT: Counters: 3 | 
|  | MIX1-NOT: Block counts: | 
|  | MIX1-SAME: <PseudoHot> | 
|  | MIX1: moo: | 
|  | MIX1-NEXT: Hash: 0x0000000000000009 | 
|  | MIX1-NEXT: Counters: 4 | 
|  | MIX1-NEXT: Block counts: [3000, 1000, 2000, 500] | 
|  |  | 
|  | Test when the zero counter ratio of foo is higher than zero-counter-threshold. | 
|  | RUN: llvm-profdata merge \ | 
|  | RUN:     -supplement-instr-with-sample=%p/Inputs/mix_sample.proftext \ | 
|  | RUN:     -suppl-min-size-threshold=0 -zero-counter-threshold=0.5 \ | 
|  | RUN:     -instr-prof-cold-threshold=30 %p/Inputs/mix_instr.proftext -o %t | 
|  | RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX2 | 
|  |  | 
|  | MIX2: foo: | 
|  | MIX2-NEXT: Hash: 0x0000000000000007 | 
|  | MIX2-NEXT: Counters: 5 | 
|  | MIX2-NOT: Block counts: | 
|  | MIX2-SAME: <PseudoHot> | 
|  | MIX2: goo: | 
|  | MIX2-NEXT: Hash: 0x0000000000000005 | 
|  | MIX2-NEXT: Counters: 3 | 
|  | MIX2-NOT: Block counts: | 
|  | MIX2-SAME: <PseudoHot> | 
|  | MIX2: moo: | 
|  | MIX2-NEXT: Hash: 0x0000000000000009 | 
|  | MIX2-NEXT: Counters: 4 | 
|  | MIX2-NEXT: Block counts: [3000, 1000, 2000, 500] | 
|  |  | 
|  | Test when the zero counter ratio of foo is lower than zero-counter-threshold. | 
|  | RUN: llvm-profdata merge \ | 
|  | RUN:     -supplement-instr-with-sample=%p/Inputs/mix_sample.proftext \ | 
|  | RUN:     -suppl-min-size-threshold=0 -zero-counter-threshold=0.7 \ | 
|  | RUN:     -instr-prof-cold-threshold=30 %p/Inputs/mix_instr.proftext -o %t | 
|  | RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX3 | 
|  |  | 
|  | MIX3: foo: | 
|  | MIX3-NEXT: Hash: 0x0000000000000007 | 
|  | MIX3-NEXT: Counters: 5 | 
|  | MIX3-NEXT: Block counts: [1384, 1500, 0, 0, 0] | 
|  | MIX3: goo: | 
|  | MIX3-NEXT: Hash: 0x0000000000000005 | 
|  | MIX3-NEXT: Counters: 3 | 
|  | MIX3-NOT: Block counts: | 
|  | MIX3-SAME: <PseudoHot> | 
|  | MIX3: moo: | 
|  | MIX3-NEXT: Hash: 0x0000000000000009 | 
|  | MIX3-NEXT: Counters: 4 | 
|  | MIX3-NEXT: Block counts: [3000, 1000, 2000, 500] | 
|  |  | 
|  | Test foo's profile won't be adjusted because its size is smaller | 
|  | than suppl-min-size-threshold. | 
|  | RUN: llvm-profdata merge \ | 
|  | RUN:     -supplement-instr-with-sample=%p/Inputs/mix_sample.proftext \ | 
|  | RUN:     -suppl-min-size-threshold=2 -zero-counter-threshold=0.7 \ | 
|  | RUN:     -instr-prof-cold-threshold=30 %p/Inputs/mix_instr_small.proftext -o %t | 
|  | RUN: llvm-profdata show %t -all-functions -counts | FileCheck %s --check-prefix=MIX4 | 
|  |  | 
|  | MIX4: foo: | 
|  | MIX4-NEXT: Hash: 0x0000000000000007 | 
|  | MIX4-NEXT: Counters: 1 | 
|  | MIX4-NEXT: Block counts: [0] | 
|  | MIX4: goo: | 
|  | MIX4-NEXT: Hash: 0x0000000000000005 | 
|  | MIX4-NEXT: Counters: 3 | 
|  | MIX4-NOT: Block counts: | 
|  | MIX4-SAME: <PseudoHot> | 
|  | MIX4: moo: | 
|  | MIX4-NEXT: Hash: 0x0000000000000009 | 
|  | MIX4-NEXT: Counters: 1 | 
|  | MIX4-NEXT: Block counts: [0] | 
|  |  | 
|  | Test profile summary won't be affected by pseudo counters. | 
|  | RUN: llvm-profdata merge \ | 
|  | RUN:     -supplement-instr-with-sample=%p/Inputs/mix_sample.proftext \ | 
|  | RUN:     -suppl-min-size-threshold=0 %p/Inputs/mix_instr.proftext -o %t | 
|  | RUN: llvm-profdata show %t -detailed-summary | FileCheck %s --check-prefix=MIX5 | 
|  |  | 
|  | MIX5: Instrumentation level: IR | 
|  | MIX5-NEXT: Total functions: 2 | 
|  | MIX5-NEXT: Maximum function count: 3000 | 
|  | MIX5-NEXT: Maximum internal block count: 2000 | 
|  | MIX5-NEXT: Total number of blocks: 9 | 
|  | MIX5-NEXT: Total count: 6525 | 
|  | MIX5-NEXT: Detailed summary: | 
|  | MIX5-NEXT: 1 blocks (11.11%) with count >= 3000 account for 1% of the total counts. | 
|  | MIX5-NEXT: 1 blocks (11.11%) with count >= 3000 account for 10% of the total counts. | 
|  | MIX5-NEXT: 1 blocks (11.11%) with count >= 3000 account for 20% of the total counts. | 
|  | MIX5-NEXT: 1 blocks (11.11%) with count >= 3000 account for 30% of the total counts. | 
|  | MIX5-NEXT: 1 blocks (11.11%) with count >= 3000 account for 40% of the total counts. | 
|  | MIX5-NEXT: 2 blocks (22.22%) with count >= 2000 account for 50% of the total counts. | 
|  | MIX5-NEXT: 2 blocks (22.22%) with count >= 2000 account for 60% of the total counts. | 
|  | MIX5-NEXT: 2 blocks (22.22%) with count >= 2000 account for 70% of the total counts. | 
|  | MIX5-NEXT: 3 blocks (33.33%) with count >= 1000 account for 80% of the total counts. | 
|  | MIX5-NEXT: 3 blocks (33.33%) with count >= 1000 account for 90% of the total counts. | 
|  | MIX5-NEXT: 4 blocks (44.44%) with count >= 500 account for 95% of the total counts. | 
|  | MIX5-NEXT: 4 blocks (44.44%) with count >= 500 account for 99% of the total counts. | 
|  | MIX5-NEXT: 6 blocks (66.67%) with count >= 12 account for 99.9% of the total counts. | 
|  | MIX5-NEXT: 6 blocks (66.67%) with count >= 12 account for 99.99% of the total counts. | 
|  | MIX5-NEXT: 6 blocks (66.67%) with count >= 12 account for 99.999% of the total counts. | 
|  | MIX5-NEXT: 6 blocks (66.67%) with count >= 12 account for 99.9999% of the total counts. |