Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: fast-slowpath
Changeset: r65458:f8d06bf178e9
Date: 2013-07-18 12:39 +0200
http://bitbucket.org/pypy/pypy/changeset/f8d06bf178e9/

Log:    start hacking on list_resize_ge

diff --git a/rpython/jit/backend/llsupport/rewrite.py 
b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -1,9 +1,10 @@
 from rpython.rlib.rarithmetic import ovfcheck
-from rpython.rtyper.lltypesystem import lltype, llmemory
+from rpython.rtyper.lltypesystem import llmemory
 from rpython.jit.metainterp import history
 from rpython.jit.metainterp.history import ConstInt, BoxPtr, ConstPtr
 from rpython.jit.metainterp.resoperation import ResOperation, rop
 from rpython.jit.codewriter import heaptracker
+from rpython.jit.codewriter.effectinfo import EffectInfo
 from rpython.jit.backend.llsupport.symbolic import WORD
 from rpython.jit.backend.llsupport.descr import SizeDescr, ArrayDescr
 from rpython.jit.metainterp.history import JitCellToken
@@ -78,6 +79,11 @@
             if op.getopnum() == rop.CALL_ASSEMBLER:
                 self.handle_call_assembler(op)
                 continue
+            if op.getopnum() == rop.CALL:
+                idx = op.getdescr().get_extra_info().oopspecindex
+                if idx == EffectInfo.OS_LIST_RESIZE_GE:
+                    self.handle_list_resize_ge(op)
+                    continue
             #
             self.newops.append(op)
         return self.newops
@@ -118,6 +124,12 @@
         else:
             self.gen_malloc_fixedsize(size, descr.tid, op.result)
 
+    def handle_list_resize_ge(self, op):
+        """ what we want to do is to check the length and than add a 
conditional
+        call to really resize
+        """
+        xxx
+
     def handle_new_array(self, arraydescr, op, kind=FLAG_ARRAY):
         v_length = op.getarg(0)
         total_size = -1
diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py 
b/rpython/jit/backend/llsupport/test/test_rewrite.py
--- a/rpython/jit/backend/llsupport/test/test_rewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_rewrite.py
@@ -773,3 +773,6 @@
         setarrayitem_gc(p1, 1, f0, descr=floatframedescr)
         i3 = call_assembler(p1, descr=casmdescr)
         """)
+
+    def test_rewrite_list_resize_ge(self):
+        pass
diff --git a/rpython/jit/codewriter/effectinfo.py 
b/rpython/jit/codewriter/effectinfo.py
--- a/rpython/jit/codewriter/effectinfo.py
+++ b/rpython/jit/codewriter/effectinfo.py
@@ -85,10 +85,14 @@
 
     OS_JIT_FORCE_VIRTUAL        = 120
 
+    OS_LIST_RESIZE_GE           = 130
+    OS_LIST_RESIZE_LE           = 130
+
     # for debugging:
     _OS_CANRAISE = set([
         OS_NONE, OS_STR2UNICODE, OS_LIBFFI_CALL, OS_RAW_MALLOC_VARSIZE_CHAR,
-        OS_JIT_FORCE_VIRTUAL, OS_SHRINK_ARRAY,
+        OS_JIT_FORCE_VIRTUAL, OS_SHRINK_ARRAY, OS_LIST_RESIZE_GE,
+        OS_LIST_RESIZE_LE,
     ])
 
     def __new__(cls, readonly_descrs_fields, readonly_descrs_arrays,
diff --git a/rpython/jit/codewriter/jtransform.py 
b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -359,11 +359,12 @@
         else: raise AssertionError(kind)
         lst.append(v)
 
-    def handle_residual_call(self, op, extraargs=[], may_call_jitcodes=False):
+    def handle_residual_call(self, op, extraargs=[], may_call_jitcodes=False,
+                             oopspecindex=EffectInfo.OS_NONE):
         """A direct_call turns into the operation 'residual_call_xxx' if it
         is calling a function that we don't want to JIT.  The initial args
         of 'residual_call_xxx' are the function to call, and its calldescr."""
-        calldescr = self.callcontrol.getcalldescr(op)
+        calldescr = self.callcontrol.getcalldescr(op, 
oopspecindex=oopspecindex)
         op1 = self.rewrite_call(op, 'residual_call',
                                 [op.args[0]] + extraargs, calldescr=calldescr)
         if may_call_jitcodes or self.callcontrol.calldescr_canraise(calldescr):
@@ -1616,6 +1617,15 @@
     do_resizable_void_list_getitem_foldable = do_resizable_void_list_getitem
     do_resizable_void_list_setitem = do_resizable_void_list_getitem
 
+    def do_resizable_list__resize_ge(self, op, args, *descrs):
+        index = EffectInfo.OS_LIST_RESIZE_GE
+        op1 = self.handle_residual_call(op, oopspecindex=index)[0]
+        LIST = args[0].concretetype.TO
+        lengthdescr = self.cpu.fielddescrof(LIST, 'length')
+        arraydescr = self.cpu.arraydescrof(LIST.items.TO)
+        op1.args += [lengthdescr, arraydescr]
+        return [op1, SpaceOperation('-live-', [], None)]
+
     # ----------
     # Strings and Unicodes.
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to