summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorXinliang David Li <davidxl@google.com>2017-12-18 17:56:42 +0000
committerXinliang David Li <davidxl@google.com>2017-12-18 17:56:42 +0000
commit2fcf673c96acdee2699f8d6cad5c763534c8d82a (patch)
tree6d989aba984b754e6a621e8e76a2eb728121e332 /test
parentd97da5b44c1d8c1fa5c23b8f16dc630105517993 (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')
-rw-r--r--test/profile/Linux/counter_promo_for.c8
-rw-r--r--test/profile/infinite_loop.c4
-rw-r--r--test/profile/runtime_infinite.c36
3 files changed, 42 insertions, 6 deletions
diff --git a/test/profile/Linux/counter_promo_for.c b/test/profile/Linux/counter_promo_for.c
index 313964669..a331f00ad 100644
--- a/test/profile/Linux/counter_promo_for.c
+++ b/test/profile/Linux/counter_promo_for.c
@@ -19,18 +19,18 @@ __attribute__((noinline)) void bar(int i) { g += i; }
__attribute__((noinline)) void foo(int n, int N) {
// PROMO-LABEL: @foo
+// PROMO: load{{.*}}@__profc_foo{{.*}} 3){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 3){{.*}}
// PROMO: load{{.*}}@__profc_foo{{.*}} 0){{.*}}
// PROMO-NEXT: add
// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 0){{.*}}
// PROMO-NEXT: load{{.*}}@__profc_foo{{.*}} 1){{.*}}
// PROMO-NEXT: add
// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 1){{.*}}
-// PROMO-NEXT: load{{.*}}@__profc_foo{{.*}} 2){{.*}}
+// PROMO: load{{.*}}@__profc_foo{{.*}} 2){{.*}}
// PROMO-NEXT: add
// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 2){{.*}}
-// PROMO: load{{.*}}@__profc_foo{{.*}} 3){{.*}}
-// PROMO-NEXT: add
-// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 3){{.*}}
//
// NOPROMO-LABEL: @foo
// NOPROMO: load{{.*}}@__profc_foo{{.*}} 0){{.*}}
diff --git a/test/profile/infinite_loop.c b/test/profile/infinite_loop.c
index 883d7e6da..0e3981c71 100644
--- a/test/profile/infinite_loop.c
+++ b/test/profile/infinite_loop.c
@@ -23,8 +23,8 @@ int main()
// CHECK: Counters:
// CHECK-NEXT: main:
// CHECK-NEXT: Hash: {{.*}}
-// CHECK-NEXT: Counters: 1
-// CHECK-NEXT: Block counts: [1000]
+// CHECK-NEXT: Counters: 2
+// CHECK-NEXT: Block counts: [1000, 1]
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]