uops = {opname for opname, _ in ex}
self.assertIn("_POP_JUMP_IF_FALSE", uops)
+ def test_pop_jump_if_none(self):
+ def testfunc(a):
+ for x in a:
+ if x is None:
+ x = 0
+
+ opt = _testinternalcapi.get_uop_optimizer()
+ with temporary_optimizer(opt):
+ testfunc([1, 2, 3])
+
+ ex = get_first_executor(testfunc)
+ self.assertIsNotNone(ex)
+ uops = {opname for opname, _ in ex}
+ self.assertIn("_POP_JUMP_IF_TRUE", uops)
+
+ def test_pop_jump_if_not_none(self):
+ def testfunc(a):
+ for x in a:
+ if x is not None:
+ x = 0
+
+ opt = _testinternalcapi.get_uop_optimizer()
+ with temporary_optimizer(opt):
+ testfunc([1, 2, 3])
+
+ ex = get_first_executor(testfunc)
+ self.assertIsNotNone(ex)
+ uops = {opname for opname, _ in ex}
+ self.assertIn("_POP_JUMP_IF_FALSE", uops)
+
def test_pop_jump_if_true(self):
def testfunc(n):
i = 0
switch (opcode) {
+ case POP_JUMP_IF_NONE:
+ {
+ RESERVE(2, 2);
+ ADD_TO_TRACE(IS_NONE, 0);
+ opcode = POP_JUMP_IF_TRUE;
+ goto pop_jump_if_bool;
+ }
+
+ case POP_JUMP_IF_NOT_NONE:
+ {
+ RESERVE(2, 2);
+ ADD_TO_TRACE(IS_NONE, 0);
+ opcode = POP_JUMP_IF_FALSE;
+ goto pop_jump_if_bool;
+ }
+
case POP_JUMP_IF_FALSE:
case POP_JUMP_IF_TRUE:
{
+pop_jump_if_bool:
// Assume jump unlikely (TODO: handle jump likely case)
RESERVE(1, 2);
_Py_CODEUNIT *target_instr =