1 
2 #include "backports.h"
3 #include "llvm/IR/Instructions.h"
4 #include "llvm/Transforms/IPO/PassManagerBuilder.h"
5 #include "llvm/Transforms/Coroutines.h"
6 #include "llvm-c/DebugInfo.h"
7 
8 namespace llvm {
9 
unwrap(LLVMPassManagerBuilderRef P)10 inline PassManagerBuilder *unwrap(LLVMPassManagerBuilderRef P) {
11   return reinterpret_cast<PassManagerBuilder*>(P);
12 }
13 
wrap(PassManagerBuilder * P)14 inline LLVMPassManagerBuilderRef wrap(PassManagerBuilder *P) {
15   return reinterpret_cast<LLVMPassManagerBuilderRef>(P);
16 }
17 
18 } // end namespace llvm
19 
LLVMPassManagerBuilderAddCoroutinePassesToExtensionPoints_backport(LLVMPassManagerBuilderRef PMB)20 void LLVMPassManagerBuilderAddCoroutinePassesToExtensionPoints_backport(LLVMPassManagerBuilderRef PMB) {
21   llvm::PassManagerBuilder *Builder = llvm::unwrap(PMB);
22   llvm::addCoroutinePassesToExtensionPoints(*Builder);
23 }
24 
LLVMGlobalObjectAddMetadata(LLVMValueRef Global,unsigned KindID,LLVMMetadataRef MD)25 void LLVMGlobalObjectAddMetadata(LLVMValueRef Global, unsigned KindID, LLVMMetadataRef MD) {
26   llvm::MDNode *N = MD ? llvm::unwrap<llvm::MDNode>(MD) : nullptr;
27   llvm::GlobalObject *O = llvm::unwrap<llvm::GlobalObject>(Global);
28   O->addMetadata(KindID, *N);
29 }
30 
31 LLVMMetadataRef
LLVMGoDIBuilderCreateTypedef(LLVMDIBuilderRef Builder,LLVMMetadataRef Type,const char * Name,size_t NameLen,LLVMMetadataRef File,unsigned LineNo,LLVMMetadataRef Scope,uint32_t AlignInBits)32 LLVMGoDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type,
33                              const char *Name, size_t NameLen,
34                              LLVMMetadataRef File, unsigned LineNo,
35                              LLVMMetadataRef Scope, uint32_t AlignInBits) {
36 #if LLVM_VERSION_MAJOR >= 10
37 	return LLVMDIBuilderCreateTypedef(Builder, Type, Name, NameLen, File, LineNo, Scope, AlignInBits);
38 #else
39 	return LLVMDIBuilderCreateTypedef(Builder, Type, Name, NameLen, File, LineNo, Scope);
40 #endif
41 }
42