summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2016-03-25 23:56:23 +0000
committerVedant Kumar <vsk@apple.com>2016-03-25 23:56:23 +0000
commit5a697bbda34e722e4c72eef7903e747b81c374f4 (patch)
tree84599d119882758504086fc6031eaf7f9e710e68
parentd1af8fce0fa1d05d635eeb892b82f2cca1cee1cd (diff)
downloadbcm5719-llvm-5a697bbda34e722e4c72eef7903e747b81c374f4.tar.gz
bcm5719-llvm-5a697bbda34e722e4c72eef7903e747b81c374f4.zip
[profile] Add integration test to validate PGO function names
Differential Revision: http://reviews.llvm.org/D18485 llvm-svn: 264480
-rw-r--r--compiler-rt/test/profile/CMakeLists.txt2
-rw-r--r--compiler-rt/test/profile/Inputs/instrprof-visibility-helper.cpp3
-rw-r--r--compiler-rt/test/profile/instrprof-visibility-kinds.inc36
-rw-r--r--compiler-rt/test/profile/instrprof-visibility.cpp89
4 files changed, 129 insertions, 1 deletions
diff --git a/compiler-rt/test/profile/CMakeLists.txt b/compiler-rt/test/profile/CMakeLists.txt
index bfbb0c05027..0cf904834ea 100644
--- a/compiler-rt/test/profile/CMakeLists.txt
+++ b/compiler-rt/test/profile/CMakeLists.txt
@@ -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
index 00000000000..6d3bc69b300
--- /dev/null
+++ b/compiler-rt/test/profile/Inputs/instrprof-visibility-helper.cpp
@@ -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
index 00000000000..23b899dd8a3
--- /dev/null
+++ b/compiler-rt/test/profile/instrprof-visibility-kinds.inc
@@ -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
index 00000000000..de81af9c3b5
--- /dev/null
+++ b/compiler-rt/test/profile/instrprof-visibility.cpp
@@ -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
OpenPOWER on IntegriCloud