Skip to content

Commit 5c429b6

Browse files
Rename things to make things clearer
1 parent 16f9dee commit 5c429b6

File tree

5 files changed

+41
-42
lines changed

5 files changed

+41
-42
lines changed

Include/internal/pycore_optimizer.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ typedef enum _JitSymType {
180180
JIT_SYM_TRUTHINESS_TAG = 9,
181181
} JitSymType;
182182

183-
#define DONT_SKIP_REFCOUNT 0
184-
#define SKIP_REFCOUNT 1
183+
#define WE_MIGHT_BE_THE_ONLY_STRONG_REF 0
184+
#define SOMEONE_ELSE_HAS_A_VALID_STRONG_REF 1
185185

186186
typedef struct _jit_opt_known_class {
187187
struct {
@@ -231,11 +231,9 @@ typedef struct {
231231
typedef union _jit_opt_symbol {
232232
struct {
233233
uint8_t tag;
234-
// Whether this object skips refcount on the stack
235-
// (using the _PyStackRef API), or not.
236-
// 0 - normal refcounting
237-
// 1 - skip refcounting
238-
int8_t skip_refcount;
234+
// Whether this object has a strong reference
235+
// being held to it by someone else.
236+
int8_t strong_ref_held_by_someone_else;
239237
};
240238
JitOptKnownClass cls;
241239
JitOptKnownValue value;
@@ -308,9 +306,9 @@ extern JitOptSymbol *_Py_uop_sym_tuple_getitem(JitOptContext *ctx, JitOptSymbol
308306
extern int _Py_uop_sym_tuple_length(JitOptSymbol *sym);
309307
extern JitOptSymbol *_Py_uop_sym_new_truthiness(JitOptContext *ctx, JitOptSymbol *value, bool truthy);
310308

311-
extern void _Py_uop_sym_set_dont_skip_refcount(JitOptContext *ctx, JitOptSymbol *sym);
312-
extern bool _Py_uop_sym_is_skip_refcount(JitOptContext *ctx, JitOptSymbol *sym);
313-
extern void _Py_uop_sym_set_skip_refcount(JitOptContext *ctx, JitOptSymbol *sym);
309+
extern void _Py_uop_sym_set_strong_ref_might_be_this_sym(JitOptContext *ctx, JitOptSymbol *sym);
310+
extern bool _Py_uop_sym_is_strong_ref_held_by_someone_else(JitOptContext *ctx, JitOptSymbol *sym);
311+
extern void _Py_uop_sym_set_strong_ref_is_held_by_someone_else(JitOptContext *ctx, JitOptSymbol *sym);
314312

315313
extern void _Py_uop_abstractcontext_init(JitOptContext *ctx);
316314
extern void _Py_uop_abstractcontext_fini(JitOptContext *ctx);

Python/optimizer_analysis.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,9 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer,
342342
#define sym_tuple_length _Py_uop_sym_tuple_length
343343
#define sym_is_immortal _Py_uop_sym_is_immortal
344344
#define sym_new_truthiness _Py_uop_sym_new_truthiness
345-
#define sym_set_skip_refcount _Py_uop_sym_set_skip_refcount
346-
#define sym_set_dont_skip_refcount _Py_uop_sym_set_dont_skip_refcount
347-
#define sym_is_skip_refcount _Py_uop_sym_is_skip_refcount
345+
#define sym_set_strong_ref_is_held_by_someone_else _Py_uop_sym_set_strong_ref_is_held_by_someone_else
346+
#define sym_set_strong_ref_might_be_this_sym _Py_uop_sym_set_strong_ref_might_be_this_sym
347+
#define sym_is_strong_ref_held_by_someone_else _Py_uop_sym_is_strong_ref_held_by_someone_else
348348

349349
static int
350350
optimize_to_bool(

Python/optimizer_bytecodes.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,24 +80,24 @@ dummy_func(void) {
8080
if (sym_is_null(value)) {
8181
ctx->done = true;
8282
}
83-
sym_set_dont_skip_refcount(ctx, value);
83+
sym_set_strong_ref_might_be_this_sym(ctx, value);
8484
}
8585

8686
op(_LOAD_FAST, (-- value)) {
8787
value = GETLOCAL(oparg);
88-
sym_set_dont_skip_refcount(ctx, value);
88+
sym_set_strong_ref_might_be_this_sym(ctx, value);
8989
}
9090

9191
op(_LOAD_FAST_BORROW, (-- value)) {
9292
value = GETLOCAL(oparg);
93-
sym_set_skip_refcount(ctx, value);
93+
sym_set_strong_ref_is_held_by_someone_else(ctx, value);
9494
}
9595

9696
op(_LOAD_FAST_AND_CLEAR, (-- value)) {
9797
value = GETLOCAL(oparg);
9898
JitOptSymbol *temp = sym_new_null(ctx);
9999
GETLOCAL(oparg) = temp;
100-
sym_set_dont_skip_refcount(ctx, value);
100+
sym_set_strong_ref_might_be_this_sym(ctx, value);
101101
}
102102

103103
op(_STORE_FAST, (value --)) {
@@ -301,7 +301,7 @@ dummy_func(void) {
301301
res = sym_new_type(ctx, &PyFloat_Type);
302302
}
303303
// TODO (gh-134584): Move this to the optimizer generator.
304-
if (sym_is_skip_refcount(ctx, left) && sym_is_skip_refcount(ctx, right)) {
304+
if (sym_is_strong_ref_held_by_someone_else(ctx, left) && sym_is_strong_ref_held_by_someone_else(ctx, right)) {
305305
REPLACE_OP(this_instr, op_without_decref_inputs[opcode], oparg, 0);
306306
}
307307
}
@@ -325,7 +325,7 @@ dummy_func(void) {
325325
res = sym_new_type(ctx, &PyFloat_Type);
326326
}
327327
// TODO (gh-134584): Move this to the optimizer generator.
328-
if (sym_is_skip_refcount(ctx, left) && sym_is_skip_refcount(ctx, right)) {
328+
if (sym_is_strong_ref_held_by_someone_else(ctx, left) && sym_is_strong_ref_held_by_someone_else(ctx, right)) {
329329
REPLACE_OP(this_instr, op_without_decref_inputs[opcode], oparg, 0);
330330
}
331331
}
@@ -349,7 +349,7 @@ dummy_func(void) {
349349
res = sym_new_type(ctx, &PyFloat_Type);
350350
}
351351
// TODO (gh-134584): Move this to the optimizer generator.
352-
if (sym_is_skip_refcount(ctx, left) && sym_is_skip_refcount(ctx, right)) {
352+
if (sym_is_strong_ref_held_by_someone_else(ctx, left) && sym_is_strong_ref_held_by_someone_else(ctx, right)) {
353353
REPLACE_OP(this_instr, op_without_decref_inputs[opcode], oparg, 0);
354354
}
355355
}

Python/optimizer_cases.c.h

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/optimizer_symbols.c

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ sym_new(JitOptContext *ctx)
9999
}
100100
ctx->t_arena.ty_curr_number++;
101101
self->tag = JIT_SYM_UNKNOWN_TAG;
102-
self->skip_refcount = DONT_SKIP_REFCOUNT;
102+
self->strong_ref_held_by_someone_else = WE_MIGHT_BE_THE_ONLY_STRONG_REF;
103103
return self;
104104
}
105105

@@ -109,7 +109,7 @@ static void make_const(JitOptSymbol *sym, PyObject *val)
109109
sym->value.value = Py_NewRef(val);
110110
// Constants don't need to be refcounted, as they are always
111111
// kept alive by co_consts.
112-
sym->skip_refcount = SKIP_REFCOUNT;
112+
sym->strong_ref_held_by_someone_else = SOMEONE_ELSE_HAS_A_VALID_STRONG_REF;
113113
}
114114

115115
static inline void
@@ -386,22 +386,23 @@ _Py_uop_sym_set_non_null(JitOptContext *ctx, JitOptSymbol *sym)
386386
}
387387

388388
void
389-
_Py_uop_sym_set_skip_refcount(JitOptContext *ctx, JitOptSymbol *sym)
389+
_Py_uop_sym_set_strong_ref_is_held_by_someone_else(JitOptContext *ctx, JitOptSymbol *sym)
390390
{
391-
sym->skip_refcount = SKIP_REFCOUNT;
391+
sym->strong_ref_held_by_someone_else = SOMEONE_ELSE_HAS_A_VALID_STRONG_REF;
392392
}
393393

394394
void
395-
_Py_uop_sym_set_dont_skip_refcount(JitOptContext *ctx, JitOptSymbol *sym)
395+
_Py_uop_sym_set_strong_ref_might_be_this_sym(JitOptContext *ctx, JitOptSymbol *sym)
396396
{
397-
sym->skip_refcount = DONT_SKIP_REFCOUNT;
397+
sym->strong_ref_held_by_someone_else = WE_MIGHT_BE_THE_ONLY_STRONG_REF;
398398
}
399399

400400
bool
401-
_Py_uop_sym_is_skip_refcount(JitOptContext *ctx, JitOptSymbol *sym)
401+
_Py_uop_sym_is_strong_ref_held_by_someone_else(JitOptContext *ctx, JitOptSymbol *sym)
402402
{
403-
assert(sym->skip_refcount == SKIP_REFCOUNT || sym->skip_refcount == DONT_SKIP_REFCOUNT);
404-
return sym->skip_refcount == SKIP_REFCOUNT;
403+
assert(sym->strong_ref_held_by_someone_else == SOMEONE_ELSE_HAS_A_VALID_STRONG_REF ||
404+
sym->strong_ref_held_by_someone_else == WE_MIGHT_BE_THE_ONLY_STRONG_REF);
405+
return sym->strong_ref_held_by_someone_else == SOMEONE_ELSE_HAS_A_VALID_STRONG_REF;
405406
}
406407

407408

@@ -794,7 +795,7 @@ _Py_uop_symbols_test(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
794795
if (sym == NULL) {
795796
goto fail;
796797
}
797-
TEST_PREDICATE(!_Py_uop_sym_is_skip_refcount(ctx, sym), "top is refcounted");
798+
TEST_PREDICATE(!_Py_uop_sym_is_strong_ref_held_by_someone_else(ctx, sym), "top is refcounted");
798799
TEST_PREDICATE(!_Py_uop_sym_is_null(sym), "top is NULL");
799800
TEST_PREDICATE(!_Py_uop_sym_is_not_null(sym), "top is not NULL");
800801
TEST_PREDICATE(!_Py_uop_sym_matches_type(sym, &PyLong_Type), "top matches a type");
@@ -843,7 +844,7 @@ _Py_uop_symbols_test(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
843844
goto fail;
844845
}
845846
_Py_uop_sym_set_const(ctx, sym, val_42);
846-
TEST_PREDICATE(_Py_uop_sym_is_skip_refcount(ctx, sym), "42 isn't refcounted");
847+
TEST_PREDICATE(_Py_uop_sym_is_strong_ref_held_by_someone_else(ctx, sym), "42 isn't refcounted");
847848
TEST_PREDICATE(_Py_uop_sym_truthiness(ctx, sym) == 1, "bool(42) is not True");
848849
TEST_PREDICATE(!_Py_uop_sym_is_null(sym), "42 is NULL");
849850
TEST_PREDICATE(_Py_uop_sym_is_not_null(sym), "42 isn't not NULL");
@@ -876,12 +877,12 @@ _Py_uop_symbols_test(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
876877
if (sym == NULL) {
877878
goto fail;
878879
}
879-
TEST_PREDICATE(!_Py_uop_sym_is_skip_refcount(ctx, sym), "type should be refcounted");
880-
_Py_uop_sym_set_skip_refcount(ctx, sym);
881-
TEST_PREDICATE(_Py_uop_sym_is_skip_refcount(ctx, sym), "type should not be refcounted");
880+
TEST_PREDICATE(!_Py_uop_sym_is_strong_ref_held_by_someone_else(ctx, sym), "type should be refcounted");
881+
_Py_uop_sym_set_strong_ref_is_held_by_someone_else(ctx, sym);
882+
TEST_PREDICATE(_Py_uop_sym_is_strong_ref_held_by_someone_else(ctx, sym), "type should not be refcounted");
882883

883884
sym = _Py_uop_sym_new_const(ctx, Py_None);
884-
TEST_PREDICATE(_Py_uop_sym_is_skip_refcount(ctx, sym), "None should not be refcounted");
885+
TEST_PREDICATE(_Py_uop_sym_is_strong_ref_held_by_someone_else(ctx, sym), "None should not be refcounted");
885886
TEST_PREDICATE(_Py_uop_sym_truthiness(ctx, sym) == 0, "bool(None) is not False");
886887
sym = _Py_uop_sym_new_const(ctx, Py_False);
887888
TEST_PREDICATE(_Py_uop_sym_truthiness(ctx, sym) == 0, "bool(False) is not False");

0 commit comments

Comments
 (0)