Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79253:1e0e6b76cf77 Date: 2015-08-27 13:54 +0200 http://bitbucket.org/pypy/pypy/changeset/1e0e6b76cf77/
Log: yay pass test_string 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 @@ -764,6 +764,12 @@ def check_resops(self, expected=None, omit_finish=True, **check): insns = {} + if 'call' in check: + assert check.pop('call') == 0 + check['call_i'] = check['call_r'] = check['call_f'] = check['call_n'] = 0 + if 'call_pure' in check: + assert check.pop('call_pure') == 0 + check['call_pure_i'] = check['call_pure_r'] = check['call_pure_f'] = 0 for loop in self.get_all_loops(): insns = loop.summary(adding_insns=insns, omit_finish=omit_finish) return self._check_insns(insns, expected, check) diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py --- a/rpython/jit/metainterp/optimizeopt/unroll.py +++ b/rpython/jit/metainterp/optimizeopt/unroll.py @@ -149,6 +149,11 @@ cell_token = jump_op.getdescr() if not inline_short_preamble or len(cell_token.target_tokens) == 1: return self.jump_to_preamble(cell_token, jump_op, info) + # force all the information that does not go to the short + # preamble at all + self.optimizer.force_at_end_of_preamble() + for a in jump_op.getarglist(): + self.optimizer.force_box_for_end_of_preamble(a) vs = self.jump_to_existing_trace(jump_op) if vs is None: return info, self.optimizer._newoperations[:] diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py --- a/rpython/jit/metainterp/optimizeopt/virtualstate.py +++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py @@ -653,4 +653,3 @@ def visit_varraystruct(self, arraydescr, length, fielddescrs): return VArrayStructStateInfo(arraydescr, fielddescrs) - diff --git a/rpython/jit/metainterp/test/test_string.py b/rpython/jit/metainterp/test/test_string.py --- a/rpython/jit/metainterp/test/test_string.py +++ b/rpython/jit/metainterp/test/test_string.py @@ -166,10 +166,11 @@ return 42 self.meta_interp(f, [6, 7]) if _str is str: - self.check_resops(call_pure=0, copystrcontent=4, - strsetitem=0, call=2, newstr=2) + self.check_resops(call_pure_i=0, call_pure_r=0, copystrcontent=4, + strsetitem=0, call_n=2, newstr=2) else: - self.check_resops(call_pure=0, unicodesetitem=0, call=2, + self.check_resops(call_pure_i=0, call_pure_r=0, + unicodesetitem=0, call_n=2, copyunicodecontent=4, newunicode=2) def test_strconcat_escape_str_char(self): @@ -189,10 +190,12 @@ return 42 self.meta_interp(f, [6, 7]) if _str is str: - self.check_resops(call_pure=0, copystrcontent=2, strsetitem=2, - call=2, newstr=2) + self.check_resops(call_pure_i=0, call_pure_r=0, + copystrcontent=2, strsetitem=2, + call_n=2, newstr=2) else: - self.check_resops(call_pure=0, unicodesetitem=2, call=2, + self.check_resops(call_pure_i=0, call_pure_r=0, + unicodesetitem=2, call_n=2, copyunicodecontent=2, newunicode=2) def test_strconcat_escape_char_str(self): @@ -212,10 +215,11 @@ return 42 self.meta_interp(f, [6, 7]) if _str is str: - self.check_resops(call_pure=0, copystrcontent=2, - strsetitem=2, call=2, newstr=2) + self.check_resops(call_pure_i=0, call_pure_r=0, copystrcontent=2, + strsetitem=2, call_n=2, newstr=2) else: - self.check_resops(call_pure=0, unicodesetitem=2, call=2, + self.check_resops(call_pure_i=0, unicodesetitem=2, + call_n=2, copyunicodecontent=2, newunicode=2) def test_strconcat_escape_char_char(self): @@ -235,9 +239,9 @@ self.meta_interp(f, [6, 7]) if _str is str: self.check_resops(call_pure=0, copystrcontent=0, - strsetitem=4, call=2, newstr=2) + strsetitem=4, call_n=2, newstr=2) else: - self.check_resops(call_pure=0, unicodesetitem=4, call=2, + self.check_resops(call_pure=0, unicodesetitem=4, call_n=2, copyunicodecontent=0, newunicode=2) def test_strconcat_escape_str_char_str(self): @@ -258,9 +262,9 @@ self.meta_interp(f, [6, 7]) if _str is str: self.check_resops(call_pure=0, copystrcontent=4, strsetitem=2, - call=2, newstr=2) + call_n=2, newstr=2) else: - self.check_resops(call_pure=0, unicodesetitem=2, call=2, + self.check_resops(call_pure=0, unicodesetitem=2, call_n=2, copyunicodecontent=4, newunicode=2) def test_strconcat_guard_fail(self): @@ -512,7 +516,7 @@ return 0 self.meta_interp(f, [0]) - self.check_resops(call=7) + self.check_resops(call_r=2, call_i=5) def test_join_chars(self): jitdriver = JitDriver(reds=['a', 'b', 'c', 'i'], greens=[]) @@ -688,8 +692,9 @@ return n res = self.meta_interp(f, [10], backendopt=True) assert res == 0 - self.check_resops(call=6, # (ll_append_res0, ll_append_0_2, ll_build) - # * 2 unroll + self.check_resops(call_n=4, call_r=2, + # (ll_append_res0, ll_append_0_2, ll_build) + # * 2 unroll cond_call=0) def test_stringbuilder_append_len2_2(self): @@ -710,7 +715,8 @@ return n res = self.meta_interp(f, [10], backendopt=True) assert res == 0 - self.check_resops(call=4, # (ll_append_res0, ll_build) * 2 unroll + self.check_resops(call_n=2, call_r=2, + # (ll_append_res0, ll_build) * 2 unroll cond_call=0) def test_stringbuilder_append_slice_1(self): @@ -727,7 +733,7 @@ return n res = self.meta_interp(f, [10], backendopt=True) assert res == 0 - self.check_resops(call=6, cond_call=0, + self.check_resops(call_n=4, call_r=2, cond_call=0, copyunicodecontent=0) def test_stringbuilder_append_slice_2(self): @@ -785,7 +791,8 @@ return n res = self.meta_interp(f, [10], backendopt=True) assert res == 0 - self.check_resops(call=4) # (_ll_append_multiple_char, build) * 2 + self.check_resops(call_n=2, call_r=2) + # (_ll_append_multiple_char, build) * 2 def test_stringbuilder_bug1(self): jitdriver = JitDriver(reds=['n', 's1'], greens=[]) @@ -901,7 +908,8 @@ # loop is not safe to remove; see 56eebe9dd813. We can still # remove the call to ll_str, because that cannot raise anything # else than MemoryError. - self.check_resops(unicodesetitem=2, newunicode=2, call=5, + self.check_resops(unicodesetitem=2, newunicode=2, call_n=2, + call_r=3, copyunicodecontent=2, unicodegetitem=0) def test_str2unicode_fold(self): @@ -920,7 +928,7 @@ m -= 1 return 42 self.meta_interp(f, [6, 7]) - self.check_resops(call_pure=0, unicodesetitem=0, call=2, + self.check_resops(call_pure=0, unicodesetitem=0, call_n=2, newunicode=0, unicodegetitem=0, copyunicodecontent=0) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit