Author: Richard Plangger <r...@pasra.at> Branch: vecopt Changeset: r77737:c191d623bf18 Date: 2015-06-01 09:27 +0200 http://bitbucket.org/pypy/pypy/changeset/c191d623bf18/
Log: reverted call2, list + index left the access in the trace diff --git a/pypy/module/micronumpy/iterators.py b/pypy/module/micronumpy/iterators.py --- a/pypy/module/micronumpy/iterators.py +++ b/pypy/module/micronumpy/iterators.py @@ -116,16 +116,6 @@ factors[ndim-i-1] = factors[ndim-i] * shape[ndim-i] self.factors = factors - def matches_range(self, other_iter): - assert isinstance(other_iter, ArrayIter) - return self.size == other_iter.size and \ - self.contiguous == other_iter.contiguous and \ - self.ndim_m1 == other_iter.ndim_m1 and \ - self.shape_m1 == other_iter.shape_m1 and \ - self.strides == other_iter.strides and \ - self.factors == other_iter.factors and \ - self.backstrides == other_iter.backstrides - @jit.unroll_safe def reset(self, state=None, mutate=False): index = 0 diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py --- a/pypy/module/micronumpy/loop.py +++ b/pypy/module/micronumpy/loop.py @@ -15,7 +15,7 @@ call2_driver = jit.JitDriver( name='numpy_call2', - greens=['shapelen', 'func', 'left_iter_index', 'right_iter_index', 'calc_dtype', 'res_dtype' ], + greens=['shapelen', 'func', 'calc_dtype', 'res_dtype'], reds='auto', vectorize=True) def call2(space, shape, func, calc_dtype, res_dtype, w_lhs, w_rhs, out): @@ -43,12 +43,9 @@ # TODO handle __array_priorities__ and maybe flip the order - left_iter_index = 1 - right_iter_index = 2 if w_lhs.get_size() == 1: w_left = w_lhs.get_scalar_value().convert_to(space, calc_dtype) left_iter = left_state = None - left_iter_index = -1 else: w_left = None left_iter, left_state = w_lhs.create_iter(shape) @@ -57,45 +54,28 @@ if w_rhs.get_size() == 1: w_right = w_rhs.get_scalar_value().convert_to(space, calc_dtype) right_iter = right_state = None - right_iter_index = -1 else: w_right = None right_iter, right_state = w_rhs.create_iter(shape) right_iter.track_index = False + if out is None: out = W_NDimArray.from_shape(space, shape, res_dtype, w_instance=lhs_for_subtype) out_iter, out_state = out.create_iter(shape) - - iter_list = [out_iter, left_iter, right_iter] - state_list = [out_state, left_state, right_state] - - if left_iter_index > 0 and left_iter.matches_range(out_iter): - left_iter_index = 0 - if right_iter_index > 0 and right_iter.matches_range(out_iter): - right_iter_index = 0 - shapelen = len(shape) while not out_iter.done(out_state): - call2_driver.jit_merge_point(shapelen=shapelen, left_iter_index=left_iter_index, - right_iter_index=right_iter_index, - func=func, calc_dtype=calc_dtype, res_dtype=res_dtype) - if left_iter_index > 0: - iter = iter_list[left_iter_index] - state = state_list[left_iter_index] - w_left = iter.getitem(state).convert_to(space, calc_dtype) - if left_iter_index == 1: - state_list[left_iter_index] = iter.next(state) - if right_iter_index > 0: - iter = iter_list[right_iter_index] - state = state_list[right_iter_index] - w_right = iter.getitem(state).convert_to(space, calc_dtype) - if right_iter_index == 2: - state_list[right_iter_index] = iter.next(state) + call2_driver.jit_merge_point(shapelen=shapelen, func=func, + calc_dtype=calc_dtype, res_dtype=res_dtype) + if left_iter: + w_left = left_iter.getitem(left_state).convert_to(space, calc_dtype) + left_state = left_iter.next(left_state) + if right_iter: + w_right = right_iter.getitem(right_state).convert_to(space, calc_dtype) + right_state = right_iter.next(right_state) out_iter.setitem(out_state, func(calc_dtype, w_left, w_right).convert_to( space, res_dtype)) - state_list[0] = out_state = out_iter.next(out_state) - + out_state = out_iter.next(out_state) return out call1_driver = jit.JitDriver( _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit