i += 1
opt = _testinternalcapi.get_uop_optimizer()
-
with temporary_optimizer(opt):
testfunc(10)
i += 1
opt = _testinternalcapi.get_uop_optimizer()
-
with temporary_optimizer(opt):
testfunc(10)
uops = {opname for opname, _ in ex}
self.assertIn("_POP_JUMP_IF_TRUE", uops)
+ def test_jump_backward(self):
+ def testfunc(n):
+ i = 0
+ while i < n:
+ i += 1
+ opt = _testinternalcapi.get_uop_optimizer()
+ with temporary_optimizer(opt):
+ testfunc(10)
+
+ ex = get_first_executor(testfunc)
+ self.assertIsNotNone(ex)
+ uops = {opname for opname, _ in ex}
+ self.assertIn("JUMP_TO_TOP", uops)
+
if __name__ == "__main__":
unittest.main()
#define SAVE_IP 301
#define _POP_JUMP_IF_FALSE 302
#define _POP_JUMP_IF_TRUE 303
-#define _GUARD_BOTH_INT 304
-#define _BINARY_OP_MULTIPLY_INT 305
-#define _BINARY_OP_ADD_INT 306
-#define _BINARY_OP_SUBTRACT_INT 307
-#define _GUARD_BOTH_FLOAT 308
-#define _BINARY_OP_MULTIPLY_FLOAT 309
-#define _BINARY_OP_ADD_FLOAT 310
-#define _BINARY_OP_SUBTRACT_FLOAT 311
-#define _GUARD_BOTH_UNICODE 312
-#define _BINARY_OP_ADD_UNICODE 313
-#define _LOAD_LOCALS 314
-#define _LOAD_FROM_DICT_OR_GLOBALS 315
-#define IS_NONE 316
+#define JUMP_TO_TOP 304
+#define _GUARD_BOTH_INT 305
+#define _BINARY_OP_MULTIPLY_INT 306
+#define _BINARY_OP_ADD_INT 307
+#define _BINARY_OP_SUBTRACT_INT 308
+#define _GUARD_BOTH_FLOAT 309
+#define _BINARY_OP_MULTIPLY_FLOAT 310
+#define _BINARY_OP_ADD_FLOAT 311
+#define _BINARY_OP_SUBTRACT_FLOAT 312
+#define _GUARD_BOTH_UNICODE 313
+#define _BINARY_OP_ADD_UNICODE 314
+#define _LOAD_LOCALS 315
+#define _LOAD_FROM_DICT_OR_GLOBALS 316
+#define IS_NONE 317
#ifndef NEED_OPCODE_METADATA
extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump);
[301] = "SAVE_IP",
[302] = "_POP_JUMP_IF_FALSE",
[303] = "_POP_JUMP_IF_TRUE",
- [304] = "_GUARD_BOTH_INT",
- [305] = "_BINARY_OP_MULTIPLY_INT",
- [306] = "_BINARY_OP_ADD_INT",
- [307] = "_BINARY_OP_SUBTRACT_INT",
- [308] = "_GUARD_BOTH_FLOAT",
- [309] = "_BINARY_OP_MULTIPLY_FLOAT",
- [310] = "_BINARY_OP_ADD_FLOAT",
- [311] = "_BINARY_OP_SUBTRACT_FLOAT",
- [312] = "_GUARD_BOTH_UNICODE",
- [313] = "_BINARY_OP_ADD_UNICODE",
- [314] = "_LOAD_LOCALS",
- [315] = "_LOAD_FROM_DICT_OR_GLOBALS",
- [316] = "IS_NONE",
+ [304] = "JUMP_TO_TOP",
+ [305] = "_GUARD_BOTH_INT",
+ [306] = "_BINARY_OP_MULTIPLY_INT",
+ [307] = "_BINARY_OP_ADD_INT",
+ [308] = "_BINARY_OP_SUBTRACT_INT",
+ [309] = "_GUARD_BOTH_FLOAT",
+ [310] = "_BINARY_OP_MULTIPLY_FLOAT",
+ [311] = "_BINARY_OP_ADD_FLOAT",
+ [312] = "_BINARY_OP_SUBTRACT_FLOAT",
+ [313] = "_GUARD_BOTH_UNICODE",
+ [314] = "_BINARY_OP_ADD_UNICODE",
+ [315] = "_LOAD_LOCALS",
+ [316] = "_LOAD_FROM_DICT_OR_GLOBALS",
+ [317] = "IS_NONE",
};
#endif // NEED_OPCODE_METADATA