Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r65780:0a06c71baefa Date: 2013-07-29 14:58 +0200 http://bitbucket.org/pypy/pypy/changeset/0a06c71baefa/
Log: A random test for COND_CALL. It can fail so far. diff --git a/rpython/jit/backend/test/test_ll_random.py b/rpython/jit/backend/test/test_ll_random.py --- a/rpython/jit/backend/test/test_ll_random.py +++ b/rpython/jit/backend/test/test_ll_random.py @@ -502,6 +502,7 @@ # 3. raising call and wrong guard_exception # 4. raising call and guard_no_exception # 5. non raising call and guard_exception +# (6. test of a cond_call, always non-raising and guard_no_exception) class BaseCallOperation(test_random.AbstractOperation): def non_raising_func_code(self, builder, r): @@ -648,6 +649,34 @@ builder.guard_op = op builder.loop.operations.append(op) +# 6. a conditional call (for now always with no exception raised) +class CondCallOperation(BaseCallOperation): + def produce_into(self, builder, r): + fail_subset = builder.subset_of_intvars(r) + v_cond = builder.get_bool_var(r) + subset = builder.subset_of_intvars(r)[:4] + for i in range(len(subset)): + if r.random() < 0.35: + subset[i] = ConstInt(r.random_integer()) + # + seen = [] + def call_me(*args): + if len(seen) == 0: + seen.append(args) + else: + assert seen[0] == args + # + TP = lltype.FuncType([lltype.Signed] * len(subset), lltype.Void) + ptr = llhelper(lltype.Ptr(TP), call_me) + c_addr = ConstAddr(llmemory.cast_ptr_to_adr(ptr), builder.cpu) + args = [v_cond, c_addr] + subset + descr = self.getcalldescr(builder, TP) + self.put(builder, args, descr) + op = ResOperation(rop.GUARD_NO_EXCEPTION, [], None, + descr=builder.getfaildescr()) + op.setfailargs(fail_subset) + builder.loop.operations.append(op) + # ____________________________________________________________ OPERATIONS = test_random.OPERATIONS[:] @@ -684,6 +713,7 @@ OPERATIONS.append(RaisingCallOperationGuardNoException(rop.CALL)) OPERATIONS.append(RaisingCallOperationWrongGuardException(rop.CALL)) OPERATIONS.append(CallOperationException(rop.CALL)) + OPERATIONS.append(CondCallOperation(rop.COND_CALL)) OPERATIONS.append(GuardNonNullClassOperation(rop.GUARD_NONNULL_CLASS)) LLtypeOperationBuilder.OPERATIONS = OPERATIONS _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit