Author: Spenser Bauman <saba...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit