Skip to content

Commit

Permalink
[SandboxIR] Add extern templates for GlobalWithNodeAPI (llvm#111940)
Browse files Browse the repository at this point in the history
These symbols will need to be explicitly exported for SandboxIRTests
when LLVM is built as shared library on window with explicitly
visibility macros are enabled.

This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and plugins on
windows.
  • Loading branch information
fsfod authored Oct 24, 2024
1 parent b8fddca commit a905052
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
20 changes: 20 additions & 0 deletions llvm/include/llvm/SandboxIR/Constant.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "llvm/SandboxIR/Context.h"
#include "llvm/SandboxIR/Type.h"
#include "llvm/SandboxIR/User.h"
#include "llvm/Support/Compiler.h"

namespace llvm::sandboxir {

Expand Down Expand Up @@ -797,6 +798,25 @@ class GlobalWithNodeAPI : public ParentT {
}
};

// These are needed for SandboxIRTest when building with LLVM_BUILD_LLVM_DYLIB
extern template LLVM_TEMPLATE_ABI GlobalIFunc &
GlobalWithNodeAPI<GlobalIFunc, llvm::GlobalIFunc, GlobalObject,
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalIFunc
&LLVMGV)
const;
extern template LLVM_TEMPLATE_ABI Function &
GlobalWithNodeAPI<Function, llvm::Function, GlobalObject, llvm::GlobalObject>::
LLVMGVToGV::operator()(llvm::Function &LLVMGV) const;

extern template LLVM_TEMPLATE_ABI GlobalVariable &GlobalWithNodeAPI<
GlobalVariable, llvm::GlobalVariable, GlobalObject,
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalVariable &LLVMGV)
const;
extern template LLVM_TEMPLATE_ABI GlobalAlias &
GlobalWithNodeAPI<GlobalAlias, llvm::GlobalAlias, GlobalValue,
llvm::GlobalValue>::LLVMGVToGV::operator()(llvm::GlobalAlias
&LLVMGV) const;

class GlobalIFunc final
: public GlobalWithNodeAPI<GlobalIFunc, llvm::GlobalIFunc, GlobalObject,
llvm::GlobalObject> {
Expand Down
22 changes: 22 additions & 0 deletions llvm/lib/SandboxIR/Constant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "llvm/SandboxIR/BasicBlock.h"
#include "llvm/SandboxIR/Context.h"
#include "llvm/SandboxIR/Function.h"
#include "llvm/Support/Compiler.h"

namespace llvm::sandboxir {

Expand Down Expand Up @@ -301,6 +302,27 @@ template class GlobalWithNodeAPI<GlobalVariable, llvm::GlobalVariable,
template class GlobalWithNodeAPI<GlobalAlias, llvm::GlobalAlias, GlobalValue,
llvm::GlobalValue>;

#ifdef _MSC_VER
// These are needed for SandboxIRTest when building with LLVM_BUILD_LLVM_DYLIB
template LLVM_EXPORT_TEMPLATE GlobalIFunc &
GlobalWithNodeAPI<GlobalIFunc, llvm::GlobalIFunc, GlobalObject,
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalIFunc
&LLVMGV)
const;
template LLVM_EXPORT_TEMPLATE Function &
GlobalWithNodeAPI<Function, llvm::Function, GlobalObject, llvm::GlobalObject>::
LLVMGVToGV::operator()(llvm::Function &LLVMGV) const;

template LLVM_EXPORT_TEMPLATE GlobalVariable &GlobalWithNodeAPI<
GlobalVariable, llvm::GlobalVariable, GlobalObject,
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalVariable &LLVMGV)
const;
template LLVM_EXPORT_TEMPLATE GlobalAlias &
GlobalWithNodeAPI<GlobalAlias, llvm::GlobalAlias, GlobalValue,
llvm::GlobalValue>::LLVMGVToGV::operator()(llvm::GlobalAlias
&LLVMGV) const;
#endif

void GlobalIFunc::setResolver(Constant *Resolver) {
Ctx.getTracker()
.emplaceIfTracking<
Expand Down

0 comments on commit a905052

Please sign in to comment.