[pypy-commit] pypy optimizeopt-cleanup: Replace method Optimization.getptrinfo() with function getptrinfo()
rlamy
pypy.commits at gmail.com
Wed May 15 10:52:50 EDT 2019
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: optimizeopt-cleanup
Changeset: r96621:4d02009079d2
Date: 2019-05-15 15:51 +0100
http://bitbucket.org/pypy/pypy/changeset/4d02009079d2/
Log: Replace method Optimization.getptrinfo() with function getptrinfo()
diff --git a/rpython/jit/metainterp/optimizeopt/bridgeopt.py b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
--- a/rpython/jit/metainterp/optimizeopt/bridgeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
@@ -3,6 +3,7 @@
from rpython.jit.metainterp import resumecode
from rpython.jit.metainterp.history import Const, ConstInt, CONST_NULL
+from .info import getptrinfo
# adds the following sections at the end of the resume code:
@@ -75,7 +76,7 @@
for box in liveboxes:
if box is None or box.type != "r":
continue
- info = optimizer.getptrinfo(box)
+ info = getptrinfo(box)
known_class = info is not None and info.get_known_class(optimizer.cpu) is not None
bitfield <<= 1
bitfield |= known_class
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -61,36 +61,28 @@
info.produce_short_preamble_ops(structbox, descr, index, optimizer,
shortboxes)
- def possible_aliasing(self, optheap, opinfo):
+ def possible_aliasing(self, opinfo):
# If lazy_set is set and contains a setfield on a different
# structvalue, then we are annoyed, because it may point to either
# the same or a different structure at runtime.
# XXX constants?
return (self._lazy_set is not None
- and (not optheap.getptrinfo(
- self._lazy_set.getarg(0)).same_info(opinfo)))
+ and not info.getptrinfo(self._lazy_set.getarg(0)).same_info(opinfo))
def do_setfield(self, optheap, op):
# Update the state with the SETFIELD_GC/SETARRAYITEM_GC operation 'op'.
structinfo = optheap.ensure_ptr_info_arg0(op)
arg1 = get_box_replacement(self._get_rhs_from_set_op(op))
- if self.possible_aliasing(optheap, structinfo):
+ if self.possible_aliasing(structinfo):
self.force_lazy_set(optheap, op.getdescr())
- assert not self.possible_aliasing(optheap, structinfo)
+ assert not self.possible_aliasing(structinfo)
cached_field = self._getfield(structinfo, op.getdescr(), optheap, False)
if cached_field is not None:
cached_field = cached_field.get_box_replacement()
- # Hack to ensure constants are imported from the preamble
- # XXX no longer necessary?
- #if cached_fieldvalue and fieldvalue.is_constant():
- # optheap.optimizer.ensure_imported(cached_fieldvalue)
- # cached_fieldvalue = self._cached_fields.get(structvalue, None)
-
if not cached_field or not cached_field.same_box(arg1):
# common case: store the 'op' as lazy_set
self._lazy_set = op
-
else:
# this is the case where the pending setfield ends up
# storing precisely the value that is already there,
@@ -105,7 +97,7 @@
def getfield_from_cache(self, optheap, opinfo, descr):
# Returns the up-to-date field's value, or None if not cached.
- if self.possible_aliasing(optheap, opinfo):
+ if self.possible_aliasing(opinfo):
self.force_lazy_set(optheap, descr)
if self._lazy_set is not None:
op = self._lazy_set
@@ -526,7 +518,7 @@
# guards' resume data is that of a virtual object that is stored
# into a field of a non-virtual object. Here, 'op' in either
# SETFIELD_GC or SETARRAYITEM_GC.
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = info.getptrinfo(op.getarg(0))
assert not opinfo.is_virtual() # it must be a non-virtual
if self.optimizer.is_virtual(op.getarg(2)):
pendingfields.append(op)
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
@@ -1,10 +1,11 @@
-from rpython.rlib.objectmodel import specialize, we_are_translated, compute_hash
-from rpython.jit.metainterp.resoperation import AbstractValue, ResOperation,\
- rop, OpHelpers
-from rpython.jit.metainterp.history import ConstInt, Const
-from rpython.rtyper.lltypesystem import lltype, llmemory
-from rpython.jit.metainterp.optimizeopt.rawbuffer import RawBuffer, InvalidRawOperation
+from rpython.rlib.objectmodel import specialize, compute_hash
+from rpython.jit.metainterp.resoperation import (
+ AbstractValue, ResOperation, rop, OpHelpers)
+from rpython.jit.metainterp.history import ConstInt, ConstPtr, Const
+from rpython.rtyper.lltypesystem import lltype
+from rpython.jit.metainterp.optimizeopt.rawbuffer import (
+ RawBuffer, InvalidRawOperation)
from rpython.jit.metainterp.executor import execute
from rpython.jit.metainterp.optimize import InvalidLoop
from .util import get_box_replacement
@@ -84,7 +85,7 @@
@specialize.arg(2)
def get_constant_string_spec(self, string_optimizer, mode):
- return None # can't be constant
+ return None # can't be constant
class NonNullPtrInfo(PtrInfo):
_attrs_ = ('last_guard_pos',)
@@ -161,14 +162,14 @@
def is_virtual(self):
return self._is_virtual
- def _visitor_walk_recursive(self, op, visitor, optimizer):
+ def _visitor_walk_recursive(self, op, visitor):
raise NotImplementedError("abstract")
- def visitor_walk_recursive(self, instbox, visitor, optimizer):
+ def visitor_walk_recursive(self, instbox, visitor):
instbox = instbox.get_box_replacement()
if visitor.already_seen_virtual(instbox):
return
- return self._visitor_walk_recursive(instbox, visitor, optimizer)
+ return self._visitor_walk_recursive(instbox, visitor)
class AbstractStructPtrInfo(AbstractVirtualPtrInfo):
@@ -181,7 +182,7 @@
self.descr = descr
self._fields = [None] * len(descr.get_all_fielddescrs())
if index >= len(self._fields):
- self.descr = descr # a more precise descr
+ self.descr = descr # a more precise descr
# we found out a subclass with more fields
extra_len = len(descr.get_all_fielddescrs()) - len(self._fields)
self._fields = self._fields + [None] * extra_len
@@ -232,14 +233,14 @@
rec[self] = None
for i, fldbox in enumerate(self._fields):
if fldbox is not None:
- info = optforce.optimizer.getptrinfo(fldbox)
+ info = getptrinfo(fldbox)
if info is not None:
fldbox = info.force_at_the_end_of_preamble(fldbox, optforce,
rec)
self._fields[i] = fldbox
return op
- def _visitor_walk_recursive(self, instbox, visitor, optimizer):
+ def _visitor_walk_recursive(self, instbox, visitor):
lst = self.descr.get_all_fielddescrs()
assert self.is_virtual()
visitor.register_virtual_fields(
@@ -247,9 +248,9 @@
for i in range(len(lst)):
op = self._fields[i]
if op:
- fieldinfo = optimizer.getptrinfo(op)
+ fieldinfo = getptrinfo(op)
if fieldinfo and fieldinfo.is_virtual():
- fieldinfo.visitor_walk_recursive(op, visitor, optimizer)
+ fieldinfo.visitor_walk_recursive(op, visitor)
def produce_short_preamble_ops(self, structbox, fielddescr, index, optimizer,
shortboxes):
@@ -289,7 +290,7 @@
if op.is_constant():
pass # it is a constant value: ok
else:
- fieldinfo = optimizer.getptrinfo(op)
+ fieldinfo = getptrinfo(op)
if fieldinfo and fieldinfo.is_virtual():
# recursive check
if memo is None:
@@ -434,7 +435,7 @@
[op, ConstInt(offset), itembox], descr=descr)
optforce.emit_extra(setfield_op)
- def _visitor_walk_recursive(self, op, visitor, optimizer):
+ def _visitor_walk_recursive(self, op, visitor):
itemboxes = [get_box_replacement(box)
for box in self._get_buffer().values]
visitor.register_virtual_fields(op, itemboxes)
@@ -464,7 +465,7 @@
return self.parent is not None
def getitem_raw(self, offset, itemsize, descr):
- return self.parent.getitem_raw(self.offset+offset, itemsize, descr)
+ return self.parent.getitem_raw(self.offset + offset, itemsize, descr)
def setitem_raw(self, offset, itemsize, descr, itemop):
self.parent.setitem_raw(self.offset + offset, itemsize, descr, itemop)
@@ -474,11 +475,11 @@
self.parent._force_elements(op, optforce, descr)
self.parent = None
- def _visitor_walk_recursive(self, op, visitor, optimizer):
+ def _visitor_walk_recursive(self, op, visitor):
source_op = get_box_replacement(op.getarg(0))
visitor.register_virtual_fields(op, [source_op])
if self.parent.is_virtual():
- self.parent.visitor_walk_recursive(source_op, visitor, optimizer)
+ self.parent.visitor_walk_recursive(source_op, visitor)
@specialize.argtype(1)
def visitor_dispatch_virtual_type(self, visitor):
@@ -569,16 +570,15 @@
def getlength(self):
return self.length
- def _visitor_walk_recursive(self, instbox, visitor, optimizer):
+ def _visitor_walk_recursive(self, instbox, visitor):
itemops = [get_box_replacement(item) for item in self._items]
visitor.register_virtual_fields(instbox, itemops)
for i in range(self.getlength()):
itemop = self._items[i]
- if (itemop is not None and
- not isinstance(itemop, Const)):
- ptrinfo = optimizer.getptrinfo(itemop)
+ if (itemop is not None and not isinstance(itemop, Const)):
+ ptrinfo = getptrinfo(itemop)
if ptrinfo and ptrinfo.is_virtual():
- ptrinfo.visitor_walk_recursive(itemop, visitor, optimizer)
+ ptrinfo.visitor_walk_recursive(itemop, visitor)
@specialize.argtype(1)
def visitor_dispatch_virtual_type(self, visitor):
@@ -608,7 +608,7 @@
rec[self] = None
for i, fldbox in enumerate(self._items):
if fldbox is not None:
- info = optforce.getptrinfo(fldbox)
+ info = getptrinfo(fldbox)
if info is not None:
fldbox = info.force_at_the_end_of_preamble(fldbox, optforce,
rec)
@@ -666,7 +666,7 @@
# if it does, we would need a fix here
i += 1
- def _visitor_walk_recursive(self, instbox, visitor, optimizer):
+ def _visitor_walk_recursive(self, instbox, visitor):
itemops = [get_box_replacement(item) for item in self._items]
visitor.register_virtual_fields(instbox, itemops)
fielddescrs = self.descr.get_all_fielddescrs()
@@ -675,10 +675,9 @@
for fielddescr in fielddescrs:
itemop = self._items[i]
if (itemop is not None and not isinstance(itemop, Const)):
- ptrinfo = optimizer.getptrinfo(itemop)
+ ptrinfo = getptrinfo(itemop)
if ptrinfo and ptrinfo.is_virtual():
- ptrinfo.visitor_walk_recursive(itemop, visitor,
- optimizer)
+ ptrinfo.visitor_walk_recursive(itemop, visitor)
i += 1
@specialize.argtype(1)
@@ -862,3 +861,20 @@
assert isinstance(fw, AbstractRawPtrInfo)
return fw
return None
+
+def getptrinfo(op):
+ if op.type == 'i':
+ return getrawptrinfo(op)
+ elif op.type == 'f':
+ return None
+ assert op.type == 'r'
+ op = get_box_replacement(op)
+ assert op.type == 'r'
+ if isinstance(op, ConstPtr):
+ return ConstPtrInfo(op)
+ fw = op.get_forwarded()
+ if fw is not None:
+ assert isinstance(fw, PtrInfo)
+ return fw
+ return None
+
diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -7,6 +7,7 @@
CONST_0)
from rpython.jit.metainterp.optimizeopt.util import (
make_dispatcher_method, get_box_replacement)
+from .info import getptrinfo
from rpython.jit.metainterp.resoperation import rop
from rpython.jit.metainterp.optimizeopt import vstring
from rpython.jit.codewriter.effectinfo import EffectInfo
@@ -443,7 +444,7 @@
def postprocess_STRLEN(self, op):
self.make_nonnull_str(op.getarg(0), vstring.mode_string)
- array = self.getptrinfo(op.getarg(0))
+ array = getptrinfo(op.getarg(0))
self.optimizer.setintbound(op, array.getlenbound(vstring.mode_string))
def optimize_UNICODELEN(self, op):
@@ -451,7 +452,7 @@
def postprocess_UNICODELEN(self, op):
self.make_nonnull_str(op.getarg(0), vstring.mode_unicode)
- array = self.getptrinfo(op.getarg(0))
+ array = getptrinfo(op.getarg(0))
self.optimizer.setintbound(op, array.getlenbound(vstring.mode_unicode))
def optimize_STRGETITEM(self, op):
@@ -459,7 +460,7 @@
def postprocess_STRGETITEM(self, op):
v1 = self.getintbound(op)
- v2 = self.getptrinfo(op.getarg(0))
+ v2 = getptrinfo(op.getarg(0))
intbound = self.getintbound(op.getarg(1))
if (intbound.has_lower and v2 is not None and
v2.getlenbound(vstring.mode_string) is not None):
@@ -524,7 +525,7 @@
def postprocess_UNICODEGETITEM(self, op):
b1 = self.getintbound(op)
b1.make_ge(IntLowerBound(0))
- v2 = self.getptrinfo(op.getarg(0))
+ v2 = getptrinfo(op.getarg(0))
intbound = self.getintbound(op.getarg(1))
if (intbound.has_lower and v2 is not None and
v2.getlenbound(vstring.mode_unicode) is not None):
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -1,7 +1,7 @@
from rpython.jit.metainterp import jitprof, resume, compile
from rpython.jit.metainterp.executor import execute_nonspec_const
from rpython.jit.metainterp.history import (
- Const, ConstInt, ConstPtr, CONST_NULL, new_ref_dict)
+ Const, ConstInt, CONST_NULL, new_ref_dict)
from rpython.jit.metainterp.optimizeopt.intutils import (
IntBound, ConstIntBound, MININT, MAXINT, IntUnbounded)
from rpython.jit.metainterp.optimizeopt.util import (
@@ -10,7 +10,7 @@
deserialize_optimizer_knowledge)
from rpython.jit.metainterp.resoperation import (
rop, AbstractResOp, GuardResOp, OpHelpers)
-from .info import getrawptrinfo
+from .info import getrawptrinfo, getptrinfo
from rpython.jit.metainterp.optimizeopt import info
from rpython.jit.metainterp.optimize import InvalidLoop
from rpython.rlib.objectmodel import specialize, we_are_translated
@@ -111,7 +111,7 @@
def getnullness(self, op):
if op.type == 'r' or self.is_raw_ptr(op):
- ptrinfo = self.getptrinfo(op)
+ ptrinfo = getptrinfo(op)
if ptrinfo is None:
return info.INFO_UNKNOWN
return ptrinfo.getnullness()
@@ -120,7 +120,7 @@
assert False
def make_constant_class(self, op, class_const, update_last_guard=True):
- op = get_box_replacement(op)
+ op = op.get_box_replacement()
opinfo = op.get_forwarded()
if isinstance(opinfo, info.InstancePtrInfo):
opinfo._known_class = class_const
@@ -136,22 +136,6 @@
opinfo.mark_last_guard(self.optimizer)
return opinfo
- def getptrinfo(self, op):
- if op.type == 'i':
- return getrawptrinfo(op)
- elif op.type == 'f':
- return None
- assert op.type == 'r'
- op = get_box_replacement(op)
- assert op.type == 'r'
- if isinstance(op, ConstPtr):
- return info.ConstPtrInfo(op)
- fw = op.get_forwarded()
- if fw is not None:
- assert isinstance(fw, info.PtrInfo)
- return fw
- return None
-
def is_raw_ptr(self, op):
fw = get_box_replacement(op).get_forwarded()
if isinstance(fw, info.AbstractRawPtrInfo):
@@ -303,7 +287,7 @@
def force_box_for_end_of_preamble(self, box):
if box.type == 'r':
- info = self.getptrinfo(box)
+ info = getptrinfo(box)
if info is not None and info.is_virtual():
rec = {}
return info.force_at_the_end_of_preamble(box,
@@ -326,10 +310,10 @@
def getinfo(self, op):
if op.type == 'r':
- return self.getptrinfo(op)
+ return getptrinfo(op)
elif op.type == 'i':
if self.is_raw_ptr(op):
- return self.getptrinfo(op)
+ return getptrinfo(op)
return self.getintbound(op)
elif op.type == 'f':
if get_box_replacement(op).is_constant():
@@ -424,7 +408,7 @@
return
if box.type == 'r' and box.get_forwarded() is not None:
opinfo = box.get_forwarded()
- opinfo.copy_fields_to_const(self.getptrinfo(constbox), self.optheap)
+ opinfo.copy_fields_to_const(getptrinfo(constbox), self.optheap)
box.set_forwarded(constbox)
def make_constant_int(self, box, intvalue):
@@ -833,13 +817,8 @@
<= expected_class.subclassrange_max)
def is_virtual(self, op):
- if op.type == 'r':
- opinfo = self.getptrinfo(op)
- return opinfo is not None and opinfo.is_virtual()
- if op.type == 'i':
- opinfo = getrawptrinfo(op)
- return opinfo is not None and opinfo.is_virtual()
- return False
+ opinfo = getptrinfo(op)
+ return opinfo is not None and opinfo.is_virtual()
# These are typically removed already by OptRewrite, but it can be
# dissabled and unrolling emits some SAME_AS ops to setup the
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -7,14 +7,13 @@
from rpython.jit.metainterp.optimizeopt.intutils import IntBound
from rpython.jit.metainterp.optimizeopt.optimizer import (
Optimization, OptimizationResult, REMOVED, CONST_0, CONST_1)
-from rpython.jit.metainterp.optimizeopt.info import INFO_NONNULL, INFO_NULL
+from rpython.jit.metainterp.optimizeopt.info import (
+ INFO_NONNULL, INFO_NULL, getptrinfo)
from rpython.jit.metainterp.optimizeopt.util import (
_findall, make_dispatcher_method, get_box_replacement)
-from rpython.jit.metainterp.resoperation import rop, ResOperation, opclasses,\
- OpHelpers
+from rpython.jit.metainterp.resoperation import (
+ rop, ResOperation, opclasses, OpHelpers)
from rpython.rlib.rarithmetic import highest_bit
-from rpython.rtyper.lltypesystem import llmemory
-from rpython.rtyper import rclass
import math
@@ -69,7 +68,6 @@
return True
return False
-
def find_rewritable_bool(self, op):
oldopnum = op.boolinverse
arg0 = op.getarg(0)
@@ -79,7 +77,7 @@
if self.try_boolinvers(op, top):
return True
- oldopnum = op.boolreflex # FIXME: add INT_ADD, INT_MUL
+ oldopnum = op.boolreflex # FIXME: add INT_ADD, INT_MUL
if oldopnum != -1:
top = ResOperation(oldopnum, [arg1, arg0])
oldop = self.get_pure_result(top)
@@ -344,7 +342,7 @@
return self.emit(op)
def optimize_GUARD_ISNULL(self, op):
- info = self.getptrinfo(op.getarg(0))
+ info = getptrinfo(op.getarg(0))
if info is not None:
if info.is_null():
return
@@ -358,7 +356,7 @@
self.make_constant(op.getarg(0), CONST_NULL)
def optimize_GUARD_IS_OBJECT(self, op):
- info = self.getptrinfo(op.getarg(0))
+ info = getptrinfo(op.getarg(0))
if info and info.is_constant():
if info.is_null():
raise InvalidLoop("A GUARD_IS_OBJECT(NULL) found")
@@ -374,7 +372,7 @@
return self.emit(op)
def optimize_GUARD_GC_TYPE(self, op):
- info = self.getptrinfo(op.getarg(0))
+ info = getptrinfo(op.getarg(0))
if info and info.is_constant():
c = get_box_replacement(op.getarg(0))
tid = self.optimizer.cpu.get_actual_typeid(c.getref_base())
@@ -388,7 +386,7 @@
return self.emit(op)
def optimize_GUARD_SUBCLASS(self, op):
- info = self.getptrinfo(op.getarg(0))
+ info = getptrinfo(op.getarg(0))
optimizer = self.optimizer
# must raise 'InvalidLoop' in all cases where 'info' shows the
# class cannot possibly match (see test_issue2926)
@@ -427,7 +425,7 @@
return self.emit(op)
def optimize_GUARD_NONNULL(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo is not None:
if opinfo.is_nonnull():
return
@@ -439,12 +437,12 @@
def postprocess_GUARD_NONNULL(self, op):
self.make_nonnull(op.getarg(0))
- self.getptrinfo(op.getarg(0)).mark_last_guard(self.optimizer)
+ getptrinfo(op.getarg(0)).mark_last_guard(self.optimizer)
def optimize_GUARD_VALUE(self, op):
arg0 = op.getarg(0)
if arg0.type == 'r':
- info = self.getptrinfo(arg0)
+ info = getptrinfo(arg0)
if info:
if info.is_virtual():
raise InvalidLoop("promote of a virtual")
@@ -492,8 +490,8 @@
'always fail' % r)
descr = compile.ResumeGuardDescr()
op = old_guard_op.copy_and_change(rop.GUARD_VALUE,
- args = [old_guard_op.getarg(0), op.getarg(1)],
- descr = descr)
+ args=[old_guard_op.getarg(0), op.getarg(1)],
+ descr=descr)
# Note: we give explicitly a new descr for 'op'; this is why the
# old descr must not be ResumeAtPositionDescr (checked above).
# Better-safe-than-sorry but it should never occur: we should
@@ -532,7 +530,7 @@
self.make_nonnull(op.getarg(0))
def optimize_RECORD_EXACT_CLASS(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
expectedclassbox = op.getarg(1)
assert isinstance(expectedclassbox, Const)
if opinfo is not None:
@@ -563,8 +561,8 @@
# it was a guard_nonnull, which we replace with a
# guard_nonnull_class.
descr = compile.ResumeGuardDescr()
- op = old_guard_op.copy_and_change (rop.GUARD_NONNULL_CLASS,
- args = [old_guard_op.getarg(0), op.getarg(1)],
+ op = old_guard_op.copy_and_change(rop.GUARD_NONNULL_CLASS,
+ args=[old_guard_op.getarg(0), op.getarg(1)],
descr=descr)
# Note: we give explicitly a new descr for 'op'; this is why the
# old descr must not be ResumeAtPositionDescr (checked above).
@@ -577,14 +575,14 @@
def postprocess_GUARD_CLASS(self, op):
expectedclassbox = op.getarg(1)
- info = self.getptrinfo(op.getarg(0))
+ info = getptrinfo(op.getarg(0))
old_guard_op = info.get_last_guard(self.optimizer)
update_last_guard = not old_guard_op or isinstance(
old_guard_op.getdescr(), compile.ResumeAtPositionDescr)
self.make_constant_class(op.getarg(0), expectedclassbox, update_last_guard)
def optimize_GUARD_NONNULL_CLASS(self, op):
- info = self.getptrinfo(op.getarg(0))
+ info = getptrinfo(op.getarg(0))
if info and info.is_null():
r = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(op)
raise InvalidLoop('A GUARD_NONNULL_CLASS (%s) was proven to '
@@ -663,8 +661,8 @@
def _optimize_oois_ooisnot(self, op, expect_isnot, instance):
arg0 = get_box_replacement(op.getarg(0))
arg1 = get_box_replacement(op.getarg(1))
- info0 = self.getptrinfo(arg0)
- info1 = self.getptrinfo(arg1)
+ info0 = getptrinfo(arg0)
+ info1 = getptrinfo(arg1)
if info0 and info0.is_virtual():
if info1 and info1.is_virtual():
intres = (info0 is info1) ^ expect_isnot
@@ -724,8 +722,8 @@
if length and length.getint() == 0:
return None # 0-length arraycopy
- source_info = self.getptrinfo(op.getarg(1))
- dest_info = self.getptrinfo(op.getarg(2))
+ source_info = getptrinfo(op.getarg(1))
+ dest_info = getptrinfo(op.getarg(2))
source_start_box = self.get_constant_box(op.getarg(3))
dest_start_box = self.get_constant_box(op.getarg(4))
extrainfo = op.getdescr().get_extra_info()
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -25,9 +25,6 @@
class cpu:
remove_gctypeptr = True
- def getptrinfo(self, box):
- return box.get_forwarded()
-
def setinfo_from_preamble(self, *args):
pass
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
@@ -6,7 +6,7 @@
from rpython.jit.metainterp.optimizeopt.util import (
make_dispatcher_method, get_box_replacement)
from rpython.jit.metainterp.optimizeopt.rawbuffer import InvalidRawOperation
-from .info import getrawptrinfo
+from .info import getrawptrinfo, getptrinfo
from rpython.jit.metainterp.resoperation import rop, ResOperation
@@ -101,7 +101,7 @@
effectinfo = op.getdescr().get_extra_info()
oopspecindex = effectinfo.oopspecindex
if oopspecindex == EffectInfo.OS_JIT_FORCE_VIRTUALIZABLE:
- opinfo = self.getptrinfo(op.getarg(2))
+ opinfo = getptrinfo(op.getarg(2))
if opinfo and opinfo.is_virtual():
return
return self.emit(op)
@@ -161,17 +161,17 @@
# was already forced).
def _optimize_JIT_FORCE_VIRTUAL(self, op):
- vref = self.getptrinfo(op.getarg(1))
+ vref = getptrinfo(op.getarg(1))
vrefinfo = self.optimizer.metainterp_sd.virtualref_info
if vref and vref.is_virtual():
tokenop = vref.getfield(vrefinfo.descr_virtual_token, None)
if tokenop is None:
return False
- tokeninfo = self.getptrinfo(tokenop)
+ tokeninfo = getptrinfo(tokenop)
if (tokeninfo is not None and tokeninfo.is_constant() and
not tokeninfo.is_nonnull()):
forcedop = vref.getfield(vrefinfo.descr_forced, None)
- forcedinfo = self.getptrinfo(forcedop)
+ forcedinfo = getptrinfo(forcedop)
if forcedinfo is not None and not forcedinfo.is_null():
self.make_equal_to(op, forcedop)
self.last_emitted_operation = REMOVED
@@ -179,7 +179,7 @@
return False
def optimize_GETFIELD_GC_I(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo and opinfo.is_virtual():
fieldop = opinfo.getfield(op.getdescr())
if fieldop is None:
@@ -193,7 +193,7 @@
def optimize_SETFIELD_GC(self, op):
struct = op.getarg(0)
- opinfo = self.getptrinfo(struct)
+ opinfo = getptrinfo(struct)
if opinfo is not None and opinfo.is_virtual():
opinfo.setfield(op.getdescr(), struct,
get_box_replacement(op.getarg(1)))
@@ -230,7 +230,7 @@
return self.do_RAW_FREE(op)
elif effectinfo.oopspecindex == EffectInfo.OS_JIT_FORCE_VIRTUALIZABLE:
# we might end up having CALL here instead of COND_CALL
- info = self.getptrinfo(op.getarg(1))
+ info = getptrinfo(op.getarg(1))
if info and info.is_virtual():
return
else:
@@ -265,7 +265,7 @@
return self.emit(op)
def optimize_ARRAYLEN_GC(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo and opinfo.is_virtual():
self.make_constant_int(op, opinfo.getlength())
else:
@@ -273,7 +273,7 @@
return self.emit(op)
def optimize_GETARRAYITEM_GC_I(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo and opinfo.is_virtual():
indexbox = self.get_constant_box(op.getarg(1))
if indexbox is not None:
@@ -295,7 +295,7 @@
optimize_GETARRAYITEM_GC_PURE_F = optimize_GETARRAYITEM_GC_I
def optimize_SETARRAYITEM_GC(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo and opinfo.is_virtual():
indexbox = self.get_constant_box(op.getarg(1))
if indexbox is not None:
@@ -384,7 +384,7 @@
return self.emit(op)
def optimize_GETINTERIORFIELD_GC_I(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo and opinfo.is_virtual():
indexbox = self.get_constant_box(op.getarg(1))
if indexbox is not None:
@@ -402,7 +402,7 @@
optimize_GETINTERIORFIELD_GC_F = optimize_GETINTERIORFIELD_GC_I
def optimize_SETINTERIORFIELD_GC(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo and opinfo.is_virtual():
indexbox = self.get_constant_box(op.getarg(1))
if indexbox is not None:
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -6,6 +6,7 @@
MININT, MAXINT, IntBound, IntLowerBound
from rpython.jit.metainterp.resoperation import rop, ResOperation, \
InputArgInt, InputArgRef, InputArgFloat
+from .info import getptrinfo
from .util import get_box_replacement
from rpython.rlib.debug import debug_print
@@ -145,7 +146,7 @@
assert len(self.fielddescrs) == len(self.fieldstate)
assert len(other.fielddescrs) == len(other.fieldstate)
if runtime_box is not None:
- opinfo = state.optimizer.getptrinfo(box)
+ opinfo = getptrinfo(box)
assert opinfo.is_virtual()
assert isinstance(opinfo, AbstractStructPtrInfo)
else:
@@ -180,7 +181,7 @@
def enum_forced_boxes(self, boxes, box, optimizer, force_boxes=False):
box = get_box_replacement(box)
- info = optimizer.getptrinfo(box)
+ info = getptrinfo(box)
if info is None or not info.is_virtual():
raise VirtualStatesCantMatch()
else:
@@ -248,7 +249,7 @@
fieldbox_runtime = None
for i in range(len(self.fieldstate)):
if runtime_box is not None:
- opinfo = state.optimizer.getptrinfo(box)
+ opinfo = getptrinfo(box)
assert isinstance(opinfo, ArrayPtrInfo)
fieldbox = opinfo._items[i]
fieldbox_runtime = state.get_runtime_item(runtime_box,
@@ -261,7 +262,7 @@
def enum_forced_boxes(self, boxes, box, optimizer, force_boxes=False):
box = get_box_replacement(box)
- info = optimizer.getptrinfo(box)
+ info = getptrinfo(box)
if info is None or not info.is_virtual():
raise VirtualStatesCantMatch()
if len(self.fieldstate) > info.getlength():
@@ -305,7 +306,7 @@
fieldbox = None
fieldbox_runtime = None
if box is not None:
- opinfo = state.optimizer.getptrinfo(box)
+ opinfo = getptrinfo(box)
assert isinstance(opinfo, ArrayPtrInfo)
else:
opinfo = None
@@ -330,7 +331,7 @@
s.enum(virtual_state)
def enum_forced_boxes(self, boxes, box, optimizer, force_boxes=False):
- opinfo = optimizer.getptrinfo(box)
+ opinfo = getptrinfo(box)
if not isinstance(opinfo, ArrayStructInfo):
raise VirtualStatesCantMatch
if not opinfo.is_virtual():
@@ -412,15 +413,15 @@
if self.level == LEVEL_CONSTANT:
return
assert 0 <= self.position_in_notvirtuals
- if optimizer is not None:
- box = get_box_replacement(box)
- if box.type == 'r':
- info = optimizer.getptrinfo(box)
- if info and info.is_virtual():
- if force_boxes:
- info.force_box(box, optimizer)
- else:
- raise VirtualStatesCantMatch
+ assert optimizer is not None
+ box = get_box_replacement(box)
+ if box.type == 'r':
+ info = getptrinfo(box)
+ if info and info.is_virtual():
+ if force_boxes:
+ info.force_box(box, optimizer)
+ else:
+ raise VirtualStatesCantMatch
boxes[self.position_in_notvirtuals] = box
def _enum(self, virtual_state):
@@ -714,11 +715,11 @@
except KeyError:
pass
if box.type == 'r':
- info = opt.getptrinfo(box)
+ info = getptrinfo(box)
if info is not None and info.is_virtual():
result = info.visitor_dispatch_virtual_type(self)
self.info[box] = result
- info.visitor_walk_recursive(box, self, opt)
+ info.visitor_walk_recursive(box, self)
result.fieldstate = [self.create_state_or_none(b, opt)
for b in self.fieldboxes[box]]
else:
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
@@ -7,7 +7,7 @@
from rpython.jit.metainterp.optimizeopt.util import (
make_dispatcher_method, get_box_replacement)
from rpython.jit.metainterp.resoperation import rop, ResOperation
-from rpython.jit.metainterp.optimizeopt import info
+from .info import AbstractVirtualPtrInfo, getptrinfo
from rpython.rlib.objectmodel import specialize, we_are_translated
from rpython.rlib.unroll import unrolling_iterable
from rpython.rtyper import annlowlevel
@@ -47,7 +47,7 @@
# ____________________________________________________________
-class StrPtrInfo(info.AbstractVirtualPtrInfo):
+class StrPtrInfo(AbstractVirtualPtrInfo):
#_attrs_ = ('length', 'lenbound', 'lgtop', 'mode', '_cached_vinfo', '_is_virtual')
lenbound = None
@@ -119,7 +119,7 @@
return lengthop
def make_guards(self, op, short, optimizer):
- info.AbstractVirtualPtrInfo.make_guards(self, op, short, optimizer)
+ AbstractVirtualPtrInfo.make_guards(self, op, short, optimizer)
if (self.lenbound and
self.lenbound.has_lower and self.lenbound.lower >= 1):
if self.mode is mode_string:
@@ -205,7 +205,7 @@
offsetbox = _int_add(optstring, offsetbox, CONST_1)
return offsetbox
- def _visitor_walk_recursive(self, instbox, visitor, optimizer):
+ def _visitor_walk_recursive(self, instbox, visitor):
visitor.register_virtual_fields(instbox, self._chars)
@specialize.argtype(1)
@@ -238,7 +238,7 @@
vstart = optstring.getintbound(self.start)
vlength = optstring.getintbound(self.lgtop)
if vstart.is_constant() and vlength.is_constant():
- vstr = optstring.getptrinfo(self.s)
+ vstr = getptrinfo(self.s)
s1 = vstr.get_constant_string_spec(optstring, mode)
if s1 is None:
return None
@@ -253,12 +253,12 @@
assert op is not None
return self.lgtop
- def _visitor_walk_recursive(self, instbox, visitor, optimizer):
+ def _visitor_walk_recursive(self, instbox, visitor):
boxes = [self.s, self.start, self.lgtop]
visitor.register_virtual_fields(instbox, boxes)
- opinfo = optimizer.getptrinfo(self.s)
+ opinfo = getptrinfo(self.s)
if opinfo and opinfo.is_virtual():
- opinfo.visitor_walk_recursive(self.s, visitor, optimizer)
+ opinfo.visitor_walk_recursive(self.s, visitor)
@specialize.argtype(1)
def visitor_dispatch_virtual_type(self, visitor):
@@ -283,11 +283,11 @@
assert op is not None
if self.lgtop is not None:
return self.lgtop
- lefti = optstring.getptrinfo(self.vleft)
+ lefti = getptrinfo(self.vleft)
len1box = lefti.getstrlen(self.vleft, optstring, mode)
if len1box is None:
return None
- righti = optstring.getptrinfo(self.vright)
+ righti = getptrinfo(self.vright)
len2box = righti.getstrlen(self.vright, optstring, mode)
if len2box is None:
return None
@@ -297,11 +297,11 @@
@specialize.arg(2)
def get_constant_string_spec(self, optstring, mode):
- ileft = optstring.getptrinfo(self.vleft)
+ ileft = getptrinfo(self.vleft)
s1 = ileft.get_constant_string_spec(optstring, mode)
if s1 is None:
return None
- iright = optstring.getptrinfo(self.vright)
+ iright = getptrinfo(self.vright)
s2 = iright.get_constant_string_spec(optstring, mode)
if s2 is None:
return None
@@ -309,26 +309,26 @@
def string_copy_parts(self, op, optstring, targetbox, offsetbox,
mode):
- lefti = optstring.getptrinfo(self.vleft)
+ lefti = getptrinfo(self.vleft)
offsetbox = lefti.string_copy_parts(self.vleft, optstring,
targetbox, offsetbox, mode)
- righti = optstring.getptrinfo(self.vright)
+ righti = getptrinfo(self.vright)
offsetbox = righti.string_copy_parts(self.vright, optstring,
targetbox, offsetbox, mode)
return offsetbox
- def _visitor_walk_recursive(self, instbox, visitor, optimizer):
+ def _visitor_walk_recursive(self, instbox, visitor):
# we don't store the lengthvalue in guards, because the
# guard-failed code starts with a regular STR_CONCAT again
leftbox = self.vleft
rightbox = self.vright
visitor.register_virtual_fields(instbox, [leftbox, rightbox])
- leftinfo = optimizer.getptrinfo(leftbox)
- rightinfo = optimizer.getptrinfo(rightbox)
+ leftinfo = getptrinfo(leftbox)
+ rightinfo = getptrinfo(rightbox)
if leftinfo and leftinfo.is_virtual():
- leftinfo.visitor_walk_recursive(leftbox, visitor, optimizer)
+ leftinfo.visitor_walk_recursive(leftbox, visitor)
if rightinfo and rightinfo.is_virtual():
- rightinfo.visitor_walk_recursive(rightbox, visitor, optimizer)
+ rightinfo.visitor_walk_recursive(rightbox, visitor)
@specialize.argtype(1)
def visitor_dispatch_virtual_type(self, visitor):
@@ -463,7 +463,7 @@
self.pure_from_args(mode_unicode.STRLEN, [op], op.getarg(0))
def optimize_STRSETITEM(self, op):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo:
assert not opinfo.is_constant()
# strsetitem(ConstPtr) never makes sense
@@ -489,12 +489,12 @@
def strgetitem(self, op, s, index, mode):
self.make_nonnull_str(s, mode)
- sinfo = self.getptrinfo(s)
+ sinfo = getptrinfo(s)
#
if isinstance(sinfo, VStringSliceInfo) and sinfo.is_virtual(): # slice
index = _int_add(self.optimizer, sinfo.start, index)
s = sinfo.s
- sinfo = self.getptrinfo(sinfo.s)
+ sinfo = getptrinfo(sinfo.s)
#
if isinstance(sinfo, VStringPlainInfo):
# even if no longer virtual
@@ -508,7 +508,7 @@
#
vindex = self.getintbound(index)
if isinstance(sinfo, VStringConcatInfo) and vindex.is_constant():
- leftinfo = self.getptrinfo(sinfo.vleft)
+ leftinfo = getptrinfo(sinfo.vleft)
len1box = leftinfo.getstrlen(sinfo.vleft, self, mode)
if isinstance(len1box, ConstInt):
raw_index = vindex.getint()
@@ -529,7 +529,7 @@
def _optimize_STRLEN(self, op, mode):
arg1 = get_box_replacement(op.getarg(0))
- opinfo = self.getptrinfo(arg1)
+ opinfo = getptrinfo(arg1)
if opinfo:
lgtop = opinfo.getstrlen(arg1, self, mode)
if lgtop is not None:
@@ -544,7 +544,7 @@
return self._optimize_STRHASH(op, mode_unicode)
def _optimize_STRHASH(self, op, mode):
- opinfo = self.getptrinfo(op.getarg(0))
+ opinfo = getptrinfo(op.getarg(0))
if opinfo:
lgtop = opinfo.getstrhash(op, mode)
if lgtop is not None:
@@ -565,8 +565,8 @@
assert op.getarg(2).type == INT
assert op.getarg(3).type == INT
assert op.getarg(4).type == INT
- src = self.getptrinfo(op.getarg(0))
- dst = self.getptrinfo(op.getarg(1))
+ src = getptrinfo(op.getarg(0))
+ dst = getptrinfo(op.getarg(1))
srcstart = self.getintbound(op.getarg(2))
dststart = self.getintbound(op.getarg(3))
length = self.getintbound(op.getarg(4))
@@ -641,7 +641,7 @@
# More generally, supporting non-constant but virtual cases is
# not obvious, because of the exception UnicodeDecodeError that
# can be raised by ll_str2unicode()
- varg = self.getptrinfo(op.getarg(1))
+ varg = getptrinfo(op.getarg(1))
s = None
if varg:
s = varg.get_constant_string_spec(self, mode_string)
@@ -666,7 +666,7 @@
def opt_call_stroruni_STR_SLICE(self, op, mode):
self.make_nonnull_str(op.getarg(1), mode)
- vstr = self.getptrinfo(op.getarg(1))
+ vstr = getptrinfo(op.getarg(1))
vstart = self.getintbound(op.getarg(2))
vstop = self.getintbound(op.getarg(3))
#
@@ -697,8 +697,8 @@
def opt_call_stroruni_STR_EQUAL(self, op, mode):
arg1 = get_box_replacement(op.getarg(1))
arg2 = get_box_replacement(op.getarg(2))
- i1 = self.getptrinfo(arg1)
- i2 = self.getptrinfo(arg2)
+ i1 = getptrinfo(arg1)
+ i2 = getptrinfo(arg2)
#
if i1:
l1box = i1.getstrlen(arg1, self, mode)
@@ -738,8 +738,8 @@
return False, None
def handle_str_equal_level1(self, arg1, arg2, resultop, mode):
- i1 = self.getptrinfo(arg1)
- i2 = self.getptrinfo(arg2)
+ i1 = getptrinfo(arg1)
+ i2 = getptrinfo(arg2)
l2box = None
l1box = None
if i2:
@@ -748,7 +748,7 @@
if l2box.value == 0:
if i1 and i1.is_nonnull():
self.make_nonnull_str(arg1, mode)
- i1 = self.getptrinfo(arg1)
+ i1 = getptrinfo(arg1)
lengthbox = i1.getstrlen(arg1, self, mode)
else:
lengthbox = None
@@ -792,8 +792,8 @@
return False, None
def handle_str_equal_level2(self, arg1, arg2, resultbox, mode):
- i1 = self.getptrinfo(arg1)
- i2 = self.getptrinfo(arg2)
+ i1 = getptrinfo(arg1)
+ i2 = getptrinfo(arg2)
l2box = None
if i2:
l2box = i2.getstrlen(arg1, self, mode)
@@ -821,8 +821,8 @@
def opt_call_stroruni_STR_CMP(self, op, mode):
arg1 = get_box_replacement(op.getarg(1))
arg2 = get_box_replacement(op.getarg(2))
- i1 = self.getptrinfo(arg1)
- i2 = self.getptrinfo(arg2)
+ i1 = getptrinfo(arg1)
+ i2 = getptrinfo(arg2)
if not i1 or not i2:
return False, None
l1box = i1.getstrlen(arg1, self, mode)
@@ -842,7 +842,7 @@
return False, None
def opt_call_SHRINK_ARRAY(self, op):
- i1 = self.getptrinfo(op.getarg(1))
+ i1 = getptrinfo(op.getarg(1))
i2 = self.getintbound(op.getarg(2))
# If the index is constant, if the argument is virtual (we only support
# VStringPlainValue for now) we can optimize away the call.
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -221,10 +221,11 @@
# env numbering
- def _number_boxes(self, iter, arr, optimizer, numb_state):
+ def _number_boxes(self, iter, arr, numb_state):
""" Number boxes from one snapshot
"""
- from rpython.jit.metainterp.optimizeopt.info import getrawptrinfo
+ from rpython.jit.metainterp.optimizeopt.info import (
+ getrawptrinfo, getptrinfo)
num_boxes = numb_state.num_boxes
num_virtuals = numb_state.num_virtuals
liveboxes = numb_state.liveboxes
@@ -239,7 +240,7 @@
else:
is_virtual = False
if box.type == 'r':
- info = optimizer.getptrinfo(box)
+ info = getptrinfo(box)
is_virtual = (info is not None and info.is_virtual())
if box.type == 'i':
info = getrawptrinfo(box)
@@ -264,21 +265,20 @@
arr = snapshot_iter.vable_array
numb_state.append_int(len(arr))
- self._number_boxes(snapshot_iter, arr, optimizer, numb_state)
+ self._number_boxes(snapshot_iter, arr, numb_state)
arr = snapshot_iter.vref_array
n = len(arr)
assert not (n & 1)
numb_state.append_int(n >> 1)
- self._number_boxes(snapshot_iter, arr, optimizer, numb_state)
+ self._number_boxes(snapshot_iter, arr, numb_state)
for snapshot in snapshot_iter.framestack:
jitcode_index, pc = snapshot_iter.unpack_jitcode_pc(snapshot)
numb_state.append_int(jitcode_index)
numb_state.append_int(pc)
- self._number_boxes(
- snapshot_iter, snapshot.box_array, optimizer, numb_state)
+ self._number_boxes(snapshot_iter, snapshot.box_array, numb_state)
numb_state.patch_current_size(0)
return numb_state
@@ -415,7 +415,8 @@
return tagbits == TAGVIRTUAL
def finish(self, pending_setfields=[]):
- from rpython.jit.metainterp.optimizeopt.info import getrawptrinfo
+ from rpython.jit.metainterp.optimizeopt.info import (
+ getrawptrinfo, getptrinfo)
optimizer = self.optimizer
# compute the numbering
storage = self.storage
@@ -441,12 +442,12 @@
else:
assert tagbits == TAGVIRTUAL
if box.type == 'r':
- info = optimizer.getptrinfo(box)
+ info = getptrinfo(box)
else:
assert box.type == 'i'
info = getrawptrinfo(box)
assert info.is_virtual()
- info.visitor_walk_recursive(box, self, optimizer)
+ info.visitor_walk_recursive(box, self)
for setfield_op in pending_setfields:
box = setfield_op.getarg(0)
@@ -458,11 +459,11 @@
fieldbox = optimizer.get_box_replacement(fieldbox)
self.register_box(box)
self.register_box(fieldbox)
- info = optimizer.getptrinfo(fieldbox)
+ info = getptrinfo(fieldbox)
assert info is not None and info.is_virtual()
- info.visitor_walk_recursive(fieldbox, self, optimizer)
+ info.visitor_walk_recursive(fieldbox, self)
- self._number_virtuals(liveboxes, optimizer, num_virtuals)
+ self._number_virtuals(liveboxes, num_virtuals)
self._add_pending_fields(optimizer, pending_setfields)
numb_state.patch(1, len(liveboxes))
@@ -472,8 +473,9 @@
storage.rd_consts = self.memo.consts
return liveboxes[:]
- def _number_virtuals(self, liveboxes, optimizer, num_env_virtuals):
- from rpython.jit.metainterp.optimizeopt.info import AbstractVirtualPtrInfo
+ def _number_virtuals(self, liveboxes, num_env_virtuals):
+ from rpython.jit.metainterp.optimizeopt.info import (
+ AbstractVirtualPtrInfo, getptrinfo)
# !! 'liveboxes' is a list that is extend()ed in-place !!
memo = self.memo
@@ -514,7 +516,7 @@
memo.nvholes += length - len(vfieldboxes)
for virtualbox, fieldboxes in vfieldboxes.iteritems():
num, _ = untag(self.liveboxes[virtualbox])
- info = optimizer.getptrinfo(virtualbox)
+ info = getptrinfo(virtualbox)
assert info.is_virtual()
assert isinstance(info, AbstractVirtualPtrInfo)
fieldnums = [self._gettagged(box)
diff --git a/rpython/jit/metainterp/test/test_bridgeopt.py b/rpython/jit/metainterp/test/test_bridgeopt.py
--- a/rpython/jit/metainterp/test/test_bridgeopt.py
+++ b/rpython/jit/metainterp/test/test_bridgeopt.py
@@ -28,14 +28,10 @@
optheap = None
optrewrite = None
- def __init__(self, dct={}, cpu=None):
- self.dct = dct
+ def __init__(self, cpu=None):
self.constant_classes = {}
self.cpu = cpu
- def getptrinfo(self, arg):
- return self.dct.get(arg, None)
-
def make_constant_class(self, arg, cls):
self.constant_classes[arg] = cls
@@ -47,13 +43,12 @@
self.rd_numb = numb
def test_known_classes():
+ cls = FakeClass()
box1 = InputArgRef()
+ box1.set_forwarded(InstancePtrInfo(known_class=cls))
box2 = InputArgRef()
box3 = InputArgRef()
-
- cls = FakeClass()
- dct = {box1: InstancePtrInfo(known_class=cls)}
- optimizer = FakeOptimizer(dct)
+ optimizer = FakeOptimizer()
numb_state = NumberingState(4)
numb_state.append_int(1) # size of resume block
@@ -87,10 +82,10 @@
@given(boxes_known_classes)
def test_random_class_knowledge(boxes_known_classes):
cls = FakeClass()
- dct1 = {box: InstancePtrInfo(known_class=cls)
- for box, known_class in boxes_known_classes
- if known_class}
- optimizer = FakeOptimizer(dct1)
+ for box, known_class in boxes_known_classes:
+ if known_class:
+ box.set_forwarded(InstancePtrInfo(known_class=cls))
+ optimizer = FakeOptimizer()
refboxes = [box for (box, _) in boxes_known_classes
if isinstance(box, InputArgRef)]
diff --git a/rpython/jit/metainterp/test/test_resume.py b/rpython/jit/metainterp/test/test_resume.py
--- a/rpython/jit/metainterp/test/test_resume.py
+++ b/rpython/jit/metainterp/test/test_resume.py
@@ -1,4 +1,3 @@
-from __future__ import with_statement
import py
import sys
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
@@ -15,7 +14,7 @@
unpack_numbering, create_numbering)
from rpython.jit.metainterp.opencoder import Trace
-from rpython.jit.metainterp.optimizeopt import info, util
+from rpython.jit.metainterp.optimizeopt import info
from rpython.jit.metainterp.history import (
ConstInt, Const, AbstractDescr, ConstPtr, ConstFloat, IntFrontendOp,
RefFrontendOp, CONST_NULL)
@@ -51,10 +50,6 @@
op = op.get_forwarded()
return op
- def getptrinfo(self, op):
- op = util.get_box_replacement(op)
- return op.get_forwarded()
-
# ____________________________________________________________
@@ -872,12 +867,12 @@
False, [], env3)
snap3.prev = snap
- class FakeVirtualInfo(info.AbstractInfo):
+ class FakeVirtualInfo(info.AbstractVirtualPtrInfo):
def __init__(self, virt):
- self.virt = virt
+ self._is_virtual = virt
def is_virtual(self):
- return self.virt
+ return self._is_virtual
# renamed
b3.set_forwarded(c4)
@@ -1195,7 +1190,7 @@
def test_virtual_adder_make_virtual():
- b2s, b3s, b4s, b5s = [IntFrontendOp(0), IntFrontendOp(0), RefFrontendOp(0),
+ b2s, b3s, b4s, b5s = [RefFrontendOp(0), IntFrontendOp(0), RefFrontendOp(0),
RefFrontendOp(0)]
c1s = ConstInt(111)
storage = Storage()
@@ -1222,7 +1217,7 @@
modifier.register_virtual_fields(b4s, [b3s, None, None, None, b2s, b5s])
liveboxes = []
- modifier._number_virtuals(liveboxes, FakeOptimizer(), 0)
+ modifier._number_virtuals(liveboxes, 0)
storage.rd_consts = memo.consts[:]
storage.rd_numb = Numbering([0])
# resume
@@ -1277,7 +1272,7 @@
del Const.__eq__
def test_virtual_adder_make_varray():
- b2s, b4s = [IntFrontendOp(0), IntFrontendOp(0)]
+ b2s, b4s = [RefFrontendOp(0), IntFrontendOp(0)]
b4s.setint(4)
c1s = ConstInt(111)
storage = Storage()
@@ -1292,7 +1287,7 @@
v2._items = [b4s, c1s]
modifier.register_virtual_fields(b2s, [b4s, c1s])
liveboxes = []
- modifier._number_virtuals(liveboxes, FakeOptimizer(), 0)
+ modifier._number_virtuals(liveboxes, 0)
dump_storage(storage, liveboxes)
storage.rd_consts = memo.consts[:]
storage.rd_numb = Numbering([0])
@@ -1345,7 +1340,7 @@
v2.setfield(LLtypeMixin.bdescr, b2s, b4s)
modifier.register_virtual_fields(b2s, [c1s, c1s, b4s])
liveboxes = []
- modifier._number_virtuals(liveboxes, FakeOptimizer(), 0)
+ modifier._number_virtuals(liveboxes, 0)
dump_storage(storage, liveboxes)
storage.rd_consts = memo.consts[:]
storage.rd_numb = Numbering([0])
@@ -1389,7 +1384,7 @@
modifier.register_box(b4s)
liveboxes = []
- modifier._number_virtuals(liveboxes, FakeOptimizer(), 0)
+ modifier._number_virtuals(liveboxes, 0)
assert liveboxes == [b2s, b4s] or liveboxes == [b4s, b2s]
modifier._add_pending_fields(FakeOptimizer(), [
ResOperation(rop.SETFIELD_GC, [b2s, b4s], descr=LLtypeMixin.nextdescr)])
More information about the pypy-commit
mailing list