Author: Richard Plangger <[email protected]>
Branch: vecopt-merge
Changeset: r79091:10582848a63f
Date: 2015-08-20 14:18 +0200
http://bitbucket.org/pypy/pypy/changeset/10582848a63f/
Log: llgraph is now working with accum data
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
@@ -265,8 +265,8 @@
self.stats = stats or MiniStats()
self.vinfo_for_tests = kwds.get('vinfo_for_tests', None)
- def stitch_bridge(self, faildescr, jitcell_token):
- pass
+ def stitch_bridge(self, faildescr, compiled_faildescr, jitcell_token):
+ faildescr._llgraph_bridge = compiled_faildescr._llgraph_bridge
def compile_loop(self, inputargs, operations, looptoken, jd_id=0,
unique_id=0, log=True, name='', logger=None):
@@ -736,7 +736,10 @@
def bh_vec_box_unpack(self, vx, index):
return vx[index]
- def bh_vec_expand(self, x, count):
+ def bh_vec_float_expand(self, x, count):
+ return [x] * count
+
+ def bh_vec_int_expand(self, x, count):
return [x] * count
def bh_vec_int_signext(self, vx, ext):
diff --git a/rpython/jit/backend/llsupport/assembler.py
b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -70,7 +70,7 @@
self.rtyper = cpu.rtyper
self._debug = False
- def stitch_bridge(self, faildescr, token):
+ def stitch_bridge(self, faildescr, compiled_faildescr, token):
raise NotImplementedError
def setup_once(self):
diff --git a/rpython/jit/backend/llsupport/llmodel.py
b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -97,8 +97,8 @@
inputargs, operations,
looptoken, log=log)
- def stitch_bridge(self, faildescr, token):
- self.assembler.stitch_bridge(faildescr, token)
+ def stitch_bridge(self, faildescr, compiled_faildescr, token):
+ self.assembler.stitch_bridge(faildescr, compiled_faildescr, token)
def _setup_frame_realloc(self, translate_support_code):
FUNC_TP = lltype.Ptr(lltype.FuncType([llmemory.GCREF, lltype.Signed],
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
@@ -505,7 +505,6 @@
full_size = self.mc.get_relative_pos()
#
rawstart = self.materialize_loop(looptoken)
- looptoken.rawstart = rawstart
self.patch_stack_checks(frame_depth_no_fixed_size +
JITFRAME_FIXED_SIZE,
rawstart)
looptoken._ll_loop_code = looppos + rawstart
@@ -570,6 +569,7 @@
fullsize = self.mc.get_relative_pos()
#
rawstart = self.materialize_loop(original_loop_token)
+ faildescr.rawstart = rawstart
self.patch_stack_checks(frame_depth_no_fixed_size +
JITFRAME_FIXED_SIZE,
rawstart)
debug_bridge(descr_number, rawstart, codeendpos)
@@ -592,9 +592,8 @@
rawstart, fullsize)
return AsmInfo(ops_offset, startpos + rawstart, codeendpos - startpos)
- def stitch_bridge(self, faildescr, token):
- assert token.rawstart != 0
- self.patch_jump_for_descr(faildescr, token.rawstart)
+ def stitch_bridge(self, faildescr, compiled_faildescr, token):
+ self.patch_jump_for_descr(faildescr, compiled_faildescr.rawstart)
def write_pending_failure_recoveries(self, regalloc):
# for each pending guard, generate the code of the recovery stub
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
@@ -186,7 +186,8 @@
def generate_pending_loop_versions(loop, jitdriver_sd, metainterp,
jitcell_token):
""" if a loop version is created for a guard instruction (e.g. they are
known
- to fail frequently, then a version can be created that is immediatly
compiled.
+ to fail frequently) then a version can be created that is immediatly
compiled
+ and stitched to the guard.
"""
metainterp_sd = metainterp.staticdata
cpu = metainterp_sd.cpu
@@ -203,8 +204,8 @@
faildescr, version.inputargs,
version.operations, jitcell_token)
record_loop_or_bridge(metainterp_sd, vl)
- for faildescr in version.faildescrs[1:]:
- cpu.stitch_bridge(faildescr, jitcell_token)
+ for fd in version.faildescrs[1:]:
+ cpu.stitch_bridge(fd, faildescr, jitcell_token)
loop.versions = None
def compile_retrace(metainterp, greenkey, start,
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
@@ -515,7 +515,7 @@
i += 1
else:
expand_opnum = getexpandopnum(box_type)
- op = ResOperation(expand_opnum, [arg], vbox)
+ op = ResOperation(expand_opnum, [arg, ConstInt(vbox.item_count)],
vbox)
ops.append(op)
if variables is not None:
variables.append(vbox)
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
@@ -528,8 +528,8 @@
'VEC_FLOAT_PACK/4', # VEC_FLOAT_PACK(vX, var/const, index,
item_count)
'VEC_INT_UNPACK/3', # iX|fX = VEC_INT_UNPACK(vX, index,
item_count)
'VEC_INT_PACK/4', # VEC_INT_PACK(vX, var/const, index,
item_count)
- 'VEC_FLOAT_EXPAND/1', # vX = VEC_FLOAT_EXPAND(var/const)
- 'VEC_INT_EXPAND/1', # vX = VEC_INT_EXPAND(var/const)
+ 'VEC_FLOAT_EXPAND/2', # vX = VEC_FLOAT_EXPAND(var/const, item_count)
+ 'VEC_INT_EXPAND/2', # vX = VEC_INT_EXPAND(var/const, item_count)
'VEC_BOX/1',
'_VEC_PURE_LAST',
#
diff --git a/rpython/jit/metainterp/test/test_vectorize.py
b/rpython/jit/metainterp/test/test_vectorize.py
--- a/rpython/jit/metainterp/test/test_vectorize.py
+++ b/rpython/jit/metainterp/test/test_vectorize.py
@@ -194,7 +194,7 @@
i = 0
while i < d:
myjitdriver.jit_merge_point()
- if not (i < 60):
+ if not (i < d):
raise IndexError
va[i] = va[i] + 34.5
i += 1
@@ -231,14 +231,14 @@
i = 0
while i < d:
myjitdriver.jit_merge_point()
- if i >= d:
+ if not(i < d):
raise IndexError
r += va[i]
i += 1
lltype.free(va, flavor='raw')
return r
- res = self.meta_interp(f, [60,0.1], vec_all=True)
- assert res == f(60,0.1) == 60*0.1
+ res = self.meta_interp(f, [60,0.5], vec_all=True)
+ assert res == f(60,0.5) == 60*0.5
@py.test.mark.parametrize('i',[15])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit