Ejemplo n.º 1
0
def create_global_load_save_module():
    mod = Module.CreateWithName('module')
    ty = Type.int8(mod.context)
    x = Global.add(mod, ty, 'x')
    x.initializer = Value.const_int(ty, 0, True)

    def create_store():
        ft = Type.function(Type.void(), [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)
        bldr.store(xt, x)
        bldr.ret_void()

    def create_load():
        ft = Type.function(ty, [], False)
        f = mod.add_function('load', ft)
        bb = f.append_basic_block('body')
        bldr = Builder.create(mod.context)
        bldr.position_at_end(bb)

        xt = bldr.load(x, "xt")
        bldr.ret(xt)

    create_store()
    create_load()
    return mod
Ejemplo n.º 2
0
def create_cumsum_module():
    mod = Module.CreateWithName('module')

    ty = Type.int8(context=mod.context)
    ft = Type.function(ty, [ty], False)

    f = mod.add_function('cumsum', ft)
    bb1 = f.append_basic_block('body')
    bb_hdr = f.append_basic_block('hdr')
    bb_loop = f.append_basic_block('loop')
    bb_exit = f.append_basic_block('exit')

    bldr = Builder.create(mod.context)
    bldr.position_at_end(bb1)
    bldr.branch(bb_hdr)

    bldr.position_at_end(bb_hdr)
    i = bldr.phi(ty, 'i')
    s = bldr.phi(ty, 's')
    zero = Value.const_int(ty, 0, True)
    c = bldr.int_signed_lt(zero, i, 'comp')
    bldr.conditional_branch(c, bb_loop, bb_exit)

    bldr.position_at_end(bb_loop)
    s1 = bldr.add(s, i, 's1')
    i1 = bldr.sub(i, Value.const_int(ty, 1, True), 'i1')
    bldr.branch(bb_hdr)

    i.add_incoming([f.get_param(0), i1], [bb1, bb_loop])
    s.add_incoming([Value.const_int(ty, 0, True), s1], [bb1, bb_loop])

    bldr.position_at_end(bb_exit)
    bldr.ret(s)
    return (mod, f)
Ejemplo n.º 3
0
def create_abs_module():
    mod = Module.CreateWithName('module')

    ty = Type.int8(context=mod.context)
    ft = Type.function(ty, [ty], False)

    f = mod.add_function('abs', ft)
    bb1 = f.append_basic_block('body')
    bbt = f.append_basic_block('true')
    bbf = f.append_basic_block('false')
    bbm = f.append_basic_block('merge')

    bldr = Builder.create(mod.context)
    bldr.position_at_end(bb1)
    x = f.get_param(0)
    zero = Value.const_int(ty, 0, True)
    c = bldr.int_signed_lt(x, zero, 'comp')
    bldr.conditional_branch(c, bbt, bbf)

    # True branch
    bldr.position_at_end(bbt)
    y_t = bldr.neg(x, 'neg_x')
    bldr.branch(bbm)

    # False branch
    bldr.position_at_end(bbf)
    bldr.branch(bbm)

    bldr.position_at_end(bbm)
    y = bldr.phi(ty, 'y')
    y.add_incoming([y_t, x], [bbt, bbf])
    bldr.ret(y)
    return (mod, f)
Ejemplo n.º 4
0
 def testAppendBasicBlock(self):
     mod = Module.CreateWithName('module')
     ty = Type.int8(context=mod.context)
     ft = Type.function(ty, [ty], False)
     f = mod.add_function('timestwo', ft)
     bb = f.append_basic_block('body')
     self.assertEqual('body', bb.name)
Ejemplo n.º 5
0
    def testCreateNamedStructInMod(self):
        ctx = Context()
        mod = Module.CreateWithName('mod', ctx)
        ty = Type.create_named_structure(mod.context, 'mystruct')
        el = Type.int8(context=mod.context)
        ty.set_body([el, el], True)
        t = mod.get_type('mystruct')

        self.assertEqual(ty, t)
Ejemplo n.º 6
0
 def testAddGlobal(self):
     mod = Module.CreateWithName('module')
     ty = Type.int8(context=mod.context)
     a = Value.const_int(ty, 1, True)
     g = Global.add(mod, ty, 'x')
     g.initializer = Value.const_int(ty, 4, True)
     bldr = Builder.create()
     c = bldr.add(g.initializer, a, 'tmp1')
     self.assertEqual(5, c.get_signext_value())
Ejemplo n.º 7
0
def create_two_module():
    mod = Module.CreateWithName('module')
    ty = Type.int8(context=mod.context)
    ft = Type.function(ty, [], False)
    f = mod.add_function('two', ft)
    bb = f.append_basic_block('body')
    bldr = Builder.create(mod.context)
    bldr.position_at_end(bb)
    two = Value.const_int(ty, 2, True)
    bldr.ret(two)
    return mod
Ejemplo n.º 8
0
    def setUp(self):
        mod = Module.CreateWithName('module')
        ty = Type.int8(context=mod.context)
        ft = Type.function(ty, [ty], False)
        f = mod.add_function('timestwo', ft)
        bb = f.append_basic_block('body')
        bldr = Builder.create(mod.context)
        bldr.position_at_end(bb)

        self.bldr = bldr
        self.ty = ty
        self.f = f
Ejemplo n.º 9
0
def create_timestwo_module():
    mod = Module.CreateWithName('module')
    ty = Type.int8(context=mod.context)
    ft = Type.function(ty, [ty], False)
    f = mod.add_function('timestwo', ft)
    bb = f.append_basic_block('body')
    bldr = Builder.create(mod.context)
    bldr.position_at_end(bb)
    x = f.get_param(0)
    two = Value.const_int(ty, 2, True)
    y = bldr.mul(x, two, 'res')
    bldr.ret(y)
    return (mod, f)
Ejemplo n.º 10
0
    def testAddFunction(self):
        mod = Module.CreateWithName('module')
        ty = Type.int8(context=mod.context)
        ft = Type.function(ty, [ty], False)
        f = mod.add_function('timestwo', ft)

        self.assertEqual('timestwo', f.name)
        f1 = mod.first
        self.assertEqual('timestwo', f1.name)

        fcns = [fn for fn in mod]
        self.assertEqual(1, len(fcns))

        self.assertTrue('timestwo' in str(mod))
Ejemplo n.º 11
0
def create_lessthanzero_module():
    mod = Module.CreateWithName('module')

    ty = Type.int8(context=mod.context)
    bool_t = Type.int1(context=mod.context)
    ft = Type.function(bool_t, [ty], False)

    f = mod.add_function('lessthanzero', ft)
    bb = f.append_basic_block('body')
    bldr = Builder.create(mod.context)
    bldr.position_at_end(bb)
    x = f.get_param(0)
    zero = Value.const_int(ty, 0, True)
    y = bldr.int_signed_lt(x, zero, 'res')
    bldr.ret(y)
    return (mod, f)
Ejemplo n.º 12
0
    def testAddGlobalVal(self):
        mod = Module.CreateWithName('module')
        ty = Type.int8(context=mod.context)
        a = Value.const_int(ty, 1, True)
        g = Global.add(mod, ty, 'x')
        g.initializer = Value.const_int(ty, 4, True)
        g.set_const(True)

        t = g.type
        self.assertTrue(g.is_const())

        bldr = Builder.create()
        # Build instruction  %tmp1 = add i8 %tmp0, 1
        c = bldr.add(bldr.load(g, "tmp0"), a, 'tmp1')
        self.assertEqual('i8', c.type.name)
        self.assertEqual('tmp1', c.name)
Ejemplo n.º 13
0
def create_timestwo_module_with_global():
    mod = Module.CreateWithName('module')
    ty = Type.int8(mod.context)
    k = Global.add(mod, ty, 'k')
    k.initializer = Value.const_int(ty, 2, True)

    ft = Type.function(ty, [ty], False)
    f = mod.add_function('timestwo', ft)
    bb = f.append_basic_block('body')
    bldr = Builder.create(mod.context)
    bldr.position_at_end(bb)

    x = f.get_param(0)
    two = bldr.load(k, "two")
    y = bldr.mul(x, two, 'res')
    bldr.ret(y)
    return (mod, f)
Ejemplo n.º 14
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
Ejemplo n.º 15
0
    def testTarget(self):
        context = Context()
        mod = Module.CreateWithName('module', context)
        mod.target = 'i686-apple-darwin9'

        self.assertEqual('i686-apple-darwin9', mod.target)
Ejemplo n.º 16
0
    def testDataLayout(self):
        context = Context()
        mod = Module.CreateWithName('module', context)
        mod.datalayout = 'E-p:32:32'

        self.assertEqual('E-p:32:32', mod.datalayout)
Ejemplo n.º 17
0
 def setUp(self):
     self.context = Context()
     self.module = Module.CreateWithName('module', context=self.context)