[pypy-svn] r25201 - in pypy/dist/pypy/jit: . test
arigo at codespeak.net
arigo at codespeak.net
Sat Apr 1 10:19:18 CEST 2006
Author: arigo
Date: Sat Apr 1 10:19:17 2006
New Revision: 25201
Modified:
pypy/dist/pypy/jit/rtimeshift.py
pypy/dist/pypy/jit/test/test_hint_timeshift.py
Log:
(arre, pedronis, arigo)
Substructures start to work.
Modified: pypy/dist/pypy/jit/rtimeshift.py
==============================================================================
--- pypy/dist/pypy/jit/rtimeshift.py (original)
+++ pypy/dist/pypy/jit/rtimeshift.py Sat Apr 1 10:19:17 2006
@@ -122,9 +122,7 @@
op_args[0] = typedesc.gv_type
self.genvar = rgenop.genop(jitstate.curblock, 'malloc', op_args,
typedesc.gv_ptrtype)
- for i in range(len(boxes)):
- RedBox.op_setfield(self, jitstate, typedesc.fielddescs[i],
- boxes[i])
+ typedesc.materialize_content(jitstate, self.genvar, boxes)
return self.genvar
def is_forced(self):
@@ -145,7 +143,6 @@
bigbox = VirtualRedBox(self.typedesc)
memo[self] = bigbox
for i in range(len(bigbox.content_boxes)):
- # XXX need a memo for sharing
gv_fldtype = self.typedesc.fielddescs[i].gv_resulttype
bigbox.content_boxes[i] = self.content_boxes[i].copybox(newblock,
gv_fldtype,
@@ -203,7 +200,6 @@
bigbox.parentbox = parentcopybox
typedesc = self.fielddesc.inlined_typedesc
for i in range(len(bigbox.content_boxes)):
- # XXX need a memo for sharing
gv_fldtype = typedesc.fielddescs[i].gv_resulttype
bigbox.content_boxes[i] = self.content_boxes[i].copybox(newblock,
gv_fldtype,
@@ -383,6 +379,30 @@
clist.append(box)
return clist
+ def materialize_content(self, jitstate, gv, boxes):
+ for i in range(len(boxes)):
+ smallbox = boxes[i]
+ fielddesc = self.fielddescs[i]
+ if fielddesc.inlined_typedesc:
+ op_args = lltype.malloc(VARLIST.TO, 2)
+ op_args[0] = gv
+ op_args[1] = fielddesc.gv_fieldname
+ gv_sub = rgenop.genop(jitstate.curblock, 'getsubstruct',
+ op_args, fielddesc.gv_resulttype)
+ assert isinstance(smallbox, SubVirtualRedBox)
+ subboxes = smallbox.content_boxes
+ smallbox.content_boxes = None
+ fielddesc.inlined_typedesc.materialize_content(jitstate,
+ gv_sub,
+ subboxes)
+ else:
+ op_args = lltype.malloc(VARLIST.TO, 3)
+ op_args[0] = gv
+ op_args[1] = fielddesc.gv_fieldname
+ op_args[2] = smallbox.getgenvar(jitstate)
+ rgenop.genop(jitstate.curblock, 'setfield', op_args,
+ gv_Void)
+
def make(T):
try:
return StructTypeDesc._type_cache[T]
Modified: pypy/dist/pypy/jit/test/test_hint_timeshift.py
==============================================================================
--- pypy/dist/pypy/jit/test/test_hint_timeshift.py (original)
+++ pypy/dist/pypy/jit/test/test_hint_timeshift.py Sat Apr 1 10:19:17 2006
@@ -7,7 +7,7 @@
from pypy.jit import rtimeshift, hintrtyper
from pypy.jit.test.test_llabstractinterp import annotation, summary
from pypy.rpython.lltypesystem import lltype, llmemory
-from pypy.rpython.objectmodel import hint
+from pypy.rpython.objectmodel import hint, keepalive_until_here
from pypy.rpython import rgenop, rstr
from pypy.annotation import model as annmodel
from pypy.rpython.llinterp import LLInterpreter
@@ -386,7 +386,6 @@
assert insns == {'int_lt': 1, 'int_mul': 1}
def test_red_subcontainer():
- py.test.skip("in-progress")
S = lltype.Struct('S', ('n', lltype.Signed))
T = lltype.GcStruct('T', ('s', S), ('n', lltype.Float))
def ll_function(k):
@@ -395,7 +394,9 @@
s.n = k
if k < 0:
return -123
- return s.n * (k-1)
+ result = s.n * (k-1)
+ keepalive_until_here(t)
+ return result
insns, res = timeshift(ll_function, [7], [], policy=P_NOVIRTUAL)
assert res == 42
#assert insns == ... in-progress
More information about the Pypy-commit
mailing list