Author: Richard Plangger <[email protected]>
Branch: vecopt-merge
Changeset: r79810:f1468a7d8892
Date: 2015-09-24 15:34 +0200
http://bitbucket.org/pypy/pypy/changeset/f1468a7d8892/
Log: llgraph working again
diff --git a/rpython/jit/metainterp/optimizeopt/guard.py
b/rpython/jit/metainterp/optimizeopt/guard.py
--- a/rpython/jit/metainterp/optimizeopt/guard.py
+++ b/rpython/jit/metainterp/optimizeopt/guard.py
@@ -87,6 +87,7 @@
# guard
descr = CompileLoopVersionDescr()
descr.copy_all_attributes_from(self.op.getdescr())
+ descr.rd_accum_list = None # do not copy the accum list
assert isinstance(descr, ResumeGuardDescr)
guard = ResOperation(self.op.getopnum(), [compare], descr=descr)
guard.setfailargs(loop.label.getarglist_copy())
@@ -318,14 +319,5 @@
info.track(transitive_guard, descr, version)
info.clear()
- loop.prefix += self._newoperations
+ loop.prefix = self._newoperations + loop.prefix
loop.operations = [op for op in loop.operations if op]
-
- # TODO if self.has_two_labels:
- # TODO oplist = [loop.operations[0]] + self._newoperations + \
- # TODO [op for op in loop.operations[1:] if op]
- # TODO loop.operations = oplist
- # TODO else:
- # TODO loop.operations = self._newoperations + \
- # TODO [op for op in loop.operations if op]
-
diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py
b/rpython/jit/metainterp/optimizeopt/schedule.py
--- a/rpython/jit/metainterp/optimizeopt/schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/schedule.py
@@ -555,7 +555,9 @@
descr.rd_accum_list = AccumInfo(descr.rd_accum_list, i,
accum.operator, arg, None)
seed = accum.getleftmostseed()
+ print "pre", failargs[i], "=>",
failargs[i] = self.renamer.rename_map.get(seed, seed)
+ print failargs[i]
def profitable(self):
return self.costmodel.profitable()
diff --git a/rpython/jit/metainterp/optimizeopt/vector.py
b/rpython/jit/metainterp/optimizeopt/vector.py
--- a/rpython/jit/metainterp/optimizeopt/vector.py
+++ b/rpython/jit/metainterp/optimizeopt/vector.py
@@ -66,8 +66,20 @@
return oplist + self.operations + [self.jump]
def clone(self):
+ renamer = Renamer()
+ label = self.label.copy()
+ prefix = []
+ for op in self.prefix:
+ newop = op.copy()
+ renamer.rename(newop)
+ if not newop.returns_void():
+ renamer.start_renaming(op, newop)
+ prefix.append(newop)
+ prefix_label = None
+ if self.prefix_label:
+ prefix_label = self.prefix_label.copy()
+ renamer.rename(prefix_label)
oplist = []
- renamer = Renamer()
for op in self.operations:
newop = op.copy()
renamer.rename(newop)
@@ -76,7 +88,10 @@
oplist.append(newop)
jump = self.jump.copy()
renamer.rename(jump)
- return VectorLoop(self.label.copy(), oplist, jump)
+ loop = VectorLoop(self.label.copy(), oplist, jump)
+ loop.prefix = prefix
+ loop.prefix_label = prefix_label
+ return loop
def optimize_vector(metainterp_sd, jitdriver_sd, warmstate, loop_info,
loop_ops):
""" Enter the world of SIMD. Bails if it cannot transform the trace. """
diff --git a/rpython/jit/metainterp/resoperation.py
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -270,6 +270,10 @@
# --------------
def copy(self):
+ if self.is_guard():
+ op = self.copy_and_change(self.opnum)
+ op.setfailargs(self.getfailargs()[:])
+ return op
return self.copy_and_change(self.opnum)
def copy_and_change(self, opnum, args=None, descr=None):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit