From 2068f019e345fa6c859a782ecf85ef116953b806 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 2 Jul 2020 12:42:09 +0300 Subject: [PATCH] Eliminate useless exception checks --- ext/opcache/Optimizer/zend_inference.c | 10 ++++++---- ext/opcache/Optimizer/zend_inference.h | 1 + ext/opcache/jit/zend_jit_trace.c | 10 +++++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 72b229af3d..e131a3ee58 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -4255,11 +4255,8 @@ void zend_inference_check_recursive_dependencies(zend_op_array *op_array) free_alloca(worklist, use_heap); } -int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa) +int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2) { - uint32_t t1 = OP1_INFO(); - uint32_t t2 = OP2_INFO(); - if (opline->op1_type == IS_CV) { if (t1 & MAY_BE_UNDEF) { switch (opline->opcode) { @@ -4594,3 +4591,8 @@ int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_ return 1; } } + +int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa) +{ + return zend_may_throw_ex(opline, ssa_op, op_array, ssa, OP1_INFO(), OP2_INFO()); +} diff --git a/ext/opcache/Optimizer/zend_inference.h b/ext/opcache/Optimizer/zend_inference.h index 525159a72b..78a9cdcbb5 100644 --- a/ext/opcache/Optimizer/zend_inference.h +++ b/ext/opcache/Optimizer/zend_inference.h @@ -270,6 +270,7 @@ void zend_func_return_info(const zend_op_array *op_array, int widening, zend_ssa_var_info *ret); +int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2); int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa); int zend_update_type_info(const zend_op_array *op_array, diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 1400b78225..04f3a1b793 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -3243,7 +3243,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (!zend_jit_assign_dim_op(&dasm_state, opline, op_array, op1_info, op1_def_info, op1_addr, op2_info, op1_data_info, OP1_DATA_RANGE(), - zend_may_throw(opline, ssa_op, op_array, ssa))) { + zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { goto jit_failure; } goto done; @@ -3267,7 +3267,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par CHECK_OP1_DATA_TRACE_TYPE(); if (!zend_jit_assign_dim(&dasm_state, opline, op_array, op1_info, op1_addr, op2_info, op1_data_info, - zend_may_throw(opline, ssa_op, op_array, ssa))) { + zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { goto jit_failure; } goto done; @@ -3318,7 +3318,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op1_def_info, op1_def_addr, op2_info, op2_addr, op2_def_addr, res_info, res_addr, - zend_may_throw(opline, ssa_op, op_array, ssa))) { + zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { goto jit_failure; } goto done; @@ -3768,7 +3768,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } if (!zend_jit_isset_isempty_dim(&dasm_state, opline, op_array, op1_info, op1_addr, op2_info, - zend_may_throw(opline, ssa_op, op_array, ssa), + zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info), smart_branch_opcode, -1, -1, exit_addr)) { goto jit_failure; @@ -3839,7 +3839,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (!zend_jit_fetch_obj(&dasm_state, opline, op_array, op1_info, op1_addr, op1_indirect, ce, ce_is_instanceof, delayed_fetch_this, - zend_may_throw(opline, ssa_op, op_array, ssa))) { + zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, MAY_BE_STRING))) { goto jit_failure; } goto done; -- 2.40.0