Skip to content

Instantly share code, notes, and snippets.

@vext01
Created August 27, 2021 11:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vext01/301ff503a2abeb0c67740856a5a46c46 to your computer and use it in GitHub Desktop.
Save vext01/301ff503a2abeb0c67740856a5a46c46 to your computer and use it in GitHub Desktop.
Linkage error adding a new pass
usr/bin/ld: ../../../../lib/libLLVMPasses.a(PassBuilder.cpp.o): in function `llvm::detail::PassModel<llvm::Function, llvm::YkTraceInputsPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)':
PassBuilder.cpp:(.text._ZN4llvm6detail9PassModelINS_8FunctionENS_17YkTraceInputsPassENS_17PreservedAnalysesENS_15AnalysisManagerIS2_JEEEJEE3runERS2_RS6_[_ZN4llvm6detail9PassModelINS_8FunctionENS_17YkTraceInputsPassENS_17PreservedAnalysesENS_15AnalysisManagerIS2_JEEEJEE3runERS2_RS6_]+0xa): undefined reference to `llvm::YkTraceInputsPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)'
collect2: error: ld returned 1 exit status
diff --git a/llvm/include/llvm/Transforms/YkTraceInputs/YkTraceInputs.h b/llvm/include/llvm/Transforms/YkTraceInputs/YkTraceInputs.h
new file mode 100644
index 000000000000..9a0e8d59df65
--- /dev/null
+++ b/llvm/include/llvm/Transforms/YkTraceInputs/YkTraceInputs.h
@@ -0,0 +1,13 @@
+#ifndef LLVM_TRANSFORMS_YKTRACEINPUTS_YKTRACEINPUTS_H
+#define LLVM_TRANSFORMS_YKTRACEINPUTS_YKTRACEINPUTS_H
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+ class YkTraceInputsPass : public PassInfoMixin<YkTraceInputsPass> {
+ public:
+ PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+ };
+}
+
+#endif
diff --git a/llvm/lib/Passes/CMakeLists.txt b/llvm/lib/Passes/CMakeLists.txt
index d834c0db4b45..69099e2d79f3 100644
--- a/llvm/lib/Passes/CMakeLists.txt
+++ b/llvm/lib/Passes/CMakeLists.txt
@@ -25,4 +25,7 @@ add_llvm_component_library(LLVMPasses
TransformUtils
Vectorize
Instrumentation
+
+ # FIXME: gets rid of linker error, but pass is unusable from opt tool.
+ #YkTraceInputs
)
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 6c1a7c75d30a..dca2b0a4692f 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -236,6 +236,7 @@
#include "llvm/Transforms/Vectorize/LoopVectorize.h"
#include "llvm/Transforms/Vectorize/SLPVectorizer.h"
#include "llvm/Transforms/Vectorize/VectorCombine.h"
+#include "llvm/Transforms/YkTraceInputs/YkTraceInputs.h"
using namespace llvm;
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 877cb9ed13b3..e040c3ae74c7 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -328,6 +328,7 @@ FUNCTION_PASS("msan", MemorySanitizerPass({}))
FUNCTION_PASS("kmsan", MemorySanitizerPass({0, false, /*Kernel=*/true}))
FUNCTION_PASS("tsan", ThreadSanitizerPass())
FUNCTION_PASS("memprof", MemProfilerPass())
+FUNCTION_PASS("yktraceinputs", YkTraceInputsPass())
#undef FUNCTION_PASS
#ifndef FUNCTION_PASS_WITH_PARAMS
diff --git a/llvm/lib/Transforms/CMakeLists.txt b/llvm/lib/Transforms/CMakeLists.txt
index 2a0abebdf19b..572d35d74ef4 100644
--- a/llvm/lib/Transforms/CMakeLists.txt
+++ b/llvm/lib/Transforms/CMakeLists.txt
@@ -10,3 +10,4 @@ add_subdirectory(HelloNew)
add_subdirectory(ObjCARC)
add_subdirectory(Coroutines)
add_subdirectory(CFGuard)
+add_subdirectory(YkTraceInputs)
diff --git a/llvm/lib/Transforms/YkTraceInputs/CMakeLists.txt b/llvm/lib/Transforms/YkTraceInputs/CMakeLists.txt
new file mode 100644
index 000000000000..2d03e0d1481f
--- /dev/null
+++ b/llvm/lib/Transforms/YkTraceInputs/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_llvm_component_library(LLVMYkTraceInputs
+ YkTraceInputs.cpp
+
+ DEPENDS
+ intrinsics_gen
+
+ LINK_COMPONENTS
+ Core
+ Support
+)
diff --git a/llvm/lib/Transforms/YkTraceInputs/YkTraceInputs.cpp b/llvm/lib/Transforms/YkTraceInputs/YkTraceInputs.cpp
new file mode 100644
index 000000000000..9a116d7d595b
--- /dev/null
+++ b/llvm/lib/Transforms/YkTraceInputs/YkTraceInputs.cpp
@@ -0,0 +1,11 @@
+#include "llvm/Transforms/YkTraceInputs/YkTraceInputs.h"
+#include "llvm/Support/Debug.h"
+
+#define DEBUG_TYPE "yktraceinputs"
+
+using namespace llvm;
+
+PreservedAnalyses YkTraceInputsPass::run(Function &F, FunctionAnalysisManager &AM) {
+ errs() << "YkTraceInputsPass::run(): " << F.getName() << "\n";
+ return PreservedAnalyses::all();
+}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment