Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r76160:37ac39dd0b1b
Date: 2015-02-27 14:14 +0200
http://bitbucket.org/pypy/pypy/changeset/37ac39dd0b1b/
Log: slow progress
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
@@ -136,7 +136,7 @@
vtable = llmemory.cast_ptr_to_adr(vtable)
return adr2int(vtable)
-def gc_fielddescrs(gccache, STRUCT, res=None):
+def fielddescrs_from_struct(gccache, STRUCT, only_gc=False, res=None):
from rpython.jit.backend.llsupport import descr
if res is None:
@@ -147,7 +147,10 @@
if FIELD is lltype.Void:
continue
elif isinstance(FIELD, lltype.Struct):
- gc_fielddescrs(gccache, FIELD, res)
- elif isinstance(FIELD, lltype.Ptr) and FIELD._needsgc():
+ fielddescrs_from_struct(gccache, FIELD, only_gc, res)
+ elif (not only_gc) or (isinstance(FIELD, lltype.Ptr) and
FIELD._needsgc()):
res.append(descr.get_field_descr(gccache, STRUCT, name))
return res
+
+def gc_fielddescrs(gccache, STRUCT):
+ return fielddescrs_from_struct(gccache, STRUCT, True)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py
b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -13,31 +13,25 @@
from rpython.rlib.objectmodel import we_are_translated, specialize
from rpython.jit.metainterp.optimizeopt.intutils import IntUnbounded
-class AbstractVirtualValue: #XXX (optimizer.PtrOptInfo):
- _attrs_ = ('keybox', 'source_op', '_cached_vinfo')
- box = None
+class AbstractVirtualInfo(optimizer.PtrOptInfo):
+ _attrs_ = ('_cached_vinfo',)
_tag = optimizer.LEVEL_NONNULL
is_about_raw = False
_cached_vinfo = None
- def __init__(self, source_op):
- self.source_op = source_op
-
def is_forced_virtual(self):
+ xxx
return self.box is not None
- def get_key_box(self):
- if self.box is None:
- return self.source_op
- return self.box
-
def force_box(self, optforce):
+ xxxx
if self.box is None:
optforce.forget_numberings(self.source_op)
self._really_force(optforce)
return self.box
def force_at_end_of_preamble(self, already_forced, optforce):
+ xxxx
value = already_forced.get(self, None)
if value:
return value
@@ -70,11 +64,11 @@
return cpu._optimizeopt_fielddescrlist_cache
get_fielddescrlist_cache._annspecialcase_ = "specialize:memo"
-class AbstractVirtualStructValue(AbstractVirtualValue):
- _attrs_ = ('_fields', 'cpu', '_cached_sorted_fields')
+class AbstractVirtualStructInfo(AbstractVirtualInfo):
+ _attrs_ = ('_fields', '_cached_sorted_fields')
- def __init__(self, cpu, source_op):
- AbstractVirtualValue.__init__(self, source_op)
+ def __init__(self, cpu):
+ AbstractVirtualInfo.__init__(self)
self.cpu = cpu
self._fields = {}
self._cached_sorted_fields = None
@@ -195,11 +189,11 @@
fieldvalue = self._fields[ofs]
fieldvalue.visitor_walk_recursive(visitor)
-class VirtualValue(AbstractVirtualStructValue):
+class VirtualInfo(AbstractVirtualStructInfo):
_tag = optimizer.LEVEL_KNOWNCLASS
- def __init__(self, cpu, known_class, source_op):
- AbstractVirtualStructValue.__init__(self, cpu, source_op)
+ def __init__(self, known_class):
+ AbstractVirtualStructInfo.__init__(self)
assert isinstance(known_class, Const)
self.known_class = known_class
@@ -218,7 +212,7 @@
field_names = [field.name for field in self._fields]
return "<VirtualValue cls=%s fields=%s>" % (cls_name, field_names)
-class VStructValue(AbstractVirtualStructValue):
+class VStructInfo(AbstractVirtualStructInfo):
def __init__(self, cpu, structdescr, source_op):
AbstractVirtualStructValue.__init__(self, cpu, source_op)
@@ -232,7 +226,7 @@
def _get_descr(self):
return self.structdescr
-class AbstractVArrayValue(AbstractVirtualValue):
+class AbstractVArrayInfo(AbstractVirtualInfo):
"""
Base class for VArrayValue (for normal GC arrays) and VRawBufferValue (for
malloc()ed memory)
@@ -263,7 +257,7 @@
itemvalue.visitor_walk_recursive(visitor)
-class VArrayValue(AbstractVArrayValue):
+class VArrayInfo(AbstractVArrayInfo):
def __init__(self, arraydescr, constvalue, size, source_op,
clear=False):
@@ -352,7 +346,7 @@
return visitor.visit_varray(self.arraydescr, self.clear)
-class VArrayStructValue(AbstractVirtualValue):
+class VArrayStructInfo(AbstractVirtualInfo):
def __init__(self, arraydescr, size, source_op):
AbstractVirtualValue.__init__(self, source_op)
self.arraydescr = arraydescr
@@ -421,7 +415,7 @@
return visitor.visit_varraystruct(self.arraydescr,
self._get_list_of_descrs())
-class VRawBufferValue(AbstractVArrayValue):
+class VRawBufferInfo(AbstractVArrayInfo):
is_about_raw = True
def __init__(self, cpu, logops, size, source_op):
@@ -487,7 +481,7 @@
self.buffer.descrs[:])
-class VRawSliceValue(AbstractVirtualValue):
+class VRawSliceInfo(AbstractVirtualInfo):
is_about_raw = True
def __init__(self, rawbuffer_value, offset, source_op):
@@ -529,6 +523,7 @@
_last_guard_not_forced_2 = None
def make_virtual(self, known_class, source_op):
+ xxx
vvalue = VirtualValue(self.optimizer.cpu, known_class, source_op)
self.make_equal_to(source_op, vvalue)
return vvalue
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
@@ -87,7 +87,7 @@
# CONST_0, offsetbox, lengthbox, mode)
-class VAbstractStringValue(virtualize.AbstractVirtualValue):
+class VAbstractStringInfo(virtualize.AbstractVirtualInfo):
_attrs_ = ('mode',)
def __init__(self, source_op, mode):
@@ -122,7 +122,7 @@
offsetbox, mode)
-class VStringPlainValue(VAbstractStringValue):
+class VStringPlainInfo(VAbstractStringInfo):
"""A string built with newstr(const)."""
_lengthbox = None # cache only
@@ -216,7 +216,7 @@
return visitor.visit_vstrplain(self.mode is mode_unicode)
-class VStringConcatValue(VAbstractStringValue):
+class VStringConcatInfo(VAbstractStringInfo):
"""The concatenation of two other strings."""
_attrs_ = ('left', 'right', 'lengthbox')
@@ -269,7 +269,7 @@
return visitor.visit_vstrconcat(self.mode is mode_unicode)
-class VStringSliceValue(VAbstractStringValue):
+class VStringSliceInfo(VAbstractStringInfo):
"""A slice."""
_attrs_ = ('vstr', 'vstart', 'vlength')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit