Fix CompareInstruction.predicate

This commit is contained in:
Siu Kwan Lam 2013-05-23 11:45:15 -05:00
commit a0eb03b239
2 changed files with 67 additions and 2 deletions

View file

@ -55,12 +55,18 @@ class Enum(int):
@classmethod
def declare(cls):
declared = cls._declared_ = {}
scope = globals()
for name in filter(lambda s: s.startswith(cls.prefix), dir(cls)):
n = getattr(cls, name)
typ = type(name, (cls,), {})
scope[name] = typ(n)
obj = typ(n)
declared[n] = obj
scope[name] = obj
@classmethod
def get(cls, num):
return cls._declared_[num]
# type id (llvm::Type::TypeID)
class TypeEnum(Enum):
@ -1872,16 +1878,24 @@ class PHINode(Instruction):
class SwitchInstruction(Instruction):
_type_ = api.llvm.SwitchInst
def add_case(self, const, bblk):
self._ptr.addCase(const._ptr, bblk._ptr)
class CompareInstruction(Instruction):
_type_ = api.llvm.CmpInst
@property
def predicate(self):
return self._ptr.getPredicate()
n = self._ptr.getPredicate()
try:
return ICMPEnum.get(n)
except KeyError:
return FCMPEnum.get(n)
#===----------------------------------------------------------------------===
# Basic block
#===----------------------------------------------------------------------===