Author: Armin Rigo <ar...@tunes.org> Branch: remove-raisingops Changeset: r84725:3da1c3d6dbae Date: 2016-05-27 11:19 +0200 http://bitbucket.org/pypy/pypy/changeset/3da1c3d6dbae/
Log: tweaks, reducing diff to default diff --git a/rpython/jit/backend/llsupport/test/test_regalloc_integration.py b/rpython/jit/backend/llsupport/test/test_regalloc_integration.py --- a/rpython/jit/backend/llsupport/test/test_regalloc_integration.py +++ b/rpython/jit/backend/llsupport/test/test_regalloc_integration.py @@ -496,23 +496,6 @@ self.interpret(ops, [s, ord('a')]) assert s[1] == 'a' - def test_division_optimized(self): - py.test.skip("XXX re-enable") - ops = ''' - [i7, i6] - label(i7, i6, descr=targettoken) - i18 = int_floordiv(i7, i6) - i19 = int_xor(i7, i6) - i21 = int_lt(i19, 0) - i22 = int_mod(i7, i6) - i23 = int_is_true(i22) - i24 = int_eq(i6, 4) - guard_false(i24) [i18] - jump(i18, i6, descr=targettoken) - ''' - self.interpret(ops, [10, 4]) - assert self.getint(0) == 2 - # FIXME: Verify that i19 - i23 are removed class TestRegallocFloats(BaseTestRegalloc): def setup_class(cls): diff --git a/rpython/jit/codewriter/support.py b/rpython/jit/codewriter/support.py --- a/rpython/jit/codewriter/support.py +++ b/rpython/jit/codewriter/support.py @@ -413,21 +413,6 @@ else: return xll -def _ll_2_llong_floordiv(xll, yll): - return llop.llong_floordiv(lltype.SignedLongLong, xll, yll) - -def _ll_2_llong_mod(xll, yll): - return llop.llong_mod(lltype.SignedLongLong, xll, yll) - -def _ll_2_ullong_floordiv(xll, yll): - return llop.ullong_floordiv(lltype.UnsignedLongLong, xll, yll) - -def _ll_2_ullong_mod(xll, yll): - return llop.ullong_mod(lltype.UnsignedLongLong, xll, yll) - -def _ll_2_uint_mod(xll, yll): - return llop.uint_mod(lltype.Unsigned, xll, yll) - # in the following calls to builtins, the JIT is allowed to look inside: inline_calls_to = [ diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py --- a/rpython/jit/metainterp/optimizeopt/rewrite.py +++ b/rpython/jit/metainterp/optimizeopt/rewrite.py @@ -710,7 +710,7 @@ from rpython.jit.metainterp.history import DONT_CHANGE op = self.replace_op_with(op, rop.INT_RSHIFT, args=[arg1, ConstInt(highest_bit(val))], - descr=DONT_CHANGE) # <- xxx rename? + descr=DONT_CHANGE) # <- xxx rename? means "kill" self.emit_operation(op) return True diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py --- a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py @@ -725,7 +725,7 @@ ops = """ [p0,i0] i1 = int_add(i0,4) - i2 = int_sub(i1,3) # XXX used to be "divide by 4", not sure about it + i2 = int_sub(i1,3) # XXX used to be "divide by 2", not sure about it i3 = raw_load_i(p0,i2,descr=chararraydescr) i4 = int_add(i0,2) i5 = int_mul(i4,2) diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py --- a/rpython/jit/metainterp/test/test_ajit.py +++ b/rpython/jit/metainterp/test/test_ajit.py @@ -936,11 +936,11 @@ myjitdriver.can_enter_jit(x=x, y=y, n=n) myjitdriver.jit_merge_point(x=x, y=y, n=n) n -= ovfcheck(x % y) + x += 1 return n res = self.meta_interp(f, [20, 1, 2]) assert res == 0 - py.test.skip("XXX re-enable") - self.check_resops(call_i=0, call_r=0) + self.check_resops(call_i=2, int_eq=3, int_and=2) def test_abs(self): myjitdriver = JitDriver(greens = [], reds = ['i', 't']) diff --git a/rpython/jit/metainterp/test/test_executor.py b/rpython/jit/metainterp/test/test_executor.py --- a/rpython/jit/metainterp/test/test_executor.py +++ b/rpython/jit/metainterp/test/test_executor.py @@ -142,18 +142,6 @@ (133, 133, 0)]), (rop.INT_MUL, [(-6, -3, 18), (15, 15, 225)]), - ## (rop.INT_FLOORDIV, [(110, 3, 36), - ## (-110, 3, -36), - ## (110, -3, -36), - ## (-110, -3, 36), - ## (-110, -1, 110), - ## (minint, 1, minint), - ## (-87, -87, 1)]), - ## (rop.INT_MOD, [(11, 3, 2), - ## (-11, 3, -2), - ## (11, -3, 2), - ## (-11, -3, -2), - ## (-87, -87, 0)]), (rop.INT_AND, [(0xFF00, 0x0FF0, 0x0F00), (-111, -111, -111)]), (rop.INT_OR, [(0xFF00, 0x0FF0, 0xFFF0), @@ -170,15 +158,6 @@ (rop.UINT_RSHIFT, [(-1, 4, intmask(r_uint(-1) >> r_uint(4))), ( 1, 4, intmask(r_uint(1) >> r_uint(4))), ( 3, 3, 0)]), - ## (rop.UINT_FLOORDIV, [(4, 3, intmask(r_uint(4) / r_uint(3))), - ## (1, -1, intmask(r_uint(1) / r_uint(-1))), - ## (110, 3, 36), - ## (-110, 3, intmask(r_uint(-110) / r_uint(3))), - ## (110, -3, intmask(r_uint(110) / r_uint(-3))), - ## (-110, -3, intmask(r_uint(-110) / r_uint(-3))), - ## (-110, -1, intmask(r_uint(-110) / r_uint(-1))), - ## (minint, 1, intmask(r_uint(minint) / r_uint(1))), - ## (-87, -87, intmask(r_uint(-87) / r_uint(-87)))]) ]: for x, y, z in testcases: yield opnum, [x, y], z diff --git a/rpython/rlib/rerased.py b/rpython/rlib/rerased.py --- a/rpython/rlib/rerased.py +++ b/rpython/rlib/rerased.py @@ -20,7 +20,7 @@ from rpython.rtyper.llannotation import lltype_to_annotation from rpython.rtyper.lltypesystem import lltype, llmemory from rpython.rtyper.lltypesystem.lloperation import llop -from rpython.rlib.rarithmetic import is_valid_int, r_uint, intmask +from rpython.rlib.rarithmetic import is_valid_int from rpython.rlib.debug import ll_assert @@ -212,12 +212,12 @@ def _rtype_erase_int(hop): [v_value] = hop.inputargs(lltype.Signed) + c_one = hop.inputconst(lltype.Signed, 1) hop.exception_is_here() - v_instance = hop.gendirectcall(_ll_erase_int, v_value) + v2 = hop.genop('int_add_ovf', [v_value, v_value], + resulttype = lltype.Signed) + v2p1 = hop.genop('int_add', [v2, c_one], + resulttype = lltype.Signed) + v_instance = hop.genop('cast_int_to_ptr', [v2p1], + resulttype=llmemory.GCREF) return v_instance - -def _ll_erase_int(x): - r = intmask(r_uint(x) << 1) - if r^x < 0: - raise OverflowError("integer addition") - return lltype.cast_int_to_ptr(llmemory.GCREF, r + 1) diff --git a/rpython/rtyper/lltypesystem/rtagged.py b/rpython/rtyper/lltypesystem/rtagged.py --- a/rpython/rtyper/lltypesystem/rtagged.py +++ b/rpython/rtyper/lltypesystem/rtagged.py @@ -3,7 +3,6 @@ InstanceRepr, CLASSTYPE, ll_inst_type, MissingRTypeAttribute, ll_issubclass_const, getclassrepr, getinstancerepr, get_type_repr) from rpython.rtyper.rmodel import TyperError, inputconst -from rpython.rlib.rarithmetic import r_uint, intmask class TaggedInstanceRepr(InstanceRepr): @@ -41,8 +40,12 @@ raise TyperError("must instantiate %r with a simple class call" % ( self.classdef,)) v_value = hop.inputarg(lltype.Signed, arg=1) + c_one = hop.inputconst(lltype.Signed, 1) hop.exception_is_here() - v2p1 = hop.gendirectcall(ll_times_two_plus_one, v_value) + v2 = hop.genop('int_add_ovf', [v_value, v_value], + resulttype = lltype.Signed) + v2p1 = hop.genop('int_add', [v2, c_one], + resulttype = lltype.Signed) v_instance = hop.genop('cast_int_to_ptr', [v2p1], resulttype = self.lowleveltype) return v_instance, False # don't call __init__ @@ -137,11 +140,6 @@ return hop.gendirectcall(ll_unboxed_isinstance_const, v_obj, minid, maxid, c_answer_if_unboxed) -def ll_times_two_plus_one(x): - r = intmask(r_uint(x) << 1) - if r^x < 0: - raise OverflowError("integer addition") - return r + 1 def ll_int_to_unboxed(PTRTYPE, value): return lltype.cast_int_to_ptr(PTRTYPE, value*2+1) diff --git a/rpython/rtyper/lltypesystem/test/test_lloperation.py b/rpython/rtyper/lltypesystem/test/test_lloperation.py --- a/rpython/rtyper/lltypesystem/test/test_lloperation.py +++ b/rpython/rtyper/lltypesystem/test/test_lloperation.py @@ -53,7 +53,7 @@ from rpython.flowspace.model import Variable, Constant assert llop.bool_not.is_pure([Variable()]) assert llop.debug_assert.is_pure([Variable()]) - assert not llop.setarrayitem.is_pure([Variable(), Variable(), Variable()]) + assert not llop.int_add_ovf.is_pure([Variable(), Variable()]) # S1 = lltype.GcStruct('S', ('x', lltype.Signed), ('y', lltype.Signed)) v_s1 = Variable() diff --git a/rpython/translator/c/src/commondefs.h b/rpython/translator/c/src/commondefs.h --- a/rpython/translator/c/src/commondefs.h +++ b/rpython/translator/c/src/commondefs.h @@ -67,6 +67,7 @@ # define SIZEOF_INT 4 # define SIZEOF_LONG 4 +# define SIZEOF_SIGNED 4 # define SIZEOF_LONG_LONG 8 /******************** 64-bit support ********************/ @@ -82,6 +83,7 @@ # define SIZEOF_INT 4 # define SIZEOF_LONG 8 +# define SIZEOF_SIGNED 8 # define SIZEOF_LONG_LONG 8 /******************** Win-64 support ********************/ @@ -95,6 +97,7 @@ # define SIZEOF_INT 4 # define SIZEOF_LONG 4 +# define SIZEOF_SIGNED 8 # define SIZEOF_LONG_LONG 8 # endif diff --git a/rpython/translator/c/src/int.h b/rpython/translator/c/src/int.h --- a/rpython/translator/c/src/int.h +++ b/rpython/translator/c/src/int.h @@ -73,16 +73,16 @@ r = (Signed)((Unsigned)x - y); \ if ((r^x) < 0 && (r^~y) < 0) FAIL_OVF("integer subtraction") -#if SIZEOF_LONG * 2 <= SIZEOF_LONG_LONG +#if SIZEOF_SIGNED * 2 <= SIZEOF_LONG_LONG #define OP_INT_MUL_OVF(x,y,r) \ { \ long long _lr = (long long)x * y; \ - r = (long)_lr; \ + r = (Signed)_lr; \ if (_lr != (long long)r) FAIL_OVF("integer multiplication"); \ } #else #define OP_INT_MUL_OVF(x,y,r) \ - r = op_llong_mul_ovf(x, y) /* long == long long */ + r = op_llong_mul_ovf(x, y) /* Signed == long long */ #endif #else /* HAVE_BUILTIN_OVERFLOW */ _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit