[llvm] r190477 - [python-bindings] Added support for getting/setting operands of values and getting the number of operands of a value.

Michael Gottesman mgottesman at apple.com
Tue Sep 10 18:38:12 PDT 2013


Author: mgottesman
Date: Tue Sep 10 20:38:12 2013
New Revision: 190477

URL: http://llvm.org/viewvc/llvm-project?rev=190477&view=rev
Log:
[python-bindings] Added support for getting/setting operands of values and getting the number of operands of a value.

Also in the process did some cleanups for BasicBlock.

Modified:
    llvm/trunk/bindings/python/llvm/core.py
    llvm/trunk/bindings/python/llvm/tests/test_core.py

Modified: llvm/trunk/bindings/python/llvm/core.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/python/llvm/core.py?rev=190477&r1=190476&r2=190477&view=diff
==============================================================================
--- llvm/trunk/bindings/python/llvm/core.py (original)
+++ llvm/trunk/bindings/python/llvm/core.py Tue Sep 10 20:38:12 2013
@@ -106,6 +106,15 @@ class Value(LLVMObject):
 
     def dump(self):
         lib.LLVMDumpValue(self)
+    
+    def get_operand(self, i):
+        return Value(lib.LLVMGetOperand(self, i))
+    
+    def set_operand(self, i, v):
+        return lib.LLVMSetOperand(self, i, v)
+    
+    def __len__(self):
+        return lib.LLVMGetNumOperands(self)
 
 class Module(LLVMObject):
     """Represents the top-level structure of an llvm program in an opaque object."""
@@ -264,12 +273,26 @@ class BasicBlock(LLVMObject):
         i = lib.LLVMGetLastInstruction(self)
         return i and Instruction(i)
 
+    def __as_value(self):
+        return Value(lib.LLVMBasicBlockAsValue(self))
+    
     @property
     def name(self):
-        return lib.LLVMGetValueName(Value(lib.LLVMBasicBlockAsValue(self)))
+        return lib.LLVMGetValueName(self.__as_value())
 
     def dump(self):
-        lib.LLVMDumpValue(Value(lib.LLVMBasicBlockAsValue(self)))
+        lib.LLVMDumpValue(self.__as_value())
+
+    def get_operand(self, i):
+        return Value(lib.LLVMGetOperand(self.__as_value(),
+                                        i))
+    
+    def set_operand(self, i, v):
+        return lib.LLVMSetOperand(self.__as_value(),
+                                  i, v)
+    
+    def __len__(self):
+        return lib.LLVMGetNumOperands(self.__as_value())
 
     class __inst_iterator(object):
         def __init__(self, bb, reverse=False):            
@@ -448,6 +471,15 @@ def register_library(library):
     library.LLVMDumpValue.argtypes = [Value]
     library.LLVMDumpValue.restype = None
 
+    library.LLVMGetOperand.argtypes = [Value, c_uint]
+    library.LLVMGetOperand.restype = c_object_p
+
+    library.LLVMSetOperand.argtypes = [Value, Value, c_uint]
+    library.LLVMSetOperand.restype = None
+
+    library.LLVMGetNumOperands.argtypes = [Value]
+    library.LLVMGetNumOperands.restype = c_uint
+
     # Basic Block Declarations.
     library.LLVMGetFirstBasicBlock.argtypes = [Function]
     library.LLVMGetFirstBasicBlock.restype = c_object_p

Modified: llvm/trunk/bindings/python/llvm/tests/test_core.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/python/llvm/tests/test_core.py?rev=190477&r1=190476&r2=190477&view=diff
==============================================================================
--- llvm/trunk/bindings/python/llvm/tests/test_core.py (original)
+++ llvm/trunk/bindings/python/llvm/tests/test_core.py Tue Sep 10 20:38:12 2013
@@ -115,9 +115,13 @@ class TestCore(TestBase):
         for inst in bb:
             self.assertEqual(inst.name, inst_list[i][0])
             self.assertEqual(inst.opcode, inst_list[i][1])
+            for op in range(len(inst)):
+                o = inst.get_operand(op)
+                print o.name
+                o.dump()
             inst.dump()
             i += 1
-        
+
         # Backwards
         for inst in reversed(bb):
             i -= 1





More information about the llvm-commits mailing list