Fixed Builder.select (Paulo Silva); added Instruction.is_terminator.
git-svn-id: http://llvm-py.googlecode.com/svn/trunk@40 8d1e9007-1d4e-0410-b67e-1979fd6579aa
This commit is contained in:
parent
f42a40c120
commit
bf2d901db2
7 changed files with 28 additions and 5 deletions
|
|
@ -1,3 +1,11 @@
|
|||
|
||||
0.4, in progress:
|
||||
|
||||
* Instruction.is_terminator added.
|
||||
* Fix Builder.select (Paulo Silva).
|
||||
* Added viewCFG methods to Function (Paulo Silva).
|
||||
|
||||
|
||||
0.3, 8-Sep-2008:
|
||||
|
||||
* Passes added.
|
||||
|
|
|
|||
|
|
@ -461,6 +461,7 @@ _wrap_obj2none(LLVMDeleteBasicBlock, LLVMBasicBlockRef)
|
|||
_wrap_obj2obj(LLVMGetInstructionParent, LLVMValueRef, LLVMBasicBlockRef)
|
||||
_wrap_obj2obj(LLVMGetFirstInstruction, LLVMBasicBlockRef, LLVMValueRef)
|
||||
_wrap_obj2obj(LLVMGetNextInstruction, LLVMValueRef, LLVMValueRef)
|
||||
_wrap_obj2obj(LLVMInstIsTerminator, LLVMValueRef, int)
|
||||
|
||||
/*===-- Call Sites (Call or Invoke) --------------------------------------===*/
|
||||
|
||||
|
|
@ -1129,6 +1130,7 @@ static PyMethodDef core_methods[] = {
|
|||
_method( LLVMGetInstructionParent )
|
||||
_method( LLVMGetFirstInstruction )
|
||||
_method( LLVMGetNextInstruction )
|
||||
_method( LLVMInstIsTerminator )
|
||||
|
||||
/* Call Sites (Call or Invoke) */
|
||||
_method( LLVMSetInstructionCallConv )
|
||||
|
|
|
|||
12
llvm/core.py
12
llvm/core.py
|
|
@ -1670,6 +1670,10 @@ class Instruction(Value):
|
|||
def basic_block(self):
|
||||
return BasicBlock(_core.LLVMGetInstructionParent(self.ptr))
|
||||
|
||||
@property
|
||||
def is_terminator(self):
|
||||
return _core.LLVMInstIsTerminator(self.ptr)
|
||||
|
||||
|
||||
class CallOrInvokeInstruction(Instruction):
|
||||
|
||||
|
|
@ -2058,11 +2062,11 @@ class Builder(object):
|
|||
arg_ptrs = unpack_values(args)
|
||||
return CallOrInvokeInstruction(_core.LLVMBuildCall(self.ptr, fn.ptr, arg_ptrs, name))
|
||||
|
||||
def select(self, cond, then_blk, else_blk, name=""):
|
||||
def select(self, cond, then_value, else_value, name=""):
|
||||
check_is_value(cond)
|
||||
check_is_basic_block(then_blk)
|
||||
check_is_basic_block(else_blk)
|
||||
return Value(_core.LLVMBuildSelect(self.ptr, cond.ptr, then_blk.ptr, else_blk.ptr, name))
|
||||
check_is_value(then_value)
|
||||
check_is_value(else_value)
|
||||
return Value(_core.LLVMBuildSelect(self.ptr, cond.ptr, then_value.ptr, else_value.ptr, name))
|
||||
|
||||
def vaarg(self, list_val, ty, name=""):
|
||||
check_is_value(list_val)
|
||||
|
|
|
|||
|
|
@ -84,6 +84,10 @@ LLVMValueRef LLVMBuildVFCmp(LLVMBuilderRef B, LLVMRealPredicate Op,
|
|||
}
|
||||
#endif
|
||||
|
||||
unsigned LLVMInstIsTerminator(LLVMValueRef I) {
|
||||
return unwrap<Instruction>(I)->isTerminator() ? 1 : 0;
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildRetMultiple(LLVMBuilderRef B, LLVMValueRef *Values,
|
||||
unsigned NumValues) {
|
||||
std::vector<Value *> Vs;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,10 @@ LLVMValueRef LLVMBuildGetResult(LLVMBuilderRef, LLVMValueRef V,
|
|||
LLVMValueRef LLVMGetIntrinsic(LLVMModuleRef B, int ID,
|
||||
LLVMTypeRef *Types, unsigned Count);
|
||||
|
||||
/* instruction */
|
||||
|
||||
unsigned LLVMInstIsTerminator(LLVMValueRef I);
|
||||
|
||||
/* reading llvm "assembly" */
|
||||
|
||||
LLVMModuleRef LLVMGetModuleFromAssembly(const char *A, unsigned Len,
|
||||
|
|
|
|||
2
setup.py
2
setup.py
|
|
@ -72,7 +72,7 @@ def call_setup(llvm_config):
|
|||
|
||||
setup(
|
||||
name='llvm-py',
|
||||
version='0.3',
|
||||
version='0.4',
|
||||
description='Python Bindings for LLVM',
|
||||
author='Mahadevan R',
|
||||
author_email='mdevan.foobar@gmail.com',
|
||||
|
|
|
|||
|
|
@ -409,6 +409,7 @@ def do_builder():
|
|||
# destruction.
|
||||
i = b.phi(Type.int())
|
||||
i.add_incoming(v, blk)
|
||||
t = i.is_terminator == False
|
||||
|
||||
|
||||
def do_moduleprovider():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue