[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