Exemplo n.º 1
0
 def test_mismatch_type_mod(self) -> None:
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int32_t,
             pt.Block([pt.Return(pt.Mod(pt.Int8(2), pt.Int32(2)))]),
         )
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int32_t,
             pt.Block([pt.Return(pt.Mod(pt.Int32(2), pt.Int8(2)))]),
         )
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int64_t,
             pt.Block([pt.Return(pt.Mod(pt.Int16(2), pt.Int64(2)))]),
         )
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int64_t,
             pt.Block([pt.Return(pt.Mod(pt.Int64(2), pt.Int16(2)))]),
         )
Exemplo n.º 2
0
 def test_return_call_nothing_for_int32_t(self) -> None:
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "nothing", (), (), pt.Block([pt.Return(())])).add_func(
                 "call_nothing",
                 (),
                 pt.Int32_t,
                 pt.Block([pt.Return(pt.Call("nothing", []))]),
             )
Exemplo n.º 3
0
 def test_mismatch_type_deref(self) -> None:
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int32_t,
             pt.Block([pt.Return(pt.Deref(pt.Int64(123)))]),
         )
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo", (ptr, ), (),
             pt.Block([
                 pt.DefineVar(v32, pt.Deref(pt.Var(ptr))),
             ]))
Exemplo n.º 4
0
 def test_assign_undeclared_variable(self) -> None:
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int32_t,
             pt.Block([
                 pt.Assign(pt.Var(x), pt.Int32(500)),
                 pt.Return(pt.Int32(2)),
             ]),
         )
Exemplo n.º 5
0
 def test_redeclared_variable(self) -> None:
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int32_t,
             pt.Block([
                 pt.DefineVar(x, pt.Int32(2)),
                 pt.DefineVar(x, pt.Int32(3)),
                 pt.Return(pt.Int32(2)),
             ]),
         )
Exemplo n.º 6
0
 def test_declare_wrong_type(self) -> None:
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int32_t,
             pt.Block([
                 pt.DefineVar(z, pt.Int32(2)),
                 pt.Return(pt.Int32(2)),
             ]),
         )
     with self.assertRaises(pt.TypeCheckError):
         pt.Program("module").add_func(
             "foo",
             (),
             pt.Int32_t,
             pt.Block([
                 pt.DefineVar(x, pt.Int8(2)),
                 pt.Return(pt.Int32(2)),
             ]),
         )
Exemplo n.º 7
0
import petra as pt
import unittest

from ctypes import CFUNCTYPE, c_int32, c_bool

program = pt.Program("module")

program.add_func(
    "if_else_true",
    (),
    pt.Int32_t,
    pt.Block([
        pt.If(
            pt.Lt(pt.Int32(0), pt.Int32(1)),
            pt.Block([
                pt.Return(pt.Int32(1)),
            ]),
            pt.Block([pt.Return(pt.Int32(2))]),
        ),
        pt.Return(pt.Int32(0)),
    ]),
)

program.add_func(
    "if_else_false",
    (),
    pt.Int32_t,
    pt.Block([
        pt.If(
            pt.Lt(pt.Int32(1), pt.Int32(0)),
            pt.Block([
                pt.Return(pt.Int32(1)),
Exemplo n.º 8
0
 pt.Block([
     pt.DefineVar(a, pt.Add(pt.Int8(-11), pt.Int8(-4))),
     pt.DefineVar(b, pt.Add(pt.Int8(-11), pt.Int8(0))),
     pt.DefineVar(c, pt.Add(pt.Int8(-11), pt.Int8(7))),
     pt.DefineVar(d, pt.Add(pt.Int8(0), pt.Int8(-5))),
     pt.DefineVar(e, pt.Add(pt.Int8(0), pt.Int8(0))),
     pt.DefineVar(f, pt.Add(pt.Int8(0), pt.Int8(3))),
     pt.DefineVar(g, pt.Add(pt.Int8(7), pt.Int8(-8))),
     pt.DefineVar(h, pt.Add(pt.Int8(7), pt.Int8(0))),
     pt.DefineVar(i, pt.Add(pt.Int8(7), pt.Int8(8))),
     pt.Return(
         pt.Add(
             pt.Var(a),
             pt.Add(
                 pt.Var(b),
                 pt.Add(
                     pt.Var(c),
                     pt.Add(
                         pt.Var(d),
                         pt.Add(
                             pt.Var(e),
                             pt.Add(
                                 pt.Var(f),
                                 pt.Add(
                                     pt.Var(g),
                                     pt.Add(pt.Var(h), pt.Var(i)),
                                 ),
                             ),
                         ),
                     ),
                 ),
             ),
         )),
 ]),
Exemplo n.º 9
0
program = pt.Program("module")

n = pt.Symbol(pt.Int32_t, "n")

program.add_func(
    "collatz",
    (n, ),
    pt.Int32_t,
    pt.Block([
        pt.If(
            pt.Eq(pt.Var(n), pt.Int32(1)),
            pt.Block([pt.Return(pt.Int32(0))]),
            pt.Block([]),
        ),
        pt.If(
            pt.Eq(pt.Mod(pt.Var(n), pt.Int32(2)), pt.Int32(0)),
            pt.Block([pt.Assign(pt.Var(n), pt.Div(pt.Var(n), pt.Int32(2)))]),
            pt.Block([
                pt.Assign(
                    pt.Var(n),
                    pt.Add(pt.Mul(pt.Int32(3), pt.Var(n)), pt.Int32(1)),
                ),
            ]),
        ),
        pt.Return(pt.Add(pt.Int32(1), pt.Call("collatz", [pt.Var(n)]))),
    ]),
)

program.save_object("collatz.py.o")
Exemplo n.º 10
0
from typing import cast, Callable

import petra as pt
import unittest

from ctypes import CFUNCTYPE, c_int8, c_int16, c_int32, c_int64

program = pt.Program("module")

# Int8_t functions.

program.add_func("return_m2_i8", (), pt.Int8_t,
                 pt.Block([pt.Return(pt.Int8(-2))]))

program.add_func("return_0_i8", (), pt.Int8_t,
                 pt.Block([pt.Return(pt.Int8(0))]))

program.add_func("return_2_i8", (), pt.Int8_t,
                 pt.Block([pt.Return(pt.Int8(2))]))

# Int16_t functions.

program.add_func("return_m2_i16", (), pt.Int16_t,
                 pt.Block([pt.Return(pt.Int16(-2))]))

program.add_func("return_0_i16", (), pt.Int16_t,
                 pt.Block([pt.Return(pt.Int16(0))]))

program.add_func("return_2_i16", (), pt.Int16_t,
                 pt.Block([pt.Return(pt.Int16(2))]))
Exemplo n.º 11
0
program.add_func(
    "array_set_get_values",
    (),
    pt.Int32_t,
    pt.Block(
        [
            pt.DefineVar(array_var),
            pt.Assign(
                pt.Var(array_var), pt.SetElement(pt.Var(array_var), pt.Int32(1), 0)
            ),
            pt.Assign(
                pt.Var(array_var), pt.SetElement(pt.Var(array_var), pt.Int32(2), 1)
            ),
            pt.Assign(
                pt.Var(array_var), pt.SetElement(pt.Var(array_var), pt.Int32(3), 2)
            ),
            pt.Return(
                pt.Add(
                    pt.GetElement(pt.Var(array_var), 0),
                    pt.Add(
                        pt.GetElement(pt.Var(array_var), 1),
                        pt.GetElement(pt.Var(array_var), 2),
                    ),
                )
            ),
        ]
    ),
)


class ArraysTestCase(unittest.TestCase):
Exemplo n.º 12
0
import petra as pt
import unittest

from ctypes import CFUNCTYPE, c_bool, c_int8

program = pt.Program("module")

x, y = pt.Symbol(pt.Int8_t, "x"), pt.Symbol(pt.Int8_t, "y")
z, w = pt.Symbol(pt.Bool_t, "z"), pt.Symbol(pt.Bool_t, "w")

program.add_func(
    "lt",
    (x, y),
    pt.Bool_t,
    pt.Block([pt.Return(pt.Lt(pt.Var(x), pt.Var(y)))]),
)

program.add_func(
    "lte",
    (x, y),
    pt.Bool_t,
    pt.Block([pt.Return(pt.Lte(pt.Var(x), pt.Var(y)))]),
)

program.add_func(
    "gt",
    (x, y),
    pt.Bool_t,
    pt.Block([pt.Return(pt.Gt(pt.Var(x), pt.Var(y)))]),
)
Exemplo n.º 13
0
import petra as pt

program = pt.Program("module")

program.add_func_decl("sqrtf", (pt.Float32_t, ), pt.Float32_t)

x = pt.Symbol(pt.Float32_t, "x")

program.add_func(
    "call_sqrtf",
    (x, ),
    pt.Float32_t,
    pt.Block([pt.Return(pt.Call("sqrtf", [pt.Var(x)]))]),
)

program.save_object("sqrt.py.o")
Exemplo n.º 14
0
import petra as pt
import unittest

from ctypes import CFUNCTYPE, c_int32

program = pt.Program("module")

x = pt.Symbol(pt.Int32_t, "x")
y = pt.Symbol(pt.Int32_t, "y")
z = pt.Symbol(pt.Int8_t, "z")

program.add_func(
    "return_temp",
    (),
    pt.Int32_t,
    pt.Block([pt.DefineVar(x, pt.Int32(2)),
              pt.Return(pt.Var(x))]),
)

program.add_func(
    "return_shuffle_temp",
    (),
    pt.Int32_t,
    pt.Block([
        pt.DefineVar(x, pt.Int32(2)),
        pt.DefineVar(y, pt.Var(x)),
        pt.Return(pt.Var(y)),
    ]),
)

program.add_func(
    "temp_unused",
Exemplo n.º 15
0
 pt.Block([
     pt.DefineVar(
         point1d,
         pt.Call("legion_domain_point_get_point_1d",
                 [pt.Deref(pt.Var(point_ptr))])),
     pt.DefineVar(
         point1d_x,
         pt.GetElement(pt.Var(point1d), name="x"),
     ),
     pt.DefineVar(x, pt.GetElement(pt.Var(point1d_x), idx=0)),
     pt.DefineVar(x_plus_1, pt.Add(pt.Var(x), pt.Int64(1))),
     pt.DefineVar(point1d_x_plus_1_x),
     pt.Assign(
         pt.Var(point1d_x_plus_1_x),
         pt.SetElement(pt.Var(point1d_x_plus_1_x), pt.Var(x_plus_1), 0),
     ),
     pt.DefineVar(point1d_x_plus_1),
     pt.Assign(
         pt.Var(point1d_x_plus_1),
         pt.SetElement(pt.Var(point1d_x_plus_1),
                       pt.Var(point1d_x_plus_1_x),
                       name="x"),
     ),
     pt.DefineVar(
         domain_point_x_plus_1,
         pt.Call("legion_domain_point_from_point_1d",
                 [pt.Var(point1d_x_plus_1)]),
     ),
     pt.DefineVar(
         result,
         pt.Call(
             "legion_logical_partition_get_logical_subregion_by_color_domain_point",
             [
                 pt.Var(runtime),
                 pt.Deref(pt.Var(parent_ptr)),
                 pt.Var(domain_point_x_plus_1)
             ],
         ),
     ),
     pt.Return(pt.Var(result)),
 ]),
Exemplo n.º 16
0
program.add_func_decl("free", (Pointer_Int64_t, ), ())
# void* memset ( void* ptr, int value, size_t num );
program.add_func_decl("memset", (Pointer_Int64_t, pt.Int32_t, pt.Int64_t),
                      Pointer_Int64_t)

ptr = pt.Symbol(Pointer_Int64_t, "ptr")
val = pt.Symbol(pt.Int64_t, "val")
v32 = pt.Symbol(pt.Int32_t, "val")

program.add_func(
    "malloc_free",
    (),
    pt.Int32_t,
    pt.Block([
        pt.DefineVar(ptr, pt.Call("malloc", [pt.Int64(8)])),
        pt.Call("free", [pt.Var(ptr)]),
        pt.Return(pt.Int32(1)),
    ]),
)

program.add_func(
    "malloc_memset",
    (),
    pt.Int64_t,
    pt.Block([
        pt.DefineVar(ptr, pt.Call("malloc", [pt.Int64(8)])),
        pt.Assign(
            pt.Var(ptr),
            pt.Call("memset",
                    [pt.Var(ptr), pt.Int32(0x3A),
                     pt.Int64(8)]),
Exemplo n.º 17
0
from typing import cast, Callable

import petra as pt
import unittest

from ctypes import CFUNCTYPE, c_int32

program = pt.Program("module")

x, y = pt.Symbol(pt.Int32_t, "x"), pt.Symbol(pt.Int32_t, "y")

program.add_func("return_2", (), pt.Int32_t,
                 pt.Block([pt.Return(pt.Int32(2))]))

program.add_func("call_return_2", (), pt.Int32_t,
                 pt.Block([pt.Return(pt.Call("return_2", []))]))

program.add_func(
    "call_return_2_discard",
    (),
    pt.Int32_t,
    pt.Block([pt.Call("return_2", []),
              pt.Return(pt.Int32(3))]),
)

program.add_func(
    "iden",
    (x, ),
    pt.Int32_t,
    pt.Block([pt.Return(pt.Var(x))]),
)