From 48c948abeb7dd8a2d022749d1cc1561ddc45d8dc Mon Sep 17 00:00:00 2001 From: Vy Nguyen Date: Fri, 17 Jul 2020 19:08:48 -0400 Subject: [PATCH] [llvm-exegesis] Check perf_branch_entry for field cycles Summary: Follow up to breakages reported in D77422 Reviewers: ondrasej, gchatelet Tags: #llvm Differential Revision: https://reviews.llvm.org/D84076 --- llvm/cmake/modules/FindLibpfm.cmake | 14 ++++++++++++++ llvm/include/llvm/Config/config.h.cmake | 3 +++ 2 files changed, 17 insertions(+) diff --git a/llvm/cmake/modules/FindLibpfm.cmake b/llvm/cmake/modules/FindLibpfm.cmake index 202bb030e380..38cf3af3953d 100644 --- a/llvm/cmake/modules/FindLibpfm.cmake +++ b/llvm/cmake/modules/FindLibpfm.cmake @@ -7,6 +7,7 @@ include(CheckIncludeFile) include(CheckLibraryExists) +include(CheckCXXSourceCompiles) if (LLVM_ENABLE_LIBPFM) check_library_exists(pfm pfm_initialize "" HAVE_LIBPFM_INITIALIZE) @@ -16,6 +17,19 @@ if (LLVM_ENABLE_LIBPFM) check_include_file(perfmon/pfmlib_perf_event.h HAVE_PERFMON_PFMLIB_PERF_EVENT_H) if(HAVE_PERFMON_PERF_EVENT_H AND HAVE_PERFMON_PFMLIB_H AND HAVE_PERFMON_PFMLIB_PERF_EVENT_H) set(HAVE_LIBPFM 1) + # Check to see if perf_branch_entry has the field 'cycles'. + # We couldn't use CheckStructHasMember here because 'cycles' is a bit field which is not + # supported by CheckStructHasMember. + CHECK_CXX_SOURCE_COMPILES(" + #include + int main() { + perf_branch_entry entry; + entry.cycles = 2; + return 0; + }" COMPILE_WITH_CYCLES) + if(COMPILE_WITH_CYCLES) + set(LIBPFM_HAS_FIELD_CYCLES 1) + endif() endif() endif() endif() diff --git a/llvm/include/llvm/Config/config.h.cmake b/llvm/include/llvm/Config/config.h.cmake index 298fab318c10..4d76b27df6b6 100644 --- a/llvm/include/llvm/Config/config.h.cmake +++ b/llvm/include/llvm/Config/config.h.cmake @@ -97,6 +97,9 @@ /* Define to 1 if you have the `pfm' library (-lpfm). */ #cmakedefine HAVE_LIBPFM ${HAVE_LIBPFM} +/* Define to 1 if the `perf_branch_entry' struct has field cycles. */ +#cmakedefine LIBPFM_HAS_FIELD_CYCLES ${LIBPFM_HAS_FIELD_CYCLES} + /* Define to 1 if you have the `psapi' library (-lpsapi). */ #cmakedefine HAVE_LIBPSAPI ${HAVE_LIBPSAPI}