From 2fcf673c96acdee2699f8d6cad5c763534c8d82a Mon Sep 17 00:00:00 2001 From: Xinliang David Li Date: Mon, 18 Dec 2017 17:56:42 +0000 Subject: [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 --- test/profile/runtime_infinite.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 test/profile/runtime_infinite.c (limited to 'test/profile/runtime_infinite.c') 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] -- cgit v1.2.3