Author: Richard Plangger <r...@pasra.at> Branch: vecopt Changeset: r78026:645362226e3e Date: 2015-06-11 10:55 +0200 http://bitbucket.org/pypy/pypy/changeset/645362226e3e/
Log: added tests and parameterized one 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 @@ -685,6 +685,14 @@ dtype = get_dtype_cache(interp.space).w_int16dtype elif self.v == 'int32': dtype = get_dtype_cache(interp.space).w_int32dtype + elif self.v == 'uint': + dtype = get_dtype_cache(interp.space).w_uint64dtype + elif self.v == 'uint8': + dtype = get_dtype_cache(interp.space).w_uint8dtype + elif self.v == 'uint16': + dtype = get_dtype_cache(interp.space).w_uint16dtype + elif self.v == 'uint32': + dtype = get_dtype_cache(interp.space).w_uint32dtype elif self.v == 'float': dtype = get_dtype_cache(interp.space).w_float64dtype elif self.v == 'float32': @@ -932,6 +940,16 @@ stack.append(DtypeClass('int32')) elif token.v.strip(' ') == 'int64': stack.append(DtypeClass('int')) + elif token.v.strip(' ') == 'uint': + stack.append(DtypeClass('uint')) + elif token.v.strip(' ') == 'uint8': + stack.append(DtypeClass('uint8')) + elif token.v.strip(' ') == 'uint16': + stack.append(DtypeClass('uint16')) + elif token.v.strip(' ') == 'uint32': + stack.append(DtypeClass('uint32')) + elif token.v.strip(' ') == 'uint64': + stack.append(DtypeClass('uint')) elif token.v.strip(' ') == 'float': stack.append(DtypeClass('float')) elif token.v.strip(' ') == 'float32': 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 @@ -8,6 +8,7 @@ from rpython.jit.metainterp.warmspot import reset_jit, get_stats from rpython.jit.metainterp.jitprof import Profiler from rpython.rlib.jit import Counters +from rpython.rlib.rarithmetic import intmask from pypy.module.micronumpy import boxes from pypy.module.micronumpy.compile import FakeSpace, Parser, InterpreterState from pypy.module.micronumpy.base import W_NDimArray @@ -72,6 +73,16 @@ return float(int(w_res.value)) elif isinstance(w_res, boxes.W_Int16Box): return float(int(w_res.value)) + elif isinstance(w_res, boxes.W_Int8Box): + return float(int(w_res.value)) + elif isinstance(w_res, boxes.W_UInt64Box): + return float(intmask(w_res.value)) + elif isinstance(w_res, boxes.W_UInt32Box): + return float(intmask(w_res.value)) + elif isinstance(w_res, boxes.W_UInt16Box): + return float(intmask(w_res.value)) + elif isinstance(w_res, boxes.W_UInt8Box): + return float(intmask(w_res.value)) elif isinstance(w_res, boxes.W_LongBox): return float(w_res.value) elif isinstance(w_res, boxes.W_BoolBox): @@ -337,12 +348,40 @@ a = |30| sum(a,int16) """ - def test_sum_float_to_int16(self): result = self.run("sum_float_to_int16") assert result == sum(range(30)) + self.check_vectorized(1, 0) + def define_sum_float_to_int32(): + return """ + a = |30| + sum(a,int32) + """ + def test_sum_float_to_int32(self): + result = self.run("sum_float_to_int32") + assert result == sum(range(30)) self.check_vectorized(1, 1) + def define_sum_float_to_float32(): + return """ + a = |30| + sum(a,float32) + """ + def test_sum_float_to_float32(self): + result = self.run("sum_float_to_float32") + assert result == sum(range(30)) + self.check_vectorized(1, 1) + + def define_sum_float_to_uint64(): + return """ + a = |30| + sum(a,uint64) + """ + def test_sum_float_to_uint64(self): + result = self.run("sum_float_to_uint64") + assert result == sum(range(30)) + self.check_vectorized(1, 0) # unsigned + def define_cumsum(): return """ a = |30| diff --git a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py --- a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py @@ -131,26 +131,27 @@ savings = self.savings(loop1) assert savings == 2 - def test_sum_float_to_int16(self): + @py.test.mark.parametrize("bytes,s", [(1,-1),(2,-1),(4,0),(8,-1)]) + def test_sum_float_to_int(self, bytes, s): loop1 = self.parse(""" f10 = raw_load(p0, i0, descr=double) f11 = raw_load(p0, i1, descr=double) i10 = cast_float_to_int(f10) i11 = cast_float_to_int(f11) - i12 = int_signext(i10, 2) - i13 = int_signext(i11, 2) + i12 = int_signext(i10, {c}) + i13 = int_signext(i11, {c}) i14 = int_add(i1, i12) - i16 = int_signext(i14, 2) + i16 = int_signext(i14, {c}) i15 = int_add(i16, i13) - i17 = int_signext(i15, 2) - """) + i17 = int_signext(i15, {c}) + """.format(c=bytes)) savings = self.savings(loop1) # it does not benefit because signext has # a very inefficient implementation (x86 # does not provide nice instr to convert # integer sizes) # signext -> no benefit, + 2x unpack - assert savings < 0 + assert savings <= s class Test(CostModelBaseTest, LLtypeMixin): pass _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit