[profile] Add integration test to validate PGO function names
authorVedant Kumar <vsk@apple.com>
Fri, 25 Mar 2016 23:56:23 +0000 (23:56 +0000)
committerVedant Kumar <vsk@apple.com>
Fri, 25 Mar 2016 23:56:23 +0000 (23:56 +0000)
Differential Revision: http://reviews.llvm.org/D18485

llvm-svn: 264480

compiler-rt/test/profile/CMakeLists.txt
compiler-rt/test/profile/Inputs/instrprof-visibility-helper.cpp [new file with mode: 0644]
compiler-rt/test/profile/instrprof-visibility-kinds.inc [new file with mode: 0644]
compiler-rt/test/profile/instrprof-visibility.cpp [new file with mode: 0644]

index bfbb0c0..0cf9048 100644 (file)
@@ -4,7 +4,7 @@ set(PROFILE_LIT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
 set(PROFILE_TESTSUITES)
 set(PROFILE_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
 if(NOT COMPILER_RT_STANDALONE_BUILD)
-  list(APPEND PROFILE_TEST_DEPS profile llvm-profdata)
+  list(APPEND PROFILE_TEST_DEPS profile llvm-profdata llvm-cov)
 endif()
 
 set(PROFILE_TEST_ARCH ${PROFILE_SUPPORTED_ARCH})
diff --git a/compiler-rt/test/profile/Inputs/instrprof-visibility-helper.cpp b/compiler-rt/test/profile/Inputs/instrprof-visibility-helper.cpp
new file mode 100644 (file)
index 0000000..6d3bc69
--- /dev/null
@@ -0,0 +1,3 @@
+namespace N1 {
+void f4() {}
+}
diff --git a/compiler-rt/test/profile/instrprof-visibility-kinds.inc b/compiler-rt/test/profile/instrprof-visibility-kinds.inc
new file mode 100644 (file)
index 0000000..23b899d
--- /dev/null
@@ -0,0 +1,36 @@
+void f1() {}
+
+#ifndef NO_WEAK
+void f2() __attribute__((weak));
+void f2() {}
+#endif
+
+void f3() __attribute__((always_inline));
+void f3() {}
+
+#ifndef NO_EXTERN
+extern void f4();
+#endif
+
+void f5() __attribute__((visibility("default")));
+void f5() {}
+
+void f6() __attribute__((visibility("hidden")));
+void f6() {}
+
+void f7() __attribute__((visibility("internal")));
+void f7() {}
+
+void call() {
+  f1();
+#ifndef NO_WEAK
+  f2();
+#endif
+  f3();
+#ifndef NO_EXTERN
+  f4();
+#endif
+  f5();
+  f6();
+  f7();
+}
diff --git a/compiler-rt/test/profile/instrprof-visibility.cpp b/compiler-rt/test/profile/instrprof-visibility.cpp
new file mode 100644 (file)
index 0000000..de81af9
--- /dev/null
@@ -0,0 +1,89 @@
+// RUN: %clangxx_profgen -fcoverage-mapping %S/Inputs/instrprof-visibility-helper.cpp -o %t %s
+// RUN: LLVM_PROFILE_FILE=%t.profraw %run %t
+// RUN: llvm-profdata merge %t.profraw -o %t.profdata
+// RUN: llvm-profdata show --all-functions %t.profraw | FileCheck %s --check-prefix=PROFILE
+// RUN: llvm-cov show %t -instr-profile=%t.profdata | FileCheck %s --check-prefix=COV
+
+namespace {
+#define NO_WEAK
+#define NO_EXTERN
+#include "instrprof-visibility-kinds.inc"
+#undef NO_EXTERN
+#undef NO_WEAK
+}
+
+namespace N1 {
+#include "instrprof-visibility-kinds.inc"
+}
+
+int main() {
+  call();
+  N1::call();
+  return 0;
+}
+
+// PROFILE-DAG: _ZN2N12f1Ev
+// PROFILE-DAG: _ZN2N12f2Ev
+// PROFILE-DAG: _ZN2N12f3Ev
+// PROFILE-DAG: _ZN2N12f4Ev
+// PROFILE-DAG: _ZN2N12f5Ev
+// PROFILE-DAG: _ZN2N12f6Ev
+// PROFILE-DAG: _ZN2N12f7Ev
+// PROFILE-DAG: _ZN2N14callEv
+// PROFILE-DAG: main
+// PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_14callEv
+// PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f1Ev
+// PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f3Ev
+// PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f5Ev
+// PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f6Ev
+// PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f7Ev
+// PROFILE-DAG: Total functions: 15
+
+// COV-DAG: instrprof-visibility-helper.cpp
+
+// COV-DAG: instrprof-visibility-kinds.inc
+
+// COV-DAG: _ZN2N12f1Ev
+// COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f1Ev
+// COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f3Ev
+// COV-DAG: _ZN2N12f3Ev
+// COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f5Ev
+// COV-DAG: _ZN2N12f5Ev
+// COV-DAG: _ZN2N12f6Ev
+// COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f6Ev
+// COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f7Ev
+// COV-DAG: _ZN2N12f7Ev
+
+// --- Check coverage for functions in the anonymous namespace.
+// COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_14callEv
+// COV-DAG: 1|{{.*}}|void call() {
+// COV-DAG: 1|{{.*}}|  f1();
+// COV-DAG: 1|{{.*}}|#ifndef NO_WEAK
+// COV-DAG:  |{{.*}}|  f2();
+// COV-DAG:  |{{.*}}|#endif
+// COV-DAG: 1|{{.*}}|  f3();
+// COV-DAG: 1|{{.*}}|#ifndef NO_EXTERN
+// COV-DAG:  |{{.*}}|  f4();
+// COV-DAG:  |{{.*}}|#endif
+// COV-DAG: 1|{{.*}}|  f5();
+// COV-DAG: 1|{{.*}}|  f6();
+// COV-DAG: 1|{{.*}}|  f7();
+// COV-DAG: 1|{{.*}}|}
+
+// --- Check coverage for functions in namespace N1.
+// COV-DAG: _ZN2N14callEv
+// COV-DAG: 1|{{.*}}|void call() {
+// COV-DAG: 1|{{.*}}|  f1();
+// COV-DAG: 1|{{.*}}|#ifndef NO_WEAK
+// COV-DAG: 1|{{.*}}|  f2();
+// COV-DAG: 1|{{.*}}|#endif
+// COV-DAG: 1|{{.*}}|  f3();
+// COV-DAG: 1|{{.*}}|#ifndef NO_EXTERN
+// COV-DAG: 1|{{.*}}|  f4();
+// COV-DAG: 1|{{.*}}|#endif
+// COV-DAG: 1|{{.*}}|  f5();
+// COV-DAG: 1|{{.*}}|  f6();
+// COV-DAG: 1|{{.*}}|  f7();
+// COV-DAG: 1|{{.*}}|}
+
+// COV-DAG: instrprof-visibility.cpp