| 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 |
| |
| |