[InlineAdvisor] Restructure advisor plugin unittest cmake
authoribricchi <ibricchi@student.ethz.ch>
Tue, 14 Feb 2023 20:32:26 +0000 (15:32 -0500)
committerJake Egan <jake.egan@ibm.com>
Tue, 14 Feb 2023 20:33:13 +0000 (15:33 -0500)
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

llvm/unittests/Analysis/CMakeLists.txt
llvm/unittests/Analysis/InlineAdvisorPlugin.cpp [deleted file]
llvm/unittests/Analysis/InlineAdvisorPlugin/CMakeLists.txt
llvm/unittests/Analysis/InlineAdvisorPlugin/InlineAdvisorPlugin.cpp [new file with mode: 0644]

index 7b9f942be6977fe3474c252f1c2b958c0463cfbf..f7f17b394faad42be681d66cab6355d8d3a4c1c9 100644 (file)
@@ -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 (file)
index 6431fda..0000000
+++ /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<DefaultDynamicAdvisor> {
-  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<PassBuilder::PipelineElement> InnerPipeline) {
-                  if (Name == "dynamic-inline-advisor") {
-                    PM.addPass(DefaultDynamicAdvisor());
-                    return true;
-                  }
-                  return false;
-                });
-          }};
-}
-
-extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo
-llvmGetPassPluginInfo() {
-  return getDefaultDynamicAdvisorPluginInfo();
-}
index a819808b34984fcace1c7407da01ecec43515af6..ac83dddc0c6e74bf94c17a81f2364625b38ad170 100644 (file)
@@ -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 (file)
index 0000000..6431fda
--- /dev/null
@@ -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<DefaultDynamicAdvisor> {
+  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<PassBuilder::PipelineElement> InnerPipeline) {
+                  if (Name == "dynamic-inline-advisor") {
+                    PM.addPass(DefaultDynamicAdvisor());
+                    return true;
+                  }
+                  return false;
+                });
+          }};
+}
+
+extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo
+llvmGetPassPluginInfo() {
+  return getDefaultDynamicAdvisorPluginInfo();
+}