Author: Armin Rigo <[email protected]>
Branch: conditional_call_value_4
Changeset: r88574:507376cf760c
Date: 2016-11-23 11:25 +0100
http://bitbucket.org/pypy/pypy/changeset/507376cf760c/
Log: Pass tests
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
@@ -596,6 +596,18 @@
op = op.copy_and_change(opnum, args=op.getarglist()[1:])
return self.emit(op)
+ def optimize_COND_CALL_VALUE_I(self, op):
+ info = self.getnullness(op.getarg(0))
+ if info == INFO_NONNULL:
+ self.make_equal_to(op, op.getarg(0))
+ self.last_emitted_operation = REMOVED
+ return
+ if info == INFO_NULL:
+ opnum = OpHelpers.call_for_type(op.type)
+ op = self.replace_op_with(op, opnum, args=op.getarglist()[1:])
+ return self.emit(op)
+ optimize_COND_CALL_VALUE_R = optimize_COND_CALL_VALUE_I
+
def _optimize_nullness(self, op, box, expect_nonnull):
info = self.getnullness(box)
if info == INFO_NONNULL:
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -8674,6 +8674,59 @@
"""
self.optimize_loop(ops, expected)
+ def test_cond_call_with_a_constant_i(self):
+ ops = """
+ [p1]
+ i2 = cond_call_value_i(0, 123, p1, descr=plaincalldescr)
+ escape_n(i2)
+ jump(p1)
+ """
+ expected = """
+ [p1]
+ i2 = call_i(123, p1, descr=plaincalldescr)
+ escape_n(i2)
+ jump(p1)
+ """
+ self.optimize_loop(ops, expected)
+
+ def test_cond_call_with_a_constant_i2(self):
+ ops = """
+ [p1]
+ i2 = cond_call_value_i(12, 123, p1, descr=plaincalldescr)
+ escape_n(i2)
+ jump(p1)
+ """
+ expected = """
+ [p1]
+ escape_n(12)
+ jump(p1)
+ """
+ self.optimize_loop(ops, expected)
+
+ def test_cond_call_r1(self):
+ ops = """
+ [p1]
+ p2 = cond_call_value_r(p1, 123, p1, descr=plain_r_calldescr)
+ jump(p2)
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_cond_call_r2(self):
+ ops = """
+ [p1]
+ guard_nonnull(p1) []
+ p2 = cond_call_value_r(p1, 123, p1, descr=plain_r_calldescr)
+ p3 = escape_r(p2)
+ jump(p3)
+ """
+ expected = """
+ [p1]
+ guard_nonnull(p1) []
+ p3 = escape_r(p1)
+ jump(p3)
+ """
+ self.optimize_loop(ops, expected)
+
def test_hippyvm_unroll_bug(self):
ops = """
[p0, i1, i2]
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -438,6 +438,10 @@
oopspecindex=EffectInfo.OS_INT_PY_MOD)
int_py_mod_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT, ei)
+ FUNC = lltype.FuncType([], llmemory.GCREF)
+ ei = EffectInfo([], [], [], [], [], [], EffectInfo.EF_ELIDABLE_CAN_RAISE)
+ plain_r_calldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT, ei)
+
namespace = locals()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit