[compiler-rt] 599b769 - [memprof] Refactor tests to generate binaries and profiles on the fly.

Snehasish Kumar via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 6 13:24:46 PST 2023


Author: Snehasish Kumar
Date: 2023-03-06T21:24:40Z
New Revision: 599b7690fa917ea4e9cd67275e34d0b5a0f51aa9

URL: https://github.com/llvm/llvm-project/commit/599b7690fa917ea4e9cd67275e34d0b5a0f51aa9
DIFF: https://github.com/llvm/llvm-project/commit/599b7690fa917ea4e9cd67275e34d0b5a0f51aa9.diff

LOG: [memprof] Refactor tests to generate binaries and profiles on the fly.

This change replaces the binary profiles and executables used for
testing the memprof profile reader with tests where the profiles are
generated on the fly. This reduces toil when the profile version
changes. The tests are moved from tools/llvm-profdata to
compiler-rt/test/memprof due to the following reasons:
1. Adding dependency on memprof lit.cfg.py for llvm-profdata is
   preferable to adding a dependency on compiler-rt for llvm/test.
2. All the tests can now be run with `ninja check-memprof`.

Reviewed By: tejohnson

Differential Revision: https://reviews.llvm.org/D145023

Added: 
    compiler-rt/test/memprof/TestCases/memprof_basic.c
    compiler-rt/test/memprof/TestCases/memprof_inline.c
    compiler-rt/test/memprof/TestCases/memprof_merge.c
    compiler-rt/test/memprof/TestCases/memprof_multi.c
    compiler-rt/test/memprof/TestCases/memprof_pic.c

Modified: 
    compiler-rt/test/memprof/CMakeLists.txt
    compiler-rt/test/memprof/lit.cfg.py

Removed: 
    llvm/test/tools/llvm-profdata/Inputs/basic.memprofexe
    llvm/test/tools/llvm-profdata/Inputs/basic.memprofraw
    llvm/test/tools/llvm-profdata/Inputs/inline.memprofexe
    llvm/test/tools/llvm-profdata/Inputs/inline.memprofraw
    llvm/test/tools/llvm-profdata/Inputs/memprof-inline.exe
    llvm/test/tools/llvm-profdata/Inputs/multi.memprofexe
    llvm/test/tools/llvm-profdata/Inputs/multi.memprofraw
    llvm/test/tools/llvm-profdata/Inputs/pic.memprofexe
    llvm/test/tools/llvm-profdata/Inputs/pic.memprofraw
    llvm/test/tools/llvm-profdata/memprof-basic.test
    llvm/test/tools/llvm-profdata/memprof-inline.test
    llvm/test/tools/llvm-profdata/memprof-merge.test
    llvm/test/tools/llvm-profdata/memprof-multi.test
    llvm/test/tools/llvm-profdata/memprof-pic.test


################################################################################
diff  --git a/compiler-rt/test/memprof/CMakeLists.txt b/compiler-rt/test/memprof/CMakeLists.txt
index 8a29919b17702..1549a33191bbf 100644
--- a/compiler-rt/test/memprof/CMakeLists.txt
+++ b/compiler-rt/test/memprof/CMakeLists.txt
@@ -13,6 +13,7 @@ endmacro()
 
 set(MEMPROF_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
 if(NOT COMPILER_RT_STANDALONE_BUILD)
+  list(APPEND MEMPROF_TEST_DEPS llvm-profdata)
   list(APPEND MEMPROF_TEST_DEPS memprof)
   if(COMPILER_RT_HAS_LLD AND TARGET lld)
     list(APPEND MEMPROF_TEST_DEPS lld)

diff  --git a/compiler-rt/test/memprof/TestCases/memprof_basic.c b/compiler-rt/test/memprof/TestCases/memprof_basic.c
new file mode 100644
index 0000000000000..660811bc1cedd
--- /dev/null
+++ b/compiler-rt/test/memprof/TestCases/memprof_basic.c
@@ -0,0 +1,106 @@
+// REQUIRES: x86_64-linux
+// RUN: %clang_memprof -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 %s -o %t.memprofexe
+// RUN: env MEMPROF_OPTIONS=log_path=stdout %t.memprofexe > %t.memprofraw
+// RUN: %llvm_profdata show --memory %t.memprofraw --profiled-binary %t.memprofexe -o - | FileCheck %s
+#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;
+}
+
+// COM: We expect 2 MIB entries, 1 each for the malloc calls in the program. Any
+// COM: additional allocations which do not originate from the main binary are pruned.
+
+// CHECK:  MemprofProfile:
+// CHECK-NEXT:   Summary:
+// CHECK-NEXT:     Version: 2
+// CHECK-NEXT:     NumSegments: {{[0-9]+}}
+// CHECK-NEXT:     NumMibInfo: 2
+// CHECK-NEXT:     NumAllocFunctions: 1
+// CHECK-NEXT:     NumStackOffsets: 2
+// CHECK-NEXT:   Segments:
+// CHECK-NEXT:   -
+// CHECK-NEXT:     BuildId: <None>
+// CHECK-NEXT:     Start: 0x{{[0-9]+}}
+// CHECK-NEXT:     End: 0x{{[0-9]+}}
+// CHECK-NEXT:     Offset: 0x{{[0-9]+}}
+// CHECK-NEXT:   -
+
+// CHECK:   Records:
+// CHECK-NEXT:   -
+// CHECK-NEXT:     FunctionGUID: {{[0-9]+}}
+// CHECK-NEXT:     AllocSites:
+// CHECK-NEXT:     -
+// CHECK-NEXT:       Callstack:
+// CHECK-NEXT:       -
+// CHECK-NEXT:         Function: {{[0-9]+}}
+// CHECK-NEXT:         SymbolName: main
+// CHECK-NEXT:         LineOffset: 1
+// CHECK-NEXT:         Column: 21
+// CHECK-NEXT:         Inline: 0
+// CHECK-NEXT:       MemInfoBlock:
+// CHECK-NEXT:         AllocCount: 1
+// CHECK-NEXT:         TotalAccessCount: 2
+// CHECK-NEXT:         MinAccessCount: 2
+// CHECK-NEXT:         MaxAccessCount: 2
+// CHECK-NEXT:         TotalSize: 10
+// CHECK-NEXT:         MinSize: 10
+// CHECK-NEXT:         MaxSize: 10
+// CHECK-NEXT:         AllocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:         DeallocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:         TotalLifetime: 0
+// CHECK-NEXT:         MinLifetime: 0
+// CHECK-NEXT:         MaxLifetime: 0
+// CHECK-NEXT:         AllocCpuId: {{[0-9]+}}
+// CHECK-NEXT:         DeallocCpuId: {{[0-9]+}}
+// CHECK-NEXT:         NumMigratedCpu: 0
+// CHECK-NEXT:         NumLifetimeOverlaps: 0
+// CHECK-NEXT:         NumSameAllocCpu: 0
+// CHECK-NEXT:         NumSameDeallocCpu: 0
+// CHECK-NEXT:         DataTypeId: {{[0-9]+}}
+// CHECK-NEXT:         TotalAccessDensity: 20
+// CHECK-NEXT:         MinAccessDensity: 20
+// CHECK-NEXT:         MaxAccessDensity: 20
+// CHECK-NEXT:         TotalLifetimeAccessDensity: 20000
+// CHECK-NEXT:         MinLifetimeAccessDensity: 20000
+// CHECK-NEXT:         MaxLifetimeAccessDensity: 20000
+// CHECK-NEXT:     -
+// CHECK-NEXT:       Callstack:
+// CHECK-NEXT:       -
+// CHECK-NEXT:         Function: {{[0-9]+}}
+// CHECK-NEXT:         SymbolName: main
+// CHECK-NEXT:         LineOffset: 4
+// CHECK-NEXT:         Column: 15
+// CHECK-NEXT:         Inline: 0
+// CHECK-NEXT:       MemInfoBlock:
+// CHECK-NEXT:         AllocCount: 1
+// CHECK-NEXT:         TotalAccessCount: 2
+// CHECK-NEXT:         MinAccessCount: 2
+// CHECK-NEXT:         MaxAccessCount: 2
+// CHECK-NEXT:         TotalSize: 10
+// CHECK-NEXT:         MinSize: 10
+// CHECK-NEXT:         MaxSize: 10
+// CHECK-NEXT:         AllocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:         DeallocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:         TotalLifetime: 0
+// CHECK-NEXT:         MinLifetime: 0
+// CHECK-NEXT:         MaxLifetime: 0
+// CHECK-NEXT:         AllocCpuId: {{[0-9]+}}
+// CHECK-NEXT:         DeallocCpuId: {{[0-9]+}}
+// CHECK-NEXT:         NumMigratedCpu: 0
+// CHECK-NEXT:         NumLifetimeOverlaps: 0
+// CHECK-NEXT:         NumSameAllocCpu: 0
+// CHECK-NEXT:         NumSameDeallocCpu: 0
+// CHECK-NEXT:         DataTypeId: {{[0-9]+}}
+// CHECK-NEXT:         TotalAccessDensity: 20
+// CHECK-NEXT:         MinAccessDensity: 20
+// CHECK-NEXT:         MaxAccessDensity: 20
+// CHECK-NEXT:         TotalLifetimeAccessDensity: 20000
+// CHECK-NEXT:         MinLifetimeAccessDensity: 20000
+// CHECK-NEXT:         MaxLifetimeAccessDensity: 20000

diff  --git a/compiler-rt/test/memprof/TestCases/memprof_inline.c b/compiler-rt/test/memprof/TestCases/memprof_inline.c
new file mode 100644
index 0000000000000..bb97608637674
--- /dev/null
+++ b/compiler-rt/test/memprof/TestCases/memprof_inline.c
@@ -0,0 +1,183 @@
+// REQUIRES: x86_64-linux
+// RUN: %clang_memprof -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 %s -o %t.memprofexe
+// RUN: env MEMPROF_OPTIONS=log_path=stdout %t.memprofexe > %t.memprofraw
+// RUN: %llvm_profdata show --memory %t.memprofraw --profiled-binary %t.memprofexe | FileCheck %s
+#include <stdlib.h>
+#include <string.h>
+
+__attribute__((always_inline)) void qux(int x) {
+  char *ptr = malloc(x);
+  memset(ptr, 0, x);
+  free(ptr);
+}
+
+__attribute__((noinline)) void foo(int x) { qux(x); }
+
+__attribute__((noinline)) void bar(int x) { foo(x); }
+
+int main(int argc, char **argv) {
+  bar(argc);
+  return 0;
+}
+
+// CHECK:  MemprofProfile:
+// CHECK-NEXT:  Summary:
+// CHECK-NEXT:    Version: 2
+// CHECK-NEXT:    NumSegments: {{[0-9]+}}
+// CHECK-NEXT:    NumMibInfo: 2
+// CHECK-NEXT:    NumAllocFunctions: 2
+// CHECK-NEXT:    NumStackOffsets: 1
+// CHECK-NEXT:  Segments:
+// CHECK-NEXT:  -
+// CHECK-NEXT:    BuildId: <None>
+// CHECK-NEXT:    Start: 0x{{[0-9]+}}
+// CHECK-NEXT:    End: 0x{{[0-9]+}}
+// CHECK-NEXT:    Offset: 0x{{[0-9]+}}
+// CHECK-NEXT:  -
+
+// CHECK:  Records:
+// CHECK-NEXT:  -
+// CHECK-NEXT:    FunctionGUID: 15505678318020221912
+// CHECK-NEXT:    AllocSites:
+// CHECK-NEXT:    -
+// CHECK-NEXT:      Callstack:
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 15505678318020221912
+// CHECK-NEXT:        SymbolName: qux
+// CHECK-NEXT:        LineOffset: 1
+// CHECK-NEXT:        Column: 15
+// CHECK-NEXT:        Inline: 1
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 6699318081062747564
+// CHECK-NEXT:        SymbolName: foo
+// CHECK-NEXT:        LineOffset: 0
+// CHECK-NEXT:        Column: 45
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 16434608426314478903
+// CHECK-NEXT:        SymbolName: bar
+// CHECK-NEXT:        LineOffset: 0
+// CHECK-NEXT:        Column: 45
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 15822663052811949562
+// CHECK-NEXT:        SymbolName: main
+// CHECK-NEXT:        LineOffset: 1
+// CHECK-NEXT:        Column: 3
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:      MemInfoBlock:
+// CHECK-NEXT:        AllocCount: 1
+// CHECK-NEXT:        TotalAccessCount: 1
+// CHECK-NEXT:        MinAccessCount: 1
+// CHECK-NEXT:        MaxAccessCount: 1
+// CHECK-NEXT:        TotalSize: 1
+// CHECK-NEXT:        MinSize: 1
+// CHECK-NEXT:        MaxSize: 1
+// CHECK-NEXT:        AllocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:        DeallocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:        TotalLifetime: 0
+// CHECK-NEXT:        MinLifetime: 0
+// CHECK-NEXT:        MaxLifetime: 0
+// CHECK-NEXT:        AllocCpuId: {{[0-9]+}}
+// CHECK-NEXT:        DeallocCpuId: {{[0-9]+}}
+// CHECK-NEXT:        NumMigratedCpu: 0
+// CHECK-NEXT:        NumLifetimeOverlaps: 0
+// CHECK-NEXT:        NumSameAllocCpu: 0
+// CHECK-NEXT:        NumSameDeallocCpu: 0
+// CHECK-NEXT:        DataTypeId: {{[0-9]+}}
+// CHECK-NEXT:        TotalAccessDensity: 100
+// CHECK-NEXT:        MinAccessDensity: 100
+// CHECK-NEXT:        MaxAccessDensity: 100
+// CHECK-NEXT:        TotalLifetimeAccessDensity: 100000
+// CHECK-NEXT:        MinLifetimeAccessDensity: 100000
+// CHECK-NEXT:        MaxLifetimeAccessDensity: 100000
+// CHECK-NEXT:  -
+// CHECK-NEXT:    FunctionGUID: 6699318081062747564
+// CHECK-NEXT:    AllocSites:
+// CHECK-NEXT:    -
+// CHECK-NEXT:      Callstack:
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 15505678318020221912
+// CHECK-NEXT:        SymbolName: qux
+// CHECK-NEXT:        LineOffset: 1
+// CHECK-NEXT:        Column: 15
+// CHECK-NEXT:        Inline: 1
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 6699318081062747564
+// CHECK-NEXT:        SymbolName: foo
+// CHECK-NEXT:        LineOffset: 0
+// CHECK-NEXT:        Column: 45
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 16434608426314478903
+// CHECK-NEXT:        SymbolName: bar
+// CHECK-NEXT:        LineOffset: 0
+// CHECK-NEXT:        Column: 45
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 15822663052811949562
+// CHECK-NEXT:        SymbolName: main
+// CHECK-NEXT:        LineOffset: 1
+// CHECK-NEXT:        Column: 3
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:      MemInfoBlock:
+// CHECK-NEXT:        AllocCount: 1
+// CHECK-NEXT:        TotalAccessCount: 1
+// CHECK-NEXT:        MinAccessCount: 1
+// CHECK-NEXT:        MaxAccessCount: 1
+// CHECK-NEXT:        TotalSize: 1
+// CHECK-NEXT:        MinSize: 1
+// CHECK-NEXT:        MaxSize: 1
+// CHECK-NEXT:        AllocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:        DeallocTimestamp: {{[0-9]+}}
+// CHECK-NEXT:        TotalLifetime: 0
+// CHECK-NEXT:        MinLifetime: 0
+// CHECK-NEXT:        MaxLifetime: 0
+// CHECK-NEXT:        AllocCpuId: {{[0-9]+}}
+// CHECK-NEXT:        DeallocCpuId: {{[0-9]+}}
+// CHECK-NEXT:        NumMigratedCpu: 0
+// CHECK-NEXT:        NumLifetimeOverlaps: 0
+// CHECK-NEXT:        NumSameAllocCpu: 0
+// CHECK-NEXT:        NumSameDeallocCpu: 0
+// CHECK-NEXT:        DataTypeId: {{[0-9]+}}
+// CHECK-NEXT:        TotalAccessDensity: 100
+// CHECK-NEXT:        MinAccessDensity: 100
+// CHECK-NEXT:        MaxAccessDensity: 100
+// CHECK-NEXT:        TotalLifetimeAccessDensity: 100000
+// CHECK-NEXT:        MinLifetimeAccessDensity: 100000
+// CHECK-NEXT:        MaxLifetimeAccessDensity: 100000
+// CHECK-NEXT:    CallSites:
+// CHECK-NEXT:    -
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 15505678318020221912
+// CHECK-NEXT:        SymbolName: qux
+// CHECK-NEXT:        LineOffset: 1
+// CHECK-NEXT:        Column: 15
+// CHECK-NEXT:        Inline: 1
+// CHECK-NEXT:    -
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 6699318081062747564
+// CHECK-NEXT:        SymbolName: foo
+// CHECK-NEXT:        LineOffset: 0
+// CHECK-NEXT:        Column: 45
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:  -
+// CHECK-NEXT:    FunctionGUID: 16434608426314478903
+// CHECK-NEXT:    CallSites:
+// CHECK-NEXT:    -
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 16434608426314478903
+// CHECK-NEXT:        SymbolName: bar
+// CHECK-NEXT:        LineOffset: 0
+// CHECK-NEXT:        Column: 45
+// CHECK-NEXT:        Inline: 0
+// CHECK-NEXT:  -
+// CHECK-NEXT:    FunctionGUID: 15822663052811949562
+// CHECK-NEXT:    CallSites:
+// CHECK-NEXT:    -
+// CHECK-NEXT:      -
+// CHECK-NEXT:        Function: 15822663052811949562
+// CHECK-NEXT:        SymbolName: main
+// CHECK-NEXT:        LineOffset: 1
+// CHECK-NEXT:        Column: 3
+// CHECK-NEXT:        Inline: 0

diff  --git a/compiler-rt/test/memprof/TestCases/memprof_merge.c b/compiler-rt/test/memprof/TestCases/memprof_merge.c
new file mode 100644
index 0000000000000..0250623a56641
--- /dev/null
+++ b/compiler-rt/test/memprof/TestCases/memprof_merge.c
@@ -0,0 +1,27 @@
+// REQUIRES: x86_64-linux
+// COM: Name compression disabled since some buildbots do not have zlib.
+// RUN: %clang -mllvm -enable-name-compression=false -fprofile-generate %s -o %t.instr.out
+// RUN: env LLVM_PROFILE_FILE=%t.profraw %t.instr.out
+// RUN: %clang_memprof -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 %s -o %t.memprofexe
+// RUN: env MEMPROF_OPTIONS=log_path=stdout %t.memprofexe > %t.memprofraw
+// RUN: %llvm_profdata merge %t.profraw %t.memprofraw --profiled-binary %t.memprofexe -o %t.prof
+// RUN: %llvm_profdata show %t.prof | FileCheck %s
+#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;
+}
+
+// COM: For now we only check the validity of the instrumented profile since we don't
+// COM: 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

diff  --git a/compiler-rt/test/memprof/TestCases/memprof_multi.c b/compiler-rt/test/memprof/TestCases/memprof_multi.c
new file mode 100644
index 0000000000000..ebbb5a5bbcf42
--- /dev/null
+++ b/compiler-rt/test/memprof/TestCases/memprof_multi.c
@@ -0,0 +1,35 @@
+// REQUIRES: x86_64-linux
+// RUN: %clang_memprof -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 %s -o %t.memprofexe
+// RUN: env MEMPROF_OPTIONS=log_path=stdout %t.memprofexe > %t.memprofraw
+// RUN: %llvm_profdata show --memory %t.memprofraw --profiled-binary %t.memprofexe -o - | FileCheck %s
+#include <sanitizer/memprof_interface.h>
+#include <stdlib.h>
+#include <string.h>
+int main(int argc, char **argv) {
+  char *x = (char *)malloc(10);
+  memset(x, 0, 10);
+  free(x);
+  __memprof_profile_dump();
+  x = (char *)malloc(10);
+  memset(x, 0, 10);
+  free(x);
+  return 0;
+}
+
+// COM: We expect 2 MIB entries, 1 each for the malloc calls in the program.
+
+// CHECK:  MemprofProfile:
+// CHECK-NEXT:  Summary:
+// CHECK-NEXT:    Version: 2
+// CHECK-NEXT:    NumSegments: {{[0-9]+}}
+// CHECK-NEXT:    NumMibInfo: 2
+// CHECK-NEXT:    NumAllocFunctions: 1
+// CHECK-NEXT:    NumStackOffsets: 2
+
+// CHECK:        SymbolName: main
+// CHECK-NEXT:     LineOffset: 1
+// CHECK-NEXT:     Column: 21
+
+// CHECK:        SymbolName: main
+// CHECK-NEXT:     LineOffset: 5
+// CHECK-NEXT:     Column: 15

diff  --git a/compiler-rt/test/memprof/TestCases/memprof_pic.c b/compiler-rt/test/memprof/TestCases/memprof_pic.c
new file mode 100644
index 0000000000000..1709ce2c63da9
--- /dev/null
+++ b/compiler-rt/test/memprof/TestCases/memprof_pic.c
@@ -0,0 +1,20 @@
+// REQUIRES: x86_64-linux
+// RUN: %clang_memprof -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 -pie %s -o %t.memprofexe
+// RUN: env MEMPROF_OPTIONS=log_path=stdout %t.memprofexe > %t.memprofraw
+// RUN: not %llvm_profdata show --memory %t.memprofraw --profiled-binary %t.memprofexe -o - 2>&1 | FileCheck %s
+#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;
+}
+
+// COM: This test ensures that llvm-profdata fails with a descriptive error message
+// COM: when invoked on a memprof profiled binary which was built with position
+// COM: independent code.
+// CHECK: Unsupported position independent code

diff  --git a/compiler-rt/test/memprof/lit.cfg.py b/compiler-rt/test/memprof/lit.cfg.py
index e472101b1f16e..bf284392178bb 100644
--- a/compiler-rt/test/memprof/lit.cfg.py
+++ b/compiler-rt/test/memprof/lit.cfg.py
@@ -65,6 +65,9 @@ def get_required_attr(config, attr_name):
 def build_invocation(compile_flags):
   return ' ' + ' '.join([config.clang] + compile_flags) + ' '
 
+# We need llvm-profdata for tests with raw binary profiles.
+config.substitutions.append( ("%llvm_profdata ", config.llvm_tools_dir+'/llvm-profdata ') )
+
 config.substitutions.append( ("%clang ", build_invocation(target_cflags)) )
 config.substitutions.append( ("%clangxx ", build_invocation(target_cxxflags)) )
 config.substitutions.append( ("%clang_memprof ", build_invocation(clang_memprof_cflags)) )

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/basic.memprofexe b/llvm/test/tools/llvm-profdata/Inputs/basic.memprofexe
deleted file mode 100755
index 4d3e4798e4791..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/basic.memprofexe and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/basic.memprofraw b/llvm/test/tools/llvm-profdata/Inputs/basic.memprofraw
deleted file mode 100644
index 88da4a76e47f0..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/basic.memprofraw and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/inline.memprofexe b/llvm/test/tools/llvm-profdata/Inputs/inline.memprofexe
deleted file mode 100755
index 82aad1948982d..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/inline.memprofexe and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/inline.memprofraw b/llvm/test/tools/llvm-profdata/Inputs/inline.memprofraw
deleted file mode 100755
index f9f84e227b220..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/inline.memprofraw and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/memprof-inline.exe b/llvm/test/tools/llvm-profdata/Inputs/memprof-inline.exe
deleted file mode 100755
index 9b6fd16e9a272..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/memprof-inline.exe and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/multi.memprofexe b/llvm/test/tools/llvm-profdata/Inputs/multi.memprofexe
deleted file mode 100755
index 507cf982993e7..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/multi.memprofexe and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/multi.memprofraw b/llvm/test/tools/llvm-profdata/Inputs/multi.memprofraw
deleted file mode 100644
index b6b895ff96fa9..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/multi.memprofraw and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/pic.memprofexe b/llvm/test/tools/llvm-profdata/Inputs/pic.memprofexe
deleted file mode 100755
index eb1cd9b4bb778..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/pic.memprofexe and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/pic.memprofraw b/llvm/test/tools/llvm-profdata/Inputs/pic.memprofraw
deleted file mode 100644
index 9b16c8f5dd0b5..0000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/pic.memprofraw and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/memprof-basic.test b/llvm/test/tools/llvm-profdata/memprof-basic.test
deleted file mode 100644
index a070845b5ab06..0000000000000
--- a/llvm/test/tools/llvm-profdata/memprof-basic.test
+++ /dev/null
@@ -1,126 +0,0 @@
-REQUIRES: x86_64-linux
-
-The input raw profile test has been 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;
-}
-```
-
-The following commands were used to compile the source to a memprof instrumented
-executable and collect a raw binary format profile. Since the profile contains
-virtual addresses for the callstack, we do not expect the raw binary profile to
-be deterministic. The summary should be deterministic apart from changes to
-the shared libraries linked in which could change the number of segments
-recorded.
-
-```
-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 show --memory %p/Inputs/basic.memprofraw --profiled-binary %p/Inputs/basic.memprofexe -o - | FileCheck %s
-
-We expect 2 MIB entries, 1 each for the malloc calls in the program. Any
-additional allocations which do not originate from the main binary are pruned.
-
-CHECK:  MemprofProfile:
-CHECK-NEXT:   Summary:
-CHECK-NEXT:     Version: 2
-CHECK-NEXT:     NumSegments: {{[0-9]+}}
-CHECK-NEXT:     NumMibInfo: 2
-CHECK-NEXT:     NumAllocFunctions: 1
-CHECK-NEXT:     NumStackOffsets: 2
-CHECK-NEXT:   Segments:
-CHECK-NEXT:   -
-CHECK-NEXT:     BuildId: <None>
-CHECK-NEXT:     Start: 0x{{[0-9]+}}
-CHECK-NEXT:     End: 0x{{[0-9]+}}
-CHECK-NEXT:     Offset: 0x{{[0-9]+}}
-CHECK-NEXT:   -
-
-CHECK:   Records:
-CHECK-NEXT:   -
-CHECK-NEXT:     FunctionGUID: {{[0-9]+}}
-CHECK-NEXT:     AllocSites:
-CHECK-NEXT:     -
-CHECK-NEXT:       Callstack:
-CHECK-NEXT:       -
-CHECK-NEXT:         Function: {{[0-9]+}}
-CHECK-NEXT:         SymbolName: main
-CHECK-NEXT:         LineOffset: 1
-CHECK-NEXT:         Column: 21
-CHECK-NEXT:         Inline: 0
-CHECK-NEXT:       MemInfoBlock:
-CHECK-NEXT:         AllocCount: 1
-CHECK-NEXT:         TotalAccessCount: 2
-CHECK-NEXT:         MinAccessCount: 2
-CHECK-NEXT:         MaxAccessCount: 2
-CHECK-NEXT:         TotalSize: 10
-CHECK-NEXT:         MinSize: 10
-CHECK-NEXT:         MaxSize: 10
-CHECK-NEXT:         AllocTimestamp: {{[0-9]+}}
-CHECK-NEXT:         DeallocTimestamp: {{[0-9]+}}
-CHECK-NEXT:         TotalLifetime: 0
-CHECK-NEXT:         MinLifetime: 0
-CHECK-NEXT:         MaxLifetime: 0
-CHECK-NEXT:         AllocCpuId: {{[0-9]+}}
-CHECK-NEXT:         DeallocCpuId: {{[0-9]+}}
-CHECK-NEXT:         NumMigratedCpu: 0
-CHECK-NEXT:         NumLifetimeOverlaps: 0
-CHECK-NEXT:         NumSameAllocCpu: 0
-CHECK-NEXT:         NumSameDeallocCpu: 0
-CHECK-NEXT:         DataTypeId: {{[0-9]+}}
-CHECK-NEXT:         TotalAccessDensity: 20
-CHECK-NEXT:         MinAccessDensity: 20
-CHECK-NEXT:         MaxAccessDensity: 20
-CHECK-NEXT:         TotalLifetimeAccessDensity: 20000
-CHECK-NEXT:         MinLifetimeAccessDensity: 20000
-CHECK-NEXT:         MaxLifetimeAccessDensity: 20000
-CHECK-NEXT:     -
-CHECK-NEXT:       Callstack:
-CHECK-NEXT:       -
-CHECK-NEXT:         Function: {{[0-9]+}}
-CHECK-NEXT:         SymbolName: main
-CHECK-NEXT:         LineOffset: 4
-CHECK-NEXT:         Column: 15
-CHECK-NEXT:         Inline: 0
-CHECK-NEXT:       MemInfoBlock:
-CHECK-NEXT:         AllocCount: 1
-CHECK-NEXT:         TotalAccessCount: 2
-CHECK-NEXT:         MinAccessCount: 2
-CHECK-NEXT:         MaxAccessCount: 2
-CHECK-NEXT:         TotalSize: 10
-CHECK-NEXT:         MinSize: 10
-CHECK-NEXT:         MaxSize: 10
-CHECK-NEXT:         AllocTimestamp: {{[0-9]+}}
-CHECK-NEXT:         DeallocTimestamp: {{[0-9]+}}
-CHECK-NEXT:         TotalLifetime: 0
-CHECK-NEXT:         MinLifetime: 0
-CHECK-NEXT:         MaxLifetime: 0
-CHECK-NEXT:         AllocCpuId: {{[0-9]+}}
-CHECK-NEXT:         DeallocCpuId: {{[0-9]+}}
-CHECK-NEXT:         NumMigratedCpu: 0
-CHECK-NEXT:         NumLifetimeOverlaps: 0
-CHECK-NEXT:         NumSameAllocCpu: 0
-CHECK-NEXT:         NumSameDeallocCpu: 0
-CHECK-NEXT:         DataTypeId: {{[0-9]+}}
-CHECK-NEXT:         TotalAccessDensity: 20
-CHECK-NEXT:         MinAccessDensity: 20
-CHECK-NEXT:         MaxAccessDensity: 20
-CHECK-NEXT:         TotalLifetimeAccessDensity: 20000
-CHECK-NEXT:         MinLifetimeAccessDensity: 20000
-CHECK-NEXT:         MaxLifetimeAccessDensity: 20000

diff  --git a/llvm/test/tools/llvm-profdata/memprof-inline.test b/llvm/test/tools/llvm-profdata/memprof-inline.test
deleted file mode 100644
index 87eaa8364d308..0000000000000
--- a/llvm/test/tools/llvm-profdata/memprof-inline.test
+++ /dev/null
@@ -1,201 +0,0 @@
-REQUIRES: x86_64-linux
-
-The input raw profile test has been generated from the following source code:
-
-```
-#include <stdlib.h>
-#include <string.h>
-
-__attribute__((always_inline))
-void qux(int x) {
-  char *ptr = malloc(x);
-  memset(ptr, 0, x);
-  free(ptr);
-}
-
-__attribute__((noinline))
-void foo(int x){ qux(x); }
-
-__attribute__((noinline))
-void bar(int x) { foo(x); }
-
-int main(int argc, char **argv) {
-  bar(argc);
-  return 0;
-}
-```
-
-Compile and run with the following commands:
-
-```
-bin/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 \
-          inline.c -o inline.memprofexe
-
-env MEMPROF_OPTIONS=log_path=stdout ./inline.memprofexe > inline.memprofraw
-```
-
-RUN: llvm-profdata show --memory %p/Inputs/inline.memprofraw --profiled-binary %p/Inputs/inline.memprofexe | FileCheck %s
-
-CHECK:  MemprofProfile:
-CHECK-NEXT:  Summary:
-CHECK-NEXT:    Version: 2
-CHECK-NEXT:    NumSegments: {{[0-9]+}}
-CHECK-NEXT:    NumMibInfo: 2
-CHECK-NEXT:    NumAllocFunctions: 2
-CHECK-NEXT:    NumStackOffsets: 1
-CHECK-NEXT:  Segments:
-CHECK-NEXT:  -
-CHECK-NEXT:    BuildId: <None>
-CHECK-NEXT:    Start: 0x{{[0-9]+}}
-CHECK-NEXT:    End: 0x{{[0-9]+}}
-CHECK-NEXT:    Offset: 0x{{[0-9]+}}
-CHECK-NEXT:  -
-
-CHECK:  Records:
-CHECK-NEXT:  -
-CHECK-NEXT:    FunctionGUID: 15505678318020221912
-CHECK-NEXT:    AllocSites:
-CHECK-NEXT:    -
-CHECK-NEXT:      Callstack:
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 15505678318020221912
-CHECK-NEXT:        SymbolName: qux
-CHECK-NEXT:        LineOffset: 1
-CHECK-NEXT:        Column: 15
-CHECK-NEXT:        Inline: 1
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 6699318081062747564
-CHECK-NEXT:        SymbolName: foo
-CHECK-NEXT:        LineOffset: 0
-CHECK-NEXT:        Column: 18
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 16434608426314478903
-CHECK-NEXT:        SymbolName: bar
-CHECK-NEXT:        LineOffset: 0
-CHECK-NEXT:        Column: 19
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 15822663052811949562
-CHECK-NEXT:        SymbolName: main
-CHECK-NEXT:        LineOffset: 1
-CHECK-NEXT:        Column: 3
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:      MemInfoBlock:
-CHECK-NEXT:        AllocCount: 1
-CHECK-NEXT:        TotalAccessCount: 1
-CHECK-NEXT:        MinAccessCount: 1
-CHECK-NEXT:        MaxAccessCount: 1
-CHECK-NEXT:        TotalSize: 1
-CHECK-NEXT:        MinSize: 1
-CHECK-NEXT:        MaxSize: 1
-CHECK-NEXT:        AllocTimestamp: {{[0-9]+}}
-CHECK-NEXT:        DeallocTimestamp: {{[0-9]+}}
-CHECK-NEXT:        TotalLifetime: 0
-CHECK-NEXT:        MinLifetime: 0
-CHECK-NEXT:        MaxLifetime: 0
-CHECK-NEXT:        AllocCpuId: {{[0-9]+}}
-CHECK-NEXT:        DeallocCpuId: {{[0-9]+}}
-CHECK-NEXT:        NumMigratedCpu: 0
-CHECK-NEXT:        NumLifetimeOverlaps: 0
-CHECK-NEXT:        NumSameAllocCpu: 0
-CHECK-NEXT:        NumSameDeallocCpu: 0
-CHECK-NEXT:        DataTypeId: {{[0-9]+}}
-CHECK-NEXT:        TotalAccessDensity: 100
-CHECK-NEXT:        MinAccessDensity: 100
-CHECK-NEXT:        MaxAccessDensity: 100
-CHECK-NEXT:        TotalLifetimeAccessDensity: 100000
-CHECK-NEXT:        MinLifetimeAccessDensity: 100000
-CHECK-NEXT:        MaxLifetimeAccessDensity: 100000
-CHECK-NEXT:  -
-CHECK-NEXT:    FunctionGUID: 6699318081062747564
-CHECK-NEXT:    AllocSites:
-CHECK-NEXT:    -
-CHECK-NEXT:      Callstack:
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 15505678318020221912
-CHECK-NEXT:        SymbolName: qux
-CHECK-NEXT:        LineOffset: 1
-CHECK-NEXT:        Column: 15
-CHECK-NEXT:        Inline: 1
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 6699318081062747564
-CHECK-NEXT:        SymbolName: foo
-CHECK-NEXT:        LineOffset: 0
-CHECK-NEXT:        Column: 18
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 16434608426314478903
-CHECK-NEXT:        SymbolName: bar
-CHECK-NEXT:        LineOffset: 0
-CHECK-NEXT:        Column: 19
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 15822663052811949562
-CHECK-NEXT:        SymbolName: main
-CHECK-NEXT:        LineOffset: 1
-CHECK-NEXT:        Column: 3
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:      MemInfoBlock:
-CHECK-NEXT:        AllocCount: 1
-CHECK-NEXT:        TotalAccessCount: 1
-CHECK-NEXT:        MinAccessCount: 1
-CHECK-NEXT:        MaxAccessCount: 1
-CHECK-NEXT:        TotalSize: 1
-CHECK-NEXT:        MinSize: 1
-CHECK-NEXT:        MaxSize: 1
-CHECK-NEXT:        AllocTimestamp: {{[0-9]+}}
-CHECK-NEXT:        DeallocTimestamp: {{[0-9]+}}
-CHECK-NEXT:        TotalLifetime: 0
-CHECK-NEXT:        MinLifetime: 0
-CHECK-NEXT:        MaxLifetime: 0
-CHECK-NEXT:        AllocCpuId: {{[0-9]+}}
-CHECK-NEXT:        DeallocCpuId: {{[0-9]+}}
-CHECK-NEXT:        NumMigratedCpu: 0
-CHECK-NEXT:        NumLifetimeOverlaps: 0
-CHECK-NEXT:        NumSameAllocCpu: 0
-CHECK-NEXT:        NumSameDeallocCpu: 0
-CHECK-NEXT:        DataTypeId: {{[0-9]+}}
-CHECK-NEXT:        TotalAccessDensity: 100
-CHECK-NEXT:        MinAccessDensity: 100
-CHECK-NEXT:        MaxAccessDensity: 100
-CHECK-NEXT:        TotalLifetimeAccessDensity: 100000
-CHECK-NEXT:        MinLifetimeAccessDensity: 100000
-CHECK-NEXT:        MaxLifetimeAccessDensity: 100000
-CHECK-NEXT:    CallSites:
-CHECK-NEXT:    -
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 15505678318020221912
-CHECK-NEXT:        SymbolName: qux
-CHECK-NEXT:        LineOffset: 1
-CHECK-NEXT:        Column: 15
-CHECK-NEXT:        Inline: 1
-CHECK-NEXT:    -
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 6699318081062747564
-CHECK-NEXT:        SymbolName: foo
-CHECK-NEXT:        LineOffset: 0
-CHECK-NEXT:        Column: 18
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:  -
-CHECK-NEXT:    FunctionGUID: 16434608426314478903
-CHECK-NEXT:    CallSites:
-CHECK-NEXT:    -
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 16434608426314478903
-CHECK-NEXT:        SymbolName: bar
-CHECK-NEXT:        LineOffset: 0
-CHECK-NEXT:        Column: 19
-CHECK-NEXT:        Inline: 0
-CHECK-NEXT:  -
-CHECK-NEXT:    FunctionGUID: 15822663052811949562
-CHECK-NEXT:    CallSites:
-CHECK-NEXT:    -
-CHECK-NEXT:      -
-CHECK-NEXT:        Function: 15822663052811949562
-CHECK-NEXT:        SymbolName: main
-CHECK-NEXT:        LineOffset: 1
-CHECK-NEXT:        Column: 3
-CHECK-NEXT:        Inline: 0

diff  --git a/llvm/test/tools/llvm-profdata/memprof-merge.test b/llvm/test/tools/llvm-profdata/memprof-merge.test
deleted file mode 100644
index 46de2adc9941e..0000000000000
--- a/llvm/test/tools/llvm-profdata/memprof-merge.test
+++ /dev/null
@@ -1,48 +0,0 @@
-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
-
-

diff  --git a/llvm/test/tools/llvm-profdata/memprof-multi.test b/llvm/test/tools/llvm-profdata/memprof-multi.test
deleted file mode 100644
index cb5b7dfaeb0a7..0000000000000
--- a/llvm/test/tools/llvm-profdata/memprof-multi.test
+++ /dev/null
@@ -1,55 +0,0 @@
-REQUIRES: x86_64-linux
-
-The input raw profile test has been generated from the following source code:
-
-```
-#include <sanitizer/memprof_interface.h>
-#include <stdlib.h>
-#include <string.h>
-int main(int argc, char **argv) {
-  char *x = (char *)malloc(10);
-  memset(x, 0, 10);
-  free(x);
-  __memprof_profile_dump();
-  x = (char *)malloc(10);
-  memset(x, 0, 10);
-  free(x);
-  return 0;
-}
-```
-
-The following commands were used to compile the source to a memprof instrumented
-executable and collect a raw binary format profile. Since the profile contains
-virtual addresses for the callstack, we do not expect the raw binary profile to
-be deterministic. The summary should be deterministic apart from changes to
-the shared libraries linked in which could change the number of segments
-recorded.
-
-```
-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 multi.memprofexe
-
-env MEMPROF_OPTIONS=log_path=stdout ./multi.memprofexe > multi.memprofraw
-```
-
-RUN: llvm-profdata show --memory %p/Inputs/multi.memprofraw --profiled-binary %p/Inputs/multi.memprofexe -o - | FileCheck %s
-
-We expect 2 MIB entries, 1 each for the malloc calls in the program.
-
-CHECK:  MemprofProfile:
-CHECK-NEXT:  Summary:
-CHECK-NEXT:    Version: 2
-CHECK-NEXT:    NumSegments: {{[0-9]+}}
-CHECK-NEXT:    NumMibInfo: 2
-CHECK-NEXT:    NumAllocFunctions: 1
-CHECK-NEXT:    NumStackOffsets: 2
-
-CHECK:        SymbolName: main
-CHECK-NEXT:     LineOffset: 1
-CHECK-NEXT:     Column: 21
-
-CHECK:        SymbolName: main
-CHECK-NEXT:     LineOffset: 5
-CHECK-NEXT:     Column: 15

diff  --git a/llvm/test/tools/llvm-profdata/memprof-pic.test b/llvm/test/tools/llvm-profdata/memprof-pic.test
deleted file mode 100644
index f993c441ceaa5..0000000000000
--- a/llvm/test/tools/llvm-profdata/memprof-pic.test
+++ /dev/null
@@ -1,40 +0,0 @@
-REQUIRES: x86_64-linux
-
-This test ensures that llvm-profdata fails with a descriptive error message
-when invoked on a memprof profiled binary which was built with position
-independent code.
-
-The input raw profile test has been 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;
-}
-```
-
-The following commands were used to compile the source to a memprof instrumented
-executable and collect a raw binary format profile. Since the profile contains
-virtual addresses for the callstack, we do not expect the raw binary profile to
-be deterministic. The summary should be deterministic apart from changes to
-the shared libraries linked in which could change the number of segments
-recorded.
-
-```
-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 -pie \
-      source.c -o pic.memprofexe
-
-env MEMPROF_OPTIONS=log_path=stdout ./pic.memprofexe > pic.memprofraw
-```
-
-RUN: not llvm-profdata show --memory %p/Inputs/pic.memprofraw --profiled-binary %p/Inputs/pic.memprofexe -o - 2>&1 | FileCheck %s
-CHECK: Unsupported position independent code


        


More information about the llvm-commits mailing list