xref: /llvm-project/offload/test/offloading/pgo1.c (revision 8d1d67ec4dc957ce15a06f782c6746281e66e559)
1 // RUN: %libomptarget-compile-generic -fprofile-instr-generate \
2 // RUN:     -Xclang "-fprofile-instrument=clang"
3 // RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic \
4 // RUN:     --check-prefix="CLANG-PGO"
5 // RUN: %libomptarget-compile-generic -fprofile-generate \
6 // RUN:     -Xclang "-fprofile-instrument=llvm"
7 // RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic \
8 // RUN:     --check-prefix="LLVM-PGO"
9 
10 // REQUIRES: gpu
11 // REQUIRES: pgo
12 
13 #ifdef _OPENMP
14 #include <omp.h>
15 #endif
16 
17 int test1(int a) { return a / 2; }
18 int test2(int a) { return a * 2; }
19 
20 int main() {
21   int m = 2;
22 #pragma omp target
23   for (int i = 0; i < 10; i++) {
24     m = test1(m);
25     for (int j = 0; j < 2; j++) {
26       m = test2(m);
27     }
28   }
29 }
30 
31 // CLANG-PGO: ======== Counters =========
32 // CLANG-PGO-NEXT: [ 0 11 20 ]
33 // CLANG-PGO-NEXT: [ 10 ]
34 // CLANG-PGO-NEXT: [ 20 ]
35 // CLANG-PGO-NEXT: ========== Data ===========
36 // CLANG-PGO-NEXT: { {{[0-9]*}} {{[0-9]*}}
37 // CLANG-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
38 // CLANG-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
39 // CLANG-PGO-SAME: {{[0-9]*}} {{.*}} {{[0-9]*}} }
40 // CLANG-PGO-NEXT: { {{[0-9]*}} {{[0-9]*}}
41 // CLANG-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
42 // CLANG-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
43 // CLANG-PGO-SAME: {{[0-9]*}} {{.*}} {{[0-9]*}} }
44 // CLANG-PGO-NEXT: { {{[0-9]*}} {{[0-9]*}}
45 // CLANG-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
46 // CLANG-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
47 // CLANG-PGO-SAME: {{[0-9]*}} {{.*}} {{[0-9]*}} }
48 // CLANG-PGO-NEXT: ======== Functions ========
49 // CLANG-PGO-NEXT: pgo1.c:
50 // CLANG-PGO-SAME: __omp_offloading_{{[_0-9a-zA-Z]*}}_main_{{[_0-9a-zA-Z]*}}
51 // CLANG-PGO-NEXT: test1
52 // CLANG-PGO-NEXT: test2
53 
54 // LLVM-PGO: ======== Counters =========
55 // LLVM-PGO-NEXT: [ 20 10 2 1 ]
56 // LLVM-PGO-NEXT: [ 10 ]
57 // LLVM-PGO-NEXT: [ 20 ]
58 // LLVM-PGO-NEXT: ========== Data ===========
59 // LLVM-PGO-NEXT: { {{[0-9]*}} {{[0-9]*}}
60 // LLVM-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
61 // LLVM-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
62 // LLVM-PGO-SAME: {{[0-9]*}} {{.*}} {{[0-9]*}} }
63 // LLVM-PGO-NEXT: { {{[0-9]*}} {{[0-9]*}}
64 // LLVM-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
65 // LLVM-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
66 // LLVM-PGO-SAME: {{[0-9]*}} {{.*}} {{[0-9]*}} }
67 // LLVM-PGO-NEXT: { {{[0-9]*}} {{[0-9]*}}
68 // LLVM-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
69 // LLVM-PGO-SAME: {{0x[0-9a-fA-F]*}} {{0x[0-9a-fA-F]*}}
70 // LLVM-PGO-SAME: {{[0-9]*}} {{.*}} {{[0-9]*}} }
71 // LLVM-PGO-NEXT: ======== Functions ========
72 // LLVM-PGO-NEXT: __omp_offloading_{{[_0-9a-zA-Z]*}}_main_{{[_0-9a-zA-Z]*}}
73 // LLVM-PGO-NEXT: test1
74 // LLVM-PGO-NEXT: test2
75