Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r45665:eaa6922449c1 Date: 2011-07-16 10:14 +0200 http://bitbucket.org/pypy/pypy/changeset/eaa6922449c1/
Log: Backed out changeset f12c4e733acd Ops, too much diff --git a/pypy/module/micronumpy/compile.py b/pypy/module/micronumpy/compile.py --- a/pypy/module/micronumpy/compile.py +++ b/pypy/module/micronumpy/compile.py @@ -4,7 +4,6 @@ """ from pypy.module.micronumpy.interp_numarray import FloatWrapper, SingleDimArray -from pypy.rlib.objectmodel import specialize class BogusBytecode(Exception): pass @@ -16,12 +15,8 @@ return a class TrivialSpace(object): - w_ValueError = None - - @specialize.argtype(1) - def wrap(self, w_obj): - return w_obj - + def wrap(self, x): + return x def numpy_compile(bytecode, array_size): space = TrivialSpace() diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py --- a/pypy/module/micronumpy/interp_numarray.py +++ b/pypy/module/micronumpy/interp_numarray.py @@ -7,8 +7,6 @@ from pypy.tool.sourcetools import func_with_new_name import math -INSERT_SORT_THRESH = 15 - def dummy1(v): assert isinstance(v, float) return v @@ -23,8 +21,6 @@ reds = ['result_size', 'i', 'self', 'result']) all_driver = jit.JitDriver(greens=['signature'], reds=['i', 'size', 'self']) any_driver = jit.JitDriver(greens=['signature'], reds=['i', 'size', 'self']) -slice_driver1 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step', 'stop', 'self', 'arr']) -slice_driver2 = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step', 'stop', 'self', 'arr']) class Signature(object): def __init__(self): @@ -92,18 +88,6 @@ signature = Signature() def impl(self, space, w_other): w_other = convert_to_array(space, w_other) - try: - w_other_size = w_other.find_size() - self_size = self.find_size() - except ValueError: - # this will be raised if one of the arrays is a scalar. - pass - else: - # Need a better dimension check here for N-dim arrays - if w_other_size != self_size: - raise OperationError(space.w_ValueError, - space.wrap("Cannot %s arrays of unequal dimensions" \ - % function.__name__)) new_sig = self.signature.transition(signature) res = Call2( function, @@ -127,7 +111,7 @@ signature = Signature() def impl(self, space, w_other): new_sig = self.signature.transition(signature) - w_other = convert_to_array(space, w_other) + w_other = FloatWrapper(space.float_w(w_other)) res = Call2( function, w_other, @@ -251,80 +235,6 @@ else: return self.descr_mul(space, w_other) - def _insertion_sort(self, storage, left, right): - i = left + 1 - while i <= right: - temp = storage[i] - j = i - 1 - while j >= left and storage[j] > temp: - storage[j + 1] = storage[j] - j -= 1 - storage[j + 1] = temp - i += 1 - - def descr_sort(self, space): - storage = self.get_concrete().storage - # can replace these with integer/bool numpy arrays when we add dtypes - lefts = [0] - rights = [self.find_size() - 1] - checkpivots = [False] - while lefts: - left = lefts.pop() - right = rights.pop() - checkpivot = checkpivots.pop() - # just use middle element for now. will change to med of 3 soon - mid = left + (right - left) / 2 - pivot = storage[mid] - if checkpivot and pivot == storage[left - 1]: - storage[mid], storage[left] = storage[left], storage[mid] - i = left + 1 - j = right - while 1: - while storage[j] != pivot: - j -= 1 - while storage[i] == pivot: - if i >= j: break - i += 1 - if i >= j: break - storage[i], storage[j] = storage[j], storage[i] - storage[j] = pivot - if right > j + 1: - if right - j + 1 < INSERT_SORT_THRESH: - self._insertion_sort(storage, j + 1, right) - else: - lefts.append(j + 1) - rights.append(right) - checkpivots.append(False) - else: - storage[mid], storage[right] = storage[right], storage[mid] - i = left - j = right - 1 - while 1: - while storage[i] < pivot: - i += 1 - while storage[j] >= pivot: - if i >= j: break - j -= 1 - if i >= j: break - storage[i], storage[j] = storage[j], storage[i] - storage[right] = storage[i] - storage[i] = pivot - # we can have the smaller subarray sorted first - if left < i - 1: - if i - 1 - left < INSERT_SORT_THRESH: - self._insertion_sort(storage, left, i - 1) - else: - lefts.append(left) - rights.append(i - 1) - checkpivots.append(checkpivot) - if right > i + 1: - if right - i - 1 < INSERT_SORT_THRESH: - self._insertion_sort(storage, i + 1, right) - else: - lefts.append(i + 1) - rights.append(right) - checkpivots.append(True) - def get_concrete(self): raise NotImplementedError @@ -334,20 +244,8 @@ def descr_len(self, space): return self.get_concrete().descr_len(space) - def descr_get_size(self, space): - return space.wrap(self.find_size()) - - def descr_get_ndim(self, space): - return space.wrap(self.find_ndim()) - - def descr_repr(self, space): - return self.get_concrete().descr_repr(space) - - def descr_str(self, space): - return self.get_concrete().descr_str(space) - def descr_getitem(self, space, w_idx): - # TODO: indexing by tuples and lists + # TODO: indexing by tuples start, stop, step, slice_length = space.decode_index4(w_idx, self.find_size()) if step == 0: # Single index @@ -357,16 +255,10 @@ res = SingleDimSlice(start, stop, step, slice_length, self, self.signature.transition(SingleDimSlice.static_signature)) return space.wrap(res) - def descr_setitem(self, space, w_idx, w_value): - # TODO: indexing by tuples and lists + @unwrap_spec(item=int, value=float) + def descr_setitem(self, space, item, value): self.invalidated() - start, stop, step, slice_length = space.decode_index4(w_idx, - self.find_size()) - if step == 0: - # Single index - self.get_concrete().descr_setitem(space, start, space.float_w(w_value)) - else: - self.get_concrete().descr_setslice(space, start, stop, step, slice_length, w_value) + return self.get_concrete().descr_setitem(space, item, value) def descr_mean(self, space): return space.wrap(space.float_w(self.descr_sum(space))/self.find_size()) @@ -395,9 +287,6 @@ def find_size(self): raise ValueError - def find_ndim(self): - raise ValueError - def eval(self, i): return self.float_value @@ -447,12 +336,6 @@ return self.forced_result.find_size() return self._find_size() - def find_ndim(self): - if self.forced_result is not None: - # The result has been computed and sources may be unavailable - return self.forced_result.find_ndim() - return self._find_ndim() - class Call1(VirtualArray): _immutable_fields_ = ["function", "values"] @@ -468,9 +351,6 @@ def _find_size(self): return self.values.find_size() - def _find_ndim(self): - return self.values.find_ndim() - def _eval(self, i): return self.function(self.values.eval(i)) @@ -497,13 +377,6 @@ pass return self.right.find_size() - def _find_ndim(self): - try: - return self.left.find_ndim() - except ValueError: - pass - return self.right.find_ndim() - def _eval(self, i): lhs, rhs = self.left.eval(i), self.right.eval(i) return self.function(lhs, rhs) @@ -535,12 +408,9 @@ @unwrap_spec(item=int, value=float) def descr_setitem(self, space, item, value): - # need to change this so that it can deal with slices return self.parent.descr_setitem(space, self.calc_index(item), value) def descr_len(self, space): - # This will need to change for multidimensional arrays. - # For them, len returns the size of the first dimension return space.wrap(self.find_size()) def calc_index(self, item): @@ -556,14 +426,10 @@ self.stop = stop self.step = step self.size = slice_length - self.ndim = 1 def find_size(self): return self.size - def find_ndim(self): - return self.ndim - def calc_index(self, item): return (self.start + item * self.step) @@ -574,22 +440,16 @@ def __init__(self, size): BaseArray.__init__(self) self.size = size - self.ndim = 1 self.storage = lltype.malloc(TP, size, zero=True, flavor='raw', track_allocation=False) # XXX find out why test_zjit explodes with trackign of allocations - # we could probably put get_concrete, find_size, and find_dim all in - # a new class called ConcreteArray or some such because they will - # be the same for multi-dimensional arrays. + def get_concrete(self): return self def find_size(self): return self.size - def find_ndim(self): - return self.ndim - def eval(self, i): return self.storage[i] @@ -610,72 +470,12 @@ def getitem(self, item): return self.storage[item] - def _getnums(self, comma): - # XXX this should be improved in the future - if self.find_size() > 1000: - nums = [str(self.getitem(index)) for index \ - in range(3)] - nums.append("..." + "," * comma) - nums.extend([str(self.getitem(index)) for index \ - in range(self.find_size() - 3, self.find_size())]) - else: - nums = [str(self.getitem(index)) for index \ - in range(self.find_size())] - return nums - - def descr_repr(self, space): - # Simple implementation so that we can see the array. Needs work. - return space.wrap("array([" + ", ".join(self._getnums(False)) + "])") - - def descr_str(self,space): - # Simple implementation so that we can see the array. Needs work. - return space.wrap("[" + " ".join(self._getnums(True)) + "]") - @unwrap_spec(item=int, value=float) def descr_setitem(self, space, item, value): item = self.getindex(space, item) self.invalidated() self.storage[item] = value - def _setslice1(self, start, stop, step, arr): - signature = Signature() - new_sig = self.signature.transition(signature) - i = start - j = 0 - while i < stop: - slice_driver1.jit_merge_point(signature=signature, self=self, - step=step, stop=stop, i=i, j=j, arr=arr) - self.storage[i] = arr.eval(j) - j += 1 - i += step - - def _setslice2(self, start, stop, step, arr): - signature = Signature() - new_sig = self.signature.transition(signature) - i = start - j = 0 - while i > stop: - slice_driver2.jit_merge_point(signature=signature, self=self, - step=step, stop=stop, i=i, j=j, arr=arr) - self.storage[i] = arr.eval(j) - j += 1 - i += step - - def descr_setslice(self, space, start, stop, step, slice_length, arr): - i = start - if stop < 0: - stop += self.find_size() - if step > 0: - stop = min(stop, self.find_size()) - else: - stop = max(stop, 0) - if not isinstance(arr, BaseArray): - arr = convert_to_array(space, arr) - if step > 0: - self._setslice1(start, stop, step, arr) - else: - self._setslice2(start, stop, step, arr) - def __del__(self): lltype.free(self.storage, flavor='raw') @@ -738,5 +538,4 @@ all = interp2app(BaseArray.descr_all), any = interp2app(BaseArray.descr_any), dot = interp2app(BaseArray.descr_dot), - sort = interp2app(BaseArray.descr_sort), ) diff --git a/pypy/module/micronumpy/test/test_base.py b/pypy/module/micronumpy/test/test_base.py --- a/pypy/module/micronumpy/test/test_base.py +++ b/pypy/module/micronumpy/test/test_base.py @@ -18,8 +18,8 @@ def test_slice_signature(self, space): ar = SingleDimArray(10) - v1 = ar.descr_getitem(space, space.wrap(slice(0, 10, 1))) - v2 = ar.descr_getitem(space, space.wrap(slice(9, None, -1))) + v1 = ar.descr_getitem(space, space.wrap(slice(1, 5, 1))) + v2 = ar.descr_getitem(space, space.wrap(slice(4, 6, 1))) assert v1.signature is v2.signature v3 = ar.descr_add(space, v1) diff --git a/pypy/module/micronumpy/test/test_numarray.py b/pypy/module/micronumpy/test/test_numarray.py --- a/pypy/module/micronumpy/test/test_numarray.py +++ b/pypy/module/micronumpy/test/test_numarray.py @@ -60,29 +60,6 @@ raises(IndexError, "a[5] = 0.0") raises(IndexError, "a[-6] = 3.0") - def test_setslice_array(self): - from numpy import array - a = array(range(5)) - b = array(range(2)) - a[1:4:2] = b - assert a[1] == 0. - assert a[3] == 1. - - def test_setslice_list(self): - from numpy import array - a = array(range(5)) - b = [0., 1.] - a[1:4:2] = b - assert a[1] == 0. - assert a[3] == 1. - - def test_setslice_constant(self): - from numpy import array - a = array(range(5)) - a[1:4:2] = 0. - assert a[1] == 0. - assert a[3] == 0. - def test_len(self): from numpy import array a = array(range(5)) @@ -119,9 +96,6 @@ b = a + 5 for i in range(5): assert b[i] == i + 5 - b = 5 + a - for i in range(5): - assert b[i] == 5 + i def test_add_list(self): from numpy import array @@ -131,16 +105,6 @@ assert isinstance(c, array) for i in range(5): assert c[i] == 4 - c = b + a - assert isinstance(c, array) - for i in range(5): - assert c[i] == 4 - - def test_add_unequal_size(self): - from numpy import array - a = array(range(5)) - b = array(range(3)) - raises(ValueError, "a + b") def test_subtract(self): from numpy import array @@ -163,9 +127,6 @@ b = a - 5 for i in range(5): assert b[i] == i - 5 - b = 5 - a - for i in range(5): - assert b[i] == 5 - i def test_mul(self): from numpy import array @@ -180,9 +141,6 @@ b = a * 5 for i in range(5): assert b[i] == i * 5 - b = 5 * a - for i in range(5): - assert b[i] == 5 * i def test_div(self): from numpy import array @@ -201,13 +159,10 @@ def test_div_constant(self): from numpy import array - a = array(range(1,6)) + a = array(range(5)) b = a / 5.0 for i in range(5): - assert b[i] == (i+1) / 5.0 - b = 5.0 / a - for i in range(5): - assert b[i] == 5.0 / (i+1) + assert b[i] == i / 5.0 def test_pow(self): from numpy import array @@ -231,9 +186,6 @@ b = a ** 2 for i in range(5): assert b[i] == i ** 2 - b = 2 ** a - for i in range(5): - assert b[i] == 2 ** i def test_mod(self): from numpy import array @@ -252,13 +204,10 @@ def test_mod_constant(self): from numpy import array - a = array(range(1,6)) + a = array(range(5)) b = a % 2 for i in range(5): - assert b[i] == (i+1) % 2 - b = 2 % a - for i in range(5): - assert b[i] == 2 % (i+1) + assert b[i] == i % 2 def test_pos(self): from numpy import array @@ -417,14 +366,6 @@ for i in xrange(5): assert b[i] == 2.5*a[i] - def test_sort(self): - from numpy import array - a = array(range(19,-1,-1)) - b = array(range(20)) - a.sort() - for i in xrange(20): - assert a[i] == b[i] - class AppTestSupport(object): def setup_class(cls): diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py --- a/pypy/module/micronumpy/test/test_zjit.py +++ b/pypy/module/micronumpy/test/test_zjit.py @@ -5,7 +5,6 @@ from pypy.module.micronumpy.interp_ufuncs import negative from pypy.module.micronumpy.compile import numpy_compile from pypy.rlib.objectmodel import specialize -from pypy.rlib.nonconst import NonConstant class FakeSpace(object): w_ValueError = None @@ -249,21 +248,6 @@ 'int_lt': 1, 'guard_true': 1, 'jump': 1}) assert result == f(5) - def test_setslice(self): - space = self.space - - def f(i): - step = NonConstant(3) - ar = SingleDimArray(step*i) - ar2 = SingleDimArray(i) - ar.descr_setslice(space, 0, step*i, step, i, ar2) - return ar.get_concrete().storage[3] - - result = self.meta_interp(f, [5], listops=True, backendopt=True) - self.check_loops({'getarrayitem_raw': 1, - 'setarrayitem_raw': 1, 'int_add': 2, - 'int_lt': 1, 'guard_true': 1, 'jump': 1}) - class TestTranslation(object): def test_compile(self): x = numpy_compile('aa+f*f/a-', 10) diff --git a/pypy/tool/jitlogparser/parser.py b/pypy/tool/jitlogparser/parser.py --- a/pypy/tool/jitlogparser/parser.py +++ b/pypy/tool/jitlogparser/parser.py @@ -89,7 +89,7 @@ while asm[asm_index][0] < op.offset: asm_index += 1 end_index = asm_index - while asm[end_index][0] < end and end_index < len(asm) - 1: + while asm[end_index][0] < end: end_index += 1 op.asm = '\n'.join([asm[i][1] for i in range(asm_index, end_index)]) return loop @@ -369,11 +369,7 @@ name = comm[2:comm.find(':')-1] if name in dumps: bname, start_ofs, dump = dumps[name] - try: - parser.postprocess(loop, backend_tp=bname, backend_dump=dump, - dump_start=start_ofs) - except: - import pdb, sys - pdb.post_mortem(sys.exc_info()[2]) + parser.postprocess(loop, backend_tp=bname, backend_dump=dump, + dump_start=start_ofs) loops.append(loop) return log, loops diff --git a/pypy/tool/jitlogparser/test/logtest2.log b/pypy/tool/jitlogparser/test/logtest2.log deleted file mode 100644 --- a/pypy/tool/jitlogparser/test/logtest2.log +++ /dev/null @@ -1,301 +0,0 @@ -[1f5e7f69779] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b000 +0 4157415641554154415341524151415057565554535251504889E349C7C340BC920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3 -[1f5e7f7fe75] jit-backend-dump} -[1f5e7f84fc4] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b045 +0 4157415641554154415341524151415057565554535251504889E349C7C3F0BB920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3 -[1f5e7f87ac1] jit-backend-dump} -[1f5e7f8a0b4] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b08a +0 4157415641554154415341524151415057565554535251504889E34881EC80000000F20F110424F20F114C2408F20F11542410F20F115C2418F20F11642420F20F116C2428F20F11742430F20F117C2438F2440F11442440F2440F114C2448F2440F11542450F2440F115C2458F2440F11642460F2440F116C2468F2440F11742470F2440F117C247849C7C340BC920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3 -[1f5e7f8da6b] jit-backend-dump} -[1f5e7f8f4f6] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b13d +0 4157415641554154415341524151415057565554535251504889E34881EC80000000F20F110424F20F114C2408F20F11542410F20F115C2418F20F11642420F20F116C2428F20F11742430F20F117C2438F2440F11442440F2440F114C2448F2440F11542450F2440F115C2458F2440F11642460F2440F116C2468F2440F11742470F2440F117C247849C7C3F0BB920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3 -[1f5e7f92b83] jit-backend-dump} -[1f5e7f95b99] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b210 +0 F20F11442410F20F114C2418F20F11542420F20F115C2428F20F11642430F20F116C2438F20F11742440F20F117C2448F2440F11442450F2440F114C2458F2440F11542460F2440F115C2468F2440F11642470F2440F116C2478F2440F11B42480000000F2440F11BC24880000004829C24889D749C7C350A8920041FFE3 -[1f5e7f988d0] jit-backend-dump} -[1f5e7fa16fb] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b28e +0 F20F10442410F20F104C2418F20F10542420F20F105C2428F20F10642430F20F106C2438F20F10742440F20F107C2448F2440F10442450F2440F104C2458F2440F10542460F2440F105C2468F2440F10642470F2440F106C2478F2440F10B42480000000F2440F10BC2488000000488B1425704F3D01C3 -[1f5e7fa47ac] jit-backend-dump} -[1f5e7fab3a4] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b305 +0 57565251415041514883EC40F20F110424F20F114C2408F20F11542410F20F115C2418F20F11642420F20F116C2428F20F11742430F20F117C2438488D7D1049C7C340BA520041FFD3488B042550546B024885C0753CF20F107C2438F20F10742430F20F106C2428F20F10642420F20F105C2418F20F10542410F20F104C2408F20F1004244883C44041594158595A5E5FC3488B042558546B0248C7042550546B020000000048C7042558546B02000000004889042590C2540149C7C340BC920041FFD348C7C0020000004883C478C3 -[1f5e7faf1ca] jit-backend-dump} -[1f5e7fb0813] {jit-backend-counts -[1f5e7fb0f61] jit-backend-counts} -[1f5fd38be3e] {jit-backend -[1f5fe729336] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b3d5 +0 554889E5534154415541564157488DA500000000488B042590C2540148C7042590C254010000000048898570FFFFFF488B042598C2540148C7042598C254010000000048898568FFFFFF488B0425A0C2540148C70425A0C254010000000048898560FFFFFF488B0425A8C2540148C70425A8C254010000000048898558FFFFFF4C8B3C25D04D5B0149BB30B00C0A897F00004D8B334983C60149BB30B00C0A897F00004D89334981FF102700000F8D000000004D89FE4983E7024983FF000F85000000004983C6034C8B3C25A0536B024983EF014C893C25A0536B024983FF000F8C000000004D89F7E99AFFFFFF488B0425A8536B024829E0483B042580DC3C01760D49BB05B3A007897F000041FFD3554889E5534154415541564157488DA550FFFFFF4889BD70FFFFFF4889B568FFFFFF48899560FFFFFF48898D58FFFFFF4D89C7E940FFFFFF49BB00B0A007897F000041FFD34440484C3D030300000049BB00B0A007897F000041FFD34440484C3D39030400000049BB00B0A007897F000041FFD34440484C3907070305000000 -[1f5fe73276a] jit-backend-dump} -[1f5fe73438f] {jit-backend-addr -Loop 0 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 7f8907a0b45d to 7f8907a0b4c3 (bootstrap 7f8907a0b3d5) -[1f5fe7369af] jit-backend-addr} -[1f5fe737940] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b3e5 +0 50FFFFFF -[1f5fe74b40e] jit-backend-dump} -[1f5fe74c63d] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b484 +0 95000000 -[1f5fe74da6a] jit-backend-dump} -[1f5fe74e438] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b495 +0 9B000000 -[1f5fe74f513] jit-backend-dump} -[1f5fe74fd2e] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b4b7 +0 91000000 -[1f5fe750d8c] jit-backend-dump} -[1f5fe75373f] jit-backend} -[1f5fe755abc] {jit-log-opt-loop -# Loop 0 : loop with 26 ops -[p0, p1, p2, p3, i4] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #12 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP') -+166: i6 = int_lt(i4, 10000) -guard_true(i6, descr=<Guard3>) [p1, p0, p2, p3, i4] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #18 POP_JUMP_IF_FALSE') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #21 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #24 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #27 BINARY_AND') -+179: i8 = int_and(i4, 2) -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #28 POP_JUMP_IF_FALSE') -+186: i9 = int_is_true(i8) -guard_false(i9, descr=<Guard4>) [p1, p0, p2, p3, i8, i4] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #44 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #47 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #50 INPLACE_ADD') -+196: i11 = int_add(i4, 3) -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #51 STORE_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #54 JUMP_ABSOLUTE') -+200: i13 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+208: i15 = int_sub(i13, 1) -+212: setfield_raw(40588192, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+220: i17 = int_lt(i15, 0) -guard_false(i17, descr=<Guard5>) [p1, p0, p2, p3, i11, None, None] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST') -+230: jump(p0, p1, p2, p3, i11, descr=<Loop0>) -+238: --end of the loop-- -[1f5fe92b8af] jit-log-opt-loop} -[1f5fe944ae5] {jit-backend -[1f5fee20651] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b565 +0 554889E5534154415541564157488DA5000000004C8B3C2590C2540148C7042590C25401000000004C8B342598C2540148C7042598C25401000000004C8B2C25A0C2540148C70425A0C25401000000004C8B2425A8C2540148C70425A8C25401000000004C8B1425D04D5B014C8B0C25B8C2540148C70425B8C25401000000004C8B0425E04D5B01488B3C25E84D5B01488B3425D0C2540148C70425D0C2540100000000488B1C25D8C2540148C70425D8C2540100000000488B1425E0C2540148C70425E0C254010000000049BB38B00C0A897F0000498B0B4883C10149BB38B00C0A897F000049890B4983F8010F85000000004883FE017206813E980700000F85000000004983FA000F850000000049BBA8F0B407897F00004D39DC0F8500000000488B56084881FA102700000F8D000000004989D44883E2024883FA000F85000000004983C403488B1425A0536B024883EA0148891425A0536B024883FA000F8C000000004C89BD70FFFFFF4C89B568FFFFFF4C89AD60FFFFFF4C898D58FFFFFF4D89E749BB5DB4A007897F000041FFE3488B0425A8536B024829E0483B042580DC3C01760D49BB05B3A007897F000041FFD3554889E5534154415541564157488DA550FFFFFF4989FF4989F64989D54989CC4D89C24C8B5D104D89D84C8 B5D184C89DF4C8B5D204C89DE4C8B5D284C89DB4C8B5D304C89DAE9CCFEFFFF49BB00B0A007897F000041FFD321383C343029241D180C08030600000049BB00B0A007897F000041FFD3383C18343029240C08030700000049BB00B0A007897F000041FFD329383C3430241808030800000049BB00B0A007897F000041FFD3383C3034241808030900000049BB00B0A007897F000041FFD3383C183424030A00000049BB00B0A007897F000041FFD3383C34241809030B00000049BB00B0A007897F000041FFD3383C34243107030C000000 -[1f5fee2e673] jit-backend-dump} -[1f5fee2f38d] {jit-backend-addr -Loop 1 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 7f8907a0b631 to 7f8907a0b6f8 (bootstrap 7f8907a0b565) -[1f5fee312e3] jit-backend-addr} -[1f5fee320ed] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b575 +0 50FFFFFF -[1f5fee3e903] jit-backend-dump} -[1f5fee3fbff] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b655 +0 0C010000 -[1f5fee41579] jit-backend-dump} -[1f5fee421af] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b667 +0 17010000 -[1f5fee43835] jit-backend-dump} -[1f5fee44261] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b671 +0 28010000 -[1f5fee457c1] jit-backend-dump} -[1f5fee461a5] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b684 +0 2F010000 -[1f5fee475d3] jit-backend-dump} -[1f5fee47f57] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b695 +0 37010000 -[1f5fee4933d] jit-backend-dump} -[1f5fee49cd9] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b6a6 +0 3D010000 -[1f5fee4b0ad] jit-backend-dump} -[1f5fee4ba4f] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b6c8 +0 33010000 -[1f5fee4cf61] jit-backend-dump} -[1f5fee4dc45] jit-backend} -[1f5fee4f3a9] {jit-log-opt-loop -# Loop 1 : entry bridge with 31 ops -[p0, p1, p2, p3, i4, p5, i6, i7, p8, p9, p10] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST') -+234: guard_value(i6, 1, descr=<Guard6>) [i6, p1, p0, p2, p3, i4, p5, i7, p8, p9, p10] -+244: guard_nonnull_class(p8, ConstClass(W_IntObject), descr=<Guard7>) [p1, p0, p8, p2, p3, i4, p5, p9, p10] -+262: guard_value(i4, 0, descr=<Guard8>) [i4, p1, p0, p2, p3, p5, p8, p10] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #12 LOAD_CONST') -+272: guard_value(p3, ConstPtr(ptr14), descr=<Guard9>) [p1, p0, p3, p2, p5, p8, p10] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP') -+291: i15 = getfield_gc_pure(p8, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>) -+295: i17 = int_lt(i15, 10000) -guard_true(i17, descr=<Guard10>) [p1, p0, p8, p2, p5] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #18 POP_JUMP_IF_FALSE') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #21 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #24 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #27 BINARY_AND') -+308: i19 = int_and(i15, 2) -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #28 POP_JUMP_IF_FALSE') -+315: i20 = int_is_true(i19) -guard_false(i20, descr=<Guard11>) [p1, p0, p2, p5, p8, i19] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #44 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #47 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #50 INPLACE_ADD') -+325: i22 = int_add(i15, 3) -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #51 STORE_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #54 JUMP_ABSOLUTE') -+329: i24 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+337: i26 = int_sub(i24, 1) -+341: setfield_raw(40588192, i26, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+349: i28 = int_lt(i26, 0) -guard_false(i28, descr=<Guard12>) [p1, p0, p2, p5, i22, None] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST') -+359: jump(p0, p1, p2, p5, i22, descr=<Loop0>) -+403: --end of the loop-- -[1f60036d952] jit-log-opt-loop} -[1f600719a74] {jit-backend -[1f600759dac] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b817 +0 554889E5534154415541564157488DA500000000488B042590C2540148C7042590C254010000000048898570FFFFFF488B042598C2540148C7042598C254010000000048898568FFFFFF488B0425A0C2540148C70425A0C254010000000048898560FFFFFF488B0425A8C2540148C70425A8C254010000000048898558FFFFFF4C8B3C25D04D5B0149BB40B00C0A897F00004D8B334983C60149BB40B00C0A897F00004D89334981FF102700000F8D000000004D89FE4983E7024983FF000F85000000004983C6034C8B3C25A0536B024983EF024C893C25A0536B024983FF000F8C000000004D89F7E99AFFFFFF488B0425A8536B024829E0483B042580DC3C01760D49BB05B3A007897F000041FFD3554889E5534154415541564157488DA550FFFFFF4889BD70FFFFFF4889B568FFFFFF48899560FFFFFF48898D58FFFFFF4D89C7E940FFFFFF49BB00B0A007897F000041FFD34440484C3D030D00000049BB00B0A007897F000041FFD34440484C3D39030E00000049BB00B0A007897F000041FFD34440484C390707030F000000 -[1f60076fd90] jit-backend-dump} -[1f600770f30] {jit-backend-addr -Loop 2 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 7f8907a0b89f to 7f8907a0b905 (bootstrap 7f8907a0b817) -[1f6007730fc] jit-backend-addr} -[1f600773fde] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b827 +0 50FFFFFF -[1f600775c76] jit-backend-dump} -[1f600776a38] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b8c6 +0 95000000 -[1f600778112] jit-backend-dump} -[1f600778b8c] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b8d7 +0 9B000000 -[1f60077a04a] jit-backend-dump} -[1f60077aa6a] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b8f9 +0 91000000 -[1f60077bf10] jit-backend-dump} -[1f60077cc24] jit-backend} -[1f60077e094] {jit-log-opt-loop -# Loop 2 : loop with 25 ops -[p0, p1, p2, p3, i4] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #12 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP') -+166: i6 = int_lt(i4, 10000) -guard_true(i6, descr=<Guard13>) [p1, p0, p2, p3, i4] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #18 POP_JUMP_IF_FALSE') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #21 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #24 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #27 BINARY_AND') -+179: i8 = int_and(i4, 2) -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #28 POP_JUMP_IF_FALSE') -+186: i9 = int_is_true(i8) -guard_false(i9, descr=<Guard14>) [p1, p0, p2, p3, i8, i4] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #44 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #47 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #50 INPLACE_ADD') -+196: i11 = int_add(i4, 3) -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #51 STORE_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #54 JUMP_ABSOLUTE') -+200: i13 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+208: i15 = int_sub(i13, 2) -+212: setfield_raw(40588192, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+220: i17 = int_lt(i15, 0) -guard_false(i17, descr=<Guard15>) [p1, p0, p2, p3, i11, None, None] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST') -+230: jump(p0, p1, p2, p3, i11, descr=<Loop2>) -+238: --end of the loop-- -[1f6007a567c] jit-log-opt-loop} -[1f600802cd6] {jit-backend -[1f600862dd8] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b9b7 +0 488DA50000000049BB48B00C0A897F00004D8B3B4983C70149BB48B00C0A897F00004D893B4D89F74983C6010F80000000004C8B3C25A0536B024983EF014C893C25A0536B024983FF000F8C00000000488B0425704F3D01488D5010483B1425784F3D01761A49BB10B2A007897F000041FFD349BB8EB2A007897F000041FFD348C7009807000048891425704F3D014C89700848898550FFFFFF4C8BBD70FFFFFF4C8BB568FFFFFF4C8BAD60FFFFFF49BBA8F0B407897F00004D89DC49C7C2000000004C8B8D58FFFFFF49C7C00100000048C7C709000000488BB550FFFFFF48C7C30000000048C7C20000000049BB31B6A007897F000041FFE349BB00B0A007897F000041FFD3444039484C3D031000000049BB00B0A007897F000041FFD34440484C39070311000000 -[1f60086ba5a] jit-backend-dump} -[1f60086d36e] {jit-backend-addr -Bridge out of guard 4 has address 7f8907a0b9b7 to 7f8907a0bab1 -[1f60086ffd2] jit-backend-addr} -[1f600870dca] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b9ba +0 C0FEFFFF -[1f60087281c] jit-backend-dump} -[1f600873506] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b9e5 +0 C8000000 -[1f600874b44] jit-backend-dump} -[1f6008754d4] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0ba03 +0 C2000000 -[1f600876956] jit-backend-dump} -[1f600877b1a] {jit-backend-dump -BACKEND x86_64 -SYS_EXECUTABLE python -CODE_DUMP @7f8907a0b495 +0 1E050000 -[1f600878f4e] jit-backend-dump} -[1f600884c12] jit-backend} -[1f60088780a] {jit-log-opt-bridge -# bridge out of Guard 4 with 16 ops -[p0, p1, p2, p3, i4, i5] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #31 LOAD_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #34 LOAD_CONST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #37 INPLACE_ADD') -+37: i7 = int_add_ovf(i5, 1) -guard_no_overflow(, descr=<Guard16>) [p0, p1, i7, p2, p3, i5] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #38 STORE_FAST') -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #41 JUMP_ABSOLUTE') -+50: i9 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+58: i11 = int_sub(i9, 1) -+62: setfield_raw(40588192, i11, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>) -+70: i13 = int_lt(i11, 0) -guard_false(i13, descr=<Guard17>) [p0, p1, p2, p3, i7, None] -debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST') -+80: p16 = new_with_vtable(ConstClass(W_IntObject)) -+143: setfield_gc(p16, i7, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>) -+147: jump(p1, p0, p2, ConstPtr(ptr17), 0, p3, 1, 9, p16, ConstPtr(ptr21), ConstPtr(ptr22), descr=<Loop1>) -+250: --end of the loop-- -[1f6008aa976] jit-log-opt-bridge} -[1f600912c98] {jit-backend-counts -0:1982 -1:1985 -2:0 -3:1782 -[1f600916544] jit-backend-counts} diff --git a/pypy/tool/jitlogparser/test/test_parser.py b/pypy/tool/jitlogparser/test/test_parser.py --- a/pypy/tool/jitlogparser/test/test_parser.py +++ b/pypy/tool/jitlogparser/test/test_parser.py @@ -220,4 +220,4 @@ 'logtest2.log'))) assert 'cmp' in loops[1].operations[1].asm # bridge - assert 'jo' in loops[3].operations[3].asm + assert 'cmp' in loops[3].operations[1].asm _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit