Author: Maciej Fijalkowski <[email protected]>
Branch: sse-vectorization
Changeset: r48393:d1e954a0e84e
Date: 2011-10-24 22:26 +0200
http://bitbucket.org/pypy/pypy/changeset/d1e954a0e84e/
Log: break test zjit. This gives traces roughly how I would like them.
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
@@ -9,7 +9,8 @@
numpy_driver = jit.JitDriver(greens = ['signature'],
- reds = ['result_size', 'i', 'self', 'result'])
+ reds = ['result_size', 'i', 'counter', 'c',
+ 'finish', 'self', 'result'])
all_driver = jit.JitDriver(greens=['signature'], reds=['i', 'size', 'self',
'dtype'])
any_driver = jit.JitDriver(greens=['signature'], reds=['i', 'size', 'self',
'dtype'])
slice_driver = jit.JitDriver(greens=['signature'], reds=['i', 'j', 'step',
'stop', 'source', 'dest'])
@@ -349,12 +350,28 @@
signature = self.signature
result_size = self.find_size()
result = SingleDimArray(result_size, self.find_dtype())
- while i < result_size:
+ finish = result_size // 4
+ counter = 0
+ c = 0
+ while counter < finish:
numpy_driver.jit_merge_point(signature=signature,
result_size=result_size, i=i,
- self=self, result=result)
+ self=self, result=result,
+ counter=counter, finish=finish, c=c)
result.dtype.setitem(result.storage, i, self.eval(i))
i += 1
+ c += 1
+ if c == 4:
+ counter += 1
+ c = 0
+ numpy_driver.can_enter_jit(signature=signature,
+ result_size=result_size, i=i,
+ self=self, result=result,
+ counter=counter, finish=finish, c=c)
+ # tail
+ while i < result_size:
+ result.dtype.setitem(result.storage, i, self.eval(i))
+ i += 1
return result
def force_if_needed(self):
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
@@ -26,11 +26,11 @@
v = interp_ufuncs.get(self.space).add.call(self.space, [ar, ar])
return v.get_concrete().eval(3).val
- result = self.meta_interp(f, [5], listops=True, backendopt=True)
+ result = self.meta_interp(f, [20], listops=True, backendopt=True)
self.check_loops({'getarrayitem_raw': 2, 'float_add': 1,
'setarrayitem_raw': 1, 'int_add': 1,
'int_lt': 1, 'guard_true': 1, 'jump': 1})
- assert result == f(5)
+ assert result == f(20)
def test_floatadd(self):
def f(i):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit