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:
mdevan.foobar 2008-09-10 11:26:57 +00:00
commit bf2d901db2
7 changed files with 28 additions and 5 deletions

View file

@ -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.

View file

@ -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 )

View file

@ -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)

View file

@ -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;

View file

@ -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,

View file

@ -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',

View file

@ -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():