[pypy-svn] r52595 - in pypy/branch/jit-hotpath/pypy/jit: rainbow rainbow/test timeshifter
arigo at codespeak.net
arigo at codespeak.net
Sun Mar 16 13:45:34 CET 2008
Author: arigo
Date: Sun Mar 16 13:45:34 2008
New Revision: 52595
Modified:
pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py
pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py
pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_hp_interpreter.py
pypy/branch/jit-hotpath/pypy/jit/timeshifter/rcontainer.py
Log:
More interior & co.
Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/codewriter.py Sun Mar 16 13:45:34 2008
@@ -1338,10 +1338,10 @@
interiordescindex, indices_v = self.interiordesc(
op, PTRTYPE, len(op.args) - 1)
assert interiordescindex != -1
- structindex = self.serialize_oparg("red", structvar)
+ structindex = self.serialize_oparg(color, structvar)
indexes = []
for arg in indices_v:
- indexes.append(self.serialize_oparg("red", arg))
+ indexes.append(self.serialize_oparg(color, arg))
self.emit("%s_getinteriorarraysize" % color, structindex,
interiordescindex)
self.emit(len(indexes))
Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/fallback.py Sun Mar 16 13:45:34 2008
@@ -374,7 +374,8 @@
@arguments("structtypedesc", "red", returns="red")
def opimpl_red_malloc_varsize_struct(self, structtypedesc, gv_size):
- Xxx("red_malloc_varsize_struct")
+ size = gv_size.revealconst(lltype.Signed)
+ return structtypedesc.allocate_varsize(self.rgenop, size)
@arguments("arraydesc", "red", returns="red")
def opimpl_red_malloc_varsize_array(self, arraytypedesc, gv_size):
@@ -433,13 +434,18 @@
gv_value)
@arguments("red", "interiordesc", "red_varargs", returns="red")
- def opimpl_red_getinteriorarraysize(self, gv_array, interiordesc, indexes_gv):
- Xxx("red_getinteriorarraysize")
+ def opimpl_red_getinteriorarraysize(self, gv_array, interiordesc,
+ indexes_gv):
+ return interiordesc.perform_getinteriorarraysize(self.rgenop,
+ gv_array,
+ indexes_gv)
- @arguments("red", "interiordesc", "red_varargs", returns="green_from_red")
+ @arguments("green", "interiordesc", "green_varargs", returns="green")
def opimpl_green_getinteriorarraysize(self, gv_array, interiordesc,
indexes_gv):
- Xxx("green_getinteriorarraysize")
+ return interiordesc.perform_getinteriorarraysize(self.rgenop,
+ gv_array,
+ indexes_gv)
@arguments("red", "green", "green", returns="green")
def opimpl_is_constant(self, arg, true, false):
Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py Sun Mar 16 13:45:34 2008
@@ -843,13 +843,12 @@
return interiordesc.gengetinteriorarraysize(
self.jitstate, arraybox, indexboxes)
- @arguments("red", "interiordesc", "red_varargs", returns="green_from_red")
- def opimpl_green_getinteriorarraysize(self, arraybox, interiordesc,
- indexboxes):
- # XXX make a green version that does not use the constant folding of
- # the red one
- return interiordesc.gengetinteriorarraysize(
- self.jitstate, arraybox, indexboxes)
+ @arguments("green", "interiordesc", "green_varargs", returns="green")
+ def opimpl_green_getinteriorarraysize(self, gv_array, interiordesc,
+ indexes_gv):
+ return interiordesc.perform_getinteriorarraysize(self.rgenop,
+ gv_array,
+ indexes_gv)
@arguments("red", "green", "green", returns="green")
def opimpl_is_constant(self, arg, true, false):
Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_hp_interpreter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_hp_interpreter.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_hp_interpreter.py Sun Mar 16 13:45:34 2008
@@ -777,25 +777,32 @@
'int_gt': 1, 'int_rshift': 1})
def test_red_varsized_struct(self):
+ class MyJitDriver(JitDriver):
+ greens = []
+ reds = ['x', 'y', 'n', 'i', 'res']
A = lltype.Array(lltype.Signed)
S = lltype.GcStruct('S', ('foo', lltype.Signed), ('a', A))
def ll_function(x, y, n):
- s = lltype.malloc(S, 3)
- s.foo = len(s.a)-1
- s.a[0] = x
- s.a[1] = y
- return s.a[n]*s.foo
+ i = 1024
+ while i > 0:
+ i >>= 1
+ #
+ s = lltype.malloc(S, 3)
+ s.foo = len(s.a)-1
+ s.a[0] = x
+ s.a[1] = y
+ res = s.a[n]*s.foo
+ n = 1 - n
+ #
+ MyJitDriver.jit_merge_point(x=x, y=y, n=n, i=i, res=res)
+ MyJitDriver.can_enter_jit(x=x, y=y, n=n, i=i, res=res)
+ return res
- res = self.interpret(ll_function, [21, -21, 0], [])
+ res = self.run(ll_function, [21, -21, 0], threshold=2)
assert res == 42
self.check_insns(malloc_varsize=1,
getinteriorarraysize=1)
- res = self.interpret(ll_function, [21, -21, 1], [])
- assert res == -42
- self.check_insns(malloc_varsize=1,
- getinteriorarraysize=1)
-
def test_array_of_voids(self):
A = lltype.GcArray(lltype.Void)
def ll_function(n):
Modified: pypy/branch/jit-hotpath/pypy/jit/timeshifter/rcontainer.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/timeshifter/rcontainer.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/timeshifter/rcontainer.py Sun Mar 16 13:45:34 2008
@@ -105,7 +105,7 @@
if fixsize:
self._define_devirtualize()
- self._define_allocate()
+ self._define_allocate(fixsize)
def _compute_fielddescs(self, RGenOp):
@@ -139,13 +139,20 @@
self.fielddesc_by_name = fielddesc_by_name
self.innermostdesc = innermostdesc
- def _define_allocate(self):
+ def _define_allocate(self, fixsize):
TYPE = self.TYPE
descs = unrolling_iterable(self.fielddescs)
- def allocate(rgenop):
- s = lltype.malloc(TYPE)
- return rgenop.genconst(s)
+ if fixsize:
+ def allocate(rgenop):
+ s = lltype.malloc(TYPE)
+ return rgenop.genconst(s)
+ self.allocate = allocate
+ else:
+ def allocate_varsize(rgenop, size):
+ s = lltype.malloc(TYPE, size)
+ return rgenop.genconst(s)
+ self.allocate_varsize = allocate_varsize
def populate(content_boxes, gv_s, box_gv_reader):
s = gv_s.revealconst(lltype.Ptr(TYPE))
@@ -159,8 +166,6 @@
tgt = lltype.cast_pointer(desc.PTRTYPE, s)
setattr(tgt, desc.fieldname, v)
i += 1
-
- self.allocate = allocate
self.populate = populate
def _define_devirtualize(self):
@@ -473,12 +478,13 @@
# constant-folding: success
return rvalue.ll_fromvalue(jitstate, len(array))
- argbox = getinterior_all(jitstate, argbox, indexboxes)
+ argbox = gengetinterior_all(jitstate, argbox, indexboxes)
genvar = jitstate.curbuilder.genop_getarraysize(
arrayfielddesc.arraytoken,
argbox.getgenvar(jitstate))
return rvalue.IntRedBox(arrayfielddesc.indexkind, genvar)
+ self.perform_getinteriorarraysize = perform_getinteriorarraysize
self.gengetinteriorarraysize = gengetinteriorarraysize
def _freeze_(self):
More information about the Pypy-commit
mailing list