Skip to content

Commit c4fc453

Browse files
committed
Rename zend_jit_var_may_be_modified_indirectly() into zend_jit_var_may_alias()
1 parent 16b3b33 commit c4fc453

File tree

1 file changed

+33
-31
lines changed

1 file changed

+33
-31
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -348,16 +348,18 @@ static zend_always_inline uint32_t zend_jit_trace_type_to_info(zend_uchar type)
348348
return zend_jit_trace_type_to_info_ex(type, -1);
349349
}
350350

351-
static zend_always_inline int zend_jit_var_may_be_modified_indirectly(const zend_op_array *op_array, const zend_ssa *ssa, uint32_t var)
351+
static zend_always_inline zend_ssa_alias_kind zend_jit_var_may_alias(const zend_op_array *op_array, const zend_ssa *ssa, uint32_t var)
352352
{
353-
if ((!op_array->function_name || (ssa->cfg.flags & ZEND_FUNC_INDIRECT_VAR_ACCESS))
354-
&& var < op_array->last_var) {
355-
return 1;
356-
} else if (var < op_array->last_var
357-
&& zend_string_equals_literal(op_array->vars[var], "http_response_header")) {
358-
return 1;
359-
}
360-
return 0;
353+
if (var >= op_array->last_var) {
354+
return NO_ALIAS;
355+
} else if ((!op_array->function_name || (ssa->cfg.flags & ZEND_FUNC_INDIRECT_VAR_ACCESS))) {
356+
return SYMTABLE_ALIAS;
357+
} else if (ssa->vars) {
358+
return ssa->vars[var].alias;
359+
} else if (zend_string_equals_literal(op_array->vars[var], "http_response_header")) {
360+
return HTTP_RESPONSE_HEADER_ALIAS;
361+
}
362+
return NO_ALIAS;
361363
}
362364

363365
#define STACK_VAR_TYPE(_var) \
@@ -378,7 +380,7 @@ static zend_always_inline void zend_jit_trace_add_op_guard(const zend_op_array
378380
{
379381
zend_ssa_var_info *info = &tssa->var_info[ssa_var];
380382

381-
if (zend_jit_var_may_be_modified_indirectly(op_array, ssa, EX_VAR_TO_NUM(var))) {
383+
if (zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(var)) != NO_ALIAS) {
382384
info->type = MAY_BE_GUARD | zend_jit_trace_type_to_info(op_type);
383385
} else if ((info->type & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << op_type)) {
384386
info->type = MAY_BE_GUARD | zend_jit_trace_type_to_info_ex(op_type, info->type);
@@ -398,7 +400,7 @@ static zend_always_inline void zend_jit_trace_add_op_guard(const zend_op_array
398400
if (!zend_jit_type_guard(&dasm_state, opline, _var, op_type)) { \
399401
goto jit_failure; \
400402
} \
401-
if (zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, _var)) { \
403+
if (zend_jit_var_may_alias(op_array, op_array_ssa, _var) != NO_ALIAS) { \
402404
SET_STACK_VAR_TYPE(_var, IS_UNKNOWN); \
403405
} else { \
404406
SET_STACK_VAR_TYPE(_var, op_type); \
@@ -1288,7 +1290,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
12881290
ssa_var_info[i].type = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
12891291
}
12901292
} else if (op_array->function_name
1291-
&& !zend_jit_var_may_be_modified_indirectly(op_array, ssa, i)) {
1293+
&& zend_jit_var_may_alias(op_array, ssa, i) == NO_ALIAS) {
12921294
ssa_vars[i].no_val = ssa->vars ? ssa->vars[i].no_val : 0;
12931295
ssa_var_info[i].type = MAY_BE_UNDEF;
12941296
} else {
@@ -1797,7 +1799,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
17971799
ssa_var_info[v].type = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
17981800
}
17991801
} else if (op_array->function_name
1800-
&& !zend_jit_var_may_be_modified_indirectly(op_array, ssa, i)) {
1802+
&& zend_jit_var_may_alias(op_array, ssa, i) == NO_ALIAS) {
18011803
ssa_vars[v].no_val = ssa->vars ? ssa->vars[i].no_val : 0;
18021804
ssa_var_info[v].type = MAY_BE_UNDEF;
18031805
} else {
@@ -1917,7 +1919,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
19171919
uint32_t t1 = ssa_var_info[phi->sources[1]].type;
19181920

19191921
if (t & MAY_BE_GUARD) {
1920-
if (zend_jit_var_may_be_modified_indirectly(op_array, ssa, phi->sources[0])) {
1922+
if (zend_jit_var_may_alias(op_array, ssa, phi->sources[0]) != NO_ALIAS) {
19211923
/* pass */
19221924
} else if (((t0 | t1) & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == (t & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF))) {
19231925
if (!((t0 | t1) & MAY_BE_GUARD)) {
@@ -2082,7 +2084,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
20822084
/* We don't start intervals for variables used in Phi */
20832085
if ((ssa->vars[i].use_chain >= 0 /*|| ssa->vars[i].phi_use_chain*/)
20842086
&& zend_jit_var_supports_reg(ssa, i)
2085-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, i)) {
2087+
&& zend_jit_var_may_alias(op_array, op_array_ssa, i) == NO_ALIAS) {
20862088
start[i] = 0;
20872089
if (i < parent_vars_count
20882090
&& STACK_REG(parent_stack, i) != ZREG_NONE
@@ -2113,7 +2115,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
21132115
vars_op_array[phi->ssa_var] = op_array;
21142116
if (ssa->vars[phi->ssa_var].use_chain >= 0
21152117
&& zend_jit_var_supports_reg(ssa, phi->ssa_var)
2116-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, phi->sources[0])) {
2118+
&& zend_jit_var_may_alias(op_array, op_array_ssa, phi->sources[0]) == NO_ALIAS) {
21172119
start[phi->ssa_var] = 0;
21182120
count++;
21192121
}
@@ -2211,7 +2213,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
22112213
&& (ssa->vars[ssa_op->result_def].use_chain >= 0
22122214
|| ssa->vars[ssa_op->result_def].phi_use_chain)
22132215
&& zend_jit_var_supports_reg(ssa, ssa_op->result_def)
2214-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->result.var))) {
2216+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->result.var)) == NO_ALIAS) {
22152217
if (!(ssa->var_info[ssa_op->result_def].type & MAY_BE_GUARD)
22162218
|| opline->opcode == ZEND_PRE_INC
22172219
|| opline->opcode == ZEND_PRE_DEC
@@ -2233,7 +2235,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
22332235
&& (ssa->vars[ssa_op->op1_def].use_chain >= 0
22342236
|| ssa->vars[ssa_op->op1_def].phi_use_chain)
22352237
&& zend_jit_var_supports_reg(ssa, ssa_op->op1_def)
2236-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
2238+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
22372239
start[ssa_op->op1_def] = idx;
22382240
vars_op_array[ssa_op->op1_def] = op_array;
22392241
count++;
@@ -2242,7 +2244,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
22422244
&& (ssa->vars[ssa_op->op2_def].use_chain >= 0
22432245
|| ssa->vars[ssa_op->op2_def].phi_use_chain)
22442246
&& zend_jit_var_supports_reg(ssa, ssa_op->op2_def)
2245-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op2.var))) {
2247+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op2.var)) == NO_ALIAS) {
22462248
start[ssa_op->op2_def] = idx;
22472249
vars_op_array[ssa_op->op2_def] = op_array;
22482250
count++;
@@ -2283,7 +2285,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
22832285
&& (ssa->vars[ssa_op->op1_def].use_chain >= 0
22842286
|| ssa->vars[ssa_op->op1_def].phi_use_chain)
22852287
&& zend_jit_var_supports_reg(ssa, ssa_op->op1_def)
2286-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
2288+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
22872289
start[ssa_op->op1_def] = idx;
22882290
vars_op_array[ssa_op->op1_def] = op_array;
22892291
count++;
@@ -2346,7 +2348,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
23462348
vars_op_array[j] = op_array;
23472349
if (ssa->vars[j].use_chain >= 0
23482350
&& zend_jit_var_supports_reg(ssa, j)
2349-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, i)) {
2351+
&& zend_jit_var_may_alias(op_array, op_array_ssa, i) == NO_ALIAS) {
23502352
start[j] = idx;
23512353
flags[j] = ZREG_LOAD;
23522354
count++;
@@ -2378,7 +2380,7 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
23782380
vars_op_array[j] = op_array;
23792381
if (ssa->vars[j].use_chain >= 0
23802382
&& zend_jit_var_supports_reg(ssa, j)
2381-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, i)) {
2383+
&& zend_jit_var_may_alias(op_array, op_array_ssa, i) == NO_ALIAS) {
23822384
start[j] = idx;
23832385
flags[j] = ZREG_LOAD;
23842386
count++;
@@ -3023,7 +3025,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
30233025

30243026
if (!(info & MAY_BE_GUARD) && has_concrete_type(info)) {
30253027
SET_STACK_TYPE(stack, i, concrete_type(info));
3026-
} else if (zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, i)) {
3028+
} else if (zend_jit_var_may_alias(op_array, op_array_ssa, i) != NO_ALIAS) {
30273029
SET_STACK_TYPE(stack, i, IS_UNKNOWN);
30283030
} else if (i < parent_vars_count
30293031
&& STACK_TYPE(parent_stack, i) != IS_UNKNOWN) {
@@ -3504,7 +3506,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
35043506
goto jit_failure;
35053507
}
35063508
if (opline->op1_type == IS_CV
3507-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
3509+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
35083510
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
35093511
}
35103512
} else {
@@ -3535,7 +3537,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
35353537
goto jit_failure;
35363538
}
35373539
if (opline->op1_type == IS_CV
3538-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
3540+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
35393541
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
35403542
}
35413543
} else {
@@ -3583,7 +3585,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
35833585
goto jit_failure;
35843586
}
35853587
if (opline->op1_type == IS_CV
3586-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
3588+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
35873589
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
35883590
}
35893591
if (!zend_jit_assign_to_typed_ref(&dasm_state, opline, opline->op2_type, op2_addr, 1)) {
@@ -4029,7 +4031,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
40294031
goto jit_failure;
40304032
}
40314033
if (opline->op1_type == IS_CV
4032-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
4034+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
40334035
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
40344036
}
40354037
} else {
@@ -4074,7 +4076,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
40744076
goto jit_failure;
40754077
}
40764078
if (opline->op1_type == IS_CV
4077-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
4079+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
40784080
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
40794081
}
40804082
} else {
@@ -4121,7 +4123,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
41214123
goto jit_failure;
41224124
}
41234125
if (opline->op1_type == IS_CV
4124-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
4126+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
41254127
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
41264128
}
41274129
} else {
@@ -4222,7 +4224,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
42224224
goto jit_failure;
42234225
}
42244226
if (opline->op1_type == IS_CV
4225-
&& !zend_jit_var_may_be_modified_indirectly(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var))) {
4227+
&& zend_jit_var_may_alias(op_array, op_array_ssa, EX_VAR_TO_NUM(opline->op1.var)) == NO_ALIAS) {
42264228
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
42274229
}
42284230
} else {
@@ -4736,7 +4738,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
47364738
}
47374739
while (i < p->op_array->last_var) {
47384740
if (jit_extension
4739-
&& zend_jit_var_may_be_modified_indirectly(p->op_array, &jit_extension->func_info.ssa, i)) {
4741+
&& zend_jit_var_may_alias(p->op_array, &jit_extension->func_info.ssa, i) != NO_ALIAS) {
47404742
SET_STACK_TYPE(call->stack, i, IS_UNKNOWN);
47414743
} else {
47424744
SET_STACK_TYPE(call->stack, i, IS_UNDEF);

0 commit comments

Comments
 (0)