def testConstInt8Array(self): ty = Type.int8() v = Value.const_int(ty, 3, True) arr = Value.const_array(ty, [v, v]) arr_ty = arr.type self.assertEqual(2, arr_ty.array_length()) self.assertEqual([v, v], arr.elements()) self.assertFalse(v.is_const_array()) self.assertTrue(arr.is_const_array())
def testConstInt8Array(self): ty = Type.int8() v = Value.const_int(ty, 3, True) arr = Value.const_array(ty, [v, v]) arr_ty = arr.type self.assertEqual(2, arr_ty.array_length()) self.assertEqual([v, v], arr.elements()) self.assertFalse(v.is_const_array()) self.assertTrue(arr.is_const_array())
def create_global_load_save_array_module(): mod = Module.CreateWithName('module') ty = Type.int8(mod.context) array_ty = Type.array(ty, 2) x = Global.add(mod, array_ty, 'x') v = Value.const_int(ty, 0, True) ptr_ty = Type.int64(mod.context) v0 = Value.const_int(ptr_ty, 0, True) x.initializer = Value.const_array(ty, [v, v]) def create_store(): ft = Type.function(Type.void(), [ty, ptr_ty], False) f = mod.add_function('store', ft) bb = f.append_basic_block('body') bldr = Builder.create(mod.context) bldr.position_at_end(bb) xt = f.get_param(0) offset = f.get_param(1) elem_ptr = bldr.gep(x, [v0, offset], 'elem') bldr.store(xt, elem_ptr) bldr.ret_void() def create_load(): ft = Type.function(ty, [ptr_ty], False) f = mod.add_function('load', ft) bb = f.append_basic_block('body') bldr = Builder.create(mod.context) bldr.position_at_end(bb) offset = f.get_param(0) elem_ptr = bldr.gep(x, [v0, offset], 'elem') y = bldr.load(elem_ptr, 'y') bldr.ret(y) create_store() create_load() return mod
def create_global_load_save_array_module(): mod = Module.CreateWithName('module') ty = Type.int8(mod.context) array_ty = Type.array(ty, 2) x = Global.add(mod, array_ty, 'x') v = Value.const_int(ty, 0, True) ptr_ty = Type.int64(mod.context) v0 = Value.const_int(ptr_ty, 0, True) x.initializer = Value.const_array(ty, [v, v]) def create_store(): ft = Type.function(Type.void(), [ty, ptr_ty], False) f = mod.add_function('store', ft) bb = f.append_basic_block('body') bldr = Builder.create(mod.context) bldr.position_at_end(bb) xt = f.get_param(0) offset = f.get_param(1) elem_ptr = bldr.gep(x, [v0, offset], 'elem') bldr.store(xt, elem_ptr) bldr.ret_void() def create_load(): ft = Type.function(ty, [ptr_ty], False) f = mod.add_function('load', ft) bb = f.append_basic_block('body') bldr = Builder.create(mod.context) bldr.position_at_end(bb) offset = f.get_param(0) elem_ptr = bldr.gep(x, [v0, offset], 'elem') y = bldr.load(elem_ptr, 'y') bldr.ret(y) create_store() create_load() return mod