Added vicmp, vfmp. Updated docs. Support FreeBSD.

git-svn-id: http://llvm-py.googlecode.com/svn/trunk@51 8d1e9007-1d4e-0410-b67e-1979fd6579aa
This commit is contained in:
mdevan.foobar 2008-11-22 16:46:32 +00:00
commit 3bbc5685a8
11 changed files with 747 additions and 729 deletions

View file

@ -384,10 +384,8 @@ _wrap_objobj2obj(LLVMConstXor, LLVMValueRef, LLVMValueRef, LLVMValueRef)
_wrap_intobjobj2obj(LLVMConstICmp, LLVMValueRef, LLVMValueRef, LLVMValueRef)
_wrap_intobjobj2obj(LLVMConstFCmp, LLVMValueRef, LLVMValueRef, LLVMValueRef)
/* after LLVM 2.3!
_wrap_intobjobj2obj(LLVMConstVICmp, LLVMValueRef, LLVMValueRef, LLVMValueRef)
_wrap_intobjobj2obj(LLVMConstVFCmp, LLVMValueRef, LLVMValueRef, LLVMValueRef)
*/
_wrap_objobj2obj(LLVMConstShl, LLVMValueRef, LLVMValueRef, LLVMValueRef)
_wrap_objobj2obj(LLVMConstLShr, LLVMValueRef, LLVMValueRef, LLVMValueRef)
@ -634,10 +632,8 @@ _wrap_objobjobjstr2obj(LLVMBuildBitCast, LLVMBuilderRef, LLVMValueRef, LLVMTypeR
_wrap_objintobjobjstr2obj(LLVMBuildICmp, LLVMBuilderRef, LLVMValueRef, LLVMValueRef, LLVMValueRef)
_wrap_objintobjobjstr2obj(LLVMBuildFCmp, LLVMBuilderRef, LLVMValueRef, LLVMValueRef, LLVMValueRef)
/* after LLVM 2.3!
_wrap_objintobjobjstr2obj(LLVMBuildVICmp, LLVMBuilderRef, LLVMValueRef, LLVMValueRef, LLVMValueRef)
_wrap_objintobjobjstr2obj(LLVMBuildVFCmp, LLVMBuilderRef, LLVMValueRef, LLVMValueRef, LLVMValueRef)
*/
/* Miscellaneous instructions */
@ -1113,10 +1109,8 @@ static PyMethodDef core_methods[] = {
_method( LLVMConstXor )
_method( LLVMConstICmp )
_method( LLVMConstFCmp )
/* after LLVM 2.3!
_method( LLVMConstVICmp )
_method( LLVMConstVFCmp )
*/
_method( LLVMConstShl )
_method( LLVMConstLShr )
_method( LLVMConstAShr )
@ -1296,10 +1290,8 @@ static PyMethodDef core_methods[] = {
/* Comparisons */
_method( LLVMBuildICmp )
_method( LLVMBuildFCmp )
/* after LLVM 2.3!
_method( LLVMBuildVICmp )
_method( LLVMBuildVFCmp )
*/
/* Miscellaneous instructions */
_method( LLVMBuildGetResult )

View file

@ -1481,14 +1481,13 @@ class Constant(Value):
check_is_constant(rhs)
return Constant(_core.LLVMConstFCmp(real_pred, self.ptr, rhs.ptr))
# after LLVM 2.3!
# def vicmp(self, int_pred, rhs):
# check_is_constant(rhs)
# return Constant(_core.LLVMConstVICmp(int_pred, self.ptr, rhs.ptr))
#
# def vfcmp(self, real_pred, rhs):
# check_is_constant(rhs)
# return Constant(_core.LLVMConstVFCmp(real_pred, self.ptr, rhs.ptr))
def vicmp(self, int_pred, rhs):
check_is_constant(rhs)
return Constant(_core.LLVMConstVICmp(int_pred, self.ptr, rhs.ptr))
def vfcmp(self, real_pred, rhs):
check_is_constant(rhs)
return Constant(_core.LLVMConstVFCmp(real_pred, self.ptr, rhs.ptr))
def shl(self, rhs):
check_is_constant(rhs)
@ -2168,16 +2167,15 @@ class Builder(object):
check_is_value(rhs)
return Value(_core.LLVMBuildFCmp(self.ptr, rpred, lhs.ptr, rhs.ptr, name))
# after LLVM 2.3!
# def vicmp(self, ipred, lhs, rhs, name=""):
# check_is_value(lhs)
# check_is_value(rhs)
# return Value(_core.LLVMBuildVICmp(self.ptr, ipred, lhs.ptr, rhs.ptr, name))
#
# def vfcmp(self, rpred, lhs, rhs, name=""):
# check_is_value(lhs)
# check_is_value(rhs)
# return Value(_core.LLVMBuildVFCmp(self.ptr, rpred, lhs.ptr, rhs.ptr, name))
def vicmp(self, ipred, lhs, rhs, name=""):
check_is_value(lhs)
check_is_value(rhs)
return Value(_core.LLVMBuildVICmp(self.ptr, ipred, lhs.ptr, rhs.ptr, name))
def vfcmp(self, rpred, lhs, rhs, name=""):
check_is_value(lhs)
check_is_value(rhs)
return Value(_core.LLVMBuildVFCmp(self.ptr, rpred, lhs.ptr, rhs.ptr, name))
# misc

View file

@ -99,6 +99,66 @@ char *LLVMDumpValueToString(LLVMValueRef value)
return do_print<LLVMValueRef, llvm::Value>(value);
}
LLVMValueRef LLVMConstVICmp(LLVMIntPredicate predicate, LLVMValueRef lhs,
LLVMValueRef rhs)
{
llvm::Constant *lhsp = llvm::unwrap<llvm::Constant>(lhs);
assert(lhsp);
llvm::Constant *rhsp = llvm::unwrap<llvm::Constant>(rhs);
assert(rhsp);
llvm::Constant *vicmp =
llvm::ConstantExpr::getVICmp(predicate, lhsp, rhsp);
return llvm::wrap(vicmp);
}
LLVMValueRef LLVMConstVFCmp(LLVMRealPredicate predicate, LLVMValueRef lhs,
LLVMValueRef rhs)
{
llvm::Constant *lhsp = llvm::unwrap<llvm::Constant>(lhs);
assert(lhsp);
llvm::Constant *rhsp = llvm::unwrap<llvm::Constant>(rhs);
assert(rhsp);
llvm::Constant *vfcmp =
llvm::ConstantExpr::getVFCmp(predicate, lhsp, rhsp);
return llvm::wrap(vfcmp);
}
LLVMValueRef LLVMBuildVICmp(LLVMBuilderRef builder, LLVMIntPredicate predicate,
LLVMValueRef lhs, LLVMValueRef rhs, const char *name)
{
llvm::IRBuilder<> *builderp = llvm::unwrap(builder);
assert(builderp);
llvm::Value *lhsp = llvm::unwrap(lhs);
assert(lhsp);
llvm::Value *rhsp = llvm::unwrap(rhs);
assert(rhsp);
llvm::Value *inst = builderp->CreateVICmp(
static_cast<llvm::CmpInst::Predicate>(predicate),
lhsp, rhsp, name);
return llvm::wrap(inst);
}
LLVMValueRef LLVMBuildVFCmp(LLVMBuilderRef builder, LLVMRealPredicate predicate,
LLVMValueRef lhs, LLVMValueRef rhs, const char *name)
{
llvm::IRBuilder<> *builderp = llvm::unwrap(builder);
assert(builderp);
llvm::Value *lhsp = llvm::unwrap(lhs);
assert(lhsp);
llvm::Value *rhsp = llvm::unwrap(rhs);
assert(rhsp);
llvm::Value *inst = builderp->CreateVFCmp(
static_cast<llvm::CmpInst::Predicate>(predicate),
lhsp, rhsp, name);
return llvm::wrap(inst);
}
unsigned LLVMModuleGetPointerSize(LLVMModuleRef module)
{
llvm::Module *modulep = llvm::unwrap(module);

View file

@ -66,6 +66,22 @@ LLVMValueRef LLVMBuildRetMultiple(LLVMBuilderRef bulder, LLVMValueRef *values,
LLVMValueRef LLVMBuildGetResult(LLVMBuilderRef builder, LLVMValueRef value,
unsigned index, const char *name);
/* Wraps llvm::ConstantExpr::getVICmp(). */
LLVMValueRef LLVMConstVICmp(LLVMIntPredicate predicate, LLVMValueRef lhs,
LLVMValueRef rhs);
/* Wraps llvm::ConstantExpr::getVFCmp(). */
LLVMValueRef LLVMConstVFCmp(LLVMRealPredicate predicate, LLVMValueRef lhs,
LLVMValueRef rhs);
/* Wraps llvm::IRBuilder::CreateVICmp(). */
LLVMValueRef LLVMBuildVICmp(LLVMBuilderRef builder, LLVMIntPredicate predicate,
LLVMValueRef lhs, LLVMValueRef rhs, const char *name);
/* Wraps llvm::IRBuilder::CreateVFCmp(). */
LLVMValueRef LLVMBuildVFCmp(LLVMBuilderRef builder, LLVMRealPredicate predicate,
LLVMValueRef lhs, LLVMValueRef rhs, const char *name);
/* Wraps llvm::Intrinsic::getDeclaration(). */
LLVMValueRef LLVMGetIntrinsic(LLVMModuleRef builder, int id,
LLVMTypeRef *types, unsigned n_types);