summaryrefslogtreecommitdiff
path: root/test/profile/instrprof-value-prof-2.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/profile/instrprof-value-prof-2.c')
-rw-r--r--test/profile/instrprof-value-prof-2.c173
1 files changed, 94 insertions, 79 deletions
diff --git a/test/profile/instrprof-value-prof-2.c b/test/profile/instrprof-value-prof-2.c
index 989353e1f53e..a5939fe5c53c 100644
--- a/test/profile/instrprof-value-prof-2.c
+++ b/test/profile/instrprof-value-prof-2.c
@@ -1,7 +1,13 @@
// RUN: %clang_profgen -O2 -o %t %s
// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
// RUN: llvm-profdata merge -o %t.profdata %t.profraw
-// RUN: llvm-profdata show --all-functions -ic-targets %t.profdata | FileCheck %s
+// RUN: llvm-profdata show --all-functions -ic-targets %t.profdata > %t.out
+// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-1 < %t.out
+// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-2 < %t.out
+// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-3 < %t.out
+// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-4 < %t.out
+// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-5 < %t.out
+// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-6 < %t.out
#include <stdint.h>
#include <stdio.h>
@@ -27,10 +33,19 @@ void caller_with_value_site_never_called2() {}
void caller_without_value_site2() {}
void caller_with_vp2() {}
+void (*callee1Ptr)();
+void (*callee2Ptr)();
+
+void __attribute__ ((noinline)) setFunctionPointers () {
+ callee1Ptr = callee1;
+ callee2Ptr = callee2;
+}
+
int main(int argc, const char *argv[]) {
unsigned S, NS = 10, V;
const __llvm_profile_data *Data, *DataEnd;
+ setFunctionPointers();
Data = __llvm_profile_begin_data();
DataEnd = __llvm_profile_end_data();
for (; Data < DataEnd; Data = __llvm_profile_iterate_data(Data)) {
@@ -49,87 +64,87 @@ int main(int argc, const char *argv[]) {
for (S = 0; S < NS; S++) {
unsigned C;
for (C = 0; C < S + 1; C++) {
- __llvm_profile_instrument_target((uint64_t)&callee1, (void *)Data, S);
+ __llvm_profile_instrument_target((uint64_t)callee1Ptr, (void *)Data, S);
if (C % 2 == 0)
- __llvm_profile_instrument_target((uint64_t)&callee2, (void *)Data, S);
+ __llvm_profile_instrument_target((uint64_t)callee2Ptr, (void *)Data, S);
}
}
}
}
-// CHECK-LABEL: caller_with_value_site_never_called2:
-// CHECK-NEXT: Hash: 0x0000000000000000
-// CHECK-NEXT: Counters:
-// CHECK-NEXT: Function count
-// CHECK-NEXT: Indirect Call Site Count: 10
-// CHECK-NEXT: Indirect Target Results:
-// CHECK-LABEL: caller_with_vp2:
-// CHECK-NEXT: Hash: 0x0000000000000000
-// CHECK-NEXT: Counters:
-// CHECK-NEXT: Function count:
-// CHECK-NEXT: Indirect Call Site Count: 10
-// CHECK-NEXT: Indirect Target Results:
-// CHECK-NEXT: [ 0, callee1, 1 ]
-// CHECK-NEXT: [ 0, callee2, 1 ]
-// CHECK-NEXT: [ 1, callee1, 2 ]
-// CHECK-NEXT: [ 1, callee2, 1 ]
-// CHECK-NEXT: [ 2, callee1, 3 ]
-// CHECK-NEXT: [ 2, callee2, 2 ]
-// CHECK-NEXT: [ 3, callee1, 4 ]
-// CHECK-NEXT: [ 3, callee2, 2 ]
-// CHECK-NEXT: [ 4, callee1, 5 ]
-// CHECK-NEXT: [ 4, callee2, 3 ]
-// CHECK-NEXT: [ 5, callee1, 6 ]
-// CHECK-NEXT: [ 5, callee2, 3 ]
-// CHECK-NEXT: [ 6, callee1, 7 ]
-// CHECK-NEXT: [ 6, callee2, 4 ]
-// CHECK-NEXT: [ 7, callee1, 8 ]
-// CHECK-NEXT: [ 7, callee2, 4 ]
-// CHECK-NEXT: [ 8, callee1, 9 ]
-// CHECK-NEXT: [ 8, callee2, 5 ]
-// CHECK-NEXT: [ 9, callee1, 10 ]
-// CHECK-NEXT: [ 9, callee2, 5 ]
-// CHECK-LABEL: caller_with_vp1:
-// CHECK-NEXT: Hash: 0x0000000000000000
-// CHECK-NEXT: Counters:
-// CHECK-NEXT: Function count
-// CHECK-NEXT: Indirect Call Site Count: 10
-// CHECK-NEXT: Indirect Target Results:
-// CHECK-NEXT: [ 0, callee1, 1 ]
-// CHECK-NEXT: [ 0, callee2, 1 ]
-// CHECK-NEXT: [ 1, callee1, 2 ]
-// CHECK-NEXT: [ 1, callee2, 1 ]
-// CHECK-NEXT: [ 2, callee1, 3 ]
-// CHECK-NEXT: [ 2, callee2, 2 ]
-// CHECK-NEXT: [ 3, callee1, 4 ]
-// CHECK-NEXT: [ 3, callee2, 2 ]
-// CHECK-NEXT: [ 4, callee1, 5 ]
-// CHECK-NEXT: [ 4, callee2, 3 ]
-// CHECK-NEXT: [ 5, callee1, 6 ]
-// CHECK-NEXT: [ 5, callee2, 3 ]
-// CHECK-NEXT: [ 6, callee1, 7 ]
-// CHECK-NEXT: [ 6, callee2, 4 ]
-// CHECK-NEXT: [ 7, callee1, 8 ]
-// CHECK-NEXT: [ 7, callee2, 4 ]
-// CHECK-NEXT: [ 8, callee1, 9 ]
-// CHECK-NEXT: [ 8, callee2, 5 ]
-// CHECK-NEXT: [ 9, callee1, 10 ]
-// CHECK-NEXT: [ 9, callee2, 5 ]
-// CHECK-LABEL: caller_with_value_site_never_called1:
-// CHECK-NEXT: Hash: 0x0000000000000000
-// CHECK-NEXT: Counters:
-// CHECK-NEXT: Function count:
-// CHECK-NEXT: Indirect Call Site Count: 10
-// CHECK-NEXT: Indirect Target Results:
-// CHECK-LABEL: caller_without_value_site2:
-// CHECK-NEXT: Hash: 0x0000000000000000
-// CHECK-NEXT: Counters:
-// CHECK-NEXT: Function count:
-// CHECK-NEXT: Indirect Call Site Count: 0
-// CHECK-NEXT: Indirect Target Results:
-// CHECK-LABEL: caller_without_value_site1:
-// CHECK-NEXT: Hash: 0x0000000000000000
-// CHECK-NEXT: Counters:
-// CHECK-NEXT: Function count:
-// CHECK-NEXT: Indirect Call Site Count: 0
-// CHECK-NEXT: Indirect Target Results:
+// CHECK-1-LABEL: caller_with_value_site_never_called2:
+// CHECK-1-NEXT: Hash: 0x0000000000000000
+// CHECK-1-NEXT: Counters:
+// CHECK-1-NEXT: Function count
+// CHECK-1-NEXT: Indirect Call Site Count: 10
+// CHECK-1-NEXT: Indirect Target Results:
+// CHECK-2-LABEL: caller_with_vp2:
+// CHECK-2-NEXT: Hash: 0x0000000000000000
+// CHECK-2-NEXT: Counters:
+// CHECK-2-NEXT: Function count:
+// CHECK-2-NEXT: Indirect Call Site Count: 10
+// CHECK-2-NEXT: Indirect Target Results:
+// CHECK-2-NEXT: [ 0, callee1, 1 ]
+// CHECK-2-NEXT: [ 0, callee2, 1 ]
+// CHECK-2-NEXT: [ 1, callee1, 2 ]
+// CHECK-2-NEXT: [ 1, callee2, 1 ]
+// CHECK-2-NEXT: [ 2, callee1, 3 ]
+// CHECK-2-NEXT: [ 2, callee2, 2 ]
+// CHECK-2-NEXT: [ 3, callee1, 4 ]
+// CHECK-2-NEXT: [ 3, callee2, 2 ]
+// CHECK-2-NEXT: [ 4, callee1, 5 ]
+// CHECK-2-NEXT: [ 4, callee2, 3 ]
+// CHECK-2-NEXT: [ 5, callee1, 6 ]
+// CHECK-2-NEXT: [ 5, callee2, 3 ]
+// CHECK-2-NEXT: [ 6, callee1, 7 ]
+// CHECK-2-NEXT: [ 6, callee2, 4 ]
+// CHECK-2-NEXT: [ 7, callee1, 8 ]
+// CHECK-2-NEXT: [ 7, callee2, 4 ]
+// CHECK-2-NEXT: [ 8, callee1, 9 ]
+// CHECK-2-NEXT: [ 8, callee2, 5 ]
+// CHECK-2-NEXT: [ 9, callee1, 10 ]
+// CHECK-2-NEXT: [ 9, callee2, 5 ]
+// CHECK-3-LABEL: caller_with_vp1:
+// CHECK-3-NEXT: Hash: 0x0000000000000000
+// CHECK-3-NEXT: Counters:
+// CHECK-3-NEXT: Function count
+// CHECK-3-NEXT: Indirect Call Site Count: 10
+// CHECK-3-NEXT: Indirect Target Results:
+// CHECK-3-NEXT: [ 0, callee1, 1 ]
+// CHECK-3-NEXT: [ 0, callee2, 1 ]
+// CHECK-3-NEXT: [ 1, callee1, 2 ]
+// CHECK-3-NEXT: [ 1, callee2, 1 ]
+// CHECK-3-NEXT: [ 2, callee1, 3 ]
+// CHECK-3-NEXT: [ 2, callee2, 2 ]
+// CHECK-3-NEXT: [ 3, callee1, 4 ]
+// CHECK-3-NEXT: [ 3, callee2, 2 ]
+// CHECK-3-NEXT: [ 4, callee1, 5 ]
+// CHECK-3-NEXT: [ 4, callee2, 3 ]
+// CHECK-3-NEXT: [ 5, callee1, 6 ]
+// CHECK-3-NEXT: [ 5, callee2, 3 ]
+// CHECK-3-NEXT: [ 6, callee1, 7 ]
+// CHECK-3-NEXT: [ 6, callee2, 4 ]
+// CHECK-3-NEXT: [ 7, callee1, 8 ]
+// CHECK-3-NEXT: [ 7, callee2, 4 ]
+// CHECK-3-NEXT: [ 8, callee1, 9 ]
+// CHECK-3-NEXT: [ 8, callee2, 5 ]
+// CHECK-3-NEXT: [ 9, callee1, 10 ]
+// CHECK-3-NEXT: [ 9, callee2, 5 ]
+// CHECK-4-LABEL: caller_with_value_site_never_called1:
+// CHECK-4-NEXT: Hash: 0x0000000000000000
+// CHECK-4-NEXT: Counters:
+// CHECK-4-NEXT: Function count:
+// CHECK-4-NEXT: Indirect Call Site Count: 10
+// CHECK-4-NEXT: Indirect Target Results:
+// CHECK-5-LABEL: caller_without_value_site2:
+// CHECK-5-NEXT: Hash: 0x0000000000000000
+// CHECK-5-NEXT: Counters:
+// CHECK-5-NEXT: Function count:
+// CHECK-5-NEXT: Indirect Call Site Count: 0
+// CHECK-5-NEXT: Indirect Target Results:
+// CHECK-6-LABEL: caller_without_value_site1:
+// CHECK-6-NEXT: Hash: 0x0000000000000000
+// CHECK-6-NEXT: Counters:
+// CHECK-6-NEXT: Function count:
+// CHECK-6-NEXT: Indirect Call Site Count: 0
+// CHECK-6-NEXT: Indirect Target Results: