Skip to content

Commit 187dee8

Browse files
fsfodNoumanAmir657
authored andcommitted
[SandboxIR] Add extern templates for GlobalWithNodeAPI (llvm#111940)
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.
1 parent e1b178e commit 187dee8

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

llvm/include/llvm/SandboxIR/Constant.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "llvm/SandboxIR/Context.h"
2323
#include "llvm/SandboxIR/Type.h"
2424
#include "llvm/SandboxIR/User.h"
25+
#include "llvm/Support/Compiler.h"
2526

2627
namespace llvm::sandboxir {
2728

@@ -797,6 +798,25 @@ class GlobalWithNodeAPI : public ParentT {
797798
}
798799
};
799800

801+
// These are needed for SandboxIRTest when building with LLVM_BUILD_LLVM_DYLIB
802+
extern template LLVM_TEMPLATE_ABI GlobalIFunc &
803+
GlobalWithNodeAPI<GlobalIFunc, llvm::GlobalIFunc, GlobalObject,
804+
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalIFunc
805+
&LLVMGV)
806+
const;
807+
extern template LLVM_TEMPLATE_ABI Function &
808+
GlobalWithNodeAPI<Function, llvm::Function, GlobalObject, llvm::GlobalObject>::
809+
LLVMGVToGV::operator()(llvm::Function &LLVMGV) const;
810+
811+
extern template LLVM_TEMPLATE_ABI GlobalVariable &GlobalWithNodeAPI<
812+
GlobalVariable, llvm::GlobalVariable, GlobalObject,
813+
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalVariable &LLVMGV)
814+
const;
815+
extern template LLVM_TEMPLATE_ABI GlobalAlias &
816+
GlobalWithNodeAPI<GlobalAlias, llvm::GlobalAlias, GlobalValue,
817+
llvm::GlobalValue>::LLVMGVToGV::operator()(llvm::GlobalAlias
818+
&LLVMGV) const;
819+
800820
class GlobalIFunc final
801821
: public GlobalWithNodeAPI<GlobalIFunc, llvm::GlobalIFunc, GlobalObject,
802822
llvm::GlobalObject> {

llvm/lib/SandboxIR/Constant.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "llvm/SandboxIR/BasicBlock.h"
1212
#include "llvm/SandboxIR/Context.h"
1313
#include "llvm/SandboxIR/Function.h"
14+
#include "llvm/Support/Compiler.h"
1415

1516
namespace llvm::sandboxir {
1617

@@ -301,6 +302,27 @@ template class GlobalWithNodeAPI<GlobalVariable, llvm::GlobalVariable,
301302
template class GlobalWithNodeAPI<GlobalAlias, llvm::GlobalAlias, GlobalValue,
302303
llvm::GlobalValue>;
303304

305+
#ifdef _MSC_VER
306+
// These are needed for SandboxIRTest when building with LLVM_BUILD_LLVM_DYLIB
307+
template LLVM_EXPORT_TEMPLATE GlobalIFunc &
308+
GlobalWithNodeAPI<GlobalIFunc, llvm::GlobalIFunc, GlobalObject,
309+
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalIFunc
310+
&LLVMGV)
311+
const;
312+
template LLVM_EXPORT_TEMPLATE Function &
313+
GlobalWithNodeAPI<Function, llvm::Function, GlobalObject, llvm::GlobalObject>::
314+
LLVMGVToGV::operator()(llvm::Function &LLVMGV) const;
315+
316+
template LLVM_EXPORT_TEMPLATE GlobalVariable &GlobalWithNodeAPI<
317+
GlobalVariable, llvm::GlobalVariable, GlobalObject,
318+
llvm::GlobalObject>::LLVMGVToGV::operator()(llvm::GlobalVariable &LLVMGV)
319+
const;
320+
template LLVM_EXPORT_TEMPLATE GlobalAlias &
321+
GlobalWithNodeAPI<GlobalAlias, llvm::GlobalAlias, GlobalValue,
322+
llvm::GlobalValue>::LLVMGVToGV::operator()(llvm::GlobalAlias
323+
&LLVMGV) const;
324+
#endif
325+
304326
void GlobalIFunc::setResolver(Constant *Resolver) {
305327
Ctx.getTracker()
306328
.emplaceIfTracking<

0 commit comments

Comments
 (0)