Author: Spenser Bauman <[email protected]>
Branch: value-classes
Changeset: r87457:d227639f3fa6
Date: 2016-09-29 21:48 -0400
http://bitbucket.org/pypy/pypy/changeset/d227639f3fa6/
Log: Fixes for unpacking const pointers
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -329,7 +329,6 @@
guard.setdescr(compile.ResumeAtPositionDescr())
self.send_extra_operation(guard)
except VirtualStatesCantMatch as e:
- print "*** failing with: ", e.msg
continue
# When force_boxes == True, creating the virtual args can fail when
@@ -340,7 +339,6 @@
args, self.optimizer, force_boxes=force_boxes)
except VirtualStatesCantMatch as e:
assert force_boxes
- print "*** failing with: ", e.msg
virtual_state = self.get_virtual_state(args)
continue
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
@@ -1,7 +1,7 @@
from rpython.jit.metainterp.walkvirtual import VirtualVisitor
from rpython.jit.metainterp.history import ConstInt, ConstPtr, ConstFloat
from rpython.jit.metainterp.optimizeopt.info import ArrayPtrInfo,\
- ArrayStructInfo, AbstractStructPtrInfo, ConstPtrInfo
+ ArrayStructInfo, AbstractStructPtrInfo, ConstPtrInfo, InstancePtrInfo
from rpython.jit.metainterp.optimizeopt.intutils import \
MININT, MAXINT, IntBound, IntLowerBound, IntUnbounded
from rpython.jit.metainterp.resoperation import rop, ResOperation, \
@@ -216,32 +216,27 @@
return (isinstance(other, VirtualStateInfo) and
self.typedescr is other.typedescr)
- @specialize.argtype(4)
- def getfield(self, box, info, descr, optimizer):
+ def getfield(self, box, info, descr, optimizer, send_to=None):
assert isinstance(info, AbstractStructPtrInfo)
field = info.getfield(descr, optimizer)
if field is not None:
return field
opnum = rop.getfield_for_descr(descr)
getfield = ResOperation(opnum, [box], descr=descr)
- if isinstance(optimizer, list):
- optimizer.append(getfield)
+ if send_to is not None:
+ send_to.append(getfield)
else:
- from rpython.jit.metainterp.optimizeopt import Optimizer
- assert isinstance(optimizer, Optimizer)
optimizer.send_extra_operation(getfield)
- info.setfield(descr, None, getfield)
+ struct = optimizer.get_box_replacement(box)
+ info.setfield(descr, struct, getfield)
return getfield
def make_virtual_copy(self, box, info, optimizer):
- optvirtualize = optimizer.optvirtualize
+ newop = ResOperation(rop.NEW_WITH_VTABLE, [], descr=self.typedescr)
+ optimizer.send_extra_operation(newop)
+ opinfo = optimizer.getptrinfo(newop)
+ assert isinstance(opinfo, InstancePtrInfo)
- if isinstance(box, ConstPtr):
- # Wrap const pointers in SAME_AS_R operation to cloning via
- # make_virtual, which expects a ResOperation with an opnum.
- box = ResOperation(rop.SAME_AS_R, [box])
-
- opinfo = optvirtualize.make_virtual(self.known_class, box,
self.typedescr)
for i in range(len(info._fields)):
descr = self.fielddescrs[i]
opinfo._fields[i] = self.getfield(box, info, descr, optimizer)
@@ -333,7 +328,8 @@
# AbstractVirtualStateInfo._generate_guards
for i, descr in enumerate(self.fielddescrs):
if runtime_box is not None and opinfo is not None:
- fieldbox = self.getfield(box, opinfo, descr, extra_guards)
+ fieldbox = self.getfield(box, opinfo, descr, optimizer,
+ send_to=extra_guards)
fieldbox_runtime = state.get_runtime_field(runtime_box, descr)
else:
opnum = rop.getfield_for_descr(descr)
diff --git a/rpython/jit/metainterp/test/test_virtual.py
b/rpython/jit/metainterp/test/test_virtual.py
--- a/rpython/jit/metainterp/test/test_virtual.py
+++ b/rpython/jit/metainterp/test/test_virtual.py
@@ -1045,6 +1045,8 @@
return 0
self.meta_interp(f, [])
+ loop = get_stats().loops[0]
+ # import pdb; pdb.set_trace()
def test_avoid_preamble_3(self):
driver = JitDriver(greens=[], reds=['i', 'val'])
@@ -1085,6 +1087,8 @@
return 0
self.meta_interp(f, [])
+ loop = get_stats().loops[0]
+ # import pdb; pdb.set_trace()
def test_avoid_preamble_4(self):
driver = JitDriver(greens=[], reds=['i', 'acc', 'val'])
@@ -1119,7 +1123,7 @@
self.meta_interp(f, [])
loop = get_stats().loops[0]
- import pdb; pdb.set_trace()
+ # import pdb; pdb.set_trace()
def test_aliased_virtual_states(self):
# All cases are covered when forcing one component of the virtual state
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit