[compiler-rt] d10c1b8 - [memprof] Correct max size and access count computations
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 23 16:54:24 PDT 2022
Author: Teresa Johnson
Date: 2022-08-23T16:53:46-07:00
New Revision: d10c1b88f0a010975576584d8d1d4ac6a7e2454b
URL: https://github.com/llvm/llvm-project/commit/d10c1b88f0a010975576584d8d1d4ac6a7e2454b
DIFF: https://github.com/llvm/llvm-project/commit/d10c1b88f0a010975576584d8d1d4ac6a7e2454b.diff
LOG: [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
Added:
compiler-rt/test/memprof/TestCases/test_merge_mib.cpp
Modified:
compiler-rt/include/profile/MemProfData.inc
llvm/include/llvm/ProfileData/MemProfData.inc
Removed:
################################################################################
diff --git a/compiler-rt/include/profile/MemProfData.inc b/compiler-rt/include/profile/MemProfData.inc
index 6433cef84865c..ca354ee332929 100644
--- a/compiler-rt/include/profile/MemProfData.inc
+++ b/compiler-rt/include/profile/MemProfData.inc
@@ -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;
diff --git a/compiler-rt/test/memprof/TestCases/test_merge_mib.cpp b/compiler-rt/test/memprof/TestCases/test_merge_mib.cpp
new file mode 100644
index 0000000000000..f9cdfc37fbd53
--- /dev/null
+++ b/compiler-rt/test/memprof/TestCases/test_merge_mib.cpp
@@ -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;
+}
diff --git a/llvm/include/llvm/ProfileData/MemProfData.inc b/llvm/include/llvm/ProfileData/MemProfData.inc
index 6433cef84865c..ca354ee332929 100644
--- a/llvm/include/llvm/ProfileData/MemProfData.inc
+++ b/llvm/include/llvm/ProfileData/MemProfData.inc
@@ -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;
More information about the llvm-commits
mailing list