Author: Richard Plangger <r...@pasra.at> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit