xref: /llvm-project/compiler-rt/test/memprof/TestCases/test_new_load_store.cpp (revision 95acd9241c497228a528dbcb9045db73227c855c)
13d4bba30STeresa Johnson // Check profile with a single new call and set of loads and stores. Ensures
23d4bba30STeresa Johnson // we get the same profile regardless of whether the memory is deallocated
33d4bba30STeresa Johnson // before exit.
43d4bba30STeresa Johnson 
53d4bba30STeresa Johnson // RUN: %clangxx_memprof -O0 %s -o %t
6aacaebc6SSnehasish Kumar // RUN: %env_memprof_opts=print_text=true:log_path=stderr %run %t 2>&1 | FileCheck %s
73d4bba30STeresa Johnson 
83d4bba30STeresa Johnson // RUN: %clangxx_memprof -DFREE -O0 %s -o %t
9aacaebc6SSnehasish Kumar // RUN: %env_memprof_opts=print_text=true:log_path=stderr %run %t 2>&1 | FileCheck %s
103d4bba30STeresa Johnson 
113d4bba30STeresa Johnson // Try again with callbacks instead of inline sequences
123d4bba30STeresa Johnson // RUN: %clangxx_memprof -mllvm -memprof-use-callbacks -O0 %s -o %t
13aacaebc6SSnehasish Kumar // RUN: %env_memprof_opts=print_text=true:log_path=stderr %run %t 2>&1 | FileCheck %s
143d4bba30STeresa Johnson 
153d4bba30STeresa Johnson // This is actually:
163d4bba30STeresa Johnson //  Memory allocation stack id = STACKID
173d4bba30STeresa Johnson //   alloc_count 1, size (ave/min/max) 40.00 / 40 / 40
183d4bba30STeresa Johnson // but we need to look for them in the same CHECK to get the correct STACKID.
193d4bba30STeresa Johnson // CHECK:  Memory allocation stack id = [[STACKID:[0-9]+]]{{[[:space:]].*}}alloc_count 1, size (ave/min/max) 40.00 / 40 / 40
203d4bba30STeresa Johnson // CHECK-NEXT:  access_count (ave/min/max): 20.00 / 20 / 20
213d4bba30STeresa Johnson // CHECK-NEXT:  lifetime (ave/min/max): [[AVELIFETIME:[0-9]+]].00 / [[AVELIFETIME]] / [[AVELIFETIME]]
22d0473681STeresa Johnson // CHECK-NEXT:  num migrated: {{[0-1]}}, num lifetime overlaps: 0, num same alloc cpu: 0, num same dealloc_cpu: 0
233d4bba30STeresa Johnson // CHECK: Stack for id [[STACKID]]:
243d4bba30STeresa Johnson // CHECK-NEXT: #0 {{.*}} in operator new
253d4bba30STeresa Johnson // CHECK-NEXT: #1 {{.*}} in main {{.*}}:[[@LINE+6]]
263d4bba30STeresa Johnson 
273d4bba30STeresa Johnson #include <stdio.h>
283d4bba30STeresa Johnson #include <stdlib.h>
293d4bba30STeresa Johnson 
main()303d4bba30STeresa Johnson int main() {
313d4bba30STeresa Johnson   int *p = new int[10];
323d4bba30STeresa Johnson   for (int i = 0; i < 10; i++)
333d4bba30STeresa Johnson     p[i] = i;
343d4bba30STeresa Johnson   int j = 0;
353d4bba30STeresa Johnson   for (int i = 0; i < 10; i++)
363d4bba30STeresa Johnson     j += p[i];
373d4bba30STeresa Johnson #ifdef FREE
38*95acd924SXu Mingjie   delete[] p;
393d4bba30STeresa Johnson #endif
403d4bba30STeresa Johnson 
413d4bba30STeresa Johnson   return 0;
423d4bba30STeresa Johnson }
43