Author: Richard Plangger <[email protected]>
Branch: vecopt
Changeset: r78578:a05aff84b29f
Date: 2015-07-17 15:28 +0200
http://bitbucket.org/pypy/pypy/changeset/a05aff84b29f/
Log: added clone to a descriptor. I used invent_fail_descr before that,
which did the same thing, but in a huge switch statement
diff --git a/rpython/jit/metainterp/compile.py
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -674,6 +674,11 @@
assert 0, box.type
self.status = ty | (r_uint(i) << self.ST_SHIFT)
+ def clone(self):
+ cloned = self.__class__()
+ cloned.copy_all_attributes_from(self)
+ return cloned
+
class ResumeGuardNonnullDescr(ResumeGuardDescr):
guard_opnum = rop.GUARD_NONNULL
@@ -815,6 +820,13 @@
hidden_all_virtuals = obj.hide(metainterp_sd.cpu)
metainterp_sd.cpu.set_savedata_ref(deadframe, hidden_all_virtuals)
+ def clone(self):
+ cloned = self.__class__()
+ cloned.metainterp_sd = self.metainterp_sd
+ cloned.jitdriver_sd = self.jitdriver_sd
+ cloned.copy_all_attributes_from(self)
+ return cloned
+
def invent_fail_descr_for_op(opnum, optimizer):
if opnum == rop.GUARD_NOT_FORCED or opnum == rop.GUARD_NOT_FORCED_2:
resumedescr = ResumeGuardForcedDescr()
diff --git a/rpython/jit/metainterp/history.py
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -863,7 +863,14 @@
return version
def copy_operations(self):
- return [ op.clone() for op in self.operations ]
+ operations = []
+ for op in self.operations:
+ cloned = op.clone()
+ operations.append(cloned)
+ if cloned.getdescr():
+ descr = cloned.getdescr().clone()
+ cloned.setdescr(descr)
+ return operations
def get_display_text(self): # for graphpage.py
return self.name + '\n' + repr(self.inputargs)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit