Lines Matching refs:opline

85 	zend_op *opline;  in find_code_blocks()  local
92 opline = op_array->opcodes; in find_code_blocks()
93 blocks[0].start_opline = opline; in find_code_blocks()
95 while (opline < end) { in find_code_blocks()
96 switch((unsigned)opline->opcode) { in find_code_blocks()
109 START_BLOCK_OP(ZEND_OP1(opline).opline_num); in find_code_blocks()
110 if (opline->extended_value) { in find_code_blocks()
111 START_BLOCK_OP(ZEND_OP2(opline).opline_num); in find_code_blocks()
116 if (opline->extended_value) { in find_code_blocks()
117 START_BLOCK_OP(ZEND_OP2(opline).opline_num); in find_code_blocks()
123 START_BLOCK_OP(ZEND_OP1(opline).opline_num); in find_code_blocks()
140 START_BLOCK_OP(opline->extended_value); in find_code_blocks()
144 START_BLOCK_OP(opline->extended_value); in find_code_blocks()
157 START_BLOCK_OP(ZEND_OP2(opline).opline_num); in find_code_blocks()
161 START_BLOCK_OP(ZEND_OP2(opline).opline_num); in find_code_blocks()
166 opline++; in find_code_blocks()
244 opline = blocks[opno].start_opline - 1; in find_code_blocks()
245 if (opline->opcode == ZEND_OP_DATA) { in find_code_blocks()
246 opline--; in find_code_blocks()
248 switch((unsigned)opline->opcode) { in find_code_blocks()
261 if (opline->extended_value) { in find_code_blocks()
262 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
264 cur_block->op1_to = &blocks[ZEND_OP1(opline).opline_num]; in find_code_blocks()
267 if (opline->extended_value) { in find_code_blocks()
268 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
273 cur_block->op1_to = &blocks[ZEND_OP1(opline).opline_num]; in find_code_blocks()
276 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
277 cur_block->ext_to = &blocks[opline->extended_value]; in find_code_blocks()
280 cur_block->ext_to = &blocks[opline->extended_value]; in find_code_blocks()
296 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
539 # define SET_VAR_SOURCE(opline) Tsource[VAR_NUM(opline->result.var)] = opline argument
548 # define SET_VAR_SOURCE(opline) Tsource[VAR_NUM(ZEND_RESULT(opline).var)] = opline argument
563 zend_op *opline = block->start_opline; in strip_nop() local
581 opline = new_end = block->start_opline; in strip_nop()
582 end = opline + block->len; in strip_nop()
584 while (opline < end) { in strip_nop()
588 while (opline < end && opline->opcode == ZEND_NOP) { in strip_nop()
589 opline++; in strip_nop()
591 src = opline; in strip_nop()
593 while (opline < end && opline->opcode != ZEND_NOP) { in strip_nop()
594 opline++; in strip_nop()
596 len = opline - src; in strip_nop()
608 zend_op *opline = block->start_opline; in zend_optimize_block() local
632 opline = block->start_opline; in zend_optimize_block()
633 end = opline + block->len; in zend_optimize_block()
634 while ((op_array->T) && (opline < end)) { in zend_optimize_block()
636 if (ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
637 VAR_SOURCE(opline->op1) && in zend_optimize_block()
638 VAR_SOURCE(opline->op1)->opcode == ZEND_QM_ASSIGN && in zend_optimize_block()
639 ZEND_OP1_TYPE(VAR_SOURCE(opline->op1)) == IS_CONST && in zend_optimize_block()
640 opline->opcode != ZEND_CASE && /* CASE _always_ expects variable */ in zend_optimize_block()
641 opline->opcode != ZEND_FETCH_DIM_TMP_VAR && /* in 5.1, FETCH_DIM_TMP_VAR expects T */ in zend_optimize_block()
642 opline->opcode != ZEND_FE_RESET && in zend_optimize_block()
643 opline->opcode != ZEND_FREE in zend_optimize_block()
645 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
647 VAR_UNSET(opline->op1); in zend_optimize_block()
649 update_op1_const(op_array, opline, &c TSRMLS_CC); in zend_optimize_block()
655 if (ZEND_OP2_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
656 VAR_SOURCE(opline->op2) && in zend_optimize_block()
657 VAR_SOURCE(opline->op2)->opcode == ZEND_QM_ASSIGN && in zend_optimize_block()
658 ZEND_OP1_TYPE(VAR_SOURCE(opline->op2)) == IS_CONST) { in zend_optimize_block()
659 zend_op *src = VAR_SOURCE(opline->op2); in zend_optimize_block()
661 VAR_UNSET(opline->op2); in zend_optimize_block()
663 update_op2_const(op_array, opline, &c TSRMLS_CC); in zend_optimize_block()
669 if (ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
670 VAR_SOURCE(opline->op1) && in zend_optimize_block()
671 VAR_SOURCE(opline->op1)->opcode == ZEND_PRINT && in zend_optimize_block()
672 opline->opcode != ZEND_CASE && opline->opcode != ZEND_FREE) { in zend_optimize_block()
673 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
674 LITERAL_LONG(opline->op1, 1); in zend_optimize_block()
677 if (ZEND_OP2_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
678 VAR_SOURCE(opline->op2) && in zend_optimize_block()
679 VAR_SOURCE(opline->op2)->opcode == ZEND_PRINT) { in zend_optimize_block()
680 ZEND_OP2_TYPE(opline) = IS_CONST; in zend_optimize_block()
681 LITERAL_LONG(opline->op2, 1); in zend_optimize_block()
685 if ((opline->opcode == ZEND_ECHO || opline->opcode == ZEND_PRINT) && in zend_optimize_block()
686 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
687 VAR_SOURCE(opline->op1) && in zend_optimize_block()
688 VAR_SOURCE(opline->op1)->opcode == ZEND_CAST && in zend_optimize_block()
689 VAR_SOURCE(opline->op1)->extended_value == IS_STRING) { in zend_optimize_block()
690 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
691 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
696 if (opline->opcode == ZEND_FREE && in zend_optimize_block()
697 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
698 VAR_SOURCE(opline->op1)) { in zend_optimize_block()
699 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
703 MAKE_NOP(opline); in zend_optimize_block()
708 if (opline->opcode == ZEND_FREE && in zend_optimize_block()
709 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
710 VAR_SOURCE(opline->op1)) { in zend_optimize_block()
711 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
717 MAKE_NOP(opline); in zend_optimize_block()
729 if((ZEND_OP1_TYPE(opline) & IS_VAR) && in zend_optimize_block()
730 VAR_SOURCE(opline->op1) && VAR_SOURCE(opline->op1)->opcode == ZEND_DO_CF_FCALL && in zend_optimize_block()
731 VAR_SOURCE(opline->op1)->extended_value == 1) { in zend_optimize_block()
732 zend_op *fcall = VAR_SOURCE(opline->op1); in zend_optimize_block()
747 LITERAL_BOOL(opline->op1, 1); in zend_optimize_block()
748 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
758 LITERAL_BOOL(opline->op1, 1); in zend_optimize_block()
759 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
767 ZEND_OP1_LITERAL(opline) = zend_optimizer_add_literal(op_array, &c TSRMLS_CC); in zend_optimize_block()
769 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
776 LITERAL_BOOL(opline->op1, 1); in zend_optimize_block()
777 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
789 if (opline->opcode == ZEND_IS_EQUAL || in zend_optimize_block()
790 opline->opcode == ZEND_IS_NOT_EQUAL) { in zend_optimize_block()
791 if (ZEND_OP1_TYPE(opline) == IS_CONST && in zend_optimize_block()
792 Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_BOOL) { in zend_optimize_block()
793 opline->opcode = in zend_optimize_block()
794 ((opline->opcode == ZEND_IS_EQUAL) == Z_LVAL(ZEND_OP1_LITERAL(opline)))? in zend_optimize_block()
796 COPY_NODE(opline->op1, opline->op2); in zend_optimize_block()
797 SET_UNUSED(opline->op2); in zend_optimize_block()
798 } else if (ZEND_OP2_TYPE(opline) == IS_CONST && in zend_optimize_block()
799 Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_BOOL) { in zend_optimize_block()
800 opline->opcode = in zend_optimize_block()
801 ((opline->opcode == ZEND_IS_EQUAL) == Z_LVAL(ZEND_OP2_LITERAL(opline)))? in zend_optimize_block()
803 SET_UNUSED(opline->op2); in zend_optimize_block()
807 if ((opline->opcode == ZEND_BOOL || in zend_optimize_block()
808 opline->opcode == ZEND_BOOL_NOT || in zend_optimize_block()
809 opline->opcode == ZEND_JMPZ || in zend_optimize_block()
810 opline->opcode == ZEND_JMPNZ || in zend_optimize_block()
811 opline->opcode == ZEND_JMPZNZ) && in zend_optimize_block()
812 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
813 VAR_SOURCE(opline->op1) != NULL && in zend_optimize_block()
814 !used_ext[VAR_NUM(ZEND_OP1(opline).var)] && in zend_optimize_block()
815 VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL_NOT) { in zend_optimize_block()
817 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
819 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
821 switch (opline->opcode) { in zend_optimize_block()
824 opline->opcode = ZEND_BOOL_NOT; in zend_optimize_block()
828 opline->opcode = ZEND_BOOL; in zend_optimize_block()
832 opline->opcode = ZEND_JMPNZ; in zend_optimize_block()
836 opline->opcode = ZEND_JMPZ; in zend_optimize_block()
844 op_t = opline->extended_value; in zend_optimize_block()
845 opline->extended_value = ZEND_OP2(opline).opline_num; in zend_optimize_block()
846 ZEND_OP2(opline).opline_num = op_t; in zend_optimize_block()
855 VAR_UNSET(opline->op1); in zend_optimize_block()
861 if(0 && (opline->opcode == ZEND_JMPZ_EX || in zend_optimize_block()
862 opline->opcode == ZEND_JMPNZ_EX) && in zend_optimize_block()
863 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
864 VAR_SOURCE(opline->op1) != NULL && in zend_optimize_block()
865 VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL_NOT && in zend_optimize_block()
866 ZEND_OP1(opline).var == ZEND_RESULT(opline).var in zend_optimize_block()
868 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
869 if(opline->opcode == ZEND_JMPZ_EX) { in zend_optimize_block()
870 opline->opcode = ZEND_JMPNZ; in zend_optimize_block()
872 opline->opcode = ZEND_JMPZ; in zend_optimize_block()
874 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
875 SET_UNUSED(opline->result); in zend_optimize_block()
880 if ((opline->opcode == ZEND_BOOL || in zend_optimize_block()
881 opline->opcode == ZEND_BOOL_NOT || in zend_optimize_block()
882 opline->opcode == ZEND_JMPZ || in zend_optimize_block()
883 opline->opcode == ZEND_JMPZ_EX || in zend_optimize_block()
884 opline->opcode == ZEND_JMPNZ_EX || in zend_optimize_block()
885 opline->opcode == ZEND_JMPNZ || in zend_optimize_block()
886 opline->opcode == ZEND_JMPZNZ) && in zend_optimize_block()
887 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
888 VAR_SOURCE(opline->op1) != NULL && in zend_optimize_block()
889 (!used_ext[VAR_NUM(ZEND_OP1(opline).var)] || in zend_optimize_block()
890 (ZEND_RESULT_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
891 ZEND_RESULT(opline).var == ZEND_OP1(opline).var)) && in zend_optimize_block()
892 (VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL || in zend_optimize_block()
893 VAR_SOURCE(opline->op1)->opcode == ZEND_QM_ASSIGN)) { in zend_optimize_block()
894 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
895 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
897 VAR_UNSET(opline->op1); in zend_optimize_block()
900 } else if (last_op && opline->opcode == ZEND_ECHO && in zend_optimize_block()
902 ZEND_OP1_TYPE(opline) == IS_CONST && in zend_optimize_block()
903 Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_DOUBLE && in zend_optimize_block()
912 if (Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_STRING) { in zend_optimize_block()
913 convert_to_string_safe(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
918 l = Z_STRLEN(ZEND_OP1_LITERAL(opline)) + Z_STRLEN(ZEND_OP1_LITERAL(last_op)); in zend_optimize_block()
926 …(ZEND_OP1_LITERAL(last_op)), Z_STRVAL(ZEND_OP1_LITERAL(opline)), Z_STRLEN(ZEND_OP1_LITERAL(opline)… in zend_optimize_block()
928 zval_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
930 …Z_STRVAL(ZEND_OP1_LITERAL(opline)) = (char*)zend_new_interned_string(Z_STRVAL(ZEND_OP1_LITERAL(las… in zend_optimize_block()
933 Z_STRVAL(ZEND_OP1_LITERAL(opline)) = Z_STRVAL(ZEND_OP1_LITERAL(last_op)); in zend_optimize_block()
935 Z_STRLEN(ZEND_OP1_LITERAL(opline)) = l; in zend_optimize_block()
937 } else if (opline->opcode == ZEND_CONCAT && in zend_optimize_block()
938 ZEND_OP2_TYPE(opline) == IS_CONST && in zend_optimize_block()
939 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
940 VAR_SOURCE(opline->op1) && in zend_optimize_block()
941 (VAR_SOURCE(opline->op1)->opcode == ZEND_CONCAT || in zend_optimize_block()
942 VAR_SOURCE(opline->op1)->opcode == ZEND_ADD_STRING) && in zend_optimize_block()
943 ZEND_OP2_TYPE(VAR_SOURCE(opline->op1)) == IS_CONST && in zend_optimize_block()
944 ZEND_RESULT(VAR_SOURCE(opline->op1)).var == ZEND_OP1(opline).var) { in zend_optimize_block()
946 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
949 if (Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_STRING) { in zend_optimize_block()
950 convert_to_string_safe(&ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
956 VAR_UNSET(opline->op1); in zend_optimize_block()
959 opline->opcode = ZEND_ADD_STRING; in zend_optimize_block()
961 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
962 l = Z_STRLEN(ZEND_OP2_LITERAL(opline)) + Z_STRLEN(ZEND_OP2_LITERAL(src)); in zend_optimize_block()
970 …RLEN(ZEND_OP2_LITERAL(src)), Z_STRVAL(ZEND_OP2_LITERAL(opline)), Z_STRLEN(ZEND_OP2_LITERAL(opline)… in zend_optimize_block()
972 if (!IS_INTERNED(Z_STRVAL(ZEND_OP2_LITERAL(opline)))) { in zend_optimize_block()
973 efree(Z_STRVAL(ZEND_OP2_LITERAL(opline))); in zend_optimize_block()
976 …Z_STRVAL(ZEND_OP2_LITERAL(opline)) = (char*)zend_new_interned_string(Z_STRVAL(ZEND_OP2_LITERAL(src… in zend_optimize_block()
979 Z_STRVAL(ZEND_OP2_LITERAL(opline)) = Z_STRVAL(ZEND_OP2_LITERAL(src)); in zend_optimize_block()
981 Z_STRLEN(ZEND_OP2_LITERAL(opline)) = l; in zend_optimize_block()
983 …} else if ((opline->opcode == ZEND_ADD_STRING || opline->opcode == ZEND_ADD_VAR) && ZEND_OP1_TYPE( in zend_optimize_block()
985 opline->opcode = ZEND_CONCAT; in zend_optimize_block()
987 …} else if (opline->opcode == ZEND_ADD_CHAR && ZEND_OP1_TYPE(opline) == IS_CONST && ZEND_OP2_TYPE(o… in zend_optimize_block()
989 char c = (char)Z_LVAL(ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
990 ZVAL_STRINGL(&ZEND_OP2_LITERAL(opline), &c, 1, 1); in zend_optimize_block()
991 opline->opcode = ZEND_CONCAT; in zend_optimize_block()
993 } else if ((opline->opcode == ZEND_ADD || in zend_optimize_block()
994 opline->opcode == ZEND_SUB || in zend_optimize_block()
995 opline->opcode == ZEND_MUL || in zend_optimize_block()
996 opline->opcode == ZEND_DIV || in zend_optimize_block()
997 opline->opcode == ZEND_MOD || in zend_optimize_block()
998 opline->opcode == ZEND_SL || in zend_optimize_block()
999 opline->opcode == ZEND_SR || in zend_optimize_block()
1000 opline->opcode == ZEND_CONCAT || in zend_optimize_block()
1001 opline->opcode == ZEND_IS_EQUAL || in zend_optimize_block()
1002 opline->opcode == ZEND_IS_NOT_EQUAL || in zend_optimize_block()
1003 opline->opcode == ZEND_IS_SMALLER || in zend_optimize_block()
1004 opline->opcode == ZEND_IS_SMALLER_OR_EQUAL || in zend_optimize_block()
1005 opline->opcode == ZEND_IS_IDENTICAL || in zend_optimize_block()
1006 opline->opcode == ZEND_IS_NOT_IDENTICAL || in zend_optimize_block()
1007 opline->opcode == ZEND_BOOL_XOR || in zend_optimize_block()
1008 opline->opcode == ZEND_BW_OR || in zend_optimize_block()
1009 opline->opcode == ZEND_BW_AND || in zend_optimize_block()
1010 opline->opcode == ZEND_BW_XOR) && in zend_optimize_block()
1011 ZEND_OP1_TYPE(opline)==IS_CONST && in zend_optimize_block()
1012 ZEND_OP2_TYPE(opline)==IS_CONST) { in zend_optimize_block()
1014 int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC) = get_binary_op(opline->opcode); in zend_optimize_block()
1018 if ((opline->opcode == ZEND_DIV || opline->opcode == ZEND_MOD) && in zend_optimize_block()
1019 ((Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_LONG && in zend_optimize_block()
1020 Z_LVAL(ZEND_OP2_LITERAL(opline)) == 0) || in zend_optimize_block()
1021 (Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_DOUBLE && in zend_optimize_block()
1022 Z_DVAL(ZEND_OP2_LITERAL(opline)) == 0.0))) { in zend_optimize_block()
1023 if (RESULT_USED(opline)) { in zend_optimize_block()
1024 SET_VAR_SOURCE(opline); in zend_optimize_block()
1026 opline++; in zend_optimize_block()
1031 …if (binary_op(&result, &ZEND_OP1_LITERAL(opline), &ZEND_OP2_LITERAL(opline) TSRMLS_CC) == SUCCESS)… in zend_optimize_block()
1035 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1036 literal_dtor(&ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
1037 opline->opcode = ZEND_QM_ASSIGN; in zend_optimize_block()
1038 SET_UNUSED(opline->op2); in zend_optimize_block()
1039 update_op1_const(op_array, opline, &result TSRMLS_CC); in zend_optimize_block()
1042 } else if ((opline->opcode == ZEND_BOOL || in zend_optimize_block()
1043 opline->opcode == ZEND_BOOL_NOT || in zend_optimize_block()
1044 opline->opcode == ZEND_BW_NOT) && ZEND_OP1_TYPE(opline) == IS_CONST) { in zend_optimize_block()
1046 unary_op_type unary_op = get_unary_op(opline->opcode); in zend_optimize_block()
1051 unary_op(&result, &ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1053 unary_op(&result, &ZEND_OP1_LITERAL(opline) TSRMLS_CC); in zend_optimize_block()
1055 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1058 result = ZEND_OP1_LITERAL(opline); in zend_optimize_block()
1060 Z_TYPE(ZEND_OP1_LITERAL(opline)) = IS_NULL; in zend_optimize_block()
1064 opline->opcode = ZEND_QM_ASSIGN; in zend_optimize_block()
1065 update_op1_const(op_array, opline, &result TSRMLS_CC); in zend_optimize_block()
1066 } else if ((opline->opcode == ZEND_RETURN || opline->opcode == ZEND_EXIT) && in zend_optimize_block()
1067 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1068 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1069 VAR_SOURCE(opline->op1)->opcode == ZEND_QM_ASSIGN) { in zend_optimize_block()
1071 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1072 VAR_UNSET(opline->op1); in zend_optimize_block()
1073 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
1075 } else if ((opline->opcode == ZEND_ADD_STRING || in zend_optimize_block()
1076 opline->opcode == ZEND_ADD_CHAR) && in zend_optimize_block()
1077 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1078 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1079 VAR_SOURCE(opline->op1)->opcode == ZEND_INIT_STRING) { in zend_optimize_block()
1084 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1085 VAR_UNSET(opline->op1); in zend_optimize_block()
1086 COPY_NODE(opline->op1, opline->op2); in zend_optimize_block()
1087 if (opline->opcode == ZEND_ADD_CHAR) { in zend_optimize_block()
1088 char c = (char)Z_LVAL(ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
1089 ZVAL_STRINGL(&ZEND_OP1_LITERAL(opline), &c, 1, 1); in zend_optimize_block()
1091 SET_UNUSED(opline->op2); in zend_optimize_block()
1093 opline->opcode = ZEND_QM_ASSIGN; in zend_optimize_block()
1094 } else if ((opline->opcode == ZEND_ADD_STRING || in zend_optimize_block()
1095 opline->opcode == ZEND_ADD_CHAR || in zend_optimize_block()
1096 opline->opcode == ZEND_ADD_VAR || in zend_optimize_block()
1097 opline->opcode == ZEND_CONCAT) && in zend_optimize_block()
1098 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1099 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1100 VAR_SOURCE(opline->op1)->opcode == ZEND_CONCAT && in zend_optimize_block()
1101 ZEND_OP2_TYPE(VAR_SOURCE(opline->op1)) == IS_CONST && in zend_optimize_block()
1102 Z_TYPE(ZEND_OP2_LITERAL(VAR_SOURCE(opline->op1))) == IS_STRING && in zend_optimize_block()
1103 Z_STRLEN(ZEND_OP2_LITERAL(VAR_SOURCE(opline->op1))) == 0) { in zend_optimize_block()
1105 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1106 VAR_UNSET(opline->op1); in zend_optimize_block()
1107 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
1108 if (opline->opcode == ZEND_ADD_CHAR) { in zend_optimize_block()
1109 char c = (char)Z_LVAL(ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
1110 ZVAL_STRINGL(&ZEND_OP2_LITERAL(opline), &c, 1, 1); in zend_optimize_block()
1112 opline->opcode = ZEND_CONCAT; in zend_optimize_block()
1115 } else if (opline->opcode == ZEND_ADD_VAR && in zend_optimize_block()
1116 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1117 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1118 VAR_SOURCE(opline->op1)->opcode == ZEND_INIT_STRING) { in zend_optimize_block()
1120 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1121 VAR_UNSET(opline->op1); in zend_optimize_block()
1122 COPY_NODE(opline->op1, opline->op2); in zend_optimize_block()
1123 SET_UNUSED(opline->op2); in zend_optimize_block()
1125 opline->opcode = ZEND_CAST; in zend_optimize_block()
1126 opline->extended_value = IS_STRING; in zend_optimize_block()
1127 } else if ((opline->opcode == ZEND_ADD_STRING || in zend_optimize_block()
1128 opline->opcode == ZEND_ADD_CHAR || in zend_optimize_block()
1129 opline->opcode == ZEND_ADD_VAR || in zend_optimize_block()
1130 opline->opcode == ZEND_CONCAT) && in zend_optimize_block()
1131 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1132 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1133 VAR_SOURCE(opline->op1)->opcode == ZEND_CAST && in zend_optimize_block()
1134 VAR_SOURCE(opline->op1)->extended_value == IS_STRING) { in zend_optimize_block()
1136 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1137 VAR_UNSET(opline->op1); in zend_optimize_block()
1138 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
1139 if (opline->opcode == ZEND_ADD_CHAR) { in zend_optimize_block()
1140 char c = (char)Z_LVAL(ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
1141 ZVAL_STRINGL(&ZEND_OP2_LITERAL(opline), &c, 1, 1); in zend_optimize_block()
1143 opline->opcode = ZEND_CONCAT; in zend_optimize_block()
1145 } else if (opline->opcode == ZEND_QM_ASSIGN && in zend_optimize_block()
1146 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1147 ZEND_RESULT_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1148 ZEND_OP1(opline).var == ZEND_RESULT(opline).var) { in zend_optimize_block()
1150 MAKE_NOP(opline); in zend_optimize_block()
1151 } else if (opline->opcode == ZEND_BOOL && in zend_optimize_block()
1152 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1153 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1154 (VAR_SOURCE(opline->op1)->opcode == ZEND_IS_EQUAL || in zend_optimize_block()
1155 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_NOT_EQUAL || in zend_optimize_block()
1156 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_SMALLER || in zend_optimize_block()
1157 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_SMALLER_OR_EQUAL || in zend_optimize_block()
1158 VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL || in zend_optimize_block()
1159 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_IDENTICAL || in zend_optimize_block()
1160 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_NOT_IDENTICAL || in zend_optimize_block()
1161 VAR_SOURCE(opline->op1)->opcode == ZEND_ISSET_ISEMPTY_VAR || in zend_optimize_block()
1162 VAR_SOURCE(opline->op1)->opcode == ZEND_ISSET_ISEMPTY_DIM_OBJ) && in zend_optimize_block()
1163 !used_ext[VAR_NUM(ZEND_OP1(opline).var)]) { in zend_optimize_block()
1165 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1166 COPY_NODE(src->result, opline->result); in zend_optimize_block()
1168 MAKE_NOP(opline); in zend_optimize_block()
1171 if (RESULT_USED(opline)) { in zend_optimize_block()
1172 SET_VAR_SOURCE(opline); in zend_optimize_block()
1174 if (opline->opcode != ZEND_NOP) { in zend_optimize_block()
1175 last_op = opline; in zend_optimize_block()
1177 opline++; in zend_optimize_block()
1192 zend_op *opline = new_opcodes; in assemble_code_blocks() local
1198 memcpy(opline, cur_block->start_opline, cur_block->len * sizeof(zend_op)); in assemble_code_blocks()
1199 cur_block->start_opline = opline; in assemble_code_blocks()
1200 opline += cur_block->len; in assemble_code_blocks()
1201 if ((opline - 1)->opcode == ZEND_JMP) { in assemble_code_blocks()
1211 MAKE_NOP((opline - 1)); in assemble_code_blocks()
1212 opline--; in assemble_code_blocks()
1232 if ((opline-1)->opcode == ZEND_THROW) { in assemble_code_blocks()
1235 MAKE_NOP(opline); in assemble_code_blocks()
1236 opline->lineno = opline[-1].lineno; in assemble_code_blocks()
1237 opline++; in assemble_code_blocks()
1240 MAKE_NOP(opline); in assemble_code_blocks()
1241 opline->opcode = ZEND_HANDLE_EXCEPTION; in assemble_code_blocks()
1242 opline->lineno = opline[-1].lineno; in assemble_code_blocks()
1243 opline++; in assemble_code_blocks()
1246 op_array->last = opline-new_opcodes; in assemble_code_blocks()
1281 opline = cur_block->start_opline + cur_block->len - 1; in assemble_code_blocks()
1282 if (opline->opcode == ZEND_OP_DATA) { in assemble_code_blocks()
1283 opline--; in assemble_code_blocks()
1286 ZEND_OP1(opline).opline_num = cur_block->op1_to->start_opline - new_opcodes; in assemble_code_blocks()
1289 ZEND_OP2(opline).opline_num = cur_block->op2_to->start_opline - new_opcodes; in assemble_code_blocks()
1292 opline->extended_value = cur_block->ext_to->start_opline - new_opcodes; in assemble_code_blocks()
1305 opline = op_array->opcodes; in assemble_code_blocks()
1306 end = opline + op_array->last; in assemble_code_blocks()
1307 while (opline < end) { in assemble_code_blocks()
1308 if (opline->opcode == ZEND_DECLARE_INHERITED_CLASS_DELAYED) { in assemble_code_blocks()
1309 *opline_num = opline - op_array->opcodes; in assemble_code_blocks()
1310 opline_num = &ZEND_RESULT(opline).opline_num; in assemble_code_blocks()
1312 ++opline; in assemble_code_blocks()
1851 # define RES_NEVER_USED(opline) (opline->result_type == IS_UNUSED || NEVER_USED(opline->result)) argument
1863 # define RES_NEVER_USED(opline) (ZEND_RESULT_TYPE(opline) == IS_UNUSED || NEVER_USED(opline->result… argument
1884 zend_op *opline = next_block->start_opline; in zend_t_usage() local
1885 zend_op *end = opline + next_block->len; in zend_t_usage()
1893 while (opline<end) { in zend_t_usage()
1894 T_USAGE(opline->op1); in zend_t_usage()
1895 T_USAGE(opline->op2); in zend_t_usage()
1897 if (RESULT_USED(opline)) { in zend_t_usage()
1898 …if (!defined_here[VAR_NUM(ZEND_RESULT(opline).var)] && !used_ext[VAR_NUM(ZEND_RESULT(opline).var)]… in zend_t_usage()
1899 (opline->opcode == ZEND_RECV || opline->opcode == ZEND_RECV_INIT || in zend_t_usage()
1900 (opline->opcode == ZEND_OP_DATA && ZEND_RESULT_TYPE(opline) == IS_TMP_VAR) || in zend_t_usage()
1901 opline->opcode == ZEND_ADD_ARRAY_ELEMENT)) { in zend_t_usage()
1903 used_ext[VAR_NUM(ZEND_RESULT(opline).var)] = 1; in zend_t_usage()
1905 defined_here[VAR_NUM(ZEND_RESULT(opline).var)] = 1; in zend_t_usage()
1907 opline++; in zend_t_usage()
1922 zend_op *opline = block->start_opline + block->len - 1; in zend_t_usage() local
1931 while (opline >= block->start_opline) { in zend_t_usage()
1933 if (RES_NEVER_USED(opline)) { in zend_t_usage()
1934 switch (opline->opcode) { in zend_t_usage()
1954 if (ZEND_RESULT_TYPE(opline) == IS_VAR) { in zend_t_usage()
1956 ZEND_RESULT_TYPE(opline) |= EXT_TYPE_UNUSED; in zend_t_usage()
1958 ZEND_RESULT(opline).EA.type |= EXT_TYPE_UNUSED; in zend_t_usage()
1965 if (ZEND_OP1_TYPE(opline) == IS_CONST) { in zend_t_usage()
1966 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_t_usage()
1968 MAKE_NOP(opline); in zend_t_usage()
1971 opline->opcode = ZEND_ECHO; in zend_t_usage()
1972 ZEND_RESULT_TYPE(opline) = IS_UNUSED; in zend_t_usage()
1976 opline->opcode -= 3; in zend_t_usage()
1977 SET_UNUSED(opline->result); in zend_t_usage()
1982 if (opline->opcode == ZEND_RECV || in zend_t_usage()
1983 opline->opcode == ZEND_RECV_INIT || in zend_t_usage()
1984 opline->opcode == ZEND_ADD_ARRAY_ELEMENT) { in zend_t_usage()
1985 if (ZEND_OP1_TYPE(opline) == IS_VAR || ZEND_OP1_TYPE(opline) == IS_TMP_VAR) { in zend_t_usage()
1986 usage[VAR_NUM(ZEND_RESULT(opline).var)] = 1; in zend_t_usage()
1989 if (RESULT_USED(opline)) { in zend_t_usage()
1990 usage[VAR_NUM(ZEND_RESULT(opline).var)] = 0; in zend_t_usage()
1994 if (ZEND_OP1_TYPE(opline) == IS_VAR || ZEND_OP1_TYPE(opline) == IS_TMP_VAR) { in zend_t_usage()
1995 usage[VAR_NUM(ZEND_OP1(opline).var)] = 1; in zend_t_usage()
1997 if (ZEND_OP2_TYPE(opline) == IS_VAR || ZEND_OP2_TYPE(opline) == IS_TMP_VAR) { in zend_t_usage()
1998 usage[VAR_NUM(ZEND_OP2(opline).var)] = 1; in zend_t_usage()
2003 if ((ZEND_RESULT_TYPE(opline) & IS_VAR) && in zend_t_usage()
2004 (ZEND_RESULT_TYPE(opline) & EXT_TYPE_UNUSED) && in zend_t_usage()
2005 usage[VAR_NUM(ZEND_RESULT(opline).var)]) { in zend_t_usage()
2006 ZEND_RESULT_TYPE(opline) &= ~EXT_TYPE_UNUSED; in zend_t_usage()
2009 if (ZEND_RESULT_TYPE(opline) == IS_VAR && in zend_t_usage()
2010 usage[VAR_NUM(ZEND_RESULT(opline).var)] && in zend_t_usage()
2011 (ZEND_RESULT(opline).EA.type & EXT_TYPE_UNUSED) != 0) { in zend_t_usage()
2012 ZEND_RESULT(opline).EA.type &= ~EXT_TYPE_UNUSED; in zend_t_usage()
2016 opline--; in zend_t_usage()