Author: Richard Plangger <[email protected]>
Branch: vecopt-merge
Changeset: r79167:63513d022558
Date: 2015-08-23 20:31 +0200
http://bitbucket.org/pypy/pypy/changeset/63513d022558/
Log: llgraph working again with the new loop versioning (hurrayyyy!)
diff --git a/rpython/jit/backend/llgraph/runner.py
b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -37,6 +37,8 @@
newbox = _cache[box]
except KeyError:
newbox = _cache[box] = box.__class__()
+ if hasattr(box, 'accum') and box.accum:
+ newbox.accum = box.accum
return newbox
#
self.inputargs = map(mapping, inputargs)
@@ -271,8 +273,7 @@
self.vinfo_for_tests = kwds.get('vinfo_for_tests', None)
def stitch_bridge(self, faildescr, target):
- import pdb; pdb.set_trace()
- faildescr._llgraph_bridge = target.lltrace
+ faildescr._llgraph_bridge = target._lltrace
def compile_loop(self, inputargs, operations, looptoken, jd_id=0,
unique_id=0, log=True, name='', logger=None):
@@ -291,6 +292,8 @@
faildescr._llgraph_bridge = lltrace
clt._llgraph_alltraces.append(lltrace)
self._record_labels(lltrace)
+ if faildescr.loop_version():
+ faildescr.version._lltrace = lltrace
return LLAsmInfo(lltrace)
def _record_labels(self, lltrace):
@@ -903,30 +906,27 @@
# -----------------------------------------------------
- def _accumulate(self, descr, failargs, value):
- if not hasattr(descr, 'rd_accum_list'):
- return
- accum = descr.rd_accum_list
- while accum is not None:
- value = values[accum.scalar_position]
+ def _accumulate(self, descr, failargs, values):
+ for i,box in enumerate(self.current_op.getfailargs()):
+ if box is None:
+ continue
+ accum = box.getaccum()
+ if not accum:
+ continue
+ value = values[i]
assert isinstance(value, list)
- if accum.operation == '+':
+ if accum.operator == '+':
value = sum(value)
- break
- elif accum.operation == '*':
+ elif accum.operator == '*':
def prod(acc, x): return acc * x
value = reduce(prod, value, 1)
- break
else:
raise NotImplementedError("accum operator in fail guard")
- values[accum.scalar_position] = value
- accum = accum.prev
+ values[i] = value
def fail_guard(self, descr, saved_data=None):
values = []
for i,box in enumerate(self.current_op.getfailargs()):
- if box.getaccum() or isinstance(box, BoxVector):
- import pdb; pdb.set_trace();
if box is not None:
value = self.env[box]
else:
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -10,6 +10,7 @@
from rpython.jit.metainterp.history import (Const, Box, VOID,
BoxVector, ConstInt)
from rpython.jit.metainterp.history import AbstractFailDescr, INT, REF, FLOAT
+from rpython.jit.metainterp.compile import ResumeGuardDescr
from rpython.rtyper.lltypesystem import lltype, rffi, rstr, llmemory
from rpython.rtyper.lltypesystem.lloperation import llop
from rpython.rtyper.annlowlevel import llhelper, cast_instance_to_gcref
@@ -598,6 +599,8 @@
duplicating the loop assembler!
"""
asminfo, bridge_faildescr, compiled_version, looptoken =
version._compiled
+ assert isinstance(bridge_faildescr, ResumeGuardDescr)
+ assert isinstance(faildescr, ResumeGuardDescr)
assert asminfo.rawstart != 0
self.mc = codebuf.MachineCodeBlockWrapper()
allblocks = self.get_asmmemmgr_blocks(looptoken)
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
@@ -224,7 +224,6 @@
continue
elif other.implies(guard, self):
# implied
- guard.rd_accum_list = None
self.guards[guard.index] = None # mark as 'do not emit'
replaced = True
continue
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit