[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:
parent
aac73a31ad
commit
d10c1b88f0
@ -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;
|
||||
|
35
compiler-rt/test/memprof/TestCases/test_merge_mib.cpp
Normal file
35
compiler-rt/test/memprof/TestCases/test_merge_mib.cpp
Normal 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;
|
||||
}
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user