[memprof] Correct max size and access count computations

The existing code resulted in the max size and access counts being equal
to the min. Compute the max instead (max lifetime was already correct).

Differential Revision: https://reviews.llvm.org/D132515
This commit is contained in:
Teresa Johnson 2022-08-23 15:59:05 -07:00
parent aac73a31ad
commit d10c1b88f0
3 changed files with 39 additions and 4 deletions

View File

@ -137,11 +137,11 @@ void Merge(const MemInfoBlock &newMIB) {
TotalAccessCount += newMIB.TotalAccessCount;
MinAccessCount = newMIB.MinAccessCount < MinAccessCount ? newMIB.MinAccessCount : MinAccessCount;
MaxAccessCount = newMIB.MaxAccessCount < MaxAccessCount ? newMIB.MaxAccessCount : MaxAccessCount;
MaxAccessCount = newMIB.MaxAccessCount > MaxAccessCount ? newMIB.MaxAccessCount : MaxAccessCount;
TotalSize += newMIB.TotalSize;
MinSize = newMIB.MinSize < MinSize ? newMIB.MinSize : MinSize;
MaxSize = newMIB.MaxSize < MaxSize ? newMIB.MaxSize : MaxSize;
MaxSize = newMIB.MaxSize > MaxSize ? newMIB.MaxSize : MaxSize;
TotalLifetime += newMIB.TotalLifetime;
MinLifetime = newMIB.MinLifetime < MinLifetime ? newMIB.MinLifetime : MinLifetime;

View File

@ -0,0 +1,35 @@
// Check that merging of MIB info (min/max size and access counts specifically)
// is done correctly.
// RUN: %clangxx_memprof -O0 %s -o %t
// RUN: %env_memprof_opts=print_text=true:log_path=stderr %run %t 2>&1 | FileCheck %s
// This is actually:
// Memory allocation stack id = STACKID
// alloc_count 2, size (ave/min/max) 60.00 / 40 / 80
// but we need to look for them in the same CHECK to get the correct STACKID.
// CHECK: Memory allocation stack id = [[STACKID:[0-9]+]]{{[[:space:]].*}}alloc_count 2, size (ave/min/max) 60.00 / 40 / 80
// CHECK-NEXT: access_count (ave/min/max): 30.00 / 20 / 40
// Unfortunately there is not a reliable way to check the ave/min/max lifetime.
// CHECK-NEXT: lifetime (ave/min/max):
// CHECK-NEXT: num migrated: {{[0-1]}}, num lifetime overlaps: 0, num same alloc cpu: 1, num same dealloc_cpu: 1
// CHECK: Stack for id [[STACKID]]:
// CHECK-NEXT: #0 {{.*}} in operator new
// CHECK-NEXT: #1 {{.*}} in main {{.*}}:[[@LINE+7]]
#include <stdio.h>
#include <stdlib.h>
int main() {
for (int j = 1; j < 3; j++) {
int *p = new int[10 * j];
for (int i = 0; i < 10 * j; i++)
p[i] = i;
int a = 0;
for (int i = 0; i < 10 * j; i++)
a += p[i];
delete[] p;
}
return 0;
}

View File

@ -137,11 +137,11 @@ void Merge(const MemInfoBlock &newMIB) {
TotalAccessCount += newMIB.TotalAccessCount;
MinAccessCount = newMIB.MinAccessCount < MinAccessCount ? newMIB.MinAccessCount : MinAccessCount;
MaxAccessCount = newMIB.MaxAccessCount < MaxAccessCount ? newMIB.MaxAccessCount : MaxAccessCount;
MaxAccessCount = newMIB.MaxAccessCount > MaxAccessCount ? newMIB.MaxAccessCount : MaxAccessCount;
TotalSize += newMIB.TotalSize;
MinSize = newMIB.MinSize < MinSize ? newMIB.MinSize : MinSize;
MaxSize = newMIB.MaxSize < MaxSize ? newMIB.MaxSize : MaxSize;
MaxSize = newMIB.MaxSize > MaxSize ? newMIB.MaxSize : MaxSize;
TotalLifetime += newMIB.TotalLifetime;
MinLifetime = newMIB.MinLifetime < MinLifetime ? newMIB.MinLifetime : MinLifetime;