Skip to content

Commit 71b2f15

Browse files
committed
simplify: port CondBranch const-fold + CIntToCBool to C (chunks 5-6)
Two more Category 2 handlers using SimplifyEnv: - simplify_cint_to_cbool_c: folds known int to CBool constant - simplify_cond_branch_const_c: folds CondBranch with known-constant condition to unconditional Branch (falls through to C++ for IntConvert forwarding path) Adds make_cbool_type helper for CBool HirType construction.
1 parent 0622572 commit 71b2f15

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

Python/jit/hir/simplify.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2749,8 +2749,13 @@ Register* simplifyInstr(Env& env, const Instr* instr) {
27492749
case Opcode::kCompare:
27502750
return simplifyCompare(env, static_cast<const Compare*>(instr));
27512751

2752-
case Opcode::kCondBranch:
2752+
case Opcode::kCondBranch: {
2753+
SimplifyEnv cenv = make_c_env();
2754+
auto *r = static_cast<Register*>(simplify_cond_branch_const_c(&cenv, instr));
2755+
sync_c_env(cenv);
2756+
if (r) return r;
27532757
return simplifyCondBranch(env, instr);
2758+
}
27542759
case Opcode::kCondBranchCheckType:
27552760
return simplifyCondBranchCheckType(
27562761
env, static_cast<const CondBranchCheckType*>(instr));

Python/jit/hir/simplify_c.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,21 @@ void *simplify_cint_to_cbool_c(SimplifyEnv *env, const void *instr) {
8989
return NULL;
9090
}
9191

92+
/* ---- simplifyCondBranch (partial — constant condition folding) ----
93+
* If condition is a known int constant, fold to unconditional Branch. */
94+
void *simplify_cond_branch_const_c(SimplifyEnv *env, const void *instr) {
95+
void *cond = hir_c_get_operand(instr, 0);
96+
HirType cond_type = hir_register_type(cond);
97+
if (hir_type_has_int_spec(&cond_type)) {
98+
intptr_t spec = hir_type_int_spec(&cond_type);
99+
void *target = hir_c_successor(instr, spec ? 0 : 1);
100+
extern void *hir_c_create_branch_cpp(void *target_block);
101+
void *branch = hir_c_create_branch_cpp(target);
102+
return simplify_env_emit(env, branch);
103+
}
104+
return NULL;
105+
}
106+
92107
/* ---- simplifyPrimitiveBoxBool ----
93108
* If input is a known int constant, replace with Py_True/Py_False. */
94109
void *simplify_primitive_box_bool_c(SimplifyEnv *env, const void *instr) {

Python/jit/hir/simplify_c.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ void *simplify_guard_type_identity_c(const void *instr);
3333
/* Env-using handlers (Category 2) */
3434
void *simplify_primitive_box_bool_c(SimplifyEnv *env, const void *instr);
3535
void *simplify_cint_to_cbool_c(SimplifyEnv *env, const void *instr);
36+
void *simplify_cond_branch_const_c(SimplifyEnv *env, const void *instr);
3637

3738
#ifdef __cplusplus
3839
}

0 commit comments

Comments
 (0)