Add more to Instruction

This commit is contained in:
Siu Kwan Lam 2013-02-07 15:23:31 -06:00
commit 113f30ffab
4 changed files with 135 additions and 19 deletions

View file

@ -70,6 +70,7 @@ Float = BuiltinTypes('float')
Double = BuiltinTypes('double') Double = BuiltinTypes('double')
Uint64 = BuiltinTypes('uint64_t') Uint64 = BuiltinTypes('uint64_t')
Int64 = BuiltinTypes('int64_t') Int64 = BuiltinTypes('int64_t')
Int = BuiltinTypes('int')
Size_t = BuiltinTypes('size_t') Size_t = BuiltinTypes('size_t')
VoidPtr = BuiltinTypes('void*') VoidPtr = BuiltinTypes('void*')
Bool = BuiltinTypes('bool') Bool = BuiltinTypes('bool')

View file

@ -1,10 +1,22 @@
from binding import * from binding import *
from namespace import llvm from namespace import llvm
from Value import Constant, Value
UndefValue = llvm.Class(Constant)
ConstantInt = llvm.Class(Constant)
ConstantFP = llvm.Class(Constant)
ConstantArray = llvm.Class(Constant)
ConstantStruct = llvm.Class(Constant)
ConstantVector = llvm.Class(Constant)
ConstantDataSequential = llvm.Class(Constant)
ConstantDataArray = llvm.Class(ConstantDataSequential)
ConstantExpr = llvm.Class(Constant)
from LLVMContext import LLVMContext from LLVMContext import LLVMContext
from ADT.StringRef import StringRef from ADT.StringRef import StringRef
from ADT.SmallVector import SmallVector_Value, SmallVector_Unsigned from ADT.SmallVector import SmallVector_Value, SmallVector_Unsigned
from Type import Type, IntegerType, ArrayType, StructType from Type import Type, IntegerType, ArrayType, StructType
from Value import Constant, Value
from Instruction import CmpInst from Instruction import CmpInst
@Constant @Constant
@ -42,7 +54,6 @@ class Constant:
PyObjectPtr) PyObjectPtr)
UndefValue = llvm.Class(Constant)
@UndefValue @UndefValue
class UndefValue: class UndefValue:
@ -67,7 +78,6 @@ class UndefValue:
get = StaticMethod(ptr(UndefValue), ptr(Type)) get = StaticMethod(ptr(UndefValue), ptr(Type))
ConstantInt = llvm.Class(Constant)
@ConstantInt @ConstantInt
class ConstantInt: class ConstantInt:
@ -82,7 +92,6 @@ class ConstantInt:
getZExtValue = Method(cast(Uint64, int)) getZExtValue = Method(cast(Uint64, int))
getSExtValue = Method(cast(Int64, int)) getSExtValue = Method(cast(Int64, int))
ConstantFP = llvm.Class(Constant)
@ConstantFP @ConstantFP
class ConstantFP: class ConstantFP:
@ -95,7 +104,6 @@ class ConstantFP:
isNaN = Method(cast(Bool, bool)) isNaN = Method(cast(Bool, bool))
ConstantArray = llvm.Class(Constant)
@ConstantArray @ConstantArray
class ConstantArray: class ConstantArray:
@ -105,7 +113,6 @@ class ConstantArray:
PyObjectPtr, # Constants PyObjectPtr, # Constants
) )
ConstantStruct = llvm.Class(Constant)
@ConstantStruct @ConstantStruct
class ConstantStruct: class ConstantStruct:
@ -120,7 +127,6 @@ class ConstantStruct:
cast(bool, Bool), # packed cast(bool, Bool), # packed
).require_only(1) ).require_only(1)
ConstantVector = llvm.Class(Constant)
@ConstantVector @ConstantVector
class ConstantVector: class ConstantVector:
@ -129,13 +135,11 @@ class ConstantVector:
PyObjectPtr, # constants PyObjectPtr, # constants
) )
ConstantDataSequential = llvm.Class(Constant)
@ConstantDataSequential @ConstantDataSequential
class ConstantDataSequential: class ConstantDataSequential:
pass pass
ConstantDataArray = llvm.Class(ConstantDataSequential)
@ConstantDataArray @ConstantDataArray
class ConstantDataArray: class ConstantDataArray:
@ -146,7 +150,6 @@ class ConstantDataArray:
).require_only(2) ).require_only(2)
ConstantExpr = llvm.Class(Constant)
def _factory(*args): def _factory(*args):
return StaticMethod(ptr(Constant), *args) return StaticMethod(ptr(Constant), *args)

View file

@ -1,6 +1,11 @@
from binding import * from binding import *
from namespace import llvm from namespace import llvm
from Value import User from Value import Value, MDNode, User, BasicBlock, Function
from ADT.StringRef import StringRef
from CallingConv import CallingConv
from Attributes import Attributes
from Constant import ConstantInt
Instruction = llvm.Class(User) Instruction = llvm.Class(User)
AtomicCmpXchgInst = llvm.Class(Instruction) AtomicCmpXchgInst = llvm.Class(Instruction)
@ -54,7 +59,49 @@ FPTruncInst = llvm.Class(CastInst)
@Instruction @Instruction
class Instruction: class Instruction:
pass removeFromParent = Method()
eraseFromParent = Method()
eraseFromParent.disowning = True
getParent = Method(ptr(BasicBlock))
getOpcode = Method(cast(Unsigned, int))
getOpcodeName = Method(cast(ConstCharPtr, str))
insertBefore = Method(Void, ptr(Instruction))
insertAfter = Method(Void, ptr(Instruction))
moveBefore = Method(Void, ptr(Instruction))
isTerminator = Method(cast(Bool, bool))
isBinaryOp = Method(cast(Bool, bool))
isShift = Method(cast(Bool, bool))
isCast = Method(cast(Bool, bool))
isLogicalShift = Method(cast(Bool, bool))
isArithmeticShift = Method(cast(Bool, bool))
hasMetadata = Method(cast(Bool, bool))
hasMetadataOtherThanDebugLoc = Method(cast(Bool, bool))
isAssociative = Method(cast(Bool, bool))
isCommutative = Method(cast(Bool, bool))
isIdempotent = Method(cast(Bool, bool))
isNilpotent = Method(cast(Bool, bool))
mayWriteToMemory = Method(cast(Bool, bool))
mayReadFromMemory = Method(cast(Bool, bool))
mayReadOrWriteMemory = Method(cast(Bool, bool))
mayThrow = Method(cast(Bool, bool))
mayHaveSideEffects = Method(cast(Bool, bool))
hasMetadata = Method(cast(Bool, bool))
getMetadata = Method(ptr(MDNode), cast(str, StringRef))
setMetadata = Method(Void, cast(str, StringRef), ptr(MDNode))
clone = Method(ptr(Instruction))
# LLVM 3.3
# hasUnsafeAlgebra = Method(cast(Bool, bool))
# hasNoNans = Method(cast(Bool, bool))
# hasNoInfs = Method(cast(Bool, bool))
# hasNoSignedZeros = Method(cast(Bool, bool))
# hasAllowReciprocal = Method(cast(Bool, bool))
@AtomicCmpXchgInst @AtomicCmpXchgInst
class AtomicCmpXchgInst: class AtomicCmpXchgInst:
@ -71,7 +118,16 @@ class BinaryOperator:
@CallInst @CallInst
class CallInst: class CallInst:
pass _downcast_ = Value, Instruction
getCallingConv = Method(CallingConv.ID)
setCallingConv = Method(Void, CallingConv.ID)
getParamAlignment = Method(cast(Unsigned, int), cast(int, Unsigned))
addAttribute = Method(Void, cast(int, Unsigned), ref(Attributes))
removeAttribute = Method(Void, cast(int, Unsigned), ref(Attributes))
getCalledFunction = Method(ptr(Function))
getCalledValue = Method(ptr(Value))
setCalledFunction = Method(Void, ptr(Function))
isInlineAsm = Method(cast(Bool, bool))
@CmpInst @CmpInst
class CmpInst: class CmpInst:
@ -87,6 +143,8 @@ class CmpInst:
'LAST_ICMP_PREDICATE', 'LAST_ICMP_PREDICATE',
'BAD_ICMP_PREDICATE',) 'BAD_ICMP_PREDICATE',)
getPredicate = Method(Predicate)
@ExtractElementInst @ExtractElementInst
class ExtractElementInst: class ExtractElementInst:
pass pass
@ -113,7 +171,14 @@ class LandingPadInst:
@PHINode @PHINode
class PHINode: class PHINode:
pass getNumIncomingValues = Method(cast(Unsigned, int))
getIncomingValue = Method(ptr(Value), cast(int, Unsigned))
setIncomingValue = Method(Void, cast(int, Unsigned), ptr(Value))
getIncomingBlock = Method(ptr(BasicBlock), cast(int, Unsigned))
setIncomingBlock = Method(Void, cast(int, Unsigned), ptr(BasicBlock))
addIncoming = Method(Void, ptr(Value), ptr(BasicBlock))
hasConstantValue = Method(ptr(Value))
getBasicBlockIndex = Method(cast(Int, int), ptr(BasicBlock))
@SelectInst @SelectInst
class SelectInst: class SelectInst:
@ -125,11 +190,24 @@ class ShuffleVectorInst:
@StoreInst @StoreInst
class StoreInst: class StoreInst:
pass _downcast_ = Instruction
isVolatile = Method(cast(Bool, bool))
isSimple = Method(cast(Bool, bool))
isUnordered = Method(cast(Bool, bool))
isAtomic = Method(cast(Bool, bool))
setVolatile = Method(Void, cast(Bool, bool))
getAlignment = Method(cast(Unsigned, int))
setAlignment = Method(Void, cast(int, Unsigned))
classof = StaticMethod(cast(Bool, bool), ptr(Value))
@TerminatorInst @TerminatorInst
class TerminatorInst: class TerminatorInst:
pass getNumSuccessors = Method(cast(Unsigned, int))
getSuccessor = Method(ptr(BasicBlock), cast(int, Unsigned))
setSuccessor = Method(Void, cast(int, Unsigned), ptr(BasicBlock))
@UnaryInstruction @UnaryInstruction
class UnaryInstruction: class UnaryInstruction:
@ -162,7 +240,15 @@ class IndirectBrInst:
@InvokeInst @InvokeInst
class InvokeInst: class InvokeInst:
pass _downcast_ = Value, Instruction
getCallingConv = Method(CallingConv.ID)
setCallingConv = Method(Void, CallingConv.ID)
getParamAlignment = Method(cast(Unsigned, int), cast(int, Unsigned))
addAttribute = Method(Void, cast(int, Unsigned), ref(Attributes))
removeAttribute = Method(Void, cast(int, Unsigned), ref(Attributes))
getCalledFunction = Method(ptr(Function))
getCalledValue = Method(ptr(Value))
setCalledFunction = Method(Void, ptr(Function))
@ResumeInst @ResumeInst
class ResumeInst: class ResumeInst:
@ -174,7 +260,13 @@ class ReturnInst:
@SwitchInst @SwitchInst
class SwitchInst: class SwitchInst:
pass getCondition = Method(ptr(Value))
setCondition = Method(Void, ptr(Value))
getDefaultDest = Method(ptr(BasicBlock))
setDefaultDest = Method(Void, ptr(BasicBlock))
getNumCases = Method(cast(int, Unsigned))
addCase = Method(Void, ptr(ConstantInt), ptr(BasicBlock))
@UnreachableInst @UnreachableInst
class UnreachableInst: class UnreachableInst:
@ -195,7 +287,18 @@ class ExtractValueInst:
@LoadInst @LoadInst
class LoadInst: class LoadInst:
pass _downcast_ = Value, Instruction
isVolatile = Method(cast(Bool, bool))
isSimple = Method(cast(Bool, bool))
isUnordered = Method(cast(Bool, bool))
isAtomic = Method(cast(Bool, bool))
setVolatile = Method(Void, cast(Bool, bool))
getAlignment = Method(cast(Unsigned, int))
setAlignment = Method(Void, cast(int, Unsigned))
classof = StaticMethod(cast(Bool, bool), ptr(Value))
@VAArgInst @VAArgInst
class VAArgInst: class VAArgInst:

View file

@ -31,6 +31,8 @@ class MDString:
@llvm.Class() @llvm.Class()
class NamedMDNode: class NamedMDNode:
eraseFromParent = Method() eraseFromParent = Method()
eraseFromParent.disowning = True
dropAllReferences = Method() dropAllReferences = Method()
getParent = Method(ptr(Module)) getParent = Method(ptr(Module))
getOperand = Method(ptr(MDNode), cast(int, Unsigned)) getOperand = Method(ptr(MDNode), cast(int, Unsigned))
@ -41,3 +43,10 @@ class NamedMDNode:
print_.realname = "print" print_.realname = "print"
dump = Method() dump = Method()
@CustomPythonMethod
def __str__(self):
import extra
os = extra.make_raw_ostream_for_printing()
self.print_(os, None)
return os.str()