Teresa Johnson b1926f308f Restore "[MemProf] Memprof profile matching and annotation"
This reverts commit 794b7ea960ccc3222f2af582efadbc5e5c464292, and
thus restores commit a212d8da94d08e229aa8d65283e4b116310bba10, and
follow on fixes 0cd6763fa93159b84d70a5bb602c24996acaafaa,
e9ff53d42feac7fc157718523275619a8106f2f3, and
37c6a25e9ab230e5e21fa34e246d9fec55275df0.

Use a hash function (BLAKE3) instead of hash_combine/hash_code which are
not guaranteed to be stable across executions.

Additionally, it adds a "REQUIRES: x86_64-linux" to the tests that have
raw profile inputs to avoid failures on big endian bots.

Reviewers: snehasish, davidxl

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D128142
2022-09-23 11:38:47 -07:00

39 lines
1.6 KiB
C++

// Test if memprof instrumentation and use pass are invoked.
//
// Instrumentation:
// Ensure Pass MemProfilerPass and ModuleMemProfilerPass are invoked.
// RUN: %clang_cc1 -O2 -fmemory-profile %s -fdebug-pass-manager -emit-llvm -o - 2>&1 | FileCheck %s -check-prefix=INSTRUMENT
// INSTRUMENT: Running pass: MemProfilerPass on main
// INSTRUMENT: Running pass: ModuleMemProfilerPass on [module]
// Avoid failures on big-endian systems that can't read the raw profile properly
// REQUIRES: x86_64-linux
// TODO: Use text profile inputs once that is available for memprof.
//
// The following commands were used to compile the source to instrumented
// executables and collect raw binary format profiles:
//
// # Collect memory profile:
// $ clang++ -fuse-ld=lld -no-pie -Wl,--no-rosegment -gmlt \
// -fdebug-info-for-profiling -mno-omit-leaf-frame-pointer \
// -fno-omit-frame-pointer -fno-optimize-sibling-calls -m64 -Wl,-build-id \
// memprof.cpp -o memprof.exe -fmemory-profile
// $ env MEMPROF_OPTIONS=log_path=stdout ./memprof.exe > memprof.memprofraw
//
// RUN: llvm-profdata merge %S/Inputs/memprof.memprofraw --profiled-binary %S/Inputs/memprof.exe -o %t.memprofdata
// Profile use:
// Ensure Pass PGOInstrumentationUse is invoked with the memprof-only profile.
// RUN: %clang_cc1 -O2 -fprofile-instrument-use-path=%t.memprofdata %s -fdebug-pass-manager -emit-llvm -o - 2>&1 | FileCheck %s -check-prefix=USE
// USE: Running pass: PGOInstrumentationUse on [module]
char *foo() {
return new char[10];
}
int main() {
char *a = foo();
delete[] a;
return 0;
}