Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79258:aea7066431e6
Date: 2015-08-27 15:16 +0200
http://bitbucket.org/pypy/pypy/changeset/aea7066431e6/

Log:    work towards translation

diff --git a/rpython/jit/backend/llgraph/runner.py 
b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -93,7 +93,7 @@
         assert not isinstance(vtable, bool)
         self.S = S
         self._vtable = vtable
-        self._is_object = vtable is not None
+        self._is_object = bool(vtable)
         self.all_fielddescrs = heaptracker.all_fielddescrs(runner, S,
                                     get_field_descr=LLGraphCPU.fielddescrof)
         self._runner = runner
diff --git a/rpython/jit/backend/llsupport/descr.py 
b/rpython/jit/backend/llsupport/descr.py
--- a/rpython/jit/backend/llsupport/descr.py
+++ b/rpython/jit/backend/llsupport/descr.py
@@ -45,6 +45,7 @@
         self.gc_fielddescrs = gc_fielddescrs
         self.all_fielddescrs = all_fielddescrs
         self.vtable = vtable
+        assert vtable is not None
         self.immutable_flag = immutable_flag
 
     def get_all_fielddescrs(self):
@@ -195,7 +196,7 @@
         cachedict = cache.setdefault(STRUCT, {})
         cachedict[fieldname] = fielddescr
         if STRUCT is rclass.OBJECT:
-            vtable = None
+            vtable = lltype.nullptr(rclass.OBJECT_VTABLE)
         else:
             vtable = heaptracker.get_vtable_for_gcstruct(gccache, STRUCT)
         fielddescr.parent_descr = get_size_descr(gccache, STRUCT, vtable)
diff --git a/rpython/jit/codewriter/heaptracker.py 
b/rpython/jit/codewriter/heaptracker.py
--- a/rpython/jit/codewriter/heaptracker.py
+++ b/rpython/jit/codewriter/heaptracker.py
@@ -41,9 +41,9 @@
     # lowleveltype, return the corresponding vtable pointer.
     # Returns None if the GcStruct does not belong to an instance.
     if not isinstance(GCSTRUCT, lltype.GcStruct):
-        return None
+        return lltype.nullptr(rclass.OBJECT_VTABLE)
     if not has_gcstruct_a_vtable(GCSTRUCT):
-        return None
+        return lltype.nullptr(rclass.OBJECT_VTABLE)
     setup_cache_gcstruct2vtable(gccache)
     try:
         return gccache._cache_gcstruct2vtable[GCSTRUCT]
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
@@ -935,7 +935,7 @@
             opname = 'new_with_vtable'
         else:
             opname = 'new'
-            vtable = None
+            vtable = lltype.nullptr(rclass.OBJECT_VTABLE)
         sizedescr = self.cpu.sizeof(STRUCT, vtable)
         op1 = SpaceOperation(opname, [sizedescr], op.result)
         if zero:
diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -58,7 +58,7 @@
         else:
             opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
             return opt.propagate_all_forward(self.start_label.getarglist(),
-               self.operations, self.call_pure_results, self.enable_opts)
+               self.operations, self.call_pure_results)
 
 class SimpleCompileData(CompileData):
     """ This represents label() ops jump with no extra info associated with
@@ -77,7 +77,7 @@
         #assert not unroll
         opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
         return opt.propagate_all_forward(self.start_label.getarglist(),
-            self.operations, self.call_pure_results, self.enable_opts)
+            self.operations, self.call_pure_results)
 
 class BridgeCompileData(CompileData):
     """ This represents ops() with a jump at the end that goes to some
@@ -226,7 +226,8 @@
     label = ResOperation(rop.LABEL, loop_info.inputargs[:], descr=target_token)
     jump_op.setdescr(target_token)
     loop.operations = [label] + ops
-    loop.check_consistency()
+    if not we_are_translated():
+        loop.check_consistency()
     jitcell_token.target_tokens = [target_token]
     send_loop_to_backend(greenkey, jitdriver_sd, metainterp_sd, loop, "loop")
     record_loop_or_bridge(metainterp_sd, loop)
@@ -289,10 +290,10 @@
                               original_jitcell_token=jitcell_token)
     start_label = ResOperation(rop.LABEL, start_state.renamed_inputargs,
                                descr=start_descr)
-    # XXX assign short preamble and virtual state
     loop.operations = ([start_label] + preamble_ops + loop_info.extra_same_as +
                        [loop_info.label_op] + loop_ops)
-    loop.check_consistency()
+    if not we_are_translated():
+        loop.check_consistency()
     jitcell_token.target_tokens = [start_descr] + jitcell_token.target_tokens
     send_loop_to_backend(greenkey, jitdriver_sd, metainterp_sd, loop, "loop")
     record_loop_or_bridge(metainterp_sd, loop)
diff --git a/rpython/jit/metainterp/optimizeopt/info.py 
b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -436,7 +436,8 @@
     def all_items(self):
         return self._items
 
-    def copy_fields_to_const(self, arraydescr, constinfo, optheap):
+    def copy_fields_to_const(self, constinfo, optheap):
+        arraydescr = self.arraydescr
         if self._items is not None:
             info = constinfo._get_array_info(arraydescr, optheap)
             info._items = self._items[:]
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -1,6 +1,6 @@
 
 import sys
-from rpython.jit.metainterp.history import Const, TargetToken
+from rpython.jit.metainterp.history import Const, TargetToken, JitCellToken
 from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes,\
      ShortPreambleBuilder, PreambleOp
 from rpython.jit.metainterp.optimizeopt import info, intutils
@@ -98,7 +98,7 @@
     def optimize_preamble(self, start_label, end_label, ops, 
call_pure_results):
         self._check_no_forwarding([[start_label, end_label], ops])
         info, newops = self.optimizer.propagate_all_forward(
-            start_label.getarglist()[:], ops, call_pure_results)
+            start_label.getarglist()[:], ops, call_pure_results, True)
         exported_state = self.export_state(start_label, end_label.getarglist(),
                                            info.inputargs)
         # we need to absolutely make sure that we've cleaned up all
@@ -185,6 +185,7 @@
         self.optimizer._clean_optimization_info(sb.short_inputargs)
         short_preamble = sb.build_short_preamble()
         jitcelltoken = label_op.getdescr()
+        assert isinstance(jitcelltoken, JitCellToken)
         if jitcelltoken.target_tokens is None:
             jitcelltoken.target_tokens = []
         target_token = TargetToken(jitcelltoken,
@@ -205,6 +206,7 @@
 
     def jump_to_existing_trace(self, jump_op):
         jitcelltoken = jump_op.getdescr()
+        assert isinstance(jitcelltoken, JitCellToken)
         virtual_state = self.get_virtual_state(jump_op.getarglist())
         args = [self.get_box_replacement(op) for op in jump_op.getarglist()]
         for target_token in jitcelltoken.target_tokens:
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py 
b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -152,7 +152,7 @@
             self._chars = [None] * length
         StrPtrInfo.__init__(self, mode, is_virtual, length)
 
-    def setitem(self, index, op, cf=None, optheap=None):
+    def strsetitem(self, index, op, cf=None, optheap=None):
         self._chars[index] = op
 
     def shrink(self, length):
@@ -165,7 +165,7 @@
         self._chars = longerlist[start:stop]
         # slice the 'longerlist', which may also contain Nones
 
-    def getitem(self, index, optheap=None):
+    def strgetitem(self, index, optheap=None):
         return self._chars[index]
 
     def is_virtual(self):
@@ -199,7 +199,7 @@
                                  offsetbox, mode):
         for i in range(len(self._chars)):
             assert not isinstance(targetbox, Const) # ConstPtr never makes 
sense
-            charbox = self.getitem(i) # can't be virtual
+            charbox = self.strgetitem(i) # can't be virtual
             if charbox is not None:
                 op = ResOperation(mode.STRSETITEM, [targetbox,
                                                     offsetbox,
@@ -452,7 +452,7 @@
         if opinfo and opinfo.is_virtual():
             indexbox = self.get_constant_box(op.getarg(1))
             if indexbox is not None:
-                opinfo.setitem(indexbox.getint(),
+                opinfo.strsetitem(indexbox.getint(),
                               self.get_box_replacement(op.getarg(2)))
                 return
         self.make_nonnull(op.getarg(0))
@@ -481,7 +481,7 @@
             # even if no longer virtual
             vindex = self.getintbound(index)
             if vindex.is_constant():
-                result = sinfo.getitem(vindex.getint())
+                result = sinfo.strgetitem(vindex.getint())
                 if result is not None:
                     if op is not None:
                         self.make_equal_to(op, result)
@@ -549,7 +549,7 @@
                 vresult = self.strgetitem(None, op.getarg(0),
                                           ConstInt(index + src_start), mode)
                 if dst_virtual:
-                    dst.setitem(index + dst_start, vresult)
+                    dst.strsetitem(index + dst_start, vresult)
                 else:
                     new_op = ResOperation(mode.STRSETITEM, [
                         op.getarg(1), ConstInt(index + dst_start),
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to