-
-
Notifications
You must be signed in to change notification settings - Fork 33.6k
Open
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-JITtype-featureA feature request or enhancementA feature request or enhancement
Description
Feature or enhancement
Proposal:
_Py_uop_sym_is_const and _Py_uop_sym_get_const are almost identical. The only difference AFAICS is the return type:
cpython/Python/optimizer_symbols.c
Lines 106 to 122 in 1550c30
| bool | |
| _Py_uop_sym_is_const(JitOptContext *ctx, JitOptSymbol *sym) | |
| { | |
| if (sym->tag == JIT_SYM_KNOWN_VALUE_TAG) { | |
| return true; | |
| } | |
| if (sym->tag == JIT_SYM_TRUTHINESS_TAG) { | |
| JitOptSymbol *value = allocation_base(ctx) + sym->truthiness.value; | |
| int truthiness = _Py_uop_sym_truthiness(ctx, value); | |
| if (truthiness < 0) { | |
| return false; | |
| } | |
| make_const(sym, (truthiness ^ sym->truthiness.invert) ? Py_True : Py_False); | |
| return true; | |
| } | |
| return false; | |
| } |
cpython/Python/optimizer_symbols.c
Lines 131 to 148 in 1550c30
| PyObject * | |
| _Py_uop_sym_get_const(JitOptContext *ctx, JitOptSymbol *sym) | |
| { | |
| if (sym->tag == JIT_SYM_KNOWN_VALUE_TAG) { | |
| return sym->value.value; | |
| } | |
| if (sym->tag == JIT_SYM_TRUTHINESS_TAG) { | |
| JitOptSymbol *value = allocation_base(ctx) + sym->truthiness.value; | |
| int truthiness = _Py_uop_sym_truthiness(ctx, value); | |
| if (truthiness < 0) { | |
| return NULL; | |
| } | |
| PyObject *res = (truthiness ^ sym->truthiness.invert) ? Py_True : Py_False; | |
| make_const(sym, res); | |
| return res; | |
| } | |
| return NULL; | |
| } |
We could simplify _Py_uop_sym_is_const by calling _Py_uop_sym_get_const and checking if the return is NULL:
diff --git a/Python/optimizer_symbols.c b/Python/optimizer_symbols.c
index e8a4f87031..1f58a3279e 100644
--- a/Python/optimizer_symbols.c
+++ b/Python/optimizer_symbols.c
@@ -106,19 +106,8 @@ _Py_uop_sym_is_not_null(JitOptSymbol *sym) {
bool
_Py_uop_sym_is_const(JitOptContext *ctx, JitOptSymbol *sym)
{
- if (sym->tag == JIT_SYM_KNOWN_VALUE_TAG) {
- return true;
- }
- if (sym->tag == JIT_SYM_TRUTHINESS_TAG) {
- JitOptSymbol *value = allocation_base(ctx) + sym->truthiness.value;
- int truthiness = _Py_uop_sym_truthiness(ctx, value);
- if (truthiness < 0) {
- return false;
- }
- make_const(sym, (truthiness ^ sym->truthiness.invert) ? Py_True : Py_False);
- return true;
- }
- return false;
+ PyObject *res = _Py_uop_sym_get_const(ctx, sym);
+ return res == NULL ? false : true;
}
boolHas this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Linked PRs
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-JITtype-featureA feature request or enhancementA feature request or enhancement