Example #1
0
    def testGEP(self):
        ty = Type.int64()
        ptr_ty = Type.int64()
        bldr = Builder.create()
        arr_ty = Type.array(ty, 2)

        a = bldr.alloca(arr_ty, 'a')
        offset = Value.const_int(ptr_ty, 0, True)
        b = bldr.gep(a, [offset, offset], 'gep')
        self.assertEqual('  %gep = getelementptr [2 x i64]* %a, i64 0, i64 0',
                         str(b))
Example #2
0
 def testGEP(self):
     ty = Type.int64()
     ptr_ty = Type.int64()
     bldr = Builder.create()
     arr_ty = Type.array(ty, 2)
     
     a = bldr.alloca(arr_ty, 'a')
     offset = Value.const_int(ptr_ty, 0, True)
     b = bldr.gep(a, [offset, offset], 'gep')
     self.assertEqual('  %gep = getelementptr [2 x i64]* %a, i64 0, i64 0',
                      str(b))
Example #3
0
    def testGlobalArrayLoadStore(self):
        mod = create_global_load_save_array_module()
        ee = ExecutionEngine.create_interpreter(mod)
        load = mod.get_function('load')
        ptr_ty = Type.int64(context=mod.context)
        offset = GenericValue.of_int(ptr_ty, 1, True)
        x0 = ee.run_function(load, [offset])
        self.assertEqual(0, x0.to_int(True))

        ty = Type.int8(context=mod.context)
        y = GenericValue.of_int(ty, 4, True)
        store = mod.get_function('store')
        ee.run_function(store, [y, offset])
        x = ee.run_function(load, [offset])
        self.assertEqual(4, x.to_int(True))
Example #4
0
    def testGlobalArrayLoadStore(self):
        mod = create_global_load_save_array_module()
        ee = ExecutionEngine.create_interpreter(mod)
        load = mod.get_function('load')
        ptr_ty = Type.int64(context=mod.context)
        offset = GenericValue.of_int(ptr_ty, 1, True)
        x0 = ee.run_function(load, [offset])
        self.assertEqual(0, x0.to_int(True))

        ty = Type.int8(context=mod.context)
        y = GenericValue.of_int(ty, 4, True)
        store = mod.get_function('store')
        ee.run_function(store, [y, offset])
        x = ee.run_function(load, [offset])
        self.assertEqual(4, x.to_int(True))
Example #5
0
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
Example #6
0
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