[pypy-commit] pypy result-in-resops: start running the llgraph backend tests

fijal noreply at buildbot.pypy.org
Sun Aug 26 23:09:47 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r56879:0deeea0fb609
Date: 2012-08-26 23:09 +0200
http://bitbucket.org/pypy/pypy/changeset/0deeea0fb609/

Log:	start running the llgraph backend tests

diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -8,8 +8,9 @@
 from pypy.rpython.lltypesystem import lltype, llmemory, rclass
 from pypy.rpython.ootypesystem import ootype
 from pypy.rpython.llinterp import LLInterpreter
-from pypy.jit.metainterp import history
-from pypy.jit.metainterp.resoperation import REF, INT, FLOAT, STRUCT, HOLE
+from pypy.jit.metainterp import history, resoperation
+from pypy.jit.metainterp.resoperation import REF, INT, FLOAT, STRUCT, HOLE,\
+     getkind, VOID
 from pypy.jit.metainterp.warmstate import unwrap
 from pypy.jit.metainterp.resoperation import rop
 from pypy.jit.backend import model
@@ -167,22 +168,22 @@
         model.AbstractCPU.free_loop_and_bridges(self, compiled_loop_token)
 
     def _compile_loop_or_bridge(self, c, inputargs, operations, clt):
-        var2index = {}
         for box in inputargs:
             if isinstance(box, history.BoxInt):
-                var2index[box] = llimpl.compile_start_int_var(c)
+                r = llimpl.compile_start_int_var(c)
             elif isinstance(box, self.ts.BoxRef):
                 TYPE = self.ts.BASETYPE
-                var2index[box] = llimpl.compile_start_ref_var(c, TYPE)
+                r = llimpl.compile_start_ref_var(c, TYPE)
             elif isinstance(box, history.BoxFloat):
-                var2index[box] = llimpl.compile_start_float_var(c)
+                r = llimpl.compile_start_float_var(c)
             else:
                 raise Exception("box is: %r" % (box,))
+            box.set_extra("llgraph_var2index", r)
         llimpl.compile_started_vars(clt)
-        self._compile_operations(c, operations, var2index, clt)
+        self._compile_operations(c, operations, clt)
         return c
 
-    def _compile_operations(self, c, operations, var2index, clt):
+    def _compile_operations(self, c, operations, clt):
         for op in operations:
             llimpl.compile_add(c, op.getopnum())
             descr = op.getdescr()
@@ -201,13 +202,13 @@
             for i in range(op.numargs()):
                 x = op.getarg(i)
                 if not x.is_constant():
-                    llimpl.compile_add_var(c, var2index[x])
+                    llimpl.compile_add_var(c, x.get_extra("llgraph_var2index"))
                 else:
-                    if isinstance(x, history.ConstInt):
+                    if isinstance(x, resoperation.ConstInt):
                         llimpl.compile_add_int_const(c, x.value)
                     elif isinstance(x, self.ts.ConstRef):
                         llimpl.compile_add_ref_const(c, x.value, self.ts.BASETYPE)
-                    elif isinstance(x, history.ConstFloat):
+                    elif isinstance(x, resoperation.ConstFloat):
                         llimpl.compile_add_float_const(c, x.value)
                     elif isinstance(x, Descr):
                         llimpl.compile_add_descr_arg(c, x.ofs, x.typeinfo,
@@ -219,7 +220,7 @@
                 faildescr = op.getdescr()
                 assert isinstance(faildescr, history.AbstractFailDescr)
                 faildescr._fail_args_types = []
-                for box in op.getfailargs():
+                for box in op.get_extra("failargs"):
                     if box is None:
                         type = HOLE
                     else:
@@ -228,18 +229,21 @@
                 fail_index = self.get_fail_descr_number(faildescr)
                 index = llimpl.compile_add_fail(c, fail_index)
                 faildescr._compiled_fail = c, index
-                for box in op.getfailargs():
+                for box in op.get_extra("failargs"):
                     if box is not None:
-                        llimpl.compile_add_fail_arg(c, var2index[box])
+                        llimpl.compile_add_fail_arg(c,
+                                          box.get_extra("llgraph_var2index"))
                     else:
                         llimpl.compile_add_fail_arg(c, -1)
 
             if op.type == INT:
-                var2index[op] = llimpl.compile_add_int_result(c)
+                r = llimpl.compile_add_int_result(c)
             elif op.type == REF:
-                var2index[op] = llimpl.compile_add_ref_result(c, self.ts.BASETYPE)
+                r = llimpl.compile_add_ref_result(c, self.ts.BASETYPE)
             elif op.type == FLOAT:
-                var2index[op] = llimpl.compile_add_float_result(c)
+                r = llimpl.compile_add_float_result(c)
+            if op.type != VOID:
+                op.set_extra("llgraph_var2index", r)
         op = operations[-1]
         assert op.is_final()
         if op.getopnum() == rop.JUMP:
@@ -332,7 +336,7 @@
 
     def fielddescrof(self, S, fieldname):
         ofs, size = symbolic.get_field_token(S, fieldname)
-        token = history.getkind(getattr(S, fieldname))
+        token = getkind(getattr(S, fieldname))
         return self.getdescr(ofs, token[0], name=fieldname)
 
     def fielddescrof_dynamic(self, offset, fieldsize, is_pointer, is_float, is_signed):
@@ -349,7 +353,7 @@
         S = A.OF
         width = symbolic.get_size(A)
         ofs, size = symbolic.get_field_token(S, fieldname)
-        token = history.getkind(getattr(S, fieldname))
+        token = getkind(getattr(S, fieldname))
         return self.getdescr(ofs, token[0], name=fieldname, width=width)
 
     def interiorfielddescrof_dynamic(self, offset, width, fieldsize,
@@ -367,12 +371,12 @@
     def calldescrof(self, FUNC, ARGS, RESULT, extrainfo):
         arg_types = []
         for ARG in ARGS:
-            token = history.getkind(ARG)
+            token = getkind(ARG)
             if token != 'void':
                 if token == 'float' and longlong.is_longlong(ARG):
                     token = 'L'
                 arg_types.append(token[0])
-        token = history.getkind(RESULT)
+        token = getkind(RESULT)
         if token == 'float' and longlong.is_longlong(RESULT):
             token = 'L'
         return self.getdescr(0, token[0], extrainfo=extrainfo,
@@ -403,7 +407,7 @@
         assert isinstance(A, lltype.GcArray) or A._hints.get('nolength', False)
         size = symbolic.get_size(A)
         if isinstance(A.OF, lltype.Ptr) or isinstance(A.OF, lltype.Primitive):
-            token = history.getkind(A.OF)[0]
+            token = getkind(A.OF)[0]
         elif isinstance(A.OF, lltype.Struct):
             token = 's'
         else:
@@ -625,8 +629,8 @@
 
     def typedescr2classbox(self, descr):
         assert isinstance(descr, TypeDescr)
-        return history.ConstObj(ootype.cast_to_object(
-                            ootype.runtimeClass(descr.TYPE)))
+        return resoperation.ConstObj(ootype.cast_to_object(
+            ootype.runtimeClass(descr.TYPE)))
 
     def get_exception(self):
         if llimpl._last_exception:
@@ -855,8 +859,8 @@
         self.setarrayitem = setarrayitem
         self.getarraylength = getarraylength
         self.instanceof = instanceof
-        self._is_array_of_pointers = (history.getkind(TYPE) == 'ref')
-        self._is_array_of_floats = (history.getkind(TYPE) == 'float')
+        self._is_array_of_pointers = (getkind(TYPE) == 'ref')
+        self._is_array_of_floats = (getkind(TYPE) == 'float')
 
     def is_array_of_pointers(self):
         # for arrays, TYPE is the type of the array item.
@@ -890,8 +894,8 @@
 
         self.getfield = getfield
         self.setfield = setfield
-        self._is_pointer_field = (history.getkind(T) == 'ref')
-        self._is_float_field = (history.getkind(T) == 'float')
+        self._is_pointer_field = (getkind(T) == 'ref')
+        self._is_float_field = (getkind(T) == 'float')
 
     def sort_key(self):
         return self._keys.getkey((self.TYPE, self.fieldname))
diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -4,11 +4,9 @@
                                          BasicFailDescr,
                                          BoxInt, Box, BoxPtr,
                                          JitCellToken, TargetToken,
-                                         ConstInt, ConstPtr,
-                                         BoxObj,
-                                         ConstObj, BoxFloat, ConstFloat)
+                                         BoxObj, BoxFloat)
 from pypy.jit.metainterp.resoperation import rop, create_resop_dispatch,\
-     create_resop
+     create_resop, ConstInt, ConstPtr, ConstFloat, ConstObj
 from pypy.jit.metainterp.typesystem import deref
 from pypy.jit.codewriter.effectinfo import EffectInfo
 from pypy.rpython.lltypesystem import lltype, llmemory, rstr, rffi, rclass
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -7,10 +7,10 @@
 from pypy.conftest import option
 from pypy.tool.sourcetools import func_with_new_name
 
-from pypy.jit.metainterp.resoperation import rop, create_resop
+from pypy.jit.metainterp.resoperation import rop, create_resop, ConstInt
 from pypy.jit.metainterp.history import TreeLoop, Box, JitCellToken, TargetToken
 from pypy.jit.metainterp.history import AbstractFailDescr, BoxInt
-from pypy.jit.metainterp.history import BoxPtr, BoxFloat, ConstInt
+from pypy.jit.metainterp.history import BoxPtr, BoxFloat
 from pypy.jit.metainterp import history
 from pypy.jit.metainterp.optimize import InvalidLoop
 from pypy.jit.metainterp.inliner import Inliner
diff --git a/pypy/jit/metainterp/inliner.py b/pypy/jit/metainterp/inliner.py
--- a/pypy/jit/metainterp/inliner.py
+++ b/pypy/jit/metainterp/inliner.py
@@ -1,4 +1,4 @@
-from pypy.jit.metainterp.history import Const
+from pypy.jit.metainterp.resoperation import Const
 from pypy.jit.metainterp.resume import Snapshot
 
 class Inliner(object):
diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py
--- a/pypy/jit/metainterp/optimizeopt/heap.py
+++ b/pypy/jit/metainterp/optimizeopt/heap.py
@@ -2,9 +2,8 @@
 
 from pypy.jit.metainterp.jitexc import JitException
 from pypy.jit.metainterp.optimizeopt.optimizer import Optimization, MODE_ARRAY
-from pypy.jit.metainterp.history import ConstInt, Const
 from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method
-from pypy.jit.metainterp.resoperation import rop, opgroups
+from pypy.jit.metainterp.resoperation import rop, opgroups, Const
 from pypy.rlib.objectmodel import we_are_translated
 
 
diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py b/pypy/jit/metainterp/optimizeopt/intbounds.py
--- a/pypy/jit/metainterp/optimizeopt/intbounds.py
+++ b/pypy/jit/metainterp/optimizeopt/intbounds.py
@@ -1,13 +1,11 @@
 import sys
-from pypy.jit.metainterp.optimizeopt.optimizer import Optimization, CONST_1, CONST_0, \
-                                                  MODE_ARRAY, MODE_STR, MODE_UNICODE
-from pypy.jit.metainterp.history import ConstInt
+from pypy.jit.metainterp.optimizeopt.optimizer import Optimization, CONST_1,\
+     CONST_0, MODE_ARRAY, MODE_STR, MODE_UNICODE
 from pypy.jit.metainterp.optimizeopt.intutils import (IntBound, IntLowerBound,
     IntUpperBound)
 from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method
-from pypy.jit.metainterp.resoperation import rop
+from pypy.jit.metainterp.resoperation import rop, ConstInt
 from pypy.jit.metainterp.optimize import InvalidLoop
-from pypy.rlib.rarithmetic import LONG_BIT
 
 
 class OptIntBounds(Optimization):
diff --git a/pypy/jit/metainterp/optimizeopt/intutils.py b/pypy/jit/metainterp/optimizeopt/intutils.py
--- a/pypy/jit/metainterp/optimizeopt/intutils.py
+++ b/pypy/jit/metainterp/optimizeopt/intutils.py
@@ -1,7 +1,7 @@
 from pypy.rlib.rarithmetic import ovfcheck, LONG_BIT, maxint, is_valid_int
 from pypy.rlib.objectmodel import we_are_translated
-from pypy.jit.metainterp.resoperation import rop, create_resop
-from pypy.jit.metainterp.history import BoxInt, ConstInt
+from pypy.jit.metainterp.resoperation import rop, create_resop, ConstInt
+from pypy.jit.metainterp.history import BoxInt
 MAXINT = maxint
 MININT = -maxint - 1
 
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -1,15 +1,14 @@
 from pypy.jit.metainterp import jitprof, resume, compile
 from pypy.jit.metainterp.executor import execute_nonspec
-from pypy.jit.metainterp.history import BoxInt, BoxFloat, Const, ConstInt, REF, INT
+from pypy.jit.metainterp.history import BoxInt, BoxFloat, REF
 from pypy.jit.metainterp.optimizeopt.intutils import IntBound, IntUnbounded, \
                                                      ImmutableIntUnbounded, \
                                                      IntLowerBound, MININT, MAXINT
-from pypy.jit.metainterp.optimizeopt.util import (make_dispatcher_method,
-    args_dict)
-from pypy.jit.metainterp.resoperation import rop, AbstractResOp, opgroups
+from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method
+from pypy.jit.metainterp.resoperation import rop, AbstractResOp, opgroups,\
+     Const, ConstInt
 from pypy.jit.metainterp.typesystem import llhelper, oohelper
 from pypy.tool.pairtype import extendabletype
-from pypy.rlib.debug import debug_start, debug_stop, debug_print
 from pypy.rlib.objectmodel import specialize
 
 LEVEL_UNKNOWN    = '\x00'
diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py b/pypy/jit/metainterp/optimizeopt/rewrite.py
--- a/pypy/jit/metainterp/optimizeopt/rewrite.py
+++ b/pypy/jit/metainterp/optimizeopt/rewrite.py
@@ -1,10 +1,10 @@
 from pypy.jit.codewriter.effectinfo import EffectInfo
-from pypy.jit.metainterp.history import ConstInt, make_hashable_int
 from pypy.jit.metainterp.optimize import InvalidLoop
 from pypy.jit.metainterp.optimizeopt.intutils import IntBound
 from pypy.jit.metainterp.optimizeopt.optimizer import *
 from pypy.jit.metainterp.optimizeopt.util import _findall, make_dispatcher_method
-from pypy.jit.metainterp.resoperation import (opboolinvers, opboolreflex, rop)
+from pypy.jit.metainterp.resoperation import (opboolinvers, opboolreflex, rop,
+                                              ConstInt, make_hashable_int)
 from pypy.rlib.rarithmetic import highest_bit
 
 
diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py b/pypy/jit/metainterp/optimizeopt/virtualize.py
--- a/pypy/jit/metainterp/optimizeopt/virtualize.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualize.py
@@ -1,10 +1,10 @@
 from pypy.jit.codewriter.heaptracker import vtable2descr
 from pypy.jit.metainterp.executor import execute
-from pypy.jit.metainterp.history import Const, ConstInt, BoxInt
+from pypy.jit.metainterp.history import BoxInt
 from pypy.jit.metainterp.optimizeopt import optimizer
 from pypy.jit.metainterp.optimizeopt.util import (make_dispatcher_method,
     descrlist_dict, sort_descrs)
-from pypy.jit.metainterp.resoperation import rop
+from pypy.jit.metainterp.resoperation import rop, Const, ConstInt
 from pypy.rlib.objectmodel import we_are_translated
 from pypy.jit.metainterp.optimizeopt.optimizer import OptValue
 
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -3,16 +3,13 @@
 from pypy.jit.metainterp.optimizeopt.optimizer import LEVEL_CONSTANT, \
                                                       LEVEL_KNOWNCLASS, \
                                                       LEVEL_NONNULL, \
-                                                      LEVEL_UNKNOWN, \
-                                                      MININT, MAXINT, OptValue
-from pypy.jit.metainterp.history import BoxInt, ConstInt, BoxPtr, Const
+                                                      LEVEL_UNKNOWN
+from pypy.jit.metainterp.history import BoxInt, BoxPtr
 from pypy.jit.metainterp.optimize import InvalidLoop
-from pypy.jit.metainterp.optimizeopt.intutils import IntBound, IntUnbounded
-from pypy.jit.metainterp.resoperation import rop
+from pypy.jit.metainterp.optimizeopt.intutils import IntUnbounded
+from pypy.jit.metainterp.resoperation import rop, Const, ConstInt
 from pypy.rlib.objectmodel import we_are_translated
 from pypy.rlib.debug import debug_start, debug_stop, debug_print
-from pypy.rlib.objectmodel import we_are_translated
-import os
 
 class BadVirtualState(Exception):
     pass
diff --git a/pypy/jit/metainterp/optimizeopt/vstring.py b/pypy/jit/metainterp/optimizeopt/vstring.py
--- a/pypy/jit/metainterp/optimizeopt/vstring.py
+++ b/pypy/jit/metainterp/optimizeopt/vstring.py
@@ -1,11 +1,11 @@
 from pypy.jit.codewriter.effectinfo import EffectInfo
-from pypy.jit.metainterp.history import (BoxInt, Const, ConstInt, ConstPtr,
+from pypy.jit.metainterp.history import (BoxInt,
     get_const_ptr_for_string, get_const_ptr_for_unicode, BoxPtr, REF, INT)
 from pypy.jit.metainterp.optimizeopt import optimizer, virtualize
 from pypy.jit.metainterp.optimizeopt.optimizer import CONST_0, CONST_1
 from pypy.jit.metainterp.optimizeopt.optimizer import llhelper, REMOVED
 from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method
-from pypy.jit.metainterp.resoperation import rop
+from pypy.jit.metainterp.resoperation import rop, Const, ConstInt, ConstPtr
 from pypy.rlib.objectmodel import specialize, we_are_translated
 from pypy.rlib.unroll import unrolling_iterable
 from pypy.rpython import annlowlevel
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -175,12 +175,21 @@
 
     @specialize.arg(1)
     def get_extra(self, key):
+        if key == 'llgraph_var2index':
+            return self.llgraph_var2index
         raise KeyError
 
     @specialize.arg(1)
     def set_extra(self, key, value):
+        if key == 'llgraph_var2index':
+            self.llgraph_var2index = value
+            return
         raise KeyError
 
+    @specialize.arg(1)
+    def del_extra(self, key):
+        pass
+
 def getkind(TYPE, supports_floats=True,
                   supports_longlong=True,
                   supports_singlefloats=True):
@@ -488,6 +497,7 @@
         'failargs': 'arguments for guard ops that are alive. '
                     'valid from optimizations (store_final_args) until '
                     'the backend',
+        'llgraph_var2index': 'llgraph internal attribute',
     }
 
     extras = None
@@ -508,6 +518,10 @@
             raise Exception("Please document '%s' extra parameter and it's lifetime" % key)
         setattr(self, key, value)
 
+    @specialize.arg(1)
+    def del_extra(self, key):
+        delattr(self, key)
+
     @classmethod
     def getopnum(cls):
         return cls.opnum
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -1,6 +1,5 @@
-import sys, os
-from pypy.jit.metainterp.history import Box, Const, ConstInt, getkind
-from pypy.jit.metainterp.history import BoxInt, BoxPtr, BoxFloat
+from pypy.jit.metainterp.resoperation import Const, ConstInt, getkind
+from pypy.jit.metainterp.history import BoxInt, BoxPtr, BoxFloat, Box
 from pypy.jit.metainterp.resoperation import INT, REF, FLOAT
 from pypy.jit.metainterp.history import AbstractDescr
 from pypy.jit.metainterp.resoperation import rop
@@ -12,7 +11,6 @@
 from pypy.rlib.objectmodel import we_are_translated, specialize
 from pypy.rlib.debug import have_debug_prints, ll_assert
 from pypy.rlib.debug import debug_start, debug_stop, debug_print
-from pypy.jit.metainterp.optimize import InvalidLoop
 
 # Logic to encode the chain of frames and the state of the boxes at a
 # guard operation, and to decode it again.  This is a bit advanced,


More information about the pypy-commit mailing list