add NVPTX for LLVM 3.2;
auto-gen _intrinsic_ids.py in setup.py;
This commit is contained in:
parent
505d280fe0
commit
d1bcdd05d1
9 changed files with 99 additions and 1961 deletions
|
|
@ -43,6 +43,11 @@
|
|||
#include "llvm-c/ExecutionEngine.h"
|
||||
#include "llvm-c/Target.h"
|
||||
#include "llvm-c/Transforms/IPO.h"
|
||||
#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR >= 2
|
||||
#include "llvm-c/Linker.h"
|
||||
#else
|
||||
typedef unsigned int LLVMLinkerMode;
|
||||
#endif
|
||||
|
||||
/* libc includes */
|
||||
#include <stdarg.h> /* for malloc(), free() */
|
||||
|
|
@ -225,7 +230,7 @@ _wLLVMLinkModules(PyObject *self, PyObject *args)
|
|||
dest = (LLVMModuleRef) PyCapsule_GetPointer(dest_obj, NULL);
|
||||
src = (LLVMModuleRef) PyCapsule_GetPointer(src_obj, NULL);
|
||||
|
||||
if (!LLVMLinkModules(dest, src, mode, &errmsg)) {
|
||||
if (!LLVMLinkModules(dest, src, (LLVMLinkerMode)mode, &errmsg)) {
|
||||
if (errmsg) {
|
||||
ret = PyUnicode_FromString(errmsg);
|
||||
LLVMDisposeMessage(errmsg);
|
||||
|
|
@ -897,11 +902,17 @@ _wrap_none2none(LLVMInitializePasses)
|
|||
|
||||
_wrap_none2obj(LLVMInitializeNativeTarget, int)
|
||||
_wrap_none2obj(LLVMInitializeNativeTargetAsmPrinter, int)
|
||||
#if LLVM_HAS_NVPTX
|
||||
_wrap_none2none(LLVMInitializeNVPTXTarget)
|
||||
_wrap_none2none(LLVMInitializeNVPTXTargetInfo)
|
||||
_wrap_none2none( LLVMInitializeNVPTXTargetMC )
|
||||
_wrap_none2none(LLVMInitializeNVPTXAsmPrinter)
|
||||
#else
|
||||
_wrap_none2none(LLVMInitializePTXTarget)
|
||||
_wrap_none2none(LLVMInitializePTXTargetInfo)
|
||||
_wrap_none2none( LLVMInitializePTXTargetMC )
|
||||
_wrap_none2none(LLVMInitializePTXAsmPrinter)
|
||||
|
||||
#endif
|
||||
|
||||
/*===----------------------------------------------------------------------===*/
|
||||
/* Passes */
|
||||
|
|
@ -1822,11 +1833,17 @@ static PyMethodDef core_methods[] = {
|
|||
|
||||
_method( LLVMInitializeNativeTarget )
|
||||
_method( LLVMInitializeNativeTargetAsmPrinter )
|
||||
#if LLVM_HAS_NVPTX
|
||||
_method( LLVMInitializeNVPTXTarget )
|
||||
_method( LLVMInitializeNVPTXTargetInfo )
|
||||
_method( LLVMInitializeNVPTXTargetMC )
|
||||
_method( LLVMInitializeNVPTXAsmPrinter )
|
||||
#else
|
||||
_method( LLVMInitializePTXTarget )
|
||||
_method( LLVMInitializePTXTargetInfo )
|
||||
_method( LLVMInitializePTXTargetMC )
|
||||
_method( LLVMInitializePTXAsmPrinter )
|
||||
|
||||
#endif
|
||||
/* Passes */
|
||||
|
||||
/*
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
21
llvm/core.py
21
llvm/core.py
|
|
@ -2155,8 +2155,19 @@ if _core.LLVMInitializeNativeTargetAsmPrinter():
|
|||
# should user trigger the initialization?
|
||||
raise llvm.LLVMException("No native asm printer!?")
|
||||
|
||||
if True: # use PTX
|
||||
_core.LLVMInitializePTXTarget()
|
||||
_core.LLVMInitializePTXTargetInfo()
|
||||
_core.LLVMInitializePTXTargetMC()
|
||||
_core.LLVMInitializePTXAsmPrinter()
|
||||
|
||||
HAS_PTX = HAS_NVPTX = False
|
||||
if True: # use PTX?
|
||||
try:
|
||||
_core.LLVMInitializePTXTarget()
|
||||
_core.LLVMInitializePTXTargetInfo()
|
||||
_core.LLVMInitializePTXTargetMC()
|
||||
_core.LLVMInitializePTXAsmPrinter()
|
||||
HAS_PTX = True
|
||||
except AttributeError:
|
||||
_core.LLVMInitializeNVPTXTarget()
|
||||
_core.LLVMInitializeNVPTXTargetInfo()
|
||||
_core.LLVMInitializeNVPTXTargetMC()
|
||||
_core.LLVMInitializeNVPTXAsmPrinter()
|
||||
HAS_NVPTX = True
|
||||
|
||||
|
|
|
|||
|
|
@ -893,6 +893,7 @@ LLVMModuleRef LLVMGetModuleFromBitcode(const char *bitcode, unsigned bclen,
|
|||
return wrap(modulep);
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MAJOR <= 3 && LLVM_VERSION_MINOR < 2
|
||||
unsigned LLVMLinkModules(LLVMModuleRef dest, LLVMModuleRef src, unsigned int mode,
|
||||
char **out)
|
||||
{
|
||||
|
|
@ -909,6 +910,7 @@ unsigned LLVMLinkModules(LLVMModuleRef dest, LLVMModuleRef src, unsigned int mod
|
|||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
unsigned char *LLVMGetBitcodeFromModule(LLVMModuleRef module, unsigned *lenp)
|
||||
{
|
||||
|
|
|
|||
13
llvm/extra.h
13
llvm/extra.h
|
|
@ -37,10 +37,20 @@
|
|||
#ifndef LLVM_PY_EXTRA_H
|
||||
#define LLVM_PY_EXTRA_H
|
||||
|
||||
// select PTX or NVPTX
|
||||
|
||||
#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR >= 2
|
||||
#define LLVM_HAS_NVPTX 1
|
||||
#else
|
||||
#define LLVM_HAS_NVPTX 0
|
||||
#endif
|
||||
|
||||
|
||||
#include "llvm-c/Transforms/PassManagerBuilder.h"
|
||||
|
||||
#include "llvm_c_extra.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
@ -381,12 +391,13 @@ LLVMModuleRef LLVMGetModuleFromAssembly(const char *asmtxt, char **out);
|
|||
LLVMModuleRef LLVMGetModuleFromBitcode(const char *bc, unsigned bclen,
|
||||
char **out);
|
||||
|
||||
#if LLVM_VERSION_MAJOR <= 3 && LLVM_VERSION_MINOR < 2
|
||||
/* Wraps llvm::Linker::LinkModules(). Returns 0 on failure (with errmsg
|
||||
* filled in) and 1 on success. Dispose error message after use with
|
||||
* LLVMDisposeMessage(). */
|
||||
unsigned LLVMLinkModules(LLVMModuleRef dest, LLVMModuleRef src,
|
||||
unsigned int, char **errmsg);
|
||||
|
||||
#endif
|
||||
/* Returns pointer to a heap-allocated block of `*len' bytes containing bit code
|
||||
* for the given module. NULL on error. */
|
||||
unsigned char *LLVMGetBitcodeFromModule(LLVMModuleRef module, unsigned *len);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue