diff options
author | Xinliang David Li <davidxl@google.com> | 2017-12-18 17:56:42 +0000 |
---|---|---|
committer | Xinliang David Li <davidxl@google.com> | 2017-12-18 17:56:42 +0000 |
commit | 2fcf673c96acdee2699f8d6cad5c763534c8d82a (patch) | |
tree | 6d989aba984b754e6a621e8e76a2eb728121e332 /test/profile/runtime_infinite.c | |
parent | d97da5b44c1d8c1fa5c23b8f16dc630105517993 (diff) |
[PGO] Test case changes for D41059
Differential Revision: http://reviews.llvm.org/D41059
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@320999 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/profile/runtime_infinite.c')
-rw-r--r-- | test/profile/runtime_infinite.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test/profile/runtime_infinite.c b/test/profile/runtime_infinite.c new file mode 100644 index 000000000..b55f5e275 --- /dev/null +++ b/test/profile/runtime_infinite.c @@ -0,0 +1,36 @@ +// The waiting loop never exits via the normal +// path before the profile is dumped and the +// program is terminated. This tests checks +// that the entry of main is properly instrumented +// and has non-zero count. + +// RUN: %clang_pgogen -mllvm -do-counter-promotion=false -O2 -o %t %s +// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t +// RUN: llvm-profdata show -function main -counts %t.profraw| FileCheck %s +void exit(int); + +int __llvm_profile_dump(void); +void __llvm_profile_reset_counters(void); + +int g = 0; +__attribute__((noinline)) void doSth() { + g++; + + if (g > 10000) { + // dump profile and exit; + __llvm_profile_dump(); + exit(0); + } +} +int errorcode = 0; +int noerror() { return (errorcode == 0); } + +int main(int argc, const char *argv[]) { + // waiting_loop + while (noerror()) { + doSth(); + } +} + +// CHECK-LABEL: main +// CHECK: [10001, 1] |