Add more to Instruction
This commit is contained in:
parent
541c119fc3
commit
113f30ffab
4 changed files with 135 additions and 19 deletions
|
|
@ -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')
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue