Add binding for MDNode, MDString, InlineAsm
This commit is contained in:
parent
11cc78d780
commit
541c119fc3
4 changed files with 61 additions and 4 deletions
|
|
@ -697,8 +697,8 @@ PyObject* ConstantVector_get(PyObject* Elems)
|
||||||
|
|
||||||
static
|
static
|
||||||
PyObject* Intrinsic_getDeclaration(llvm::Module* Mod,
|
PyObject* Intrinsic_getDeclaration(llvm::Module* Mod,
|
||||||
unsigned ID,
|
unsigned ID,
|
||||||
PyObject* Types=NULL)
|
PyObject* Types=NULL)
|
||||||
{
|
{
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
Function* Fn = NULL;
|
Function* Fn = NULL;
|
||||||
|
|
@ -713,3 +713,16 @@ PyObject* Intrinsic_getDeclaration(llvm::Module* Mod,
|
||||||
return pycapsule_new(Fn, "llvm::Value", "llvm::Function");
|
return pycapsule_new(Fn, "llvm::Value", "llvm::Function");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
PyObject* MDNode_get(llvm::LLVMContext &Cxt, PyObject* Vals)
|
||||||
|
{
|
||||||
|
std::vector<llvm::Value*> vals;
|
||||||
|
bool ok = extract<llvm::Value>::from_py_sequence(vals, Vals, "llvm::Value");
|
||||||
|
if (not ok) return NULL;
|
||||||
|
llvm::MDNode* md = llvm::MDNode::get(Cxt, vals);
|
||||||
|
return pycapsule_new(md, "llvm::Value", "llvm::MDNode");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
24
newbinding/src/InlineAsm.py
Normal file
24
newbinding/src/InlineAsm.py
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
from binding import *
|
||||||
|
from namespace import llvm
|
||||||
|
from Value import Value
|
||||||
|
from DerivedTypes import FunctionType
|
||||||
|
from ADT.StringRef import StringRef
|
||||||
|
|
||||||
|
llvm.includes.add('llvm/InlineAsm.h')
|
||||||
|
|
||||||
|
InlineAsm = llvm.Class(Value)
|
||||||
|
|
||||||
|
@InlineAsm
|
||||||
|
class InlineAsm:
|
||||||
|
AsmDialect = Enum('AD_ATT', 'AD_Intel')
|
||||||
|
ConstraintPrefix = Enum('''isInput, isOutput, isClobber''')
|
||||||
|
|
||||||
|
get = StaticMethod(ptr(InlineAsm),
|
||||||
|
ptr(FunctionType),
|
||||||
|
cast(str, StringRef), # AsmString
|
||||||
|
cast(str, StringRef), # Constrains
|
||||||
|
cast(bool, Bool), # hasSideEffects
|
||||||
|
cast(bool, Bool), # isAlignStack
|
||||||
|
AsmDialect, # default = AD_ATT
|
||||||
|
).require_only(4)
|
||||||
|
|
||||||
|
|
@ -1,14 +1,32 @@
|
||||||
from binding import *
|
from binding import *
|
||||||
from namespace import llvm
|
from namespace import llvm
|
||||||
from Value import MDNode
|
from Value import Value, MDNode, MDString
|
||||||
|
from LLVMContext import LLVMContext
|
||||||
from ADT.StringRef import StringRef
|
from ADT.StringRef import StringRef
|
||||||
from Module import Module
|
from Module import Module
|
||||||
|
from Function import Function
|
||||||
from Support.raw_ostream import raw_ostream
|
from Support.raw_ostream import raw_ostream
|
||||||
from Assembly.AssemblyAnnotationWriter import AssemblyAnnotationWriter
|
from Assembly.AssemblyAnnotationWriter import AssemblyAnnotationWriter
|
||||||
|
|
||||||
@MDNode
|
@MDNode
|
||||||
class MDNode:
|
class MDNode:
|
||||||
pass
|
replaceOperandWith = Method(Void, cast(int, Unsigned), ptr(Value))
|
||||||
|
getOperand = Method(ptr(Value), cast(int, Unsigned))
|
||||||
|
getNumOperands = Method(cast(Unsigned, int))
|
||||||
|
isFunctionLocal = Method(cast(Bool, bool))
|
||||||
|
getFunction = Method(const(ptr(Function)))
|
||||||
|
|
||||||
|
get = CustomStaticMethod('MDNode_get',
|
||||||
|
PyObjectPtr, # MDNode*
|
||||||
|
ref(LLVMContext),
|
||||||
|
PyObjectPtr, # ArrayRef<Value*>
|
||||||
|
)
|
||||||
|
|
||||||
|
@MDString
|
||||||
|
class MDString:
|
||||||
|
get = StaticMethod(ptr(MDString), ref(LLVMContext), cast(str, StringRef))
|
||||||
|
getString = Method(cast(StringRef, str))
|
||||||
|
getLength = Method(cast(int, Unsigned))
|
||||||
|
|
||||||
@llvm.Class()
|
@llvm.Class()
|
||||||
class NamedMDNode:
|
class NamedMDNode:
|
||||||
|
|
@ -18,6 +36,7 @@ class NamedMDNode:
|
||||||
getOperand = Method(ptr(MDNode), cast(int, Unsigned))
|
getOperand = Method(ptr(MDNode), cast(int, Unsigned))
|
||||||
getNumOperands = Method(cast(Unsigned, int))
|
getNumOperands = Method(cast(Unsigned, int))
|
||||||
getName = Method(cast(StringRef, str))
|
getName = Method(cast(StringRef, str))
|
||||||
|
addOperand = Method(Void, ptr(MDNode))
|
||||||
print_ = Method(Void, ref(raw_ostream), ptr(AssemblyAnnotationWriter))
|
print_ = Method(Void, ref(raw_ostream), ptr(AssemblyAnnotationWriter))
|
||||||
print_.realname = "print"
|
print_.realname = "print"
|
||||||
dump = Method()
|
dump = Method()
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ from namespace import llvm
|
||||||
Value = llvm.Class()
|
Value = llvm.Class()
|
||||||
Argument = llvm.Class(Value)
|
Argument = llvm.Class(Value)
|
||||||
MDNode = llvm.Class(Value)
|
MDNode = llvm.Class(Value)
|
||||||
|
MDString = llvm.Class(Value)
|
||||||
User = llvm.Class(Value)
|
User = llvm.Class(Value)
|
||||||
BasicBlock = llvm.Class(Value)
|
BasicBlock = llvm.Class(Value)
|
||||||
Constant = llvm.Class(User)
|
Constant = llvm.Class(User)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue