Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AutoFDO can not be built with LLVM trunk (LLVM-18) #179

Open
foxtran opened this issue Oct 26, 2023 · 0 comments
Open

AutoFDO can not be built with LLVM trunk (LLVM-18) #179

foxtran opened this issue Oct 26, 2023 · 0 comments

Comments

@foxtran
Copy link

foxtran commented Oct 26, 2023

I have tried to reproduce optimisation clang with Propeller.

I used that script, which I found in this repo: https://github.com/google/autofdo/blob/master/propeller_optimize_clang.sh

This script uses llvm trunk. Unfortunately, there is some changes in LLVM trunk that break compilation of https://github.com/google/autofdo/blob/master/llvm_profile_writer.cc:

/dev/shm/ger/propeller_optimize_clang.dir/trunk_llvm_install/bin/clang++ -DHAVE_LLVM=1 -DLLVM_GETELFFILE_RET_REFERENCE=1 -DLLVM_VERSION_MAJOR=18 -DLLVM_VERSION_MINOR=0 -I/dev/shm/ger/propeller_optimize_clang.dir/trunk_llvm_install/include -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/glog/src -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/abseil -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/perf_data_converter/src -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/perf_data_converter/src/quipper -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/build -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/build/third_party/glog -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googlemock/include -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/util/regexp -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/libprotobuf -I/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/util -isystem /dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include -isystem /dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest -std=gnu++17 -MD -MT CMakeFiles/llvm_profile_writer_test.dir/llvm_profile_writer_test.cc.o -MF CMakeFiles/llvm_profile_writer_test.dir/llvm_profile_writer_test.cc.o.d -o CMakeFiles/llvm_profile_writer_test.dir/llvm_profile_writer_test.cc.o -c /dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/llvm_profile_writer_test.cc
In file included from /dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/llvm_profile_writer_test.cc:1:
In file included from /dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/llvm_profile_writer.h:7:
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/profile_writer.h:164:8: warning: 'VisitCallsite' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
  164 |   void VisitCallsite(const Callsite &callsite) {
      |        ^
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/profile_writer.h:130:16: note: overridden virtual function is here
  130 |   virtual void VisitCallsite(const Callsite &offset) {}
      |                ^
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/llvm_profile_writer_test.cc:84:26: error: no member named 'lookup' in 'std::unordered_map<llvm::sampleprof::FunctionId, unsigned long>'
   84 |   ASSERT_EQ(call_targets.lookup("_Z3fooi"), 3336);
      |             ~~~~~~~~~~~~ ^
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest.h:1897:47: note: expanded from macro 'ASSERT_EQ'
 1897 | #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
      |                                               ^~~~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest.h:1881:63: note: expanded from macro 'GTEST_ASSERT_EQ'
 1881 |   ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
      |                                                               ^~~~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:148:36: note: expanded from macro 'ASSERT_PRED_FORMAT2'
  148 |   GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
      |                                    ^~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:134:39: note: expanded from macro 'GTEST_PRED_FORMAT2_'
  134 |   GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), on_failure)
      |                                       ^~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:79:52: note: expanded from macro 'GTEST_ASSERT_'
   79 |   if (const ::testing::AssertionResult gtest_ar = (expression)) \
      |                                                    ^~~~~~~~~~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/llvm_profile_writer_test.cc:85:26: error: no member named 'lookup' in 'std::unordered_map<llvm::sampleprof::FunctionId, unsigned long>'
   85 |   ASSERT_EQ(call_targets.lookup("_Z3bari"), 8045);
      |             ~~~~~~~~~~~~ ^
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest.h:1897:47: note: expanded from macro 'ASSERT_EQ'
 1897 | #define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
      |                                               ^~~~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest.h:1881:63: note: expanded from macro 'GTEST_ASSERT_EQ'
 1881 |   ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
      |                                                               ^~~~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:148:36: note: expanded from macro 'ASSERT_PRED_FORMAT2'
  148 |   GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
      |                                    ^~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:134:39: note: expanded from macro 'GTEST_PRED_FORMAT2_'
  134 |   GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), on_failure)
      |                                       ^~
/dev/shm/ger/propeller_optimize_clang.dir/create_llvm_prof_build/autofdo/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h:79:52: note: expanded from macro 'GTEST_ASSERT_'
   79 |   if (const ::testing::AssertionResult gtest_ar = (expression)) \
      |                                                    ^~~~~~~~~~
1 warning and 2 errors generated.

I did not research which commit breaks autofdo build, but, at least, with llvm-17 autofdo works yet.

So, I used the following patch to compile autofdo with llvm-17:

--- propeller_optimize_clang.sh.orig	2023-10-26 16:54:07.550679311 +0900
+++ propeller_optimize_clang.sh	2023-10-26 16:54:58.961428839 +0900
@@ -30,7 +30,7 @@ PATH_TO_TRUNK_LLVM_BUILD=${BASE_PROPELLE
 PATH_TO_TRUNK_LLVM_INSTALL=${BASE_PROPELLER_CLANG_DIR}/trunk_llvm_install
 # Build Trunk LLVM
 mkdir -p ${PATH_TO_LLVM_SOURCES} && cd ${PATH_TO_LLVM_SOURCES}
-git clone [email protected]:llvm/llvm-project.git
+git clone -b release/17.x --single-branch [email protected]:llvm/llvm-project.git
 mkdir -p ${PATH_TO_TRUNK_LLVM_BUILD} && cd ${PATH_TO_TRUNK_LLVM_BUILD}
 cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 \
       -DCMAKE_INSTALL_PREFIX="${PATH_TO_TRUNK_LLVM_INSTALL}" \
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant