Skip to content

Commit dde5572

Browse files
committed
Eliminate some repeatable IS_REFERENCE checks
1 parent 288581f commit dde5572

File tree

1 file changed

+47
-15
lines changed

1 file changed

+47
-15
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4134,8 +4134,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
41344134
goto jit_failure;
41354135
}
41364136
if (opline->op1_type == IS_CV
4137-
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
4138-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
4137+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4138+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
41394139
}
41404140
} else {
41414141
CHECK_OP1_TRACE_TYPE();
@@ -4196,8 +4196,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
41964196
goto jit_failure;
41974197
}
41984198
if (opline->op1_type == IS_CV
4199-
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
4200-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
4199+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4200+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
42014201
}
42024202
} else {
42034203
CHECK_OP1_TRACE_TYPE();
@@ -4268,8 +4268,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
42684268
goto jit_failure;
42694269
}
42704270
if (opline->op1_type == IS_CV
4271-
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
4272-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
4271+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4272+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
42734273
}
42744274
} else {
42754275
CHECK_OP1_TRACE_TYPE();
@@ -4334,8 +4334,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
43344334
goto jit_failure;
43354335
}
43364336
if (opline->op1_type == IS_CV
4337-
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
4338-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
4337+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4338+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
43394339
}
43404340
} else {
43414341
CHECK_OP1_TRACE_TYPE();
@@ -4358,6 +4358,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
43584358
zend_may_throw(opline, ssa_op, op_array, ssa))) {
43594359
goto jit_failure;
43604360
}
4361+
if ((opline+1)->op1_type == IS_CV
4362+
&& (ssa_op+1)->op1_def >= 0
4363+
&& ssa->vars[(ssa_op+1)->op1_def].alias == NO_ALIAS) {
4364+
ssa->var_info[(ssa_op+1)->op1_def].guarded_reference = ssa->var_info[(ssa_op+1)->op1_use].guarded_reference;
4365+
}
43614366
goto done;
43624367
case ZEND_ASSIGN_DIM:
43634368
op1_info = OP1_INFO();
@@ -4381,8 +4386,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
43814386
goto jit_failure;
43824387
}
43834388
if (opline->op1_type == IS_CV
4384-
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
4385-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
4389+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4390+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
43864391
}
43874392
} else {
43884393
CHECK_OP1_TRACE_TYPE();
@@ -4396,6 +4401,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
43964401
zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) {
43974402
goto jit_failure;
43984403
}
4404+
if ((opline+1)->op1_type == IS_CV
4405+
&& (ssa_op+1)->op1_def >= 0
4406+
&& ssa->vars[(ssa_op+1)->op1_def].alias == NO_ALIAS) {
4407+
ssa->var_info[(ssa_op+1)->op1_def].guarded_reference = ssa->var_info[(ssa_op+1)->op1_use].guarded_reference;
4408+
}
43994409
goto done;
44004410
case ZEND_ASSIGN:
44014411
if (opline->op1_type != IS_CV) {
@@ -4422,8 +4432,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
44224432
goto jit_failure;
44234433
}
44244434
if (opline->op1_type == IS_CV
4425-
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
4426-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
4435+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4436+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
44274437
}
44284438
if (!zend_jit_assign_to_typed_ref(&dasm_state, opline, opline->op2_type, op2_addr, 1)) {
44294439
goto jit_failure;
@@ -4488,6 +4498,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
44884498
zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) {
44894499
goto jit_failure;
44904500
}
4501+
if (opline->op2_type == IS_CV
4502+
&& ssa_op->op2_def >= 0
4503+
&& ssa->vars[ssa_op->op2_def].alias == NO_ALIAS) {
4504+
ssa->var_info[ssa_op->op2_def].guarded_reference = ssa->var_info[ssa_op->op2_use].guarded_reference;
4505+
}
44914506
goto done;
44924507
case ZEND_CAST:
44934508
if (opline->extended_value != op1_type) {
@@ -4518,6 +4533,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
45184533
res_use_info, res_info, RES_REG_ADDR())) {
45194534
goto jit_failure;
45204535
}
4536+
if (opline->op1_type == IS_CV
4537+
&& ssa_op->op1_def >= 0
4538+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4539+
ssa->var_info[ssa_op->op1_def].guarded_reference = ssa->var_info[ssa_op->op1_use].guarded_reference;
4540+
}
45214541
goto done;
45224542
case ZEND_INIT_FCALL:
45234543
case ZEND_INIT_FCALL_BY_NAME:
@@ -4566,6 +4586,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
45664586
op1_info, 0)) {
45674587
goto jit_failure;
45684588
}
4589+
if (opline->op1_type == IS_CV
4590+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4591+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
4592+
}
45694593
goto done;
45704594
case ZEND_SEND_VAR:
45714595
case ZEND_SEND_VAR_EX:
@@ -4595,6 +4619,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
45954619
op1_info, op1_addr, op1_def_addr)) {
45964620
goto jit_failure;
45974621
}
4622+
if (opline->op1_type == IS_CV
4623+
&& ssa_op->op1_def >= 0
4624+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
4625+
ssa->var_info[ssa_op->op1_def].guarded_reference = ssa->var_info[ssa_op->op1_use].guarded_reference;
4626+
}
45984627
if (frame->call
45994628
&& frame->call->func
46004629
&& frame->call->func->type == ZEND_USER_FUNCTION) {
@@ -5096,8 +5125,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
50965125
goto jit_failure;
50975126
}
50985127
if (opline->op1_type == IS_CV
5099-
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
5100-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
5128+
&& ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
5129+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
51015130
}
51025131
} else {
51035132
CHECK_OP1_TRACE_TYPE();
@@ -5251,7 +5280,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
52515280
}
52525281
if (opline->op1_type == IS_CV
52535282
&& ssa->vars[ssa_op->op1_use].alias == NO_ALIAS) {
5254-
ssa->var_info[ssa_op->op1_use].guarded_reference = 1;
5283+
ssa->var_info[ssa_op->op1_def >= 0 ? ssa_op->op1_def : ssa_op->op1_use].guarded_reference = 1;
52555284
}
52565285
} else {
52575286
CHECK_OP1_TRACE_TYPE();
@@ -5289,6 +5318,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
52895318
} else {
52905319
op1_info = OP1_INFO();
52915320
}
5321+
if (ssa->vars[ssa_op->op1_def].alias == NO_ALIAS) {
5322+
ssa->var_info[ssa_op->op1_def].guarded_reference = 1;
5323+
}
52925324
if (!zend_jit_bind_global(&dasm_state, opline, op1_info)) {
52935325
goto jit_failure;
52945326
}

0 commit comments

Comments
 (0)