mirror of
https://github.com/python/cpython.git
synced 2026-02-06 09:50:43 +00:00
gh-130415: Narrow types to constants in branches involving specialized comparisons with a constant (GH-144150)
This commit is contained in:
parent
29840247ff
commit
6d972e0104
6 changed files with 360 additions and 8 deletions
|
|
@ -521,21 +521,51 @@ dummy_func(void) {
|
|||
}
|
||||
|
||||
op(_COMPARE_OP_INT, (left, right -- res, l, r)) {
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
int cmp_mask = oparg & (COMPARE_LT_MASK | COMPARE_GT_MASK | COMPARE_EQ_MASK);
|
||||
|
||||
if (cmp_mask == COMPARE_EQ_MASK) {
|
||||
res = sym_new_predicate(ctx, left, right, JIT_PRED_EQ);
|
||||
}
|
||||
else if (cmp_mask == (COMPARE_LT_MASK | COMPARE_GT_MASK)) {
|
||||
res = sym_new_predicate(ctx, left, right, JIT_PRED_NE);
|
||||
}
|
||||
else {
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
}
|
||||
l = left;
|
||||
r = right;
|
||||
REPLACE_OPCODE_IF_EVALUATES_PURE(left, right, res);
|
||||
}
|
||||
|
||||
op(_COMPARE_OP_FLOAT, (left, right -- res, l, r)) {
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
int cmp_mask = oparg & (COMPARE_LT_MASK | COMPARE_GT_MASK | COMPARE_EQ_MASK);
|
||||
|
||||
if (cmp_mask == COMPARE_EQ_MASK) {
|
||||
res = sym_new_predicate(ctx, left, right, JIT_PRED_EQ);
|
||||
}
|
||||
else if (cmp_mask == (COMPARE_LT_MASK | COMPARE_GT_MASK)) {
|
||||
res = sym_new_predicate(ctx, left, right, JIT_PRED_NE);
|
||||
}
|
||||
else {
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
}
|
||||
l = left;
|
||||
r = right;
|
||||
REPLACE_OPCODE_IF_EVALUATES_PURE(left, right, res);
|
||||
}
|
||||
|
||||
op(_COMPARE_OP_STR, (left, right -- res, l, r)) {
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
int cmp_mask = oparg & (COMPARE_LT_MASK | COMPARE_GT_MASK | COMPARE_EQ_MASK);
|
||||
|
||||
if (cmp_mask == COMPARE_EQ_MASK) {
|
||||
res = sym_new_predicate(ctx, left, right, JIT_PRED_EQ);
|
||||
}
|
||||
else if (cmp_mask == (COMPARE_LT_MASK | COMPARE_GT_MASK)) {
|
||||
res = sym_new_predicate(ctx, left, right, JIT_PRED_NE);
|
||||
}
|
||||
else {
|
||||
res = sym_new_type(ctx, &PyBool_Type);
|
||||
}
|
||||
l = left;
|
||||
r = right;
|
||||
REPLACE_OPCODE_IF_EVALUATES_PURE(left, right, res);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue