[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