Skip to content

Commit 96bf84d

Browse files
authored
bpo-46420: Use NOTRACE_DISPATCH() in specialized opcodes (GH-30652)
1 parent b1a3446 commit 96bf84d

File tree

1 file changed

+43
-26
lines changed

1 file changed

+43
-26
lines changed

Python/ceval.c

Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2017,6 +2017,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
20172017
}
20182018

20192019
TARGET(BINARY_OP_MULTIPLY_INT) {
2020+
assert(cframe.use_tracing == 0);
20202021
PyObject *left = SECOND();
20212022
PyObject *right = TOP();
20222023
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
@@ -2030,10 +2031,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
20302031
if (prod == NULL) {
20312032
goto error;
20322033
}
2033-
DISPATCH();
2034+
NOTRACE_DISPATCH();
20342035
}
20352036

20362037
TARGET(BINARY_OP_MULTIPLY_FLOAT) {
2038+
assert(cframe.use_tracing == 0);
20372039
PyObject *left = SECOND();
20382040
PyObject *right = TOP();
20392041
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
@@ -2049,10 +2051,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
20492051
if (prod == NULL) {
20502052
goto error;
20512053
}
2052-
DISPATCH();
2054+
NOTRACE_DISPATCH();
20532055
}
20542056

20552057
TARGET(BINARY_OP_SUBTRACT_INT) {
2058+
assert(cframe.use_tracing == 0);
20562059
PyObject *left = SECOND();
20572060
PyObject *right = TOP();
20582061
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
@@ -2066,10 +2069,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
20662069
if (sub == NULL) {
20672070
goto error;
20682071
}
2069-
DISPATCH();
2072+
NOTRACE_DISPATCH();
20702073
}
20712074

20722075
TARGET(BINARY_OP_SUBTRACT_FLOAT) {
2076+
assert(cframe.use_tracing == 0);
20732077
PyObject *left = SECOND();
20742078
PyObject *right = TOP();
20752079
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
@@ -2084,10 +2088,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
20842088
if (sub == NULL) {
20852089
goto error;
20862090
}
2087-
DISPATCH();
2091+
NOTRACE_DISPATCH();
20882092
}
20892093

20902094
TARGET(BINARY_OP_ADD_UNICODE) {
2095+
assert(cframe.use_tracing == 0);
20912096
PyObject *left = SECOND();
20922097
PyObject *right = TOP();
20932098
DEOPT_IF(!PyUnicode_CheckExact(left), BINARY_OP);
@@ -2101,10 +2106,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
21012106
if (TOP() == NULL) {
21022107
goto error;
21032108
}
2104-
DISPATCH();
2109+
NOTRACE_DISPATCH();
21052110
}
21062111

21072112
TARGET(BINARY_OP_INPLACE_ADD_UNICODE) {
2113+
assert(cframe.use_tracing == 0);
21082114
PyObject *left = SECOND();
21092115
PyObject *right = TOP();
21102116
DEOPT_IF(!PyUnicode_CheckExact(left), BINARY_OP);
@@ -2129,10 +2135,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
21292135
if (TOP() == NULL) {
21302136
goto error;
21312137
}
2132-
DISPATCH();
2138+
NOTRACE_DISPATCH();
21332139
}
21342140

21352141
TARGET(BINARY_OP_ADD_FLOAT) {
2142+
assert(cframe.use_tracing == 0);
21362143
PyObject *left = SECOND();
21372144
PyObject *right = TOP();
21382145
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
@@ -2148,10 +2155,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
21482155
if (sum == NULL) {
21492156
goto error;
21502157
}
2151-
DISPATCH();
2158+
NOTRACE_DISPATCH();
21522159
}
21532160

21542161
TARGET(BINARY_OP_ADD_INT) {
2162+
assert(cframe.use_tracing == 0);
21552163
PyObject *left = SECOND();
21562164
PyObject *right = TOP();
21572165
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
@@ -2165,7 +2173,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
21652173
if (sum == NULL) {
21662174
goto error;
21672175
}
2168-
DISPATCH();
2176+
NOTRACE_DISPATCH();
21692177
}
21702178

21712179
TARGET(BINARY_SUBSCR) {
@@ -2202,6 +2210,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
22022210
}
22032211

22042212
TARGET(BINARY_SUBSCR_LIST_INT) {
2213+
assert(cframe.use_tracing == 0);
22052214
PyObject *sub = TOP();
22062215
PyObject *list = SECOND();
22072216
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
@@ -2221,10 +2230,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
22212230
Py_DECREF(sub);
22222231
SET_TOP(res);
22232232
Py_DECREF(list);
2224-
DISPATCH();
2233+
NOTRACE_DISPATCH();
22252234
}
22262235

22272236
TARGET(BINARY_SUBSCR_TUPLE_INT) {
2237+
assert(cframe.use_tracing == 0);
22282238
PyObject *sub = TOP();
22292239
PyObject *tuple = SECOND();
22302240
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
@@ -2244,10 +2254,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
22442254
Py_DECREF(sub);
22452255
SET_TOP(res);
22462256
Py_DECREF(tuple);
2247-
DISPATCH();
2257+
NOTRACE_DISPATCH();
22482258
}
22492259

22502260
TARGET(BINARY_SUBSCR_DICT) {
2261+
assert(cframe.use_tracing == 0);
22512262
PyObject *dict = SECOND();
22522263
DEOPT_IF(!PyDict_CheckExact(SECOND()), BINARY_SUBSCR);
22532264
STAT_INC(BINARY_SUBSCR, hit);
@@ -2354,6 +2365,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
23542365
}
23552366

23562367
TARGET(STORE_SUBSCR_LIST_INT) {
2368+
assert(cframe.use_tracing == 0);
23572369
PyObject *sub = TOP();
23582370
PyObject *list = SECOND();
23592371
PyObject *value = THIRD();
@@ -2374,10 +2386,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
23742386
Py_DECREF(old_value);
23752387
Py_DECREF(sub);
23762388
Py_DECREF(list);
2377-
DISPATCH();
2389+
NOTRACE_DISPATCH();
23782390
}
23792391

23802392
TARGET(STORE_SUBSCR_DICT) {
2393+
assert(cframe.use_tracing == 0);
23812394
PyObject *sub = TOP();
23822395
PyObject *dict = SECOND();
23832396
PyObject *value = THIRD();
@@ -3065,7 +3078,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
30653078
STAT_INC(LOAD_GLOBAL, hit);
30663079
Py_INCREF(res);
30673080
PUSH(res);
3068-
DISPATCH();
3081+
NOTRACE_DISPATCH();
30693082
}
30703083

30713084
TARGET(LOAD_GLOBAL_BUILTIN) {
@@ -3085,7 +3098,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
30853098
STAT_INC(LOAD_GLOBAL, hit);
30863099
Py_INCREF(res);
30873100
PUSH(res);
3088-
DISPATCH();
3101+
NOTRACE_DISPATCH();
30893102
}
30903103

30913104
TARGET(DELETE_FAST) {
@@ -3517,7 +3530,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
35173530
Py_INCREF(res);
35183531
SET_TOP(res);
35193532
Py_DECREF(owner);
3520-
DISPATCH();
3533+
NOTRACE_DISPATCH();
35213534
}
35223535

35233536
TARGET(LOAD_ATTR_MODULE) {
@@ -3528,7 +3541,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
35283541
LOAD_MODULE_ATTR_OR_METHOD(ATTR);
35293542
SET_TOP(res);
35303543
Py_DECREF(owner);
3531-
DISPATCH();
3544+
NOTRACE_DISPATCH();
35323545
}
35333546

35343547
TARGET(LOAD_ATTR_WITH_HINT) {
@@ -3556,7 +3569,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
35563569
Py_INCREF(res);
35573570
SET_TOP(res);
35583571
Py_DECREF(owner);
3559-
DISPATCH();
3572+
NOTRACE_DISPATCH();
35603573
}
35613574

35623575
TARGET(LOAD_ATTR_SLOT) {
@@ -3576,7 +3589,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
35763589
Py_INCREF(res);
35773590
SET_TOP(res);
35783591
Py_DECREF(owner);
3579-
DISPATCH();
3592+
NOTRACE_DISPATCH();
35803593
}
35813594

35823595
TARGET(STORE_ATTR_ADAPTIVE) {
@@ -3625,7 +3638,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
36253638
Py_DECREF(old_value);
36263639
}
36273640
Py_DECREF(owner);
3628-
DISPATCH();
3641+
NOTRACE_DISPATCH();
36293642
}
36303643

36313644
TARGET(STORE_ATTR_WITH_HINT) {
@@ -3660,7 +3673,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
36603673
/* PEP 509 */
36613674
dict->ma_version_tag = DICT_NEXT_VERSION();
36623675
Py_DECREF(owner);
3663-
DISPATCH();
3676+
NOTRACE_DISPATCH();
36643677
}
36653678

36663679
TARGET(STORE_ATTR_SLOT) {
@@ -3680,7 +3693,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
36803693
*(PyObject **)addr = value;
36813694
Py_XDECREF(old_value);
36823695
Py_DECREF(owner);
3683-
DISPATCH();
3696+
NOTRACE_DISPATCH();
36843697
}
36853698

36863699
TARGET(COMPARE_OP) {
@@ -4479,10 +4492,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
44794492
Py_INCREF(res);
44804493
SET_TOP(res);
44814494
PUSH(self);
4482-
DISPATCH();
4495+
NOTRACE_DISPATCH();
44834496
}
44844497

44854498
TARGET(LOAD_METHOD_NO_DICT) {
4499+
assert(cframe.use_tracing == 0);
44864500
PyObject *self = TOP();
44874501
PyTypeObject *self_cls = Py_TYPE(self);
44884502
SpecializedCacheEntry *caches = GET_CACHE();
@@ -4497,7 +4511,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
44974511
Py_INCREF(res);
44984512
SET_TOP(res);
44994513
PUSH(self);
4500-
DISPATCH();
4514+
NOTRACE_DISPATCH();
45014515
}
45024516

45034517
TARGET(LOAD_METHOD_MODULE) {
@@ -4509,7 +4523,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
45094523
SET_TOP(NULL);
45104524
Py_DECREF(owner);
45114525
PUSH(res);
4512-
DISPATCH();
4526+
NOTRACE_DISPATCH();
45134527
}
45144528

45154529
TARGET(LOAD_METHOD_CLASS) {
@@ -4532,7 +4546,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
45324546
SET_TOP(NULL);
45334547
Py_DECREF(cls);
45344548
PUSH(res);
4535-
DISPATCH();
4549+
NOTRACE_DISPATCH();
45364550
}
45374551

45384552
TARGET(PRECALL_METHOD) {
@@ -4714,6 +4728,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
47144728
}
47154729

47164730
TARGET(CALL_NO_KW_TYPE_1) {
4731+
assert(cframe.use_tracing == 0);
47174732
assert(STACK_ADJUST_IS_RESET);
47184733
assert(GET_CACHE()->adaptive.original_oparg == 1);
47194734
PyObject *obj = TOP();
@@ -4724,10 +4739,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
47244739
Py_DECREF(callable);
47254740
Py_DECREF(obj);
47264741
SET_TOP(res);
4727-
DISPATCH();
4742+
NOTRACE_DISPATCH();
47284743
}
47294744

47304745
TARGET(CALL_NO_KW_BUILTIN_CLASS_1) {
4746+
assert(cframe.use_tracing == 0);
47314747
assert(STACK_ADJUST_IS_RESET);
47324748
SpecializedCacheEntry *caches = GET_CACHE();
47334749
_PyAdaptiveEntry *cache0 = &caches[0].adaptive;
@@ -4878,6 +4894,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
48784894
}
48794895

48804896
TARGET(CALL_NO_KW_LIST_APPEND) {
4897+
assert(cframe.use_tracing == 0);
48814898
assert(_Py_OPCODE(next_instr[-2]) == PRECALL_METHOD);
48824899
assert(GET_CACHE()->adaptive.original_oparg == 1);
48834900
DEOPT_IF(extra_args == 0, CALL_NO_KW);
@@ -4899,7 +4916,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr
48994916
STACK_SHRINK(2);
49004917
SET_TOP(Py_None);
49014918
Py_DECREF(callable);
4902-
DISPATCH();
4919+
NOTRACE_DISPATCH();
49034920
}
49044921

49054922
TARGET(CALL_NO_KW_METHOD_DESCRIPTOR_O) {

0 commit comments

Comments
 (0)