[pypy-svn] r65110 - in pypy/branch/pyjitpl5/pypy/jit: backend/llgraph backend/test backend/x86 backend/x86/test metainterp metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Wed May 6 17:53:08 CEST 2009
Author: arigo
Date: Wed May 6 17:53:07 2009
New Revision: 65110
Modified:
pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py
pypy/branch/pyjitpl5/pypy/jit/backend/test/runner_test.py
pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py
pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py
pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py
pypy/branch/pyjitpl5/pypy/jit/backend/x86/test/test_regalloc2.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/resoperation.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py
Log:
* The operation int_abs_ovf() is actually not generated any more,
I think. At least a pypy-c translates without seeing it.
* Kill rop.INT_ABS too. Replace it with logic in the front-end only.
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py Wed May 6 17:53:07 2009
@@ -68,7 +68,6 @@
'int_is_true' : (('int',), 'bool'),
'int_neg' : (('int',), 'int'),
'int_invert' : (('int',), 'int'),
- 'int_abs' : (('int',), 'int'),
'int_add_ovf' : (('int', 'int'), 'int'),
'int_sub_ovf' : (('int', 'int'), 'int'),
'int_mul_ovf' : (('int', 'int'), 'int'),
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/test/runner_test.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/test/runner_test.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/test/runner_test.py Wed May 6 17:53:07 2009
@@ -145,7 +145,6 @@
(rop.INT_IS_TRUE, [(0, 0), (1, 1), (2, 1), (-1, 1), (minint, 1)]),
(rop.INT_NEG, [(0, 0), (123, -123), (-23127, 23127)]),
(rop.INT_INVERT, [(0, ~0), (-1, ~(-1)), (123, ~123)]),
- (rop.INT_ABS, [(0, 0), (123, 123), (-23127, 23127)]),
]:
for x, y in testcases:
res = self.execute_operation(opnum, [BoxInt(x)],
@@ -202,7 +201,7 @@
]
ops[1].suboperations = [ResOperation(rop.FAIL, [v_res], None)]
#
- if opnum in (rop.INT_NEG_OVF, rop.INT_ABS_OVF):
+ if opnum == rop.INT_NEG_OVF:
del ops[0].args[1]
loop = TreeLoop('name')
loop.operations = ops
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py Wed May 6 17:53:07 2009
@@ -315,7 +315,6 @@
for _op in [rop.INT_NEG,
rop.INT_INVERT,
- rop.INT_ABS,
]:
OPERATIONS.append(UnaryOperation(_op))
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py Wed May 6 17:53:07 2009
@@ -505,18 +505,6 @@
self.mc.MOV(resloc, imm8(0))
self.mc.SETNZ(lower_byte(resloc))
- def genop_int_abs(self, op, arglocs, resloc):
- argloc = arglocs[0]
- tmploc = arglocs[1]
- assert resloc != argloc and resloc != tmploc
- self.mc.MOV(resloc, argloc)
- # ABS-computing code from Psyco, found by exhaustive search
- # on *all* short sequences of operations :-)
- self.mc.ADD(resloc, resloc)
- self.mc.SBB(resloc, argloc)
- self.mc.SBB(tmploc, tmploc)
- self.mc.XOR(resloc, tmploc)
-
def genop_guard_oononnull(self, op, guard_op, addr, arglocs, resloc):
loc = arglocs[0]
self.mc.TEST(loc, loc)
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py Wed May 6 17:53:07 2009
@@ -1021,15 +1021,6 @@
self.eventually_free_var(op.args[0])
self.Perform(op, [argloc], resloc)
- def consider_int_abs(self, op, ignored):
- argloc = self.make_sure_var_in_reg(op.args[0], [])
- tmpvar = TempBox()
- tmploc = self.force_allocate_reg(tmpvar, [op.args[0]])
- resloc = self.force_allocate_reg(op.result, [op.args[0], tmpvar])
- self.Perform(op, [argloc, tmploc], resloc)
- self.eventually_free_var(op.args[0])
- self.eventually_free_var(tmpvar)
-
def _consider_nullity(self, op, guard_op):
# doesn't need a register in arg
if guard_op is not None:
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/x86/test/test_regalloc2.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/x86/test/test_regalloc2.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/x86/test/test_regalloc2.py Wed May 6 17:53:07 2009
@@ -117,7 +117,7 @@
ResOperation(rop.INT_OR, [ConstInt(-4), v25], v26),
ResOperation(rop.INT_INVERT, [v8], v27),
ResOperation(rop.INT_SUB, [ConstInt(-113), v11], v28),
- ResOperation(rop.INT_ABS, [v7], v29),
+ ResOperation(rop.INT_NEG, [v7], v29),
ResOperation(rop.INT_NEG, [v24], v30),
ResOperation(rop.INT_FLOORDIV, [v3, ConstInt(53)], v31),
ResOperation(rop.INT_MUL, [v28, v27], v32),
@@ -224,7 +224,7 @@
ResOperation(rop.UINT_RSHIFT, [v14, tmp42], v18),
ResOperation(rop.INT_AND, [v14, ConstInt(31)], tmp43),
ResOperation(rop.INT_LSHIFT, [ConstInt(7), tmp43], v19),
- ResOperation(rop.INT_ABS, [v19], v20),
+ ResOperation(rop.INT_NEG, [v19], v20),
ResOperation(rop.INT_MOD, [v3, ConstInt(1)], v21),
ResOperation(rop.UINT_GE, [v15, v1], v22),
ResOperation(rop.INT_AND, [v16, ConstInt(31)], tmp44),
@@ -236,17 +236,17 @@
ResOperation(rop.INT_EQ, [v9, v15], v27),
ResOperation(rop.INT_GE, [ConstInt(0), v6], v28),
ResOperation(rop.INT_NEG, [v15], v29),
- ResOperation(rop.INT_ABS, [v22], v30),
+ ResOperation(rop.INT_NEG, [v22], v30),
ResOperation(rop.INT_ADD, [v7, v16], v31),
ResOperation(rop.UINT_LT, [v19, v19], v32),
ResOperation(rop.INT_ADD, [v2, ConstInt(1)], v33),
- ResOperation(rop.INT_ABS, [v5], v34),
+ ResOperation(rop.INT_NEG, [v5], v34),
ResOperation(rop.INT_ADD, [v17, v24], v35),
ResOperation(rop.UINT_LT, [ConstInt(2), v16], v36),
- ResOperation(rop.INT_ABS, [v9], v37),
+ ResOperation(rop.INT_NEG, [v9], v37),
ResOperation(rop.INT_GT, [v4, v11], v38),
ResOperation(rop.INT_LT, [v27, v22], v39),
- ResOperation(rop.INT_ABS, [v27], v40),
+ ResOperation(rop.INT_NEG, [v27], v40),
ResOperation(rop.FAIL, [v40, v10, v36, v26, v13, v30, v21, v33, v18, v25, v31, v32, v28, v29, v35, v38, v20, v39, v34, v23, v37], None),
]
cpu = CPU(None, None)
@@ -267,7 +267,7 @@
assert cpu.get_latest_value_int(2) == 1
assert cpu.get_latest_value_int(3) == 131072
assert cpu.get_latest_value_int(4) == 20
- assert cpu.get_latest_value_int(5) == 1
+ assert cpu.get_latest_value_int(5) == -1
assert cpu.get_latest_value_int(6) == 0
assert cpu.get_latest_value_int(7) == -19
assert cpu.get_latest_value_int(8) == 6
@@ -278,52 +278,8 @@
assert cpu.get_latest_value_int(13) == 2
assert cpu.get_latest_value_int(14) == 2
assert cpu.get_latest_value_int(15) == 1
- assert cpu.get_latest_value_int(16) == 57344
+ assert cpu.get_latest_value_int(16) == -57344
assert cpu.get_latest_value_int(17) == 1
- assert cpu.get_latest_value_int(18) == 1
+ assert cpu.get_latest_value_int(18) == -1
assert cpu.get_latest_value_int(19) == -2147483648
- assert cpu.get_latest_value_int(20) == 49
-
-def test_bug_2():
- v1 = BoxInt()
- v2 = BoxInt()
- v3 = BoxInt()
- v4 = BoxInt()
- v5 = BoxInt()
- v6 = BoxInt()
- v7 = BoxInt()
- v8 = BoxInt()
- v9 = BoxInt()
- v10 = BoxInt()
- v11 = BoxInt()
- v12 = BoxInt()
- v13 = BoxInt()
- v14 = BoxInt()
- tmp21 = BoxInt()
- loop = TreeLoop('test')
- loop.inputargs = [v1, v2, v3, v4, v5, v6, v7, v8, v9, v10]
- loop.operations = [
- ResOperation(rop.INT_IS_TRUE, [v4], tmp21),
- ResOperation(rop.BOOL_NOT, [tmp21], v11),
- ResOperation(rop.INT_NEG, [v6], v12),
- ResOperation(rop.UINT_LT, [v10, v10], v13),
- ResOperation(rop.INT_ABS_OVF, [v5], v14),
- ResOperation(rop.GUARD_NO_EXCEPTION, [], None),
- ResOperation(rop.FAIL, [v11, v14], None),
- ]
- loop.operations[-2].suboperations = [ResOperation(rop.FAIL, [], None)]
- cpu = CPU(None, None)
- cpu.compile_operations(loop)
- cpu.set_future_value_int(0, 5)
- cpu.set_future_value_int(1, -3)
- cpu.set_future_value_int(2, -84)
- cpu.set_future_value_int(3, 2)
- cpu.set_future_value_int(4, -12)
- cpu.set_future_value_int(5, -3)
- cpu.set_future_value_int(6, 15)
- cpu.set_future_value_int(7, -17)
- cpu.set_future_value_int(8, -23)
- cpu.set_future_value_int(9, 6)
- cpu.execute_operations(loop)
- assert cpu.get_latest_value_int(0) == 0
- assert cpu.get_latest_value_int(1) == 12
+ assert cpu.get_latest_value_int(20) == -49
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py Wed May 6 17:53:07 2009
@@ -656,10 +656,6 @@
self.var_position(op.args[1]))
self.default_serialize_op(op, 'int_floordiv')
- def serialize_op_int_abs_ovf(self, op):
- self.emit('int_neg_ovf', [self.var_position(op.args[0])])
- self.default_serialize_op(op, 'int_abs')
-
def serialize_op_hint(self, op):
hints = op.args[1].value
if hints.get('promote') and op.args[0].concretetype is not lltype.Void:
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py Wed May 6 17:53:07 2009
@@ -53,9 +53,6 @@
v = r_uint(args[0].getint()) >> r_uint(args[1].getint())
return ConstInt(intmask(v))
-def do_int_abs(cpu, args, descr=None):
- return ConstInt(intmask(abs(args[0].getint())))
-
# ----------
def do_int_lt(cpu, args, descr=None):
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py Wed May 6 17:53:07 2009
@@ -277,7 +277,6 @@
for _opimpl in ['int_is_true', 'int_neg', 'int_invert', 'bool_not',
'cast_ptr_to_int', 'cast_int_to_ptr',
- 'int_abs',
]:
exec py.code.Source('''
@arguments("box")
@@ -437,6 +436,16 @@
self.metainterp.cpu.set_overflow_error()
return self.metainterp.handle_exception()
+ @arguments("orgpc", "box")
+ def opimpl_int_abs(self, pc, box):
+ nonneg = self.metainterp.execute_and_record(
+ rop.INT_GE, [box, ConstInt(0)])
+ nonneg = self.implement_guard_value(pc, nonneg)
+ if nonneg.getint():
+ self.make_result_box(box)
+ else:
+ self.execute(rop.INT_NEG, [box])
+
@arguments("box")
def opimpl_ptr_nonzero(self, box):
self.execute(rop.OONONNULL, [box])
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/resoperation.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/resoperation.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/resoperation.py Wed May 6 17:53:07 2009
@@ -137,7 +137,6 @@
INT_NEG = 61
INT_INVERT = 62
BOOL_NOT = 63
- INT_ABS = 65
#
OONONNULL = 70
OOISNULL = 71
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py Wed May 6 17:53:07 2009
@@ -408,6 +408,14 @@
res = self.meta_interp(f, [20, 1, 2])
assert res == 0
+ def test_abs(self):
+ def f(x):
+ return abs(x)
+ res = self.interp_operations(f, [-17])
+ assert res == 17
+ res = self.interp_operations(f, [4141])
+ assert res == 4141
+
def test_print(self):
myjitdriver = JitDriver(greens = [], reds = ['n'])
def f(n):
More information about the Pypy-commit
mailing list