Skip to content

Commit 3a6b943

Browse files
committed
Zend/Optimizer/zend_inference: make several pointers const
This allows removing several deconst casts from the JIT.
1 parent 16f151d commit 3a6b943

File tree

3 files changed

+40
-40
lines changed

3 files changed

+40
-40
lines changed

Zend/Optimizer/zend_inference.c

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -794,8 +794,8 @@ static void float_div(zend_long a, zend_long b, zend_long *r1, zend_long *r2) {
794794
}
795795

796796
static bool zend_inference_calc_binary_op_range(
797-
const zend_op_array *op_array, zend_ssa *ssa,
798-
zend_op *opline, zend_ssa_op *ssa_op, zend_uchar opcode, zend_ssa_range *tmp) {
797+
const zend_op_array *op_array, const zend_ssa *ssa,
798+
const zend_op *opline, const zend_ssa_op *ssa_op, zend_uchar opcode, zend_ssa_range *tmp) {
799799
zend_long op1_min, op2_min, op1_max, op2_max, t1, t2, t3, t4;
800800

801801
switch (opcode) {
@@ -1078,22 +1078,22 @@ static bool zend_inference_calc_binary_op_range(
10781078
return 0;
10791079
}
10801080

1081-
static bool zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *ssa, int var, int widening, int narrowing, zend_ssa_range *tmp)
1081+
static bool zend_inference_calc_range(const zend_op_array *op_array, const zend_ssa *ssa, int var, int widening, int narrowing, zend_ssa_range *tmp)
10821082
{
10831083
uint32_t line;
1084-
zend_op *opline;
1085-
zend_ssa_op *ssa_op;
1084+
const zend_op *opline;
1085+
const zend_ssa_op *ssa_op;
10861086

10871087
if (ssa->vars[var].definition_phi) {
1088-
zend_ssa_phi *p = ssa->vars[var].definition_phi;
1088+
const zend_ssa_phi *p = ssa->vars[var].definition_phi;
10891089
int i;
10901090

10911091
tmp->underflow = 0;
10921092
tmp->min = ZEND_LONG_MAX;
10931093
tmp->max = ZEND_LONG_MIN;
10941094
tmp->overflow = 0;
10951095
if (p->pi >= 0 && p->has_range_constraint) {
1096-
zend_ssa_range_constraint *constraint = &p->constraint.range;
1096+
const zend_ssa_range_constraint *constraint = &p->constraint.range;
10971097
if (constraint->negative) {
10981098
int src1 = p->sources[0];
10991099

@@ -1112,7 +1112,7 @@ static bool zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *s
11121112
case ZEND_PRE_DEC:
11131113
case ZEND_POST_DEC:
11141114
if (!tmp->underflow) {
1115-
zend_ssa_phi *p = ssa->vars[ssa->ops[line].op1_use].definition_phi;
1115+
const zend_ssa_phi *p = ssa->vars[ssa->ops[line].op1_use].definition_phi;
11161116

11171117
if (p && p->pi < 0
11181118
&& ssa->cfg.blocks[p->block].predecessors_count == 2
@@ -1126,7 +1126,7 @@ static bool zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *s
11261126
case ZEND_PRE_INC:
11271127
case ZEND_POST_INC:
11281128
if (!tmp->overflow) {
1129-
zend_ssa_phi *p = ssa->vars[ssa->ops[line].op1_use].definition_phi;
1129+
const zend_ssa_phi *p = ssa->vars[ssa->ops[line].op1_use].definition_phi;
11301130

11311131
if (p && p->pi < 0
11321132
&& ssa->cfg.blocks[p->block].predecessors_count == 2
@@ -1259,7 +1259,7 @@ static bool zend_inference_calc_range(const zend_op_array *op_array, zend_ssa *s
12591259
return zend_inference_propagate_range(op_array, ssa, opline, ssa_op, var, tmp);
12601260
}
12611261

1262-
ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp)
1262+
ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp)
12631263
{
12641264
tmp->underflow = 0;
12651265
tmp->overflow = 0;
@@ -1559,8 +1559,8 @@ ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, zend
15591559
case ZEND_DO_UCALL:
15601560
case ZEND_DO_FCALL_BY_NAME:
15611561
if (ssa_op->result_def == var) {
1562-
zend_func_info *func_info = ZEND_FUNC_INFO(op_array);
1563-
zend_call_info *call_info;
1562+
const zend_func_info *func_info = ZEND_FUNC_INFO(op_array);
1563+
const zend_call_info *call_info;
15641564
if (!func_info || !func_info->call_map) {
15651565
break;
15661566
}
@@ -1732,7 +1732,7 @@ static bool zend_check_inner_cycles(const zend_op_array *op_array, zend_ssa *ssa
17321732
}
17331733
#endif
17341734

1735-
static void zend_infer_ranges_warmup(const zend_op_array *op_array, zend_ssa *ssa, int *scc_var, int *next_scc_var, int scc)
1735+
static void zend_infer_ranges_warmup(const zend_op_array *op_array, zend_ssa *ssa, const int *scc_var, const int *next_scc_var, int scc)
17361736
{
17371737
int worklist_len = zend_bitset_len(ssa->vars_count);
17381738
int j, n;
@@ -2399,13 +2399,13 @@ static uint32_t zend_convert_type(const zend_script *script, zend_type type, zen
23992399
return tmp;
24002400
}
24012401

2402-
ZEND_API uint32_t zend_fetch_arg_info_type(const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce)
2402+
ZEND_API uint32_t zend_fetch_arg_info_type(const zend_script *script, const zend_arg_info *arg_info, zend_class_entry **pce)
24032403
{
24042404
return zend_convert_type(script, arg_info->type, pce);
24052405
}
24062406

2407-
static zend_property_info *lookup_prop_info(zend_class_entry *ce, zend_string *name, zend_class_entry *scope) {
2408-
zend_property_info *prop_info;
2407+
static const zend_property_info *lookup_prop_info(const zend_class_entry *ce, zend_string *name, zend_class_entry *scope) {
2408+
const zend_property_info *prop_info;
24092409

24102410
/* If the class is linked, reuse the precise runtime logic. */
24112411
if ((ce->ce_flags & ZEND_ACC_LINKED)
@@ -2431,11 +2431,11 @@ static zend_property_info *lookup_prop_info(zend_class_entry *ce, zend_string *n
24312431
return NULL;
24322432
}
24332433

2434-
static zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op *ssa_op)
2434+
static const zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op)
24352435
{
2436-
zend_property_info *prop_info = NULL;
2436+
const zend_property_info *prop_info = NULL;
24372437
if (opline->op2_type == IS_CONST) {
2438-
zend_class_entry *ce = NULL;
2438+
const zend_class_entry *ce = NULL;
24392439

24402440
if (opline->op1_type == IS_UNUSED && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
24412441
ce = op_array->scope;
@@ -2454,9 +2454,9 @@ static zend_property_info *zend_fetch_prop_info(const zend_op_array *op_array, z
24542454
return prop_info;
24552455
}
24562456

2457-
static zend_property_info *zend_fetch_static_prop_info(const zend_script *script, const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline)
2457+
static const zend_property_info *zend_fetch_static_prop_info(const zend_script *script, const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline)
24582458
{
2459-
zend_property_info *prop_info = NULL;
2459+
const zend_property_info *prop_info = NULL;
24602460
if (opline->op1_type == IS_CONST) {
24612461
zend_class_entry *ce = NULL;
24622462
if (opline->op2_type == IS_UNUSED) {
@@ -2490,7 +2490,7 @@ static zend_property_info *zend_fetch_static_prop_info(const zend_script *script
24902490
return prop_info;
24912491
}
24922492

2493-
static uint32_t zend_fetch_prop_type(const zend_script *script, zend_property_info *prop_info, zend_class_entry **pce)
2493+
static uint32_t zend_fetch_prop_type(const zend_script *script, const zend_property_info *prop_info, zend_class_entry **pce)
24942494
{
24952495
if (!prop_info) {
24962496
if (pce) {
@@ -2526,7 +2526,7 @@ static zend_always_inline zend_result _zend_update_type_info(
25262526
zend_ssa *ssa,
25272527
const zend_script *script,
25282528
zend_bitset worklist,
2529-
zend_op *opline,
2529+
const zend_op *opline,
25302530
zend_ssa_op *ssa_op,
25312531
const zend_op **ssa_opcodes,
25322532
zend_long optimization_level,
@@ -2740,7 +2740,7 @@ static zend_always_inline zend_result _zend_update_type_info(
27402740
case ZEND_ASSIGN_OBJ_OP:
27412741
case ZEND_ASSIGN_STATIC_PROP_OP:
27422742
{
2743-
zend_property_info *prop_info = NULL;
2743+
const zend_property_info *prop_info = NULL;
27442744
orig = 0;
27452745
tmp = 0;
27462746
if (opline->opcode == ZEND_ASSIGN_OBJ_OP) {
@@ -3750,7 +3750,7 @@ static zend_always_inline zend_result _zend_update_type_info(
37503750
tmp |= MAY_BE_NULL;
37513751
}
37523752
if (opline->op1_type == IS_UNUSED || (t1 & MAY_BE_OBJECT)) {
3753-
zend_property_info *prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op);
3753+
const zend_property_info *prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op);
37543754
tmp |= zend_fetch_prop_type(script, prop_info, &ce);
37553755
if (opline->opcode != ZEND_FETCH_OBJ_R && opline->opcode != ZEND_FETCH_OBJ_IS) {
37563756
tmp |= MAY_BE_REF | MAY_BE_INDIRECT;
@@ -3759,7 +3759,7 @@ static zend_always_inline zend_result _zend_update_type_info(
37593759
}
37603760
ce = NULL;
37613761
} else if (!(opline->op1_type & (IS_VAR|IS_TMP_VAR)) || !(t1 & MAY_BE_RC1)) {
3762-
zend_class_entry *ce = NULL;
3762+
const zend_class_entry *ce = NULL;
37633763

37643764
if (opline->op1_type == IS_UNUSED) {
37653765
ce = op_array->scope;
@@ -4785,7 +4785,7 @@ ZEND_API zend_result zend_ssa_inference(zend_arena **arena, const zend_op_array
47854785
}
47864786
/* }}} */
47874787

4788-
ZEND_API bool 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)
4788+
ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *ssa, uint32_t t1, uint32_t t2)
47894789
{
47904790
if (opline->op1_type == IS_CV) {
47914791
if (t1 & MAY_BE_UNDEF) {
@@ -5066,8 +5066,8 @@ ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op
50665066
}
50675067
}
50685068
if (ssa_op->op1_use) {
5069-
zend_ssa_var_info *var_info = ssa->var_info + ssa_op->op1_use;
5070-
zend_class_entry *ce = var_info->ce;
5069+
const zend_ssa_var_info *var_info = ssa->var_info + ssa_op->op1_use;
5070+
const zend_class_entry *ce = var_info->ce;
50715071

50725072
if (var_info->is_instanceof ||
50735073
!ce || ce->create_object || ce->__get || ce->__set || ce->parent) {
@@ -5114,7 +5114,7 @@ ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op
51145114
}
51155115
if (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) {
51165116
uint32_t arg_num = opline->op1.num;
5117-
zend_arg_info *cur_arg_info;
5117+
const zend_arg_info *cur_arg_info;
51185118

51195119
if (EXPECTED(arg_num <= op_array->num_args)) {
51205120
cur_arg_info = &op_array->arg_info[arg_num-1];
@@ -5190,7 +5190,7 @@ ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op
51905190
}
51915191
}
51925192

5193-
ZEND_API bool zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa)
5193+
ZEND_API bool zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *ssa)
51945194
{
51955195
return zend_may_throw_ex(opline, ssa_op, op_array, ssa, OP1_INFO(), OP2_INFO());
51965196
}

Zend/Optimizer/zend_inference.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,18 +221,18 @@ ZEND_API int zend_ssa_inference(zend_arena **raena, const zend_op_array *op_arra
221221

222222
ZEND_API ZEND_ATTRIBUTE_CONST uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert);
223223

224-
ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, zend_ssa *ssa, zend_op *opline, zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp);
224+
ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, const zend_ssa *ssa, const zend_op *opline, const zend_ssa_op* ssa_op, int var, zend_ssa_range *tmp);
225225

226226
ZEND_API uint32_t zend_fetch_arg_info_type(
227-
const zend_script *script, zend_arg_info *arg_info, zend_class_entry **pce);
227+
const zend_script *script, const zend_arg_info *arg_info, zend_class_entry **pce);
228228
ZEND_API void zend_init_func_return_info(
229229
const zend_op_array *op_array, const zend_script *script, zend_ssa_var_info *ret);
230230
uint32_t zend_get_return_info_from_signature_only(
231231
const zend_function *func, const zend_script *script,
232232
zend_class_entry **ce, bool *ce_is_instanceof, bool use_tentative_return_info);
233233

234-
ZEND_API ZEND_ATTRIBUTE_PURE bool 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);
235-
ZEND_API ZEND_ATTRIBUTE_PURE bool zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa);
234+
ZEND_API ZEND_ATTRIBUTE_PURE bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *ssa, uint32_t t1, uint32_t t2);
235+
ZEND_API ZEND_ATTRIBUTE_PURE bool zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, const zend_ssa *ssa);
236236

237237
ZEND_API zend_result zend_update_type_info(
238238
const zend_op_array *op_array, zend_ssa *ssa, const zend_script *script,

ext/opcache/jit/zend_jit_trace.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ static void zend_jit_trace_propagate_range(const zend_op_array *op_array, const
864864
int def = tssa->vars[ssa_var].definition;
865865

866866
if (tssa->vars[ssa_var].alias == NO_ALIAS
867-
&& zend_inference_propagate_range(op_array, tssa, (zend_op*)tssa_opcodes[def], (zend_ssa_op*)&tssa->ops[def], ssa_var, &tmp)) {
867+
&& zend_inference_propagate_range(op_array, tssa, tssa_opcodes[def], &tssa->ops[def], ssa_var, &tmp)) {
868868
tssa->var_info[ssa_var].range.min = tmp.min;
869869
tssa->var_info[ssa_var].range.max = tmp.max;
870870
tssa->var_info[ssa_var].range.underflow = tmp.underflow;
@@ -6327,7 +6327,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
63276327
}
63286328

63296329
if (type == IS_LONG
6330-
&& zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->result_def, &tmp)) {
6330+
&& zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->result_def, &tmp)) {
63316331
ssa->var_info[ssa_op->result_def].range.min = tmp.min;
63326332
ssa->var_info[ssa_op->result_def].range.max = tmp.max;
63336333
ssa->var_info[ssa_op->result_def].range.underflow = 0;
@@ -6395,7 +6395,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
63956395
}
63966396
}
63976397
if (type == IS_LONG
6398-
&& zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op1_def, &tmp)) {
6398+
&& zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->op1_def, &tmp)) {
63996399
ssa->var_info[ssa_op->op1_def].range.min = tmp.min;
64006400
ssa->var_info[ssa_op->op1_def].range.max = tmp.max;
64016401
ssa->var_info[ssa_op->op1_def].range.underflow = 0;
@@ -6439,7 +6439,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
64396439
}
64406440
}
64416441
if (type == IS_LONG
6442-
&& zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op2_def, &tmp)) {
6442+
&& zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->op2_def, &tmp)) {
64436443
ssa->var_info[ssa_op->op2_def].range.min = tmp.min;
64446444
ssa->var_info[ssa_op->op2_def].range.max = tmp.max;
64456445
ssa->var_info[ssa_op->op2_def].range.underflow = 0;
@@ -6482,7 +6482,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
64826482
}
64836483
}
64846484
if (type == IS_LONG
6485-
&& zend_inference_propagate_range(op_array, ssa, (zend_op*)opline, (zend_ssa_op*)ssa_op, ssa_op->op1_def, &tmp)) {
6485+
&& zend_inference_propagate_range(op_array, ssa, opline, ssa_op, ssa_op->op1_def, &tmp)) {
64866486
ssa->var_info[ssa_op->op1_def].range.min = tmp.min;
64876487
ssa->var_info[ssa_op->op1_def].range.max = tmp.max;
64886488
ssa->var_info[ssa_op->op1_def].range.underflow = 0;

0 commit comments

Comments
 (0)