Lines Matching refs:opline

215 					zend_op *opline;  in zend_ssa_remove_nops()  local
219 opline = op_array->opcodes + old_end - 1; in zend_ssa_remove_nops()
220 if (opline->opcode == ZEND_NOP) { in zend_ssa_remove_nops()
225 zend_optimizer_migrate_jump(op_array, new_opline, opline); in zend_ssa_remove_nops()
266 zend_op *opline = op_array->opcodes + b->start + b->len - 1; in zend_ssa_remove_nops() local
267 zend_optimizer_shift_jump(op_array, opline, shiftlist); in zend_ssa_remove_nops()
352 zend_ssa *ssa, zend_op *opline, int src_var, uint32_t cv_var) { in opline_supports_assign_contraction() argument
353 if (opline->opcode == ZEND_NEW) { in opline_supports_assign_contraction()
358 if (opline->opcode == ZEND_DO_ICALL || opline->opcode == ZEND_DO_UCALL in opline_supports_assign_contraction()
359 || opline->opcode == ZEND_DO_FCALL || opline->opcode == ZEND_DO_FCALL_BY_NAME) { in opline_supports_assign_contraction()
367 if (opline->opcode == ZEND_POST_INC || opline->opcode == ZEND_POST_DEC) { in opline_supports_assign_contraction()
370 return opline->op1_type != IS_CV || opline->op1.var != cv_var; in opline_supports_assign_contraction()
373 if (opline->opcode == ZEND_INIT_ARRAY) { in opline_supports_assign_contraction()
375 return (opline->op1_type != IS_CV || opline->op1.var != cv_var) in opline_supports_assign_contraction()
376 && (opline->op2_type != IS_CV || opline->op2.var != cv_var); in opline_supports_assign_contraction()
379 if (opline->opcode == ZEND_CAST in opline_supports_assign_contraction()
380 && (opline->extended_value == IS_ARRAY || opline->extended_value == IS_OBJECT)) { in opline_supports_assign_contraction()
383 return opline->op1_type != IS_CV || opline->op1.var != cv_var; in opline_supports_assign_contraction()
545 zend_op *opline = &op_array->opcodes[block->start + block->len - 1]; in compress_block() local
547 if (opline->opcode == ZEND_NOP in compress_block()
548 && (block->len == 1 || !zend_is_smart_branch(opline - 1))) { in compress_block()
605 zend_op *opline; in zend_ssa_replace_control_link() local
614 opline = op_array->opcodes + src->start + src->len - 1; in zend_ssa_replace_control_link()
615 switch (opline->opcode) { in zend_ssa_replace_control_link()
618 ZEND_ASSERT(ZEND_OP1_JMP_ADDR(opline) == op_array->opcodes + old->start); in zend_ssa_replace_control_link()
619 ZEND_SET_OP_JMP_ADDR(opline, opline->op1, op_array->opcodes + dst->start); in zend_ssa_replace_control_link()
622 if (ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) == old->start) { in zend_ssa_replace_control_link()
623 opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, dst->start); in zend_ssa_replace_control_link()
635 if (ZEND_OP2_JMP_ADDR(opline) == op_array->opcodes + old->start) { in zend_ssa_replace_control_link()
636 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, op_array->opcodes + dst->start); in zend_ssa_replace_control_link()
640 if (!(opline->extended_value & ZEND_LAST_CATCH)) { in zend_ssa_replace_control_link()
641 if (ZEND_OP2_JMP_ADDR(opline) == op_array->opcodes + old->start) { in zend_ssa_replace_control_link()
642 ZEND_SET_OP_JMP_ADDR(opline, opline->op2, op_array->opcodes + dst->start); in zend_ssa_replace_control_link()
648 if (ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) == old->start) { in zend_ssa_replace_control_link()
649 opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, dst->start); in zend_ssa_replace_control_link()
655 HashTable *jumptable = Z_ARRVAL(ZEND_OP2_LITERAL(opline)); in zend_ssa_replace_control_link()
658 if (ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(zv)) == old->start) { in zend_ssa_replace_control_link()
659 Z_LVAL_P(zv) = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, dst->start); in zend_ssa_replace_control_link()
662 if (ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) == old->start) { in zend_ssa_replace_control_link()
663 opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, dst->start); in zend_ssa_replace_control_link()
713 zend_op *opline; in zend_dfa_optimize_jmps() local
723 opline = op_array->opcodes + op_num; in zend_dfa_optimize_jmps()
726 switch (opline->opcode) { in zend_dfa_optimize_jmps()
730 MAKE_NOP(opline); in zend_dfa_optimize_jmps()
737 if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
738 if (zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { in zend_dfa_optimize_jmps()
739 MAKE_NOP(opline); in zend_dfa_optimize_jmps()
744 opline->opcode = ZEND_JMP; in zend_dfa_optimize_jmps()
745 COPY_NODE(opline->op1, opline->op2); in zend_dfa_optimize_jmps()
752 if (opline->op1_type == IS_CV && (OP1_INFO() & MAY_BE_UNDEF)) { in zend_dfa_optimize_jmps()
753 opline->opcode = ZEND_CHECK_VAR; in zend_dfa_optimize_jmps()
754 opline->op2.num = 0; in zend_dfa_optimize_jmps()
755 …} else if (opline->op1_type == IS_CV || !(OP1_INFO() & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|M… in zend_dfa_optimize_jmps()
756 zend_ssa_remove_instr(ssa, opline, ssa_op); in zend_dfa_optimize_jmps()
760 opline->opcode = ZEND_FREE; in zend_dfa_optimize_jmps()
761 opline->op2.num = 0; in zend_dfa_optimize_jmps()
768 if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
769 if (zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { in zend_dfa_optimize_jmps()
770 opline->opcode = ZEND_JMP; in zend_dfa_optimize_jmps()
771 COPY_NODE(opline->op1, opline->op2); in zend_dfa_optimize_jmps()
775 MAKE_NOP(opline); in zend_dfa_optimize_jmps()
783 if (opline->op1_type == IS_CV && (OP1_INFO() & MAY_BE_UNDEF)) { in zend_dfa_optimize_jmps()
784 opline->opcode = ZEND_CHECK_VAR; in zend_dfa_optimize_jmps()
785 opline->op2.num = 0; in zend_dfa_optimize_jmps()
786 …} else if (opline->op1_type == IS_CV || !(OP1_INFO() & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|M… in zend_dfa_optimize_jmps()
787 zend_ssa_remove_instr(ssa, opline, ssa_op); in zend_dfa_optimize_jmps()
791 opline->opcode = ZEND_FREE; in zend_dfa_optimize_jmps()
792 opline->op2.num = 0; in zend_dfa_optimize_jmps()
798 if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
799 if (zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { in zend_dfa_optimize_jmps()
800 zend_op *target_opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); in zend_dfa_optimize_jmps()
801 ZEND_SET_OP_JMP_ADDR(opline, opline->op1, target_opline); in zend_dfa_optimize_jmps()
804 zend_op *target_opline = ZEND_OP2_JMP_ADDR(opline); in zend_dfa_optimize_jmps()
805 ZEND_SET_OP_JMP_ADDR(opline, opline->op1, target_opline); in zend_dfa_optimize_jmps()
808 opline->op1_type = IS_UNUSED; in zend_dfa_optimize_jmps()
809 opline->extended_value = 0; in zend_dfa_optimize_jmps()
810 opline->opcode = ZEND_JMP; in zend_dfa_optimize_jmps()
816 if (opline->op1_type == IS_CV && (OP1_INFO() & MAY_BE_UNDEF)) { in zend_dfa_optimize_jmps()
817 opline->opcode = ZEND_CHECK_VAR; in zend_dfa_optimize_jmps()
818 opline->op2.num = 0; in zend_dfa_optimize_jmps()
819 …} else if (opline->op1_type == IS_CV || !(OP1_INFO() & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|M… in zend_dfa_optimize_jmps()
820 zend_ssa_remove_instr(ssa, opline, ssa_op); in zend_dfa_optimize_jmps()
824 opline->opcode = ZEND_FREE; in zend_dfa_optimize_jmps()
825 opline->op2.num = 0; in zend_dfa_optimize_jmps()
827 …} else if ((opline->op1_type == IS_CV && !(OP1_INFO() & MAY_BE_UNDEF)) || !(OP1_INFO() & (MAY_BE_S… in zend_dfa_optimize_jmps()
832 opline->opcode = ZEND_JMP; in zend_dfa_optimize_jmps()
833 opline->op1_type = IS_UNUSED; in zend_dfa_optimize_jmps()
834 opline->op1.num = opline->op2.num; in zend_dfa_optimize_jmps()
843 opline->opcode = ZEND_JMPZ; in zend_dfa_optimize_jmps()
844 opline->result_type = IS_UNUSED; in zend_dfa_optimize_jmps()
847 } else if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
848 if (zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { in zend_dfa_optimize_jmps()
849 opline->opcode = ZEND_QM_ASSIGN; in zend_dfa_optimize_jmps()
857 opline->opcode = ZEND_JMPNZ; in zend_dfa_optimize_jmps()
858 opline->result_type = IS_UNUSED; in zend_dfa_optimize_jmps()
861 } else if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
862 if (!zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { in zend_dfa_optimize_jmps()
863 opline->opcode = ZEND_QM_ASSIGN; in zend_dfa_optimize_jmps()
871 opline->opcode = ZEND_JMPNZ; in zend_dfa_optimize_jmps()
872 opline->result_type = IS_UNUSED; in zend_dfa_optimize_jmps()
875 } else if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
876 if (!zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { in zend_dfa_optimize_jmps()
877 MAKE_NOP(opline); in zend_dfa_optimize_jmps()
888 if (opline->op1_type == IS_CONST in zend_dfa_optimize_jmps()
890 if (Z_TYPE_P(CT_CONSTANT_EX(op_array, opline->op1.constant)) == IS_NULL) { in zend_dfa_optimize_jmps()
892 MAKE_NOP(opline); in zend_dfa_optimize_jmps()
897 opline->opcode = ZEND_JMP; in zend_dfa_optimize_jmps()
898 opline->result_type = IS_UNUSED; in zend_dfa_optimize_jmps()
900 COPY_NODE(opline->op1, opline->op2); in zend_dfa_optimize_jmps()
908 if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
909 zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); in zend_dfa_optimize_jmps()
912 MAKE_NOP(opline); in zend_dfa_optimize_jmps()
913 opline->extended_value = 0; in zend_dfa_optimize_jmps()
917 HashTable *jmptable = Z_ARRVAL_P(CT_CONSTANT_EX(op_array, opline->op2.constant)); in zend_dfa_optimize_jmps()
922 target = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(jmp_zv)); in zend_dfa_optimize_jmps()
924 target = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value); in zend_dfa_optimize_jmps()
926 opline->opcode = ZEND_JMP; in zend_dfa_optimize_jmps()
927 opline->extended_value = 0; in zend_dfa_optimize_jmps()
928 SET_UNUSED(opline->op1); in zend_dfa_optimize_jmps()
929 ZEND_SET_OP_JMP_ADDR(opline, opline->op1, op_array->opcodes + target); in zend_dfa_optimize_jmps()
930 SET_UNUSED(opline->op2); in zend_dfa_optimize_jmps()
937 if (opline->op1_type == IS_CONST) { in zend_dfa_optimize_jmps()
938 zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); in zend_dfa_optimize_jmps()
941 MAKE_NOP(opline); in zend_dfa_optimize_jmps()
942 opline->extended_value = 0; in zend_dfa_optimize_jmps()
946 HashTable *jmptable = Z_ARRVAL_P(CT_CONSTANT_EX(op_array, opline->op2.constant)); in zend_dfa_optimize_jmps()
951 target = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(jmp_zv)); in zend_dfa_optimize_jmps()
953 target = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value); in zend_dfa_optimize_jmps()
955 opline->opcode = ZEND_JMP; in zend_dfa_optimize_jmps()
956 opline->extended_value = 0; in zend_dfa_optimize_jmps()
957 SET_UNUSED(opline->op1); in zend_dfa_optimize_jmps()
958 ZEND_SET_OP_JMP_ADDR(opline, opline->op1, op_array->opcodes + target); in zend_dfa_optimize_jmps()
959 SET_UNUSED(opline->op2); in zend_dfa_optimize_jmps()
1003 zend_op *opline; in zend_dfa_optimize_op_array() local
1058 opline = op_array->opcodes + op_1; in zend_dfa_optimize_op_array()
1062 if (opline->opcode == ZEND_ASSIGN in zend_dfa_optimize_op_array()
1063 && opline->op2_type == IS_CONST in zend_dfa_optimize_op_array()
1065 && !RETURN_VALUE_USED(opline) in zend_dfa_optimize_op_array()
1070 zval *zv = CT_CONSTANT_EX(op_array, opline->op2.constant); in zend_dfa_optimize_op_array()
1073 opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
1075 } else if (opline->opcode == ZEND_QM_ASSIGN in zend_dfa_optimize_op_array()
1076 && opline->op1_type == IS_CONST in zend_dfa_optimize_op_array()
1081 zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); in zend_dfa_optimize_op_array()
1084 opline->op1.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
1088 if (opline->opcode == ZEND_ADD in zend_dfa_optimize_op_array()
1089 || opline->opcode == ZEND_SUB in zend_dfa_optimize_op_array()
1090 || opline->opcode == ZEND_MUL in zend_dfa_optimize_op_array()
1091 || opline->opcode == ZEND_IS_EQUAL in zend_dfa_optimize_op_array()
1092 || opline->opcode == ZEND_IS_NOT_EQUAL in zend_dfa_optimize_op_array()
1093 || opline->opcode == ZEND_IS_SMALLER in zend_dfa_optimize_op_array()
1094 || opline->opcode == ZEND_IS_SMALLER_OR_EQUAL in zend_dfa_optimize_op_array()
1097 if (opline->op1_type == IS_CONST in zend_dfa_optimize_op_array()
1098 && opline->op2_type != IS_CONST in zend_dfa_optimize_op_array()
1100 && Z_TYPE_INFO_P(CT_CONSTANT_EX(op_array, opline->op1.constant)) == IS_LONG in zend_dfa_optimize_op_array()
1105 zval *zv = CT_CONSTANT_EX(op_array, opline->op1.constant); in zend_dfa_optimize_op_array()
1107 opline->op1.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
1109 } else if (opline->op1_type != IS_CONST in zend_dfa_optimize_op_array()
1110 && opline->op2_type == IS_CONST in zend_dfa_optimize_op_array()
1112 && Z_TYPE_INFO_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG in zend_dfa_optimize_op_array()
1117 zval *zv = CT_CONSTANT_EX(op_array, opline->op2.constant); in zend_dfa_optimize_op_array()
1119 opline->op2.constant = zend_optimizer_add_literal(op_array, &tmp); in zend_dfa_optimize_op_array()
1121 } else if (opline->opcode == ZEND_CONCAT) { in zend_dfa_optimize_op_array()
1124 opline->opcode = ZEND_FAST_CONCAT; in zend_dfa_optimize_op_array()
1126 } else if (opline->opcode == ZEND_VERIFY_RETURN_TYPE in zend_dfa_optimize_op_array()
1127 && opline->op1_type != IS_CONST in zend_dfa_optimize_op_array()
1151 MAKE_NOP(opline); in zend_dfa_optimize_op_array()
1162 if (opline->opcode == ZEND_ASSIGN in zend_dfa_optimize_op_array()
1164 && !RETURN_VALUE_USED(opline) in zend_dfa_optimize_op_array()
1174 if ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) in zend_dfa_optimize_op_array()
1186 src_var, opline->op1.var) in zend_dfa_optimize_op_array()
1208 op_array->opcodes[op_2].result_type = opline->op1_type; in zend_dfa_optimize_op_array()
1209 op_array->opcodes[op_2].result.var = opline->op1.var; in zend_dfa_optimize_op_array()
1210 MAKE_NOP(opline); in zend_dfa_optimize_op_array()
1213 } else if (opline->op2_type == IS_CONST in zend_dfa_optimize_op_array()
1214 || ((opline->op2_type & (IS_TMP_VAR|IS_VAR|IS_CV)) in zend_dfa_optimize_op_array()
1236 opline->result_type = opline->op1_type; in zend_dfa_optimize_op_array()
1237 opline->result.var = opline->op1.var; in zend_dfa_optimize_op_array()
1238 opline->op1_type = opline->op2_type; in zend_dfa_optimize_op_array()
1239 opline->op1.var = opline->op2.var; in zend_dfa_optimize_op_array()
1240 opline->op2_type = IS_UNUSED; in zend_dfa_optimize_op_array()
1241 opline->op2.var = 0; in zend_dfa_optimize_op_array()
1242 opline->opcode = ZEND_QM_ASSIGN; in zend_dfa_optimize_op_array()
1246 } else if (opline->opcode == ZEND_ASSIGN_OP in zend_dfa_optimize_op_array()
1247 && opline->extended_value == ZEND_ADD in zend_dfa_optimize_op_array()
1249 && opline->op2_type == IS_CONST in zend_dfa_optimize_op_array()
1250 && Z_TYPE_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG in zend_dfa_optimize_op_array()
1251 && Z_LVAL_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == 1 in zend_dfa_optimize_op_array()
1257 opline->opcode = ZEND_PRE_INC; in zend_dfa_optimize_op_array()
1258 opline->extended_value = 0; in zend_dfa_optimize_op_array()
1259 SET_UNUSED(opline->op2); in zend_dfa_optimize_op_array()
1261 } else if (opline->opcode == ZEND_ASSIGN_OP in zend_dfa_optimize_op_array()
1262 && opline->extended_value == ZEND_SUB in zend_dfa_optimize_op_array()
1264 && opline->op2_type == IS_CONST in zend_dfa_optimize_op_array()
1265 && Z_TYPE_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == IS_LONG in zend_dfa_optimize_op_array()
1266 && Z_LVAL_P(CT_CONSTANT_EX(op_array, opline->op2.constant)) == 1 in zend_dfa_optimize_op_array()
1272 opline->opcode = ZEND_PRE_DEC; in zend_dfa_optimize_op_array()
1273 opline->extended_value = 0; in zend_dfa_optimize_op_array()
1274 SET_UNUSED(opline->op2); in zend_dfa_optimize_op_array()
1277 && !RETURN_VALUE_USED(opline) in zend_dfa_optimize_op_array()
1280 && opline->opcode == ZEND_ASSIGN_OP in zend_dfa_optimize_op_array()
1281 && opline->extended_value != ZEND_CONCAT) { in zend_dfa_optimize_op_array()
1290 opline->opcode = opline->extended_value; in zend_dfa_optimize_op_array()
1291 opline->extended_value = 0; in zend_dfa_optimize_op_array()
1292 opline->result_type = opline->op1_type; in zend_dfa_optimize_op_array()
1293 opline->result.var = opline->op1.var; in zend_dfa_optimize_op_array()