| // Test end-to-end optimization pipeline with PGHO, that it does not interfere |
| // with other allocation instrumentation features. |
| // |
| // RUN: split-file %s %t |
| // RUN: llvm-profdata merge %t/memprof.yaml -o %t/use.profdata |
| // RUN: %clang_cc1 -O2 -debug-info-kind=limited -fmemory-profile-use=%t/use.profdata -mllvm -optimize-hot-cold-new \ |
| // RUN: %t/src.cpp -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,DEFAULT |
| // RUN: %clang_cc1 -O2 -fsanitize=alloc-token -debug-info-kind=limited -fmemory-profile-use=%t/use.profdata -mllvm -optimize-hot-cold-new \ |
| // RUN: %t/src.cpp -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,ALLOCTOKEN |
| |
| //--- memprof.yaml |
| --- |
| HeapProfileRecords: |
| - GUID: 0x7f8d88fcc70a347b |
| AllocSites: |
| - Callstack: |
| - { Function: 0x7f8d88fcc70a347b, LineOffset: 1, Column: 10, IsInlineFrame: false } |
| - { Function: 0xdb956436e78dd5fa, LineOffset: 1, Column: 13, IsInlineFrame: false } |
| MemInfoBlock: |
| AllocCount: 1 |
| TotalAccessCount: 0 |
| MinAccessCount: 0 |
| MaxAccessCount: 0 |
| TotalSize: 10 |
| MinSize: 10 |
| MaxSize: 10 |
| AllocTimestamp: 100 |
| DeallocTimestamp: 100 |
| TotalLifetime: 100000 |
| MinLifetime: 100000 |
| MaxLifetime: 100000 |
| AllocCpuId: 0 |
| DeallocCpuId: 0 |
| NumMigratedCpu: 0 |
| NumLifetimeOverlaps: 0 |
| NumSameAllocCpu: 0 |
| NumSameDeallocCpu: 0 |
| DataTypeId: 0 |
| TotalAccessDensity: 0 |
| MinAccessDensity: 0 |
| MaxAccessDensity: 0 |
| TotalLifetimeAccessDensity: 0 |
| MinLifetimeAccessDensity: 0 |
| MaxLifetimeAccessDensity: 0 |
| AccessHistogramSize: 0 |
| AccessHistogram: 0 |
| ... |
| |
| //--- src.cpp |
| // CHECK-LABEL: define{{.*}} ptr @_Z3foov() |
| // DEFAULT: call {{.*}} ptr @_Znam12__hot_cold_t(i64 10, i8 -128) |
| // ALLOCTOKEN: call {{.*}} ptr @__alloc_token__Znam12__hot_cold_t(i64 10, i8 -128, i64 1538840549748785101){{.*}} !alloc_token |
| char *foo() { |
| return new char[10]; |
| } |
| |
| int main() { |
| char *a = foo(); |
| delete[] a; |
| return 0; |
| } |