[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