Skip to content

Commit 724c4fb

Browse files
committed
JIT: Avoid duplicate EX(opline) assignment
1 parent ac70bb3 commit 724c4fb

File tree

2 files changed

+26
-38
lines changed

2 files changed

+26
-38
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4447,8 +4447,8 @@ static int zend_jit_math_helper(dasm_State **Dst,
44474447
} else {
44484448
ZEND_UNREACHABLE();
44494449
}
4450-
| FREE_OP op1_type, op1, op1_info, 0, opline, ZREG_TMP1, ZREG_TMP2
4451-
| FREE_OP op2_type, op2, op2_info, 0, opline, ZREG_TMP1, ZREG_TMP2
4450+
| FREE_OP op1_type, op1, op1_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
4451+
| FREE_OP op2_type, op2, op2_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
44524452
if (may_throw) {
44534453
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) {
44544454
zend_jit_check_exception_undef_result(Dst, opline);
@@ -4792,8 +4792,8 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
47924792
} else {
47934793
ZEND_UNREACHABLE();
47944794
}
4795-
| FREE_OP op1_type, op1, op1_info, 0, opline, ZREG_TMP1, ZREG_TMP2
4796-
| FREE_OP op2_type, op2, op2_info, 0, opline, ZREG_TMP1, ZREG_TMP2
4795+
| FREE_OP op1_type, op1, op1_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
4796+
| FREE_OP op2_type, op2, op2_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
47974797
if (may_throw) {
47984798
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) {
47994799
zend_jit_check_exception_undef_result(Dst, opline);
@@ -4901,8 +4901,8 @@ static int zend_jit_concat_helper(dasm_State **Dst,
49014901
/* concatination with empty string may increase refcount */
49024902
op1_info |= MAY_BE_RCN;
49034903
op2_info |= MAY_BE_RCN;
4904-
| FREE_OP op1_type, op1, op1_info, 0, opline, ZREG_TMP1, ZREG_TMP2
4905-
| FREE_OP op2_type, op2, op2_info, 0, opline, ZREG_TMP1, ZREG_TMP2
4904+
| FREE_OP op1_type, op1, op1_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
4905+
| FREE_OP op2_type, op2, op2_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
49064906
if (may_throw) {
49074907
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) {
49084908
zend_jit_check_exception_undef_result(Dst, opline);
@@ -6019,7 +6019,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t
60196019
}
60206020
#endif
60216021

6022-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline, ZREG_TMP1, ZREG_TMP2
6022+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
60236023
}
60246024

60256025
if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) {
@@ -6252,8 +6252,8 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint3
62526252
| EXT_CALL zend_jit_assign_dim_op_helper, REG0
62536253

62546254
|9:
6255-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, op1_data_info, 0, opline, ZREG_TMP1, ZREG_TMP2
6256-
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline, ZREG_TMP1, ZREG_TMP2
6255+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, op1_data_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
6256+
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
62576257
if (may_throw) {
62586258
zend_jit_check_exception(Dst);
62596259
}
@@ -7363,9 +7363,9 @@ static int zend_jit_cmp(dasm_State **Dst,
73637363
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) {
73647364
| str RETVALw, T1 // save
73657365
if (opline->opcode != ZEND_CASE) {
7366-
| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline, ZREG_TMP1, ZREG_TMP2
7366+
| FREE_OP opline->op1_type, opline->op1, op1_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
73677367
}
7368-
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline, ZREG_TMP1, ZREG_TMP2
7368+
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, NULL, ZREG_TMP1, ZREG_TMP2
73697369
| ldr RETVALw, T1 // restore
73707370
}
73717371
if (may_throw) {
@@ -7548,7 +7548,6 @@ static int zend_jit_identical(dasm_State **Dst,
75487548
(op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) ||
75497549
((opline->op2_type & (IS_VAR|IS_TMP_VAR)) &&
75507550
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) {
7551-
| SET_EX_OPLINE opline, REG0
75527551
if (opline->opcode != ZEND_CASE_STRICT) {
75537552
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline, ZREG_TMP1, ZREG_TMP2
75547553
}
@@ -7630,7 +7629,6 @@ static int zend_jit_identical(dasm_State **Dst,
76307629
if (smart_branch_opcode) {
76317630
if (opline->op2_type == IS_VAR && (op2_info & MAY_BE_REF)) {
76327631
| bne >8
7633-
| SET_EX_OPLINE opline, REG0
76347632
| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline, ZREG_TMP1, ZREG_TMP2
76357633
if (may_throw) {
76367634
zend_jit_check_exception_undef_result(Dst, opline);
@@ -7661,7 +7659,6 @@ static int zend_jit_identical(dasm_State **Dst,
76617659
}
76627660
if ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) &&
76637661
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
7664-
| SET_EX_OPLINE opline, REG0
76657662
| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline, ZREG_TMP1, ZREG_TMP2
76667663
if (may_throw) {
76677664
zend_jit_check_exception_undef_result(Dst, opline);
@@ -7683,7 +7680,6 @@ static int zend_jit_identical(dasm_State **Dst,
76837680
if (opline->opcode != ZEND_CASE_STRICT
76847681
&& opline->op1_type == IS_VAR && (op1_info & MAY_BE_REF)) {
76857682
| bne >8
7686-
| SET_EX_OPLINE opline, REG0
76877683
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline, ZREG_TMP1, ZREG_TMP2
76887684
if (may_throw) {
76897685
zend_jit_check_exception_undef_result(Dst, opline);
@@ -7715,7 +7711,6 @@ static int zend_jit_identical(dasm_State **Dst,
77157711
if (opline->opcode != ZEND_CASE_STRICT
77167712
&& (opline->op1_type & (IS_VAR|IS_TMP_VAR)) &&
77177713
(op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
7718-
| SET_EX_OPLINE opline, REG0
77197714
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline, ZREG_TMP1, ZREG_TMP2
77207715
if (may_throw) {
77217716
zend_jit_check_exception_undef_result(Dst, opline);
@@ -7744,7 +7739,6 @@ static int zend_jit_identical(dasm_State **Dst,
77447739
((opline->op2_type & (IS_VAR|IS_TMP_VAR)) &&
77457740
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) {
77467741
| str RETVALw, T1 // save
7747-
| SET_EX_OPLINE opline, REG0
77487742
if (opline->opcode != ZEND_CASE_STRICT) {
77497743
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline, ZREG_TMP1, ZREG_TMP2
77507744
}
@@ -13064,7 +13058,7 @@ static int zend_jit_assign_obj_op(dasm_State **Dst,
1306413058
info |= MAY_BE_RC1|MAY_BE_RCN;
1306513059
}
1306613060

13067-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, opline, ZREG_TMP1, ZREG_TMP2
13061+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, NULL, ZREG_TMP1, ZREG_TMP2
1306813062
}
1306913063
}
1307013064

@@ -13440,7 +13434,7 @@ static int zend_jit_assign_obj(dasm_State **Dst,
1344013434
info |= MAY_BE_RC1|MAY_BE_RCN;
1344113435
}
1344213436

13443-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, opline, ZREG_TMP1, ZREG_TMP2
13437+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, NULL, ZREG_TMP1, ZREG_TMP2
1344413438
}
1344513439
}
1344613440

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4869,8 +4869,8 @@ static int zend_jit_math_helper(dasm_State **Dst,
48694869
|.if not(X64)
48704870
| add r4, 12
48714871
|.endif
4872-
| FREE_OP op1_type, op1, op1_info, 0, opline
4873-
| FREE_OP op2_type, op2, op2_info, 0, opline
4872+
| FREE_OP op1_type, op1, op1_info, 0, NULL
4873+
| FREE_OP op2_type, op2, op2_info, 0, NULL
48744874
if (may_throw) {
48754875
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) {
48764876
zend_jit_check_exception_undef_result(Dst, opline);
@@ -5243,8 +5243,8 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
52435243
|.if not(X64)
52445244
| add r4, 12
52455245
|.endif
5246-
| FREE_OP op1_type, op1, op1_info, 0, opline
5247-
| FREE_OP op2_type, op2, op2_info, 0, opline
5246+
| FREE_OP op1_type, op1, op1_info, 0, NULL
5247+
| FREE_OP op2_type, op2, op2_info, 0, NULL
52485248
if (may_throw) {
52495249
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) {
52505250
zend_jit_check_exception_undef_result(Dst, opline);
@@ -5370,8 +5370,8 @@ static int zend_jit_concat_helper(dasm_State **Dst,
53705370
/* concatination with empty string may increase refcount */
53715371
op1_info |= MAY_BE_RCN;
53725372
op2_info |= MAY_BE_RCN;
5373-
| FREE_OP op1_type, op1, op1_info, 0, opline
5374-
| FREE_OP op2_type, op2, op2_info, 0, opline
5373+
| FREE_OP op1_type, op1, op1_info, 0, NULL
5374+
| FREE_OP op2_type, op2, op2_info, 0, NULL
53755375
if (may_throw) {
53765376
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) {
53775377
zend_jit_check_exception_undef_result(Dst, opline);
@@ -6522,7 +6522,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t
65226522
}
65236523
#endif
65246524

6525-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline
6525+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, NULL
65266526
}
65276527

65286528
if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) {
@@ -6770,8 +6770,8 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint3
67706770
|.endif
67716771

67726772
|9:
6773-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, op1_data_info, 0, opline
6774-
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline
6773+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, op1_data_info, 0, NULL
6774+
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, NULL
67756775
if (may_throw) {
67766776
zend_jit_check_exception(Dst);
67776777
}
@@ -7898,9 +7898,9 @@ static int zend_jit_cmp(dasm_State **Dst,
78987898
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) {
78997899
| mov dword T1, eax // save
79007900
if (opline->opcode != ZEND_CASE) {
7901-
| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline
7901+
| FREE_OP opline->op1_type, opline->op1, op1_info, 0, NULL
79027902
}
7903-
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline
7903+
| FREE_OP opline->op2_type, opline->op2, op2_info, 0, NULL
79047904
if (may_throw) {
79057905
zend_jit_check_exception_undef_result(Dst, opline);
79067906
}
@@ -8099,7 +8099,6 @@ static int zend_jit_identical(dasm_State **Dst,
80998099
(op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) ||
81008100
((opline->op2_type & (IS_VAR|IS_TMP_VAR)) &&
81018101
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) {
8102-
| SET_EX_OPLINE opline, r0
81038102
if (opline->opcode != ZEND_CASE_STRICT) {
81048103
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline
81058104
}
@@ -8180,7 +8179,6 @@ static int zend_jit_identical(dasm_State **Dst,
81808179
if (smart_branch_opcode) {
81818180
if (opline->op2_type == IS_VAR && (op2_info & MAY_BE_REF)) {
81828181
| jne >8
8183-
| SET_EX_OPLINE opline, r0
81848182
| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline
81858183
if (may_throw) {
81868184
zend_jit_check_exception_undef_result(Dst, opline);
@@ -8212,7 +8210,6 @@ static int zend_jit_identical(dasm_State **Dst,
82128210
}
82138211
if ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) &&
82148212
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
8215-
| SET_EX_OPLINE opline, r0
82168213
| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline
82178214
if (may_throw) {
82188215
zend_jit_check_exception_undef_result(Dst, opline);
@@ -8233,7 +8230,6 @@ static int zend_jit_identical(dasm_State **Dst,
82338230
if (opline->opcode != ZEND_CASE_STRICT
82348231
&& opline->op1_type == IS_VAR && (op1_info & MAY_BE_REF)) {
82358232
| jne >8
8236-
| SET_EX_OPLINE opline, r0
82378233
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline
82388234
if (may_throw) {
82398235
zend_jit_check_exception_undef_result(Dst, opline);
@@ -8266,7 +8262,6 @@ static int zend_jit_identical(dasm_State **Dst,
82668262
if (opline->opcode != ZEND_CASE_STRICT
82678263
&& (opline->op1_type & (IS_VAR|IS_TMP_VAR)) &&
82688264
(op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
8269-
| SET_EX_OPLINE opline, r0
82708265
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline
82718266
if (may_throw) {
82728267
zend_jit_check_exception_undef_result(Dst, opline);
@@ -8295,7 +8290,6 @@ static int zend_jit_identical(dasm_State **Dst,
82958290
((opline->op2_type & (IS_VAR|IS_TMP_VAR)) &&
82968291
(op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) {
82978292
| mov aword T1, r0 // save
8298-
| SET_EX_OPLINE opline, r0
82998293
if (opline->opcode != ZEND_CASE_STRICT) {
83008294
| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline
83018295
}
@@ -13820,7 +13814,7 @@ static int zend_jit_assign_obj_op(dasm_State **Dst,
1382013814
info |= MAY_BE_RC1|MAY_BE_RCN;
1382113815
}
1382213816

13823-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, opline
13817+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, NULL
1382413818
}
1382513819
}
1382613820

@@ -14248,7 +14242,7 @@ static int zend_jit_assign_obj(dasm_State **Dst,
1424814242
info |= MAY_BE_RC1|MAY_BE_RCN;
1424914243
}
1425014244

14251-
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, opline
14245+
| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, NULL
1425214246
}
1425314247
}
1425414248

0 commit comments

Comments
 (0)