diff --git a/llvm/test/tools/llvm-profgen/inline-noprobe.test b/llvm/test/tools/llvm-profgen/inline-noprobe.test --- a/llvm/test/tools/llvm-profgen/inline-noprobe.test +++ b/llvm/test/tools/llvm-profgen/inline-noprobe.test @@ -8,9 +8,6 @@ ; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK-UPDATE-TOTAL-SAMPLE ; RUN: llvm-profgen --format=text --use-dwarf-correlation --perfscript=%S/Inputs/inline-noprobe.perfscript --binary=%S/Inputs/inline-noprobe.perfbin --output=%t ; RUN: FileCheck %s --input-file %t --check-prefix=CHECK -; RUN: echo -e "0\n0" > %t -; RUN: llvm-profgen --format=text --unsymbolized-profile=%t --binary=%S/Inputs/inline-noprobe.perfbin --output=%t1 --fill-zero-for-all-funcs -; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK-ALL-ZERO ; RUN: llvm-profgen --format=text --unsymbolized-profile=%S/Inputs/out-of-bounds.raw.prof --binary=%S/Inputs/inline-noprobe.perfbin --output=%t1 ; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK-OB @@ -44,33 +41,6 @@ CHECK-UPDATE-TOTAL-SAMPLE: 3.2: bar:21 CHECK-UPDATE-TOTAL-SAMPLE: 1: 21 -CHECK-ALL-ZERO: bar:0:0 -CHECK-ALL-ZERO: 1: 0 -CHECK-ALL-ZERO: 5: 0 -CHECK-ALL-ZERO: foo:0:0 -CHECK-ALL-ZERO: 0: 0 -CHECK-ALL-ZERO: 2.1: 0 -CHECK-ALL-ZERO: 3: 0 -CHECK-ALL-ZERO: 3.2: 0 -CHECK-ALL-ZERO: 4: 0 -CHECK-ALL-ZERO: 3.1: bar:0 -CHECK-ALL-ZERO: 1: 0 -CHECK-ALL-ZERO: 3.2: bar:0 -CHECK-ALL-ZERO: 1: 0 -CHECK-ALL-ZERO: 7: 0 -CHECK-ALL-ZERO: main:0:0 -CHECK-ALL-ZERO: 0: 0 -CHECK-ALL-ZERO: 2: 0 -CHECK-ALL-ZERO: 1: foo:0 -CHECK-ALL-ZERO: 2.1: 0 -CHECK-ALL-ZERO: 3: 0 -CHECK-ALL-ZERO: 3.2: 0 -CHECK-ALL-ZERO: 4: 0 -CHECK-ALL-ZERO: 3.1: bar:0 -CHECK-ALL-ZERO: 1: 0 -CHECK-ALL-ZERO: 3.2: bar:0 -CHECK-ALL-ZERO: 1: 0 - CHECK-RAW-PROFILE: 3 CHECK-RAW-PROFILE-NEXT: 650-691:21 CHECK-RAW-PROFILE-NEXT: 669-677:20 diff --git a/llvm/test/tools/llvm-profgen/zero-all-functions.test b/llvm/test/tools/llvm-profgen/zero-all-functions.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-profgen/zero-all-functions.test @@ -0,0 +1,62 @@ + +; RUN: echo -e "0\n0" > %t +; RUN: llvm-profgen --format=text --unsymbolized-profile=%t --binary=%S/Inputs/inline-noprobe.perfbin --output=%t1 --fill-zero-for-all-funcs +; RUN: FileCheck %s --input-file %t1 --check-prefix=CHECK-LINE +; RUN: llvm-profgen --format=text --unsymbolized-profile=%t --binary=%S/Inputs/inline-cs-pseudoprobe.perfbin --output=%t2 --fill-zero-for-all-funcs +; RUN: FileCheck %s --input-file %t2 --check-prefix=CHECK-PROBE + +CHECK-LINE: bar:0:0 +CHECK-LINE-NEXT: 1: 0 +CHECK-LINE-NEXT: 5: 0 +CHECK-LINE-NEXT: foo:0:0 +CHECK-LINE-NEXT: 0: 0 +CHECK-LINE-NEXT: 2.1: 0 +CHECK-LINE-NEXT: 3: 0 +CHECK-LINE-NEXT: 3.2: 0 +CHECK-LINE-NEXT: 4: 0 +CHECK-LINE-NEXT: 3.1: bar:0 +CHECK-LINE-NEXT: 1: 0 +CHECK-LINE-NEXT: 65533: 0 +CHECK-LINE-NEXT: 3.2: bar:0 +CHECK-LINE-NEXT: 1: 0 +CHECK-LINE-NEXT: 7: 0 +CHECK-LINE-NEXT: main:0:0 +CHECK-LINE-NEXT: 0: 0 +CHECK-LINE-NEXT: 2: 0 +CHECK-LINE-NEXT: 1: foo:0 +CHECK-LINE-NEXT: 2.1: 0 +CHECK-LINE-NEXT: 3: 0 +CHECK-LINE-NEXT: 3.2: 0 +CHECK-LINE-NEXT: 4: 0 +CHECK-LINE-NEXT: 65526: 0 +CHECK-LINE-NEXT: 3.1: bar:0 +CHECK-LINE-NEXT: 1: 0 +CHECK-LINE-NEXT: 65533: 0 +CHECK-LINE-NEXT: 3.2: bar:0 +CHECK-LINE-NEXT: 1: 0 + +CHECK-PROBE: bar:0:0 +CHECK-PROBE-NEXT: 0: 0 +CHECK-PROBE-NEXT: 1: 0 +CHECK-PROBE-NEXT: 5: 0 +CHECK-PROBE-NEXT:foo:0:0 +CHECK-PROBE-NEXT: 0: 0 +CHECK-PROBE-NEXT: 2: 0 +CHECK-PROBE-NEXT: 3: 0 +CHECK-PROBE-NEXT: 4: 0 +CHECK-PROBE-NEXT: 5: 0 +CHECK-PROBE-NEXT: 65526: 0 +CHECK-PROBE-NEXT: 3: bar:0 +CHECK-PROBE-NEXT: 1: 0 +CHECK-PROBE-NEXT: 65533: 0 +CHECK-PROBE-NEXT:main:0:0 +CHECK-PROBE-NEXT: 0: 0 +CHECK-PROBE-NEXT: 2: 0 +CHECK-PROBE-NEXT: 1: foo:0 +CHECK-PROBE-NEXT: 2: 0 +CHECK-PROBE-NEXT: 3: 0 +CHECK-PROBE-NEXT: 4: 0 +CHECK-PROBE-NEXT: 65526: 0 +CHECK-PROBE-NEXT: 3: bar:0 +CHECK-PROBE-NEXT: 1: 0 +CHECK-PROBE-NEXT: 65533: 0 diff --git a/llvm/tools/llvm-profgen/ProfileGenerator.cpp b/llvm/tools/llvm-profgen/ProfileGenerator.cpp --- a/llvm/tools/llvm-profgen/ProfileGenerator.cpp +++ b/llvm/tools/llvm-profgen/ProfileGenerator.cpp @@ -381,7 +381,7 @@ } void ProfileGenerator::generateProfile() { - if (Binary->usePseudoProbes()) { + if (Binary->usePseudoProbes() && !FillZeroForAllFuncs) { // TODO: Support probe based profile generation exitWithError("Probe based profile generation not supported for AutoFDO, " "consider dropping `--ignore-stack-samples` or adding `--use-dwarf-correlation`.");