Author: Maciej Fijalkowski <[email protected]>
Branch: kill-gen-store-back-in
Changeset: r62782:e848a55243cb
Date: 2013-03-25 18:12 -0700
http://bitbucket.org/pypy/pypy/changeset/e848a55243cb/

Log:    rpython fixes

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
@@ -566,10 +566,6 @@
     def bh_read_timestamp(self):
         return read_timestamp()
 
-    def bh_force_virtualizable(self, v, descr):
-        vinfo = descr.vinfo
-        vinfo.clear_vable_token(v)
-
     def store_fail_descr(self, deadframe, descr):
         pass # I *think*
 
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
@@ -76,7 +76,13 @@
 FLAG_STRUCT   = 'X'
 FLAG_VOID     = 'V'
 
-class FieldDescr(AbstractDescr):
+class ArrayOrFieldDescr(AbstractDescr):
+    vinfo = None
+
+    def get_vinfo(self):
+        return self.vinfo
+
+class FieldDescr(ArrayOrFieldDescr):
     name = ''
     offset = 0      # help translation
     field_size = 0
@@ -150,12 +156,13 @@
 # ____________________________________________________________
 # ArrayDescrs
 
-class ArrayDescr(AbstractDescr):
+class ArrayDescr(ArrayOrFieldDescr):
     tid = 0
     basesize = 0       # workaround for the annotator
     itemsize = 0
     lendescr = None
     flag = '\x00'
+    vinfo = None
 
     def __init__(self, basesize, itemsize, lendescr, flag):
         self.basesize = basesize
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -6,7 +6,7 @@
     total_compiled_loops = 0
     total_compiled_bridges = 0
     total_freed_loops = 0
-    total_freed_bridges = 0    
+    total_freed_bridges = 0
 
     # for heaptracker
     # _all_size_descrs_with_vtable = None
@@ -284,6 +284,9 @@
     def bh_copyunicodecontent(self, src, dst, srcstart, dststart, length):
         raise NotImplementedError
 
+    def bh_force_virtualizable(self, v, descr):
+        vinfo = descr.get_vinfo()
+        vinfo.clear_vable_token(v)
 
 class CompiledLoopToken(object):
     asmmemmgr_blocks = None
diff --git a/rpython/jit/backend/x86/regalloc.py 
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -873,7 +873,9 @@
 
     def consider_force_virtualizable(self, op):
         # just do a call for now
-        vinfo = op.getdescr().vinfo
+        vinfo = op.getdescr().get_vinfo()
+        if vinfo is None:
+            return # for tests
         calldescr = vinfo.clear_vable_descr
         assert isinstance(calldescr, CallDescr)
         fval = rffi.cast(lltype.Signed, vinfo.clear_vable_ptr)
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
@@ -160,7 +160,7 @@
 EffectInfo.MOST_GENERAL = EffectInfo(None, None, None, None,
                                      EffectInfo.EF_RANDOM_EFFECTS,
                                      can_invalidate=True)
-EffectInfo.LEAST_GENERAL = EffectInfo({}, {}, {}, {},
+EffectInfo.LEAST_GENERAL = EffectInfo([], [], [], [],
                                       EffectInfo.EF_ELIDABLE_CANNOT_RAISE,
                                       can_invalidate=False)
 
diff --git a/rpython/jit/metainterp/history.py 
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -163,6 +163,8 @@
         descr_ptr = cpu.ts.cast_to_baseclass(descr_gcref)
         return cast_base_ptr_to_instance(AbstractDescr, descr_ptr)
 
+    def get_vinfo(self):
+        raise NotImplementedError
 
 class AbstractFailDescr(AbstractDescr):
     index = -1
@@ -175,7 +177,7 @@
 
 class BasicFinalDescr(AbstractFailDescr):
     final_descr = True
-    
+
     def __init__(self, identifier=None):
         self.identifier = identifier      # for testing
 
@@ -730,7 +732,7 @@
 
     def repr_of_descr(self):
         return 'TargetToken(%d)' % compute_unique_id(self)
-        
+
 class TreeLoop(object):
     inputargs = None
     operations = None
@@ -827,7 +829,7 @@
                 seen = dict.fromkeys(inputargs)
                 assert len(seen) == len(inputargs), (
                     "duplicate Box in the LABEL arguments")
-                
+
         assert operations[-1].is_final()
         if operations[-1].getopnum() == rop.JUMP:
             target = operations[-1].getdescr()
@@ -836,7 +838,7 @@
 
     def dump(self):
         # RPython-friendly
-        print '%r: inputargs =' % self, self._dump_args(self.inputargs)        
+        print '%r: inputargs =' % self, self._dump_args(self.inputargs)
         for op in self.operations:
             args = op.getarglist()
             print '\t', op.getopname(), self._dump_args(args), \
@@ -952,7 +954,7 @@
     def add_jitcell_token(self, token):
         assert isinstance(token, JitCellToken)
         self.jitcell_token_wrefs.append(weakref.ref(token))
-        
+
     def set_history(self, history):
         self.operations = history.operations
 
@@ -1045,7 +1047,7 @@
             opname = op.getopname()
             insns[opname] = insns.get(opname, 0) + 1
         return self._check_insns(insns, expected, check)
-        
+
     def check_loops(self, expected=None, everywhere=False, **check):
         insns = {}
         for loop in self.get_all_loops():
@@ -1068,7 +1070,7 @@
             print
             import pdb; pdb.set_trace()
         return
-        
+
         for insn, expected_count in check.items():
             getattr(rop, insn.upper())  # fails if 'rop.INSN' does not exist
             found = insns.get(insn, 0)
diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -711,7 +711,7 @@
         if self.metainterp.heapcache.is_nonstandard_virtualizable(box):
             return True
         vinfo = self.metainterp.jitdriver_sd.virtualizable_info
-        if vinfo is not fielddescr.vinfo:
+        if vinfo is not fielddescr.get_vinfo():
             self.metainterp.heapcache.nonstandard_virtualizables_now_known(box)
             return True
         eqbox = self.metainterp.execute_and_record(rop.PTR_EQ, None,
diff --git a/rpython/jit/metainterp/test/test_virtualizable.py 
b/rpython/jit/metainterp/test/test_virtualizable.py
--- a/rpython/jit/metainterp/test/test_virtualizable.py
+++ b/rpython/jit/metainterp/test/test_virtualizable.py
@@ -139,11 +139,13 @@
                 n -= 1
         def f(n):
             xy = self.setup()
+            promote_virtualizable(xy, 'inst_x')
             xy.inst_x = 10000
             m = 10
             while m > 0:
                 g(xy, n)
                 m -= 1
+            promote_virtualizable(xy, 'inst_x')
             return xy.inst_x
         res = self.meta_interp(f, [18])
         assert res == 10180
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to