From fa4927e1fb6cb195206fbbf4d13d311148921690 Mon Sep 17 00:00:00 2001 From: Siu Kwan Lam Date: Mon, 28 Jan 2013 15:20:50 -0600 Subject: [PATCH] Start to work on IRBuilder --- newbinding/src/Constant.py | 5 +++-- newbinding/src/Function.py | 8 ++++---- newbinding/src/GlobalValue.py | 4 ++-- newbinding/src/User.py | 5 ++--- newbinding/src/Value.py | 13 +++++++++++++ newbinding/test2.py | 12 ++++++++++++ 6 files changed, 36 insertions(+), 11 deletions(-) diff --git a/newbinding/src/Constant.py b/newbinding/src/Constant.py index 14ff6bb..c59fef4 100644 --- a/newbinding/src/Constant.py +++ b/newbinding/src/Constant.py @@ -1,7 +1,8 @@ from binding import * from namespace import llvm -from User import User +from Value import Constant -@llvm.Class(User) +@Constant class Constant: pass + diff --git a/newbinding/src/Function.py b/newbinding/src/Function.py index 7077d3a..f069e30 100644 --- a/newbinding/src/Function.py +++ b/newbinding/src/Function.py @@ -1,12 +1,11 @@ from binding import * from namespace import llvm -from GlobalValue import GlobalValue -from Constant import Constant +from Value import GlobalValue, Constant, Function from Type import Type from DerivedTypes import FunctionType from LLVMContext import LLVMContext -@llvm.Class(GlobalValue) +@Function class Function: _include_ = 'llvm/Function.h' _downcast_ = GlobalValue, Constant @@ -16,4 +15,5 @@ class Function: getContext = Method(ref(LLVMContext)) isVarArg = Method(cast(Bool, bool)) getIntrinsicID = Method(cast(Unsigned, int)) - isIntrinsic = Method(cast(Bool, bool)) \ No newline at end of file + isIntrinsic = Method(cast(Bool, bool)) + diff --git a/newbinding/src/GlobalValue.py b/newbinding/src/GlobalValue.py index f1a6827..40825a8 100644 --- a/newbinding/src/GlobalValue.py +++ b/newbinding/src/GlobalValue.py @@ -1,8 +1,8 @@ from binding import * from namespace import llvm -from Constant import Constant +from Value import GlobalValue -@llvm.Class(Constant) +@GlobalValue class GlobalValue: _include_ = 'llvm/GlobalValue.h' diff --git a/newbinding/src/User.py b/newbinding/src/User.py index dbc290d..57d58bc 100644 --- a/newbinding/src/User.py +++ b/newbinding/src/User.py @@ -1,8 +1,7 @@ from binding import * from namespace import llvm -from Value import Value +from Value import User -@llvm.Class(Value) +@User class User: pass - diff --git a/newbinding/src/Value.py b/newbinding/src/Value.py index 30b3f37..a901946 100644 --- a/newbinding/src/Value.py +++ b/newbinding/src/Value.py @@ -7,6 +7,12 @@ from LLVMContext import LLVMContext from StringRef import StringRef Value = llvm.Class() +# forward declarations +User = llvm.Class(Value) +BasicBlock = llvm.Class(Value) +Constant = llvm.Class(User) +GlobalValue = llvm.Class(Constant) +Function = llvm.Class(GlobalValue) @Value class Value: @@ -25,3 +31,10 @@ class Value: setName = Method(Void, cast(str, StringRef)) replaceAllUsesWith = Method(Void, ptr(Value)) + + list_use = IterToList(ptr(User), (), 'llvm::Value::use_iterator', + 'use_begin', 'use_end') + + hasOneUse = Method(cast(Bool, bool)) + hasNUses = Method(cast(Bool, bool), cast(int, Unsigned)) + isUsedInBasicBlock = Method(cast(Bool, bool), BasicBlock) diff --git a/newbinding/test2.py b/newbinding/test2.py index 3429f10..810a7ba 100644 --- a/newbinding/test2.py +++ b/newbinding/test2.py @@ -55,3 +55,15 @@ assert fnty is fn.getFunctionType() assert fn.isVarArg() == False assert fn.getIntrinsicID() == 0 assert not fn.isIntrinsic() + +print fn.list_use() + +builder = api.IRBuilder.new(context) +print builder + +bb = api.BasicBlock.Create(context, "entry", fn, None) +builder.SetInsertPoint(bb) + +builder.CreateRetVoid() + +fn.dump()