Lines Matching refs:opline

55 	zend_op *opline;  in zend_optimizer_pass3()  local
64 opline = op_array->opcodes; in zend_optimizer_pass3()
66 while (opline < end) { in zend_optimizer_pass3()
69 switch (opline->opcode) { in zend_optimizer_pass3()
83 zend_op *next_opline = opline + 1; in zend_optimizer_pass3()
93 if ((opline->op2_type & (IS_VAR | IS_CV)) in zend_optimizer_pass3()
94 && opline->op2.var == next_opline->op1.var && in zend_optimizer_pass3()
95 (opline->opcode == ZEND_ADD || in zend_optimizer_pass3()
96 opline->opcode == ZEND_BW_OR || in zend_optimizer_pass3()
97 opline->opcode == ZEND_BW_AND || in zend_optimizer_pass3()
98 opline->opcode == ZEND_BW_XOR)) { in zend_optimizer_pass3()
102 zend_uchar tmp_type = opline->op1_type; in zend_optimizer_pass3()
103 znode_op tmp = opline->op1; in zend_optimizer_pass3()
105 if (opline->opcode != ZEND_ADD in zend_optimizer_pass3()
106 || (opline->op1_type == IS_CONST in zend_optimizer_pass3()
107 && Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_ARRAY)) { in zend_optimizer_pass3()
109 COPY_NODE(opline->op1, opline->op2); in zend_optimizer_pass3()
110 COPY_NODE(opline->op2, tmp); in zend_optimizer_pass3()
113 if ((opline->op1_type & (IS_VAR | IS_CV)) in zend_optimizer_pass3()
114 && opline->op1.var == next_opline->op1.var in zend_optimizer_pass3()
115 && opline->op1_type == next_opline->op1_type) { in zend_optimizer_pass3()
116 switch (opline->opcode) { in zend_optimizer_pass3()
118 opline->opcode = ZEND_ASSIGN_ADD; in zend_optimizer_pass3()
121 opline->opcode = ZEND_ASSIGN_SUB; in zend_optimizer_pass3()
124 opline->opcode = ZEND_ASSIGN_MUL; in zend_optimizer_pass3()
127 opline->opcode = ZEND_ASSIGN_DIV; in zend_optimizer_pass3()
130 opline->opcode = ZEND_ASSIGN_MOD; in zend_optimizer_pass3()
133 opline->opcode = ZEND_ASSIGN_POW; in zend_optimizer_pass3()
136 opline->opcode = ZEND_ASSIGN_CONCAT; in zend_optimizer_pass3()
139 opline->opcode = ZEND_ASSIGN_SL; in zend_optimizer_pass3()
142 opline->opcode = ZEND_ASSIGN_SR; in zend_optimizer_pass3()
145 opline->opcode = ZEND_ASSIGN_BW_OR; in zend_optimizer_pass3()
148 opline->opcode = ZEND_ASSIGN_BW_AND; in zend_optimizer_pass3()
151 opline->opcode = ZEND_ASSIGN_BW_XOR; in zend_optimizer_pass3()
154 COPY_NODE(opline->result, next_opline->result); in zend_optimizer_pass3()
156 opline++; in zend_optimizer_pass3()
168 if (ZEND_OP1_JMP_ADDR(opline) == opline + 1) { in zend_optimizer_pass3()
169 MAKE_NOP(opline); in zend_optimizer_pass3()
174 while (ZEND_OP1_JMP_ADDR(opline) < end in zend_optimizer_pass3()
175 && ZEND_OP1_JMP_ADDR(opline)->opcode == ZEND_JMP) { in zend_optimizer_pass3()
176 zend_op *target = ZEND_OP1_JMP_ADDR(opline); in zend_optimizer_pass3()
178 ZEND_SET_OP_JMP_ADDR(opline, opline->op1, ZEND_OP1_JMP_ADDR(target)); in zend_optimizer_pass3()
188 while (ZEND_OP2_JMP_ADDR(opline) < end) { in zend_optimizer_pass3()
189 zend_op *target = ZEND_OP2_JMP_ADDR(opline); in zend_optimizer_pass3()
191 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP1_JMP_ADDR(target)); in zend_optimizer_pass3()
203 while (ZEND_OP2_JMP_ADDR(opline) < end) { in zend_optimizer_pass3()
204 zend_op *target = ZEND_OP2_JMP_ADDR(opline); in zend_optimizer_pass3()
210 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP1_JMP_ADDR(target)); in zend_optimizer_pass3()
211 } else if (target->opcode == opline->opcode && in zend_optimizer_pass3()
212 SAME_VAR(opline->op1, target->op1)) { in zend_optimizer_pass3()
216 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP2_JMP_ADDR(target)); in zend_optimizer_pass3()
217 } else if (target->opcode == opline->opcode + 3 && in zend_optimizer_pass3()
218 SAME_VAR(opline->op1, target->op1)) { in zend_optimizer_pass3()
221 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP2_JMP_ADDR(target)); in zend_optimizer_pass3()
222 opline->opcode += 3; in zend_optimizer_pass3()
223 COPY_NODE(opline->result, target->result); in zend_optimizer_pass3()
225 } else if (target->opcode == INV_COND(opline->opcode) && in zend_optimizer_pass3()
226 SAME_VAR(opline->op1, target->op1)) { in zend_optimizer_pass3()
229 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1); in zend_optimizer_pass3()
231 } else if (target->opcode == INV_COND_EX(opline->opcode) && in zend_optimizer_pass3()
232 SAME_VAR(opline->op1, target->op1)) { in zend_optimizer_pass3()
235 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1); in zend_optimizer_pass3()
236 opline->opcode += 3; in zend_optimizer_pass3()
237 COPY_NODE(opline->result, target->result); in zend_optimizer_pass3()
247 zend_uchar T_type = opline->result_type; in zend_optimizer_pass3()
248 znode_op T = opline->result; in zend_optimizer_pass3()
256 if (ZEND_OP2_JMP_ADDR(opline) == opline + 1) { in zend_optimizer_pass3()
257 if (opline->op1.var == opline->result.var) { in zend_optimizer_pass3()
258 MAKE_NOP(opline); in zend_optimizer_pass3()
260 opline->opcode = ZEND_BOOL; in zend_optimizer_pass3()
261 SET_UNUSED(opline->op2); in zend_optimizer_pass3()
266 while (ZEND_OP2_JMP_ADDR(opline) < end) { in zend_optimizer_pass3()
267 zend_op *target = ZEND_OP2_JMP_ADDR(opline); in zend_optimizer_pass3()
269 if (target->opcode == opline->opcode-3 && in zend_optimizer_pass3()
274 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP2_JMP_ADDR(target)); in zend_optimizer_pass3()
275 } else if (target->opcode == opline->opcode && in zend_optimizer_pass3()
281 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP2_JMP_ADDR(target)); in zend_optimizer_pass3()
288 if (opline->opcode == ZEND_JMPZ_EX) { in zend_optimizer_pass3()
294 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, new_target); in zend_optimizer_pass3()
295 } else if ((target->opcode == INV_EX_COND_EX(opline->opcode) || in zend_optimizer_pass3()
296 target->opcode == INV_EX_COND(opline->opcode)) && in zend_optimizer_pass3()
297 SAME_VAR(opline->op1, target->op1)) { in zend_optimizer_pass3()
300 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1); in zend_optimizer_pass3()
302 } else if (target->opcode == INV_EX_COND(opline->opcode) && in zend_optimizer_pass3()
306 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1); in zend_optimizer_pass3()
308 } else if (target->opcode == INV_EX_COND_EX(opline->opcode) && in zend_optimizer_pass3()
313 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1); in zend_optimizer_pass3()
316 SAME_VAR(opline->result, target->op1)) { in zend_optimizer_pass3()
319 opline->result.var = target->result.var; in zend_optimizer_pass3()
320 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1); in zend_optimizer_pass3()
332 for(op = opline+1; op<end; op++) { in zend_optimizer_pass3()
334 op->result.var == opline->result.var) { in zend_optimizer_pass3()
355 op->op1.var == opline->result.var) { in zend_optimizer_pass3()
360 op->op2.var == opline->result.var) { in zend_optimizer_pass3()
365 for(op = &op_array->opcodes[opline->op2.opline_num]; op<end; op++) { in zend_optimizer_pass3()
368 op->result.var == opline->result.var) { in zend_optimizer_pass3()
389 op->op1.var == opline->result.var) { in zend_optimizer_pass3()
394 op->op2.var == opline->result.var) { in zend_optimizer_pass3()
399 opline->opcode = opline->opcode-3; /* JMP_EX -> JMP */ in zend_optimizer_pass3()
400 SET_UNUSED(opline->result); in zend_optimizer_pass3()
413 while (ZEND_OP2_JMP_ADDR(opline) < end in zend_optimizer_pass3()
414 && ZEND_OP2_JMP_ADDR(opline)->opcode == ZEND_JMP) { in zend_optimizer_pass3()
415 zend_op *target = ZEND_OP2_JMP_ADDR(opline); in zend_optimizer_pass3()
417 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP1_JMP_ADDR(target)); in zend_optimizer_pass3()
421 while (ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) < end in zend_optimizer_pass3()
422 && ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value)->opcode == ZEND_JMP) { in zend_optimizer_pass3()
423 zend_op *target = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); in zend_optimizer_pass3()
425 opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, ZEND_OP1_JMP_ADDR(target)); in zend_optimizer_pass3()
432 zend_op *next_op = opline + 1; in zend_optimizer_pass3()
438 next_op->op1.var == opline->result.var) { in zend_optimizer_pass3()
440 opline->opcode -= 2; in zend_optimizer_pass3()
441 opline->result_type = IS_UNUSED; in zend_optimizer_pass3()
447 opline++; in zend_optimizer_pass3()