Skip to content

Commit 9e12dbb

Browse files
committed
micro-optimization
1 parent 368766e commit 9e12dbb

File tree

2 files changed

+65
-63
lines changed

2 files changed

+65
-63
lines changed

Zend/zend_vm_def.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7345,15 +7345,15 @@ ZEND_VM_COLD_CONST_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
73457345
{
73467346
USE_OPLINE
73477347
zval *value;
7348-
zval *ref = NULL;
7348+
zend_reference *ref = NULL;
73497349
bool ret;
73507350

73517351
SAVE_OPLINE();
73527352
value = GET_OP1_ZVAL_PTR(BP_VAR_R);
73537353

73547354
if ((OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) && Z_ISREF_P(value)) {
73557355
if (OP1_TYPE == IS_VAR) {
7356-
ref = value;
7356+
ref = Z_REF_P(value);
73577357
}
73587358
value = Z_REFVAL_P(value);
73597359
}
@@ -7375,10 +7375,8 @@ ZEND_VM_COLD_CONST_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
73757375
} else if (OP1_TYPE == IS_CV) {
73767376
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
73777377
} else if (OP1_TYPE == IS_VAR && ref) {
7378-
zend_reference *r = Z_REF_P(ref);
7379-
7380-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
7381-
efree_size(r, sizeof(zend_reference));
7378+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
7379+
efree_size(ref, sizeof(zend_reference));
73827380
} else if (Z_OPT_REFCOUNTED_P(result)) {
73837381
Z_ADDREF_P(result);
73847382
}
@@ -7394,14 +7392,14 @@ ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
73947392
{
73957393
USE_OPLINE
73967394
zval *value;
7397-
zval *ref = NULL;
7395+
zend_reference *ref = NULL;
73987396

73997397
SAVE_OPLINE();
74007398
value = GET_OP1_ZVAL_PTR(BP_VAR_IS);
74017399

74027400
if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
74037401
if (OP1_TYPE & IS_VAR) {
7404-
ref = value;
7402+
ref = Z_REF_P(value);
74057403
}
74067404
value = Z_REFVAL_P(value);
74077405
}
@@ -7414,18 +7412,20 @@ ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
74147412
} else if (OP1_TYPE == IS_CV) {
74157413
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
74167414
} else if ((OP1_TYPE & IS_VAR) && ref) {
7417-
zend_reference *r = Z_REF_P(ref);
7418-
7419-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
7420-
efree_size(r, sizeof(zend_reference));
7415+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
7416+
efree_size(ref, sizeof(zend_reference));
74217417
} else if (Z_OPT_REFCOUNTED_P(result)) {
74227418
Z_ADDREF_P(result);
74237419
}
74247420
}
74257421
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
74267422
}
74277423

7428-
FREE_OP1();
7424+
if ((OP1_TYPE & IS_VAR) && ref) {
7425+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
7426+
efree_size(ref, sizeof(zend_reference));
7427+
}
7428+
}
74297429
ZEND_VM_NEXT_OPCODE();
74307430
}
74317431

Zend/zend_vm_execute.h

Lines changed: 52 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5116,15 +5116,15 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONS
51165116
{
51175117
USE_OPLINE
51185118
zval *value;
5119-
zval *ref = NULL;
5119+
zend_reference *ref = NULL;
51205120
bool ret;
51215121

51225122
SAVE_OPLINE();
51235123
value = RT_CONSTANT(opline, opline->op1);
51245124

51255125
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
51265126
if (IS_CONST == IS_VAR) {
5127-
ref = value;
5127+
ref = Z_REF_P(value);
51285128
}
51295129
value = Z_REFVAL_P(value);
51305130
}
@@ -5146,10 +5146,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONS
51465146
} else if (IS_CONST == IS_CV) {
51475147
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
51485148
} else if (IS_CONST == IS_VAR && ref) {
5149-
zend_reference *r = Z_REF_P(ref);
5150-
5151-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
5152-
efree_size(r, sizeof(zend_reference));
5149+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5150+
efree_size(ref, sizeof(zend_reference));
51535151
} else if (Z_OPT_REFCOUNTED_P(result)) {
51545152
Z_ADDREF_P(result);
51555153
}
@@ -5164,14 +5162,14 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CON
51645162
{
51655163
USE_OPLINE
51665164
zval *value;
5167-
zval *ref = NULL;
5165+
zend_reference *ref = NULL;
51685166

51695167
SAVE_OPLINE();
51705168
value = RT_CONSTANT(opline, opline->op1);
51715169

51725170
if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
51735171
if (IS_CONST & IS_VAR) {
5174-
ref = value;
5172+
ref = Z_REF_P(value);
51755173
}
51765174
value = Z_REFVAL_P(value);
51775175
}
@@ -5184,17 +5182,20 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CON
51845182
} else if (IS_CONST == IS_CV) {
51855183
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
51865184
} else if ((IS_CONST & IS_VAR) && ref) {
5187-
zend_reference *r = Z_REF_P(ref);
5188-
5189-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
5190-
efree_size(r, sizeof(zend_reference));
5185+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5186+
efree_size(ref, sizeof(zend_reference));
51915187
} else if (Z_OPT_REFCOUNTED_P(result)) {
51925188
Z_ADDREF_P(result);
51935189
}
51945190
}
51955191
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
51965192
}
51975193

5194+
if ((IS_CONST & IS_VAR) && ref) {
5195+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5196+
efree_size(ref, sizeof(zend_reference));
5197+
}
5198+
}
51985199
ZEND_VM_NEXT_OPCODE();
51995200
}
52005201

@@ -19210,15 +19211,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_
1921019211
{
1921119212
USE_OPLINE
1921219213
zval *value;
19213-
zval *ref = NULL;
19214+
zend_reference *ref = NULL;
1921419215
bool ret;
1921519216

1921619217
SAVE_OPLINE();
1921719218
value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
1921819219

1921919220
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
1922019221
if (IS_TMP_VAR == IS_VAR) {
19221-
ref = value;
19222+
ref = Z_REF_P(value);
1922219223
}
1922319224
value = Z_REFVAL_P(value);
1922419225
}
@@ -19240,10 +19241,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_
1924019241
} else if (IS_TMP_VAR == IS_CV) {
1924119242
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
1924219243
} else if (IS_TMP_VAR == IS_VAR && ref) {
19243-
zend_reference *r = Z_REF_P(ref);
19244-
19245-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
19246-
efree_size(r, sizeof(zend_reference));
19244+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19245+
efree_size(ref, sizeof(zend_reference));
1924719246
} else if (Z_OPT_REFCOUNTED_P(result)) {
1924819247
Z_ADDREF_P(result);
1924919248
}
@@ -19259,14 +19258,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND
1925919258
{
1926019259
USE_OPLINE
1926119260
zval *value;
19262-
zval *ref = NULL;
19261+
zend_reference *ref = NULL;
1926319262

1926419263
SAVE_OPLINE();
1926519264
value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
1926619265

1926719266
if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
1926819267
if (IS_TMP_VAR & IS_VAR) {
19269-
ref = value;
19268+
ref = Z_REF_P(value);
1927019269
}
1927119270
value = Z_REFVAL_P(value);
1927219271
}
@@ -19279,18 +19278,20 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND
1927919278
} else if (IS_TMP_VAR == IS_CV) {
1928019279
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
1928119280
} else if ((IS_TMP_VAR & IS_VAR) && ref) {
19282-
zend_reference *r = Z_REF_P(ref);
19283-
19284-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
19285-
efree_size(r, sizeof(zend_reference));
19281+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19282+
efree_size(ref, sizeof(zend_reference));
1928619283
} else if (Z_OPT_REFCOUNTED_P(result)) {
1928719284
Z_ADDREF_P(result);
1928819285
}
1928919286
}
1929019287
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
1929119288
}
1929219289

19293-
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19290+
if ((IS_TMP_VAR & IS_VAR) && ref) {
19291+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19292+
efree_size(ref, sizeof(zend_reference));
19293+
}
19294+
}
1929419295
ZEND_VM_NEXT_OPCODE();
1929519296
}
1929619297

@@ -22045,15 +22046,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_
2204522046
{
2204622047
USE_OPLINE
2204722048
zval *value;
22048-
zval *ref = NULL;
22049+
zend_reference *ref = NULL;
2204922050
bool ret;
2205022051

2205122052
SAVE_OPLINE();
2205222053
value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
2205322054

2205422055
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
2205522056
if (IS_VAR == IS_VAR) {
22056-
ref = value;
22057+
ref = Z_REF_P(value);
2205722058
}
2205822059
value = Z_REFVAL_P(value);
2205922060
}
@@ -22075,10 +22076,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_
2207522076
} else if (IS_VAR == IS_CV) {
2207622077
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
2207722078
} else if (IS_VAR == IS_VAR && ref) {
22078-
zend_reference *r = Z_REF_P(ref);
22079-
22080-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
22081-
efree_size(r, sizeof(zend_reference));
22079+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22080+
efree_size(ref, sizeof(zend_reference));
2208222081
} else if (Z_OPT_REFCOUNTED_P(result)) {
2208322082
Z_ADDREF_P(result);
2208422083
}
@@ -22094,14 +22093,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND
2209422093
{
2209522094
USE_OPLINE
2209622095
zval *value;
22097-
zval *ref = NULL;
22096+
zend_reference *ref = NULL;
2209822097

2209922098
SAVE_OPLINE();
2210022099
value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
2210122100

2210222101
if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
2210322102
if (IS_VAR & IS_VAR) {
22104-
ref = value;
22103+
ref = Z_REF_P(value);
2210522104
}
2210622105
value = Z_REFVAL_P(value);
2210722106
}
@@ -22114,18 +22113,20 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND
2211422113
} else if (IS_VAR == IS_CV) {
2211522114
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
2211622115
} else if ((IS_VAR & IS_VAR) && ref) {
22117-
zend_reference *r = Z_REF_P(ref);
22118-
22119-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
22120-
efree_size(r, sizeof(zend_reference));
22116+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22117+
efree_size(ref, sizeof(zend_reference));
2212122118
} else if (Z_OPT_REFCOUNTED_P(result)) {
2212222119
Z_ADDREF_P(result);
2212322120
}
2212422121
}
2212522122
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
2212622123
}
2212722124

22128-
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22125+
if ((IS_VAR & IS_VAR) && ref) {
22126+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22127+
efree_size(ref, sizeof(zend_reference));
22128+
}
22129+
}
2212922130
ZEND_VM_NEXT_OPCODE();
2213022131
}
2213122132

@@ -38402,15 +38403,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_O
3840238403
{
3840338404
USE_OPLINE
3840438405
zval *value;
38405-
zval *ref = NULL;
38406+
zend_reference *ref = NULL;
3840638407
bool ret;
3840738408

3840838409
SAVE_OPLINE();
3840938410
value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
3841038411

3841138412
if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
3841238413
if (IS_CV == IS_VAR) {
38413-
ref = value;
38414+
ref = Z_REF_P(value);
3841438415
}
3841538416
value = Z_REFVAL_P(value);
3841638417
}
@@ -38432,10 +38433,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_O
3843238433
} else if (IS_CV == IS_CV) {
3843338434
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
3843438435
} else if (IS_CV == IS_VAR && ref) {
38435-
zend_reference *r = Z_REF_P(ref);
38436-
38437-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
38438-
efree_size(r, sizeof(zend_reference));
38436+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38437+
efree_size(ref, sizeof(zend_reference));
3843938438
} else if (Z_OPT_REFCOUNTED_P(result)) {
3844038439
Z_ADDREF_P(result);
3844138440
}
@@ -38450,14 +38449,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
3845038449
{
3845138450
USE_OPLINE
3845238451
zval *value;
38453-
zval *ref = NULL;
38452+
zend_reference *ref = NULL;
3845438453

3845538454
SAVE_OPLINE();
3845638455
value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
3845738456

3845838457
if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
3845938458
if (IS_CV & IS_VAR) {
38460-
ref = value;
38459+
ref = Z_REF_P(value);
3846138460
}
3846238461
value = Z_REFVAL_P(value);
3846338462
}
@@ -38470,17 +38469,20 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
3847038469
} else if (IS_CV == IS_CV) {
3847138470
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
3847238471
} else if ((IS_CV & IS_VAR) && ref) {
38473-
zend_reference *r = Z_REF_P(ref);
38474-
38475-
if (UNEXPECTED(GC_DELREF(r) == 0)) {
38476-
efree_size(r, sizeof(zend_reference));
38472+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38473+
efree_size(ref, sizeof(zend_reference));
3847738474
} else if (Z_OPT_REFCOUNTED_P(result)) {
3847838475
Z_ADDREF_P(result);
3847938476
}
3848038477
}
3848138478
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3848238479
}
3848338480

38481+
if ((IS_CV & IS_VAR) && ref) {
38482+
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38483+
efree_size(ref, sizeof(zend_reference));
38484+
}
38485+
}
3848438486
ZEND_VM_NEXT_OPCODE();
3848538487
}
3848638488

0 commit comments

Comments
 (0)