Skip to content

Commit 4e7e3b1

Browse files
committed
simplify: port IntConvert to C via SimplifyEnv (chunk 7)
simplify_int_convert_c: if src already has target type, emits UseType and returns src unchanged. Uses HirIntConvert struct's type field directly (same layout as HirRefineType).
1 parent 71b2f15 commit 4e7e3b1

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

Python/jit/hir/simplify.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2763,8 +2763,12 @@ Register* simplifyInstr(Env& env, const Instr* instr) {
27632763
case Opcode::kGetLength:
27642764
return simplifyGetLength(env, instr);
27652765

2766-
case Opcode::kIntConvert:
2767-
return simplifyIntConvert(env, static_cast<const IntConvert*>(instr));
2766+
case Opcode::kIntConvert: {
2767+
SimplifyEnv cenv = make_c_env();
2768+
auto *r = static_cast<Register*>(simplify_int_convert_c(&cenv, instr));
2769+
sync_c_env(cenv);
2770+
return r;
2771+
}
27682772

27692773
case Opcode::kIsTruthy:
27702774
return simplifyIsTruthy(env, instr);

Python/jit/hir/simplify_c.c

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

92+
/* ---- simplifyIntConvert ----
93+
* If input already has the target type, IntConvert is redundant. */
94+
void *simplify_int_convert_c(SimplifyEnv *env, const void *instr) {
95+
void *src = hir_c_get_operand(instr, 0);
96+
HirType src_type = hir_register_type(src);
97+
HirType target = ((const HirIntConvert *)instr)->type;
98+
if (hir_type_is_subtype(src_type, target)) {
99+
simplify_env_emit_use_type(env, src, target);
100+
return src;
101+
}
102+
return NULL;
103+
}
104+
92105
/* ---- simplifyCondBranch (partial — constant condition folding) ----
93106
* If condition is a known int constant, fold to unconditional Branch. */
94107
void *simplify_cond_branch_const_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
@@ -29,6 +29,7 @@ void *simplify_env_emit_use_type(SimplifyEnv *env, void *val, HirType type);
2929
void *simplify_check_c(const void *instr);
3030
void *simplify_refine_type_c(const void *instr);
3131
void *simplify_guard_type_identity_c(const void *instr);
32+
void *simplify_int_convert_c(SimplifyEnv *env, const void *instr);
3233

3334
/* Env-using handlers (Category 2) */
3435
void *simplify_primitive_box_bool_c(SimplifyEnv *env, const void *instr);

0 commit comments

Comments
 (0)