@@ -1120,6 +1120,34 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1120
1120
&& !(OP2_INFO () & MAY_BE_OBJECT )) {
1121
1121
opline -> opcode = ZEND_FAST_CONCAT ;
1122
1122
}
1123
+ } else if (opline -> opcode == ZEND_VERIFY_RETURN_TYPE
1124
+ && opline -> op1_type != IS_CONST
1125
+ && ssa -> ops [op_1 ].op1_def == v
1126
+ && ssa -> ops [op_1 ].op1_use >= 0
1127
+ && ssa -> ops [op_1 ].op1_use_chain == -1
1128
+ && ssa -> vars [v ].use_chain >= 0
1129
+ && can_elide_return_type_check (op_array , ssa , & ssa -> ops [op_1 ])) {
1130
+
1131
+ // op_1: VERIFY_RETURN_TYPE #orig_var.? [T] -> #v.? [T] => NOP
1132
+
1133
+ int orig_var = ssa -> ops [op_1 ].op1_use ;
1134
+ if (zend_ssa_unlink_use_chain (ssa , op_1 , orig_var )) {
1135
+
1136
+ int ret = ssa -> vars [v ].use_chain ;
1137
+
1138
+ ssa -> ops [ret ].op1_use = orig_var ;
1139
+ ssa -> ops [ret ].op1_use_chain = ssa -> vars [orig_var ].use_chain ;
1140
+ ssa -> vars [orig_var ].use_chain = ret ;
1141
+
1142
+ ssa -> vars [v ].definition = -1 ;
1143
+ ssa -> vars [v ].use_chain = -1 ;
1144
+
1145
+ ssa -> ops [op_1 ].op1_def = -1 ;
1146
+ ssa -> ops [op_1 ].op1_use = -1 ;
1147
+
1148
+ MAKE_NOP (opline );
1149
+ remove_nops = 1 ;
1150
+ }
1123
1151
}
1124
1152
}
1125
1153
@@ -1242,34 +1270,6 @@ void zend_dfa_optimize_op_array(zend_op_array *op_array, zend_optimizer_ctx *ctx
1242
1270
opline -> extended_value = 0 ;
1243
1271
SET_UNUSED (opline -> op2 );
1244
1272
1245
- } else if (opline -> opcode == ZEND_VERIFY_RETURN_TYPE
1246
- && ssa -> ops [op_1 ].op1_def == v
1247
- && ssa -> ops [op_1 ].op1_use >= 0
1248
- && ssa -> ops [op_1 ].op1_use_chain == -1
1249
- && ssa -> vars [v ].use_chain >= 0
1250
- && can_elide_return_type_check (op_array , ssa , & ssa -> ops [op_1 ])) {
1251
-
1252
- // op_1: VERIFY_RETURN_TYPE #orig_var.CV [T] -> #v.CV [T] => NOP
1253
-
1254
- int orig_var = ssa -> ops [op_1 ].op1_use ;
1255
- if (zend_ssa_unlink_use_chain (ssa , op_1 , orig_var )) {
1256
-
1257
- int ret = ssa -> vars [v ].use_chain ;
1258
-
1259
- ssa -> ops [ret ].op1_use = orig_var ;
1260
- ssa -> ops [ret ].op1_use_chain = ssa -> vars [orig_var ].use_chain ;
1261
- ssa -> vars [orig_var ].use_chain = ret ;
1262
-
1263
- ssa -> vars [v ].definition = -1 ;
1264
- ssa -> vars [v ].use_chain = -1 ;
1265
-
1266
- ssa -> ops [op_1 ].op1_def = -1 ;
1267
- ssa -> ops [op_1 ].op1_use = -1 ;
1268
-
1269
- MAKE_NOP (opline );
1270
- remove_nops = 1 ;
1271
- }
1272
-
1273
1273
} else if (ssa -> ops [op_1 ].op1_def == v
1274
1274
&& !RETURN_VALUE_USED (opline )
1275
1275
&& ssa -> ops [op_1 ].op1_use >= 0
0 commit comments