Author: Carl Friedrich Bolz <cfb...@gmx.de> Branch: guard-compatible Changeset: r83001:889f0fd17c1a Date: 2016-03-12 22:47 +0100 http://bitbucket.org/pypy/pypy/changeset/889f0fd17c1a/
Log: support for promote_compatible in the codewriter diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py --- a/rpython/jit/codewriter/jtransform.py +++ b/rpython/jit/codewriter/jtransform.py @@ -591,6 +591,14 @@ if hints.get('force_no_const'): # for tests only assert getkind(op.args[0].concretetype) == 'int' return SpaceOperation('int_same_as', [op.args[0]], op.result) + if hints.get('promote_compatible') and op.args[0].concretetype is not lltype.Void: + kind = getkind(op.args[0].concretetype) + assert kind == "ref" # for now + op0 = SpaceOperation('-live-', [], None) + op1 = SpaceOperation('%s_guard_compatible' % kind, [op.args[0]], None) + # the special return value None forces op.result to be considered + # equal to op.args[0] + return [op0, op1, None] log.WARNING('ignoring hint %r at %r' % (hints, self.graph)) def _rewrite_raw_malloc(self, op, name, args): diff --git a/rpython/jit/codewriter/test/test_jtransform.py b/rpython/jit/codewriter/test/test_jtransform.py --- a/rpython/jit/codewriter/test/test_jtransform.py +++ b/rpython/jit/codewriter/test/test_jtransform.py @@ -941,6 +941,23 @@ assert block.operations[1].result is None assert block.exits[0].args == [v1] +def test_guard_compatible(): + S = lltype.GcStruct('S', ('x', lltype.Char)) # some ptr type + v1 = varoftype(lltype.Ptr(S)) + v2 = varoftype(lltype.Ptr(S)) + op = SpaceOperation('hint', + [v1, Constant({'promote_compatible': True}, lltype.Void)], + v2) + oplist = Transformer().rewrite_operation(op) + op0, op1, op2 = oplist + assert op0.opname == '-live-' + assert op0.args == [] + assert op1.opname == 'ref_guard_compatible' + assert op1.args == [v1] + assert op1.result is None + assert op2 is None + + def test_jit_merge_point_1(): class FakeJitDriverSD: index = 42 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit