@@ -38,6 +38,8 @@ typedef struct _Py_UOpsAbstractFrame _Py_UOpsAbstractFrame;
3838#define sym_new_compact_int _Py_uop_sym_new_compact_int
3939#define sym_is_compact_int _Py_uop_sym_is_compact_int
4040#define sym_new_truthiness _Py_uop_sym_new_truthiness
41+ #define sym_new_predicate _Py_uop_sym_new_predicate
42+ #define sym_apply_predicate_narrowing _Py_uop_sym_apply_predicate_narrowing
4143
4244extern int
4345optimize_to_bool (
@@ -533,7 +535,7 @@ dummy_func(void) {
533535 }
534536
535537 op (_IS_OP , (left , right -- b , l , r )) {
536- b = sym_new_type (ctx , & PyBool_Type );
538+ b = sym_new_predicate (ctx , left , right , ( oparg ? JIT_PRED_IS_NOT : JIT_PRED_IS ) );
537539 l = left ;
538540 r = right ;
539541 }
@@ -1173,6 +1175,8 @@ dummy_func(void) {
11731175 }
11741176
11751177 op (_GUARD_IS_TRUE_POP , (flag -- )) {
1178+ sym_apply_predicate_narrowing (ctx , flag , true);
1179+
11761180 if (sym_is_const (ctx , flag )) {
11771181 PyObject * value = sym_get_const (ctx , flag );
11781182 assert (value != NULL );
@@ -1191,6 +1195,8 @@ dummy_func(void) {
11911195 }
11921196
11931197 op (_GUARD_IS_FALSE_POP , (flag -- )) {
1198+ sym_apply_predicate_narrowing (ctx , flag , false);
1199+
11941200 if (sym_is_const (ctx , flag )) {
11951201 PyObject * value = sym_get_const (ctx , flag );
11961202 assert (value != NULL );
0 commit comments