From: ibricchi Date: Tue, 14 Feb 2023 20:32:26 +0000 (-0500) Subject: [InlineAdvisor] Restructure advisor plugin unittest cmake X-Git-Tag: upstream/17.0.6~17531 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5b455a8efbf56b31028fcbf043cb08d1cfbd5936;p=platform%2Fupstream%2Fllvm.git [InlineAdvisor] Restructure advisor plugin unittest cmake Move the plugin used in the unittest to test Inline Advisor Plugins into a separate folder to clean up the cmake file for the analysis tests. Reviewed By: mtrofin, thakis Differential Revision: https://reviews.llvm.org/D140559 --- diff --git a/llvm/unittests/Analysis/CMakeLists.txt b/llvm/unittests/Analysis/CMakeLists.txt index 7b9f942be697..f7f17b394faa 100644 --- a/llvm/unittests/Analysis/CMakeLists.txt +++ b/llvm/unittests/Analysis/CMakeLists.txt @@ -52,12 +52,8 @@ set(ANALYSIS_TEST_SOURCES VectorUtilsTest.cpp ) -# The unit tests target does not use InlineAdvisorPlugin.cpp -# so if not added to LLVM_OPTIONAL_SOURCES, FileCheck will -# complain about unused file. -set(LLVM_OPTIONAL_SOURCES InlineAdvisorPlugin.cpp) - set(MLGO_TESTS TFUtilsTest.cpp) + if (LLVM_HAVE_TFLITE) LIST(APPEND ANALYSIS_TEST_SOURCES ${MLGO_TESTS}) else() @@ -70,35 +66,10 @@ add_llvm_unittest_with_input_files(AnalysisTests target_link_libraries(AnalysisTests PRIVATE LLVMTestingSupport) -# The advisor plugin expects to not link against the Analysis, Support and Core -# libraries, but expects them to exist in the process loading the plugin. This -# doesn't work with DLLs on Windows (where a shared library can't have undefined -# references), so just skip this testcase on Windows. -if (NOT WIN32) - # On AIX, enable run-time linking to allow symbols from the plugins shared - # objects to be properly bound. - if(CMAKE_SYSTEM_NAME STREQUAL "AIX") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-brtl") - endif() - - # This plugin is built as a stand-alone plugin, so since we don't use the - # ANALYSIS_TEST_SOURCES files, we have to add them to LLVM_OPTIONAL_SOURCES - # so that FileCheck doesn't complain about unsued files. - LIST(APPEND LLVM_OPTIONAL_SOURCES ${ANALYSIS_TEST_SOURCES}) - - unset(LLVM_LINK_COMPONENTS) - add_llvm_library(InlineAdvisorPlugin MODULE BUILDTREE_ONLY InlineAdvisorPlugin.cpp) - # Put PLUGIN next to the unit test executable. - set_output_directory(InlineAdvisorPlugin - BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} - ) - set_target_properties(InlineAdvisorPlugin PROPERTIES FOLDER "Tests") - - export_executable_symbols_for_plugins(AnalysisTests) - # The plugin depends on some of the output files of intrinsics_gen, so make sure - # it is built before the plugin. - add_dependencies(InlineAdvisorPlugin intrinsics_gen) - add_dependencies(AnalysisTests InlineAdvisorPlugin) - set_property(TARGET InlineAdvisorPlugin PROPERTY FOLDER "Tests/UnitTests/AnalysisTests") +# On AIX, enable run-time linking to allow symbols from the plugins shared +# objects to be properly bound. +if(CMAKE_SYSTEM_NAME STREQUAL "AIX") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-brtl") endif() + +add_subdirectory(InlineAdvisorPlugin) diff --git a/llvm/unittests/Analysis/InlineAdvisorPlugin.cpp b/llvm/unittests/Analysis/InlineAdvisorPlugin.cpp deleted file mode 100644 index 6431fda86c9d..000000000000 --- a/llvm/unittests/Analysis/InlineAdvisorPlugin.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "llvm/IR/Function.h" -#include "llvm/IR/Module.h" -#include "llvm/Pass.h" -#include "llvm/Passes/PassBuilder.h" -#include "llvm/Passes/PassPlugin.h" -#include "llvm/Support/CommandLine.h" -#include "llvm/Support/raw_ostream.h" - -#include "llvm/Analysis/InlineAdvisor.h" - -using namespace llvm; - -namespace { - -InlineAdvisor *DefaultAdvisorFactory(Module &M, FunctionAnalysisManager &FAM, - InlineParams Params, InlineContext IC) { - return new DefaultInlineAdvisor(M, FAM, Params, IC); -} - -struct DefaultDynamicAdvisor : PassInfoMixin { - PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM) { - PluginInlineAdvisorAnalysis DA(DefaultAdvisorFactory); - MAM.registerPass([&] { return DA; }); - return PreservedAnalyses::all(); - } -}; - -} // namespace - -/* New PM Registration */ -llvm::PassPluginLibraryInfo getDefaultDynamicAdvisorPluginInfo() { - return {LLVM_PLUGIN_API_VERSION, "DynamicDefaultAdvisor", LLVM_VERSION_STRING, - [](PassBuilder &PB) { - PB.registerPipelineStartEPCallback( - [](ModulePassManager &MPM, OptimizationLevel Level) { - MPM.addPass(DefaultDynamicAdvisor()); - }); - PB.registerPipelineParsingCallback( - [](StringRef Name, ModulePassManager &PM, - ArrayRef InnerPipeline) { - if (Name == "dynamic-inline-advisor") { - PM.addPass(DefaultDynamicAdvisor()); - return true; - } - return false; - }); - }}; -} - -extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo -llvmGetPassPluginInfo() { - return getDefaultDynamicAdvisorPluginInfo(); -} diff --git a/llvm/unittests/Analysis/InlineAdvisorPlugin/CMakeLists.txt b/llvm/unittests/Analysis/InlineAdvisorPlugin/CMakeLists.txt index a819808b3498..ac83dddc0c6e 100644 --- a/llvm/unittests/Analysis/InlineAdvisorPlugin/CMakeLists.txt +++ b/llvm/unittests/Analysis/InlineAdvisorPlugin/CMakeLists.txt @@ -3,12 +3,6 @@ # doesn't work with DLLs on Windows (where a shared library can't have undefined # references), so just skip this testcase on Windows. if (NOT WIN32) - # On AIX, enable run-time linking to allow symbols from the plugins shared - # objects to be properly bound. - if(CMAKE_SYSTEM_NAME STREQUAL "AIX") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-brtl") - endif() - unset(LLVM_LINK_COMPONENTS) add_llvm_library(InlineAdvisorPlugin MODULE BUILDTREE_ONLY InlineAdvisorPlugin.cpp) # Put PLUGIN next to the unit test executable. diff --git a/llvm/unittests/Analysis/InlineAdvisorPlugin/InlineAdvisorPlugin.cpp b/llvm/unittests/Analysis/InlineAdvisorPlugin/InlineAdvisorPlugin.cpp new file mode 100644 index 000000000000..6431fda86c9d --- /dev/null +++ b/llvm/unittests/Analysis/InlineAdvisorPlugin/InlineAdvisorPlugin.cpp @@ -0,0 +1,53 @@ +#include "llvm/IR/Function.h" +#include "llvm/IR/Module.h" +#include "llvm/Pass.h" +#include "llvm/Passes/PassBuilder.h" +#include "llvm/Passes/PassPlugin.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/raw_ostream.h" + +#include "llvm/Analysis/InlineAdvisor.h" + +using namespace llvm; + +namespace { + +InlineAdvisor *DefaultAdvisorFactory(Module &M, FunctionAnalysisManager &FAM, + InlineParams Params, InlineContext IC) { + return new DefaultInlineAdvisor(M, FAM, Params, IC); +} + +struct DefaultDynamicAdvisor : PassInfoMixin { + PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM) { + PluginInlineAdvisorAnalysis DA(DefaultAdvisorFactory); + MAM.registerPass([&] { return DA; }); + return PreservedAnalyses::all(); + } +}; + +} // namespace + +/* New PM Registration */ +llvm::PassPluginLibraryInfo getDefaultDynamicAdvisorPluginInfo() { + return {LLVM_PLUGIN_API_VERSION, "DynamicDefaultAdvisor", LLVM_VERSION_STRING, + [](PassBuilder &PB) { + PB.registerPipelineStartEPCallback( + [](ModulePassManager &MPM, OptimizationLevel Level) { + MPM.addPass(DefaultDynamicAdvisor()); + }); + PB.registerPipelineParsingCallback( + [](StringRef Name, ModulePassManager &PM, + ArrayRef InnerPipeline) { + if (Name == "dynamic-inline-advisor") { + PM.addPass(DefaultDynamicAdvisor()); + return true; + } + return false; + }); + }}; +} + +extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo +llvmGetPassPluginInfo() { + return getDefaultDynamicAdvisorPluginInfo(); +}