Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de>
Branch: 
Changeset: r94178:fe40f4eff666
Date: 2018-03-30 08:28 +0200
http://bitbucket.org/pypy/pypy/changeset/fe40f4eff666/

Log:    test and fix: in the on_abort hook, the descrs of guards are still
        None as it runs before optimization

diff --git a/pypy/module/pypyjit/interp_resop.py 
b/pypy/module/pypyjit/interp_resop.py
--- a/pypy/module/pypyjit/interp_resop.py
+++ b/pypy/module/pypyjit/interp_resop.py
@@ -113,22 +113,27 @@
             ofs = ops_offset.get(op, 0)
         num = op.getopnum()
         name = op.getopname()
+        repr = logops.repr_of_resop(op)
         if num == rop.DEBUG_MERGE_POINT:
             jd_sd = jitdrivers_sd[op.getarg(0).getint()]
             greenkey = op.getarglist()[3:]
             repr = jd_sd.warmstate.get_location_str(greenkey)
             w_greenkey = wrap_greenkey(space, jd_sd.jitdriver, greenkey, repr)
             l_w.append(DebugMergePoint(space, name,
-                                       logops.repr_of_resop(op),
+                                       repr,
                                        jd_sd.jitdriver.name,
                                        op.getarg(1).getint(),
                                        op.getarg(2).getint(),
                                        w_greenkey))
         elif op.is_guard():
-            l_w.append(GuardOp(name, ofs, logops.repr_of_resop(op),
-                op.getdescr().get_jitcounter_hash()))
+            descr = op.getdescr()
+            if descr is not None: # can be none in on_abort!
+                hash = op.getdescr().get_jitcounter_hash()
+            else:
+                hash = -1
+            l_w.append(GuardOp(name, ofs, repr, hash))
         else:
-            l_w.append(WrappedOp(name, ofs, logops.repr_of_resop(op)))
+            l_w.append(WrappedOp(name, ofs, repr))
     return l_w
 
 @unwrap_spec(offset=int, repr='text', name='text')
diff --git a/pypy/module/pypyjit/test/test_jit_hook.py 
b/pypy/module/pypyjit/test/test_jit_hook.py
--- a/pypy/module/pypyjit/test/test_jit_hook.py
+++ b/pypy/module/pypyjit/test/test_jit_hook.py
@@ -65,6 +65,17 @@
             if i != 1:
                 offset[op] = i
 
+        oplist_no_descrs = parse("""
+        [i1, i2, p2]
+        i3 = int_add(i1, i2)
+        debug_merge_point(0, 0, 0, 0, 0, ConstPtr(ptr0))
+        guard_nonnull(p2) []
+        guard_true(i3) []
+        """, namespace={'ptr0': code_gcref}).operations
+        for op in oplist_no_descrs:
+            if op.is_guard():
+                op.setdescr(None)
+
         class FailDescr(BasicFailDescr):
             def get_jitcounter_hash(self):
                 from rpython.rlib.rarithmetic import r_uint
@@ -101,7 +112,8 @@
         def interp_on_abort():
             if pypy_hooks.are_hooks_enabled():
                 pypy_hooks.on_abort(Counters.ABORT_TOO_LONG, pypyjitdriver,
-                                    greenkey, 'blah', Logger(MockSD), [])
+                                    greenkey, 'blah', Logger(MockSD),
+                                    cls.oplist_no_descrs)
 
         space = cls.space
         cls.w_on_compile = space.wrap(interp2app(interp_on_compile))
@@ -111,10 +123,12 @@
         cls.w_dmp_num = space.wrap(rop.DEBUG_MERGE_POINT)
         cls.w_on_optimize = space.wrap(interp2app(interp_on_optimize))
         cls.orig_oplist = oplist
+        cls.orig_oplist_no_descrs = oplist_no_descrs
         cls.w_sorted_keys = space.wrap(sorted(Counters.counter_names))
 
     def setup_method(self, meth):
         self.__class__.oplist = self.orig_oplist[:]
+        self.__class__.oplist_no_descrs = self.orig_oplist_no_descrs[:]
 
     def test_on_compile(self):
         import pypyjit
@@ -223,7 +237,11 @@
 
         pypyjit.set_abort_hook(hook)
         self.on_abort()
-        assert l == [('pypyjit', 'ABORT_TOO_LONG', [])]
+        assert len(l) == 1
+        name, reason, ops = l[0]
+        assert name == 'pypyjit'
+        assert reason == 'ABORT_TOO_LONG'
+        assert len(ops) == 4
 
     def test_creation(self):
         from pypyjit import ResOperation
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to