REQUIRES: x86_64-linux The input memprof and instrumented raw profiles were generated from the following source code: ``` #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { char *x = (char *)malloc(10); memset(x, 0, 10); free(x); x = (char *)malloc(10); memset(x, 0, 10); free(x); return 0; } ``` Steps to collect the memprof raw profile and the instrprof raw profile: ``` # Collect instrprof profile with name compression disabled since some buildbots # do not have zlib. clang -mllvm -enable-name-compression=false -fprofile-generate source.c -o instr.out ./instr.out mv *.profraw basic.profraw # Collect memprof profile. clang -fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling \ -fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer \ -fno-optimize-sibling-calls -m64 -Wl,-build-id -no-pie \ source.c -o basic.memprofexe env MEMPROF_OPTIONS=log_path=stdout ./basic.memprofexe > basic.memprofraw ``` RUN: llvm-profdata merge %p/Inputs/basic.profraw %p/Inputs/basic.memprofraw --profiled-binary %p/Inputs/basic.memprofexe -o %t.prof RUN: llvm-profdata show %t.prof | FileCheck %s For now we only check the validity of the instrumented profile since we don't have a way to display the contents of the memprof indexed format yet. CHECK: Instrumentation level: IR entry_first = 0 CHECK: Total functions: 1 CHECK: Maximum function count: 1 CHECK: Maximum internal block count: 0