Files
clang-p2996/compiler-rt/test/memprof/TestCases/test_memintrin.cpp
Teresa Johnson 0d8bdc1786 [MemProf] Record accesses for all words touched in mem intrinsic
Previously for mem* intrinsics we only incremented the access count for
the first word in the range. However, after thinking it through I think
it makes more sense to record an access for every word in the range.
This better matches the behavior of inlined memory intrinsics, and also
allows better analysis of utilization at a future date.

Differential Revision: https://reviews.llvm.org/D110799
2021-09-30 15:07:55 -07:00

49 lines
1.9 KiB
C++

// Check profile with calls to memory intrinsics.
// RUN: %clangxx_memprof -O0 %s -o %t && %env_memprof_opts=log_path=stderr %run %t 2>&1 | FileCheck %s
// This is actually:
// Memory allocation stack id = STACKIDP
// alloc_count 1, size (ave/min/max) 40.00 / 40 / 40
// access_count (ave/min/max): 11.00 / 11 / 11
// but we need to look for them in the same CHECK to get the correct STACKIDP.
// CHECK-DAG: Memory allocation stack id = [[STACKIDP:[0-9]+]]{{[[:space:]].*}} alloc_count 1, size (ave/min/max) 40.00 / 40 / 40{{[[:space:]].*}} access_count (ave/min/max): 11.00 / 11 / 11
//
// This is actually:
// Memory allocation stack id = STACKIDQ
// alloc_count 1, size (ave/min/max) 20.00 / 20 / 20
// access_count (ave/min/max): 6.00 / 6 / 6
// but we need to look for them in the same CHECK to get the correct STACKIDQ.
// CHECK-DAG: Memory allocation stack id = [[STACKIDQ:[0-9]+]]{{[[:space:]].*}} alloc_count 1, size (ave/min/max) 20.00 / 20 / 20{{[[:space:]].*}} access_count (ave/min/max): 6.00 / 6 / 6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// This is actually:
// Stack for id STACKIDP:
// #0 {{.*}} in operator new
// #1 {{.*}} in main {{.*}}:@LINE+1
// but we need to look for them in the same CHECK-DAG.
// CHECK-DAG: Stack for id [[STACKIDP]]:{{[[:space:]].*}} #0 {{.*}} in operator new{{.*[[:space:]].*}} #1 {{.*}} in main {{.*}}:[[@LINE+1]]
int *p = new int[10];
// This is actually:
// Stack for id STACKIDQ:
// #0 {{.*}} in operator new
// #1 {{.*}} in main {{.*}}:@LINE+1
// but we need to look for them in the same CHECK-DAG.
// CHECK-DAG: Stack for id [[STACKIDQ]]:{{[[:space:]].*}} #0 {{.*}} in operator new{{.*[[:space:]].*}} #1 {{.*}} in main {{.*}}:[[@LINE+1]]
int *q = new int[5];
memset(p, 1, 10 * sizeof(int));
memcpy(q, p, 5 * sizeof(int));
int x = memcmp(p, q, 5 * sizeof(int));
delete[] p;
delete[] q;
return x;
}