[pypy-commit] pypy value-classes: Generate fieldboxes and faux virtual state
sbauman
pypy.commits at gmail.com
Tue Sep 27 01:17:42 EDT 2016
Author: Spenser Bauman <sabauma at gmail.com>
Branch: value-classes
Changeset: r87408:3d7fa60a7ac3
Date: 2016-09-26 23:19 -0400
http://bitbucket.org/pypy/pypy/changeset/3d7fa60a7ac3/
Log: Generate fieldboxes and faux virtual state
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
@@ -226,8 +226,11 @@
if not known_class.is_value_class():
raise VirtualStatesCantMatch("different kinds of structs")
+ # import pdb; pdb.set_trace()
raise VirtualStatesCantMatch("different kinds of structs")
+ import pdb; pdb.set_trace()
+
# TODO: Probably should rename state.extra_guards to extra_ops
extra_guards = state.extra_guards
cpu = state.cpu
@@ -260,15 +263,31 @@
# non-virtual object which we are promoting to a virtual. How do we
# generate this new virtual state so we can operate recursively)
+ if runtime_box is not None:
+ opinfo = state.optimizer.getptrinfo(box)
+ assert opinfo is None or isinstance(opinfo, AbstractStructPtrInfo)
+ else:
+ opinfo = None
+
# We need to build a virtual version which conforms with the expected
# virtual object.
# This will probably look a lot like
# AbstractVirtualStateInfo._generate_guards
- fields = [None] * len(self.fielddescrs)
+ fields = []
for i, descr in enumerate(self.fielddescrs):
- opnum = rop.getfield_for_descr(descr)
- fields[i] = getfield_op = ResOperation(opnum, [box], descr=descr)
- extra_guards.append(getfield_op)
+ if runtime_box is not None and opinfo is not None:
+ fieldbox = opinfo._fields[descr.get_index()]
+ fieldbox_runtime = state.get_runtime_field(runtime_box, descr)
+ else:
+ opnum = rop.getfield_for_descr(descr)
+ fieldbox = ResOperation(opnum, [box], descr=descr)
+ extra_guards.append(fieldbox)
+ fieldbox_runtime = None
+ fields.append(fieldbox)
+ faux_field_state = not_virtual(cpu, fieldbox.type, opinfo)
+ fieldstate = self.fieldstate[i]
+ fieldstate.generate_guards(faux_field_state, fieldbox,
+ fieldbox_runtime, state)
def debug_header(self, indent):
debug_print(indent + 'VirtualStateInfo(%d):' % self.position)
@@ -542,6 +561,8 @@
other_intbound = other.intbound
if self.intbound is None:
return
+ if other.intbound is None:
+ return
if self.intbound.contains_bound(other_intbound):
return
if (runtime_box is not None and
More information about the pypy-commit
mailing list