Lines Matching refs:opline

115 	zend_op *opline;  in find_code_blocks()  local
122 opline = op_array->opcodes; in find_code_blocks()
123 blocks[0].start_opline = opline; in find_code_blocks()
125 while (opline < end) { in find_code_blocks()
126 switch((unsigned)opline->opcode) { in find_code_blocks()
128 START_BLOCK_OP(ZEND_OP1(opline).opline_num); in find_code_blocks()
129 if (opline->extended_value) { in find_code_blocks()
130 START_BLOCK_OP(ZEND_OP2(opline).opline_num); in find_code_blocks()
135 if (opline->extended_value) { in find_code_blocks()
136 START_BLOCK_OP(ZEND_OP2(opline).opline_num); in find_code_blocks()
143 START_BLOCK_OP(ZEND_OP1(opline).opline_num); in find_code_blocks()
156 START_BLOCK_OP(opline->extended_value); in find_code_blocks()
160 START_BLOCK_OP(opline->extended_value); in find_code_blocks()
171 START_BLOCK_OP(ZEND_OP2(opline).opline_num); in find_code_blocks()
176 START_BLOCK_OP(opline->extended_value); in find_code_blocks()
181 opline++; in find_code_blocks()
265 opline = blocks[opno].start_opline - 1; in find_code_blocks()
266 if (opline->opcode == ZEND_OP_DATA) { in find_code_blocks()
267 opline--; in find_code_blocks()
269 switch((unsigned)opline->opcode) { in find_code_blocks()
277 if (opline->extended_value) { in find_code_blocks()
278 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
280 cur_block->op1_to = &blocks[ZEND_OP1(opline).opline_num]; in find_code_blocks()
283 if (opline->extended_value) { in find_code_blocks()
284 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
288 cur_block->op1_to = &blocks[ZEND_OP1(opline).opline_num]; in find_code_blocks()
292 cur_block->op1_to = &blocks[ZEND_OP1(opline).opline_num]; in find_code_blocks()
296 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
297 cur_block->ext_to = &blocks[opline->extended_value]; in find_code_blocks()
300 cur_block->ext_to = &blocks[opline->extended_value]; in find_code_blocks()
305 cur_block->ext_to = &blocks[opline->extended_value]; in find_code_blocks()
318 cur_block->op2_to = &blocks[ZEND_OP2(opline).opline_num]; in find_code_blocks()
553 #define SET_VAR_SOURCE(opline) Tsource[VAR_NUM(opline->result.var)] = opline argument
577 zend_op *opline = block->start_opline; in strip_nop() local
603 opline = new_end = block->start_opline; in strip_nop()
604 end = opline + block->len; in strip_nop()
606 while (opline < end) { in strip_nop()
610 src = opline; in strip_nop()
611 while (opline < end && opline->opcode == ZEND_NOP) { in strip_nop()
612 if (opline + 1 < end in strip_nop()
613 && ((opline + 1)->opcode == ZEND_JMPZ in strip_nop()
614 || (opline + 1)->opcode == ZEND_JMPNZ) in strip_nop()
615 && (opline + 1)->op1_type & (IS_CV|IS_CONST) in strip_nop()
616 && is_predecessor_smart_branch(op_array->opcodes, opline)) { in strip_nop()
618 opline++; in strip_nop()
622 opline++; in strip_nop()
625 while (opline < end && opline->opcode != ZEND_NOP) { in strip_nop()
626 opline++; in strip_nop()
628 len = opline - src; in strip_nop()
640 zend_op *opline = block->start_opline; in zend_optimize_block() local
670 opline = block->start_opline; in zend_optimize_block()
671 end = opline + block->len; in zend_optimize_block()
672 while ((op_array->T) && (opline < end)) { in zend_optimize_block()
674 if ((ZEND_OP1_TYPE(opline) & (IS_TMP_VAR|IS_VAR)) && in zend_optimize_block()
675 VAR_SOURCE(opline->op1) && in zend_optimize_block()
676 VAR_SOURCE(opline->op1)->opcode == ZEND_QM_ASSIGN && in zend_optimize_block()
677 ZEND_OP1_TYPE(VAR_SOURCE(opline->op1)) == IS_CONST && in zend_optimize_block()
678 opline->opcode != ZEND_CASE && /* CASE _always_ expects variable */ in zend_optimize_block()
679 opline->opcode != ZEND_FETCH_LIST && in zend_optimize_block()
680 (opline->opcode != ZEND_FE_RESET_R || opline->opcode != ZEND_FE_RESET_RW) && in zend_optimize_block()
681 opline->opcode != ZEND_FREE in zend_optimize_block()
683 znode_op op1 = opline->op1; in zend_optimize_block()
687 if (zend_optimizer_update_op1_const(op_array, opline, &c)) { in zend_optimize_block()
695 if ((ZEND_OP2_TYPE(opline) & (IS_TMP_VAR|IS_VAR)) && in zend_optimize_block()
696 VAR_SOURCE(opline->op2) && in zend_optimize_block()
697 VAR_SOURCE(opline->op2)->opcode == ZEND_QM_ASSIGN && in zend_optimize_block()
698 ZEND_OP1_TYPE(VAR_SOURCE(opline->op2)) == IS_CONST) { in zend_optimize_block()
699 znode_op op2 = opline->op2; in zend_optimize_block()
703 if (zend_optimizer_update_op2_const(op_array, opline, &c)) { in zend_optimize_block()
711 if (opline->opcode == ZEND_ECHO && in zend_optimize_block()
712 ZEND_OP1_TYPE(opline) & (IS_TMP_VAR|IS_VAR) && in zend_optimize_block()
713 VAR_SOURCE(opline->op1) && in zend_optimize_block()
714 VAR_SOURCE(opline->op1)->opcode == ZEND_CAST && in zend_optimize_block()
715 VAR_SOURCE(opline->op1)->extended_value == IS_STRING) { in zend_optimize_block()
716 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
717 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
725 if (opline->opcode == ZEND_FREE && in zend_optimize_block()
726 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
727 VAR_SOURCE(opline->op1)) { in zend_optimize_block()
728 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
737 MAKE_NOP(opline); in zend_optimize_block()
748 if((ZEND_OP1_TYPE(opline) & IS_VAR) && in zend_optimize_block()
749 VAR_SOURCE(opline->op1) && VAR_SOURCE(opline->op1)->opcode == ZEND_DO_CF_FCALL && in zend_optimize_block()
750 VAR_SOURCE(opline->op1)->extended_value == 1) { in zend_optimize_block()
751 zend_op *fcall = VAR_SOURCE(opline->op1); in zend_optimize_block()
766 LITERAL_BOOL(opline->op1, 1); in zend_optimize_block()
767 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
777 LITERAL_BOOL(opline->op1, 1); in zend_optimize_block()
778 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
786 ZEND_OP1_LITERAL(opline) = zend_optimizer_add_literal(op_array, &c); in zend_optimize_block()
788 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
795 LITERAL_BOOL(opline->op1, 1); in zend_optimize_block()
796 ZEND_OP1_TYPE(opline) = IS_CONST; in zend_optimize_block()
810 if (opline->opcode == ZEND_IS_EQUAL || in zend_optimize_block()
811 opline->opcode == ZEND_IS_NOT_EQUAL || in zend_optimize_block()
813 (opline->opcode == ZEND_CASE && (ZEND_OP1_TYPE(opline) & (IS_CONST|IS_CV)))) { in zend_optimize_block()
814 if (ZEND_OP1_TYPE(opline) == IS_CONST && in zend_optimize_block()
815 (Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_FALSE || in zend_optimize_block()
816 Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_TRUE)) { in zend_optimize_block()
824 opline->opcode = in zend_optimize_block()
825 ((opline->opcode != ZEND_IS_NOT_EQUAL) == ((Z_TYPE(ZEND_OP1_LITERAL(opline))) == IS_TRUE)) ? in zend_optimize_block()
827 COPY_NODE(opline->op1, opline->op2); in zend_optimize_block()
828 SET_UNUSED(opline->op2); in zend_optimize_block()
829 } else if (ZEND_OP2_TYPE(opline) == IS_CONST && in zend_optimize_block()
830 (Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_FALSE || in zend_optimize_block()
831 Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_TRUE)) { in zend_optimize_block()
839 opline->opcode = in zend_optimize_block()
840 ((opline->opcode != ZEND_IS_NOT_EQUAL) == ((Z_TYPE(ZEND_OP2_LITERAL(opline))) == IS_TRUE)) ? in zend_optimize_block()
842 SET_UNUSED(opline->op2); in zend_optimize_block()
846 if ((opline->opcode == ZEND_BOOL || in zend_optimize_block()
847 opline->opcode == ZEND_BOOL_NOT || in zend_optimize_block()
848 opline->opcode == ZEND_JMPZ || in zend_optimize_block()
849 opline->opcode == ZEND_JMPNZ || in zend_optimize_block()
850 opline->opcode == ZEND_JMPZNZ) && in zend_optimize_block()
851 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
852 VAR_SOURCE(opline->op1) != NULL && in zend_optimize_block()
853 !zend_bitset_in(used_ext, VAR_NUM(ZEND_OP1(opline).var)) && in zend_optimize_block()
854 VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL_NOT) { in zend_optimize_block()
856 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
858 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
860 switch (opline->opcode) { in zend_optimize_block()
863 opline->opcode = ZEND_BOOL_NOT; in zend_optimize_block()
867 opline->opcode = ZEND_BOOL; in zend_optimize_block()
871 opline->opcode = ZEND_JMPNZ; in zend_optimize_block()
875 opline->opcode = ZEND_JMPZ; in zend_optimize_block()
883 op_t = opline->extended_value; in zend_optimize_block()
884 opline->extended_value = ZEND_OP2(opline).opline_num; in zend_optimize_block()
885 ZEND_OP2(opline).opline_num = op_t; in zend_optimize_block()
894 VAR_UNSET(opline->op1); in zend_optimize_block()
900 if(0 && (opline->opcode == ZEND_JMPZ_EX || in zend_optimize_block()
901 opline->opcode == ZEND_JMPNZ_EX) && in zend_optimize_block()
902 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
903 VAR_SOURCE(opline->op1) != NULL && in zend_optimize_block()
904 VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL_NOT && in zend_optimize_block()
905 ZEND_OP1(opline).var == ZEND_RESULT(opline).var in zend_optimize_block()
907 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
908 if(opline->opcode == ZEND_JMPZ_EX) { in zend_optimize_block()
909 opline->opcode = ZEND_JMPNZ; in zend_optimize_block()
911 opline->opcode = ZEND_JMPZ; in zend_optimize_block()
913 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
914 SET_UNUSED(opline->result); in zend_optimize_block()
919 if ((opline->opcode == ZEND_BOOL || in zend_optimize_block()
920 opline->opcode == ZEND_BOOL_NOT || in zend_optimize_block()
921 opline->opcode == ZEND_JMPZ || in zend_optimize_block()
922 opline->opcode == ZEND_JMPZ_EX || in zend_optimize_block()
923 opline->opcode == ZEND_JMPNZ_EX || in zend_optimize_block()
924 opline->opcode == ZEND_JMPNZ || in zend_optimize_block()
925 opline->opcode == ZEND_JMPZNZ) && in zend_optimize_block()
926 (ZEND_OP1_TYPE(opline) & (IS_TMP_VAR|IS_VAR)) && in zend_optimize_block()
927 VAR_SOURCE(opline->op1) != NULL && in zend_optimize_block()
928 (!zend_bitset_in(used_ext, VAR_NUM(ZEND_OP1(opline).var)) || in zend_optimize_block()
929 ((ZEND_RESULT_TYPE(opline) & (IS_TMP_VAR|IS_VAR)) && in zend_optimize_block()
930 ZEND_RESULT(opline).var == ZEND_OP1(opline).var)) && in zend_optimize_block()
931 (VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL || in zend_optimize_block()
932 VAR_SOURCE(opline->op1)->opcode == ZEND_QM_ASSIGN)) { in zend_optimize_block()
933 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
934 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
936 VAR_UNSET(opline->op1); in zend_optimize_block()
939 } else if (last_op && opline->opcode == ZEND_ECHO && in zend_optimize_block()
941 ZEND_OP1_TYPE(opline) == IS_CONST && in zend_optimize_block()
942 Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_DOUBLE && in zend_optimize_block()
951 if (Z_TYPE(ZEND_OP1_LITERAL(opline)) != IS_STRING) { in zend_optimize_block()
952 convert_to_string_safe(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
958 l = old_len + Z_STRLEN(ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
967 …LITERAL(last_op)) + old_len, Z_STRVAL(ZEND_OP1_LITERAL(opline)), Z_STRLEN(ZEND_OP1_LITERAL(opline)… in zend_optimize_block()
969 zval_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
970 ZVAL_STR(&ZEND_OP1_LITERAL(opline), zend_new_interned_string(Z_STR(ZEND_OP1_LITERAL(last_op)))); in zend_optimize_block()
973 } else if ((opline->opcode == ZEND_CONCAT) && in zend_optimize_block()
974 ZEND_OP2_TYPE(opline) == IS_CONST && in zend_optimize_block()
975 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
976 VAR_SOURCE(opline->op1) && in zend_optimize_block()
977 (VAR_SOURCE(opline->op1)->opcode == ZEND_CONCAT || in zend_optimize_block()
978 VAR_SOURCE(opline->op1)->opcode == ZEND_FAST_CONCAT) && in zend_optimize_block()
979 ZEND_OP2_TYPE(VAR_SOURCE(opline->op1)) == IS_CONST && in zend_optimize_block()
980 ZEND_RESULT(VAR_SOURCE(opline->op1)).var == ZEND_OP1(opline).var) { in zend_optimize_block()
982 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
985 if (Z_TYPE(ZEND_OP2_LITERAL(opline)) != IS_STRING) { in zend_optimize_block()
986 convert_to_string_safe(&ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
992 VAR_UNSET(opline->op1); in zend_optimize_block()
993 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
995 l = old_len + Z_STRLEN(ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
1004 …OP2_LITERAL(src)) + old_len, Z_STRVAL(ZEND_OP2_LITERAL(opline)), Z_STRLEN(ZEND_OP2_LITERAL(opline)… in zend_optimize_block()
1006 zend_string_release(Z_STR(ZEND_OP2_LITERAL(opline))); in zend_optimize_block()
1007 ZVAL_STR(&ZEND_OP2_LITERAL(opline), zend_new_interned_string(Z_STR(ZEND_OP2_LITERAL(src)))); in zend_optimize_block()
1010 } else if ((opline->opcode == ZEND_ADD || in zend_optimize_block()
1011 opline->opcode == ZEND_SUB || in zend_optimize_block()
1012 opline->opcode == ZEND_MUL || in zend_optimize_block()
1013 opline->opcode == ZEND_DIV || in zend_optimize_block()
1014 opline->opcode == ZEND_MOD || in zend_optimize_block()
1015 opline->opcode == ZEND_SL || in zend_optimize_block()
1016 opline->opcode == ZEND_SR || in zend_optimize_block()
1017 opline->opcode == ZEND_CONCAT || in zend_optimize_block()
1018 opline->opcode == ZEND_FAST_CONCAT || in zend_optimize_block()
1019 opline->opcode == ZEND_IS_EQUAL || in zend_optimize_block()
1020 opline->opcode == ZEND_IS_NOT_EQUAL || in zend_optimize_block()
1021 opline->opcode == ZEND_IS_SMALLER || in zend_optimize_block()
1022 opline->opcode == ZEND_IS_SMALLER_OR_EQUAL || in zend_optimize_block()
1023 opline->opcode == ZEND_IS_IDENTICAL || in zend_optimize_block()
1024 opline->opcode == ZEND_IS_NOT_IDENTICAL || in zend_optimize_block()
1025 opline->opcode == ZEND_BOOL_XOR || in zend_optimize_block()
1026 opline->opcode == ZEND_BW_OR || in zend_optimize_block()
1027 opline->opcode == ZEND_BW_AND || in zend_optimize_block()
1028 opline->opcode == ZEND_BW_XOR) && in zend_optimize_block()
1029 ZEND_OP1_TYPE(opline)==IS_CONST && in zend_optimize_block()
1030 ZEND_OP2_TYPE(opline)==IS_CONST) { in zend_optimize_block()
1032 binary_op_type binary_op = get_binary_op(opline->opcode); in zend_optimize_block()
1036 if ((opline->opcode == ZEND_DIV || opline->opcode == ZEND_MOD) && in zend_optimize_block()
1037 zval_get_long(&ZEND_OP2_LITERAL(opline)) == 0) { in zend_optimize_block()
1038 if (RESULT_USED(opline)) { in zend_optimize_block()
1039 SET_VAR_SOURCE(opline); in zend_optimize_block()
1041 opline++; in zend_optimize_block()
1043 } else if ((opline->opcode == ZEND_SL || opline->opcode == ZEND_SR) && in zend_optimize_block()
1044 zval_get_long(&ZEND_OP2_LITERAL(opline)) < 0) { in zend_optimize_block()
1045 if (RESULT_USED(opline)) { in zend_optimize_block()
1046 SET_VAR_SOURCE(opline); in zend_optimize_block()
1048 opline++; in zend_optimize_block()
1053 if (binary_op(&result, &ZEND_OP1_LITERAL(opline), &ZEND_OP2_LITERAL(opline)) == SUCCESS) { in zend_optimize_block()
1054 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1055 literal_dtor(&ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
1056 opline->opcode = ZEND_QM_ASSIGN; in zend_optimize_block()
1057 SET_UNUSED(opline->op2); in zend_optimize_block()
1058 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
1061 } else if ((opline->opcode == ZEND_BOOL || in zend_optimize_block()
1062 opline->opcode == ZEND_BOOL_NOT || in zend_optimize_block()
1063 opline->opcode == ZEND_BW_NOT) && ZEND_OP1_TYPE(opline) == IS_CONST) { in zend_optimize_block()
1065 unary_op_type unary_op = get_unary_op(opline->opcode); in zend_optimize_block()
1069 unary_op(&result, &ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1070 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1073 ZVAL_COPY_VALUE(&result, &ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1075 ZVAL_NULL(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1077 opline->opcode = ZEND_QM_ASSIGN; in zend_optimize_block()
1078 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
1079 } else if ((opline->opcode == ZEND_RETURN || opline->opcode == ZEND_EXIT) && in zend_optimize_block()
1080 (ZEND_OP1_TYPE(opline) & (IS_TMP_VAR|IS_VAR)) && in zend_optimize_block()
1081 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1082 VAR_SOURCE(opline->op1)->opcode == ZEND_QM_ASSIGN) { 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, src->op1); in zend_optimize_block()
1088 } else if (opline->opcode == ZEND_CONCAT || opline->opcode == ZEND_FAST_CONCAT) { in zend_optimize_block()
1089 if ((ZEND_OP1_TYPE(opline) & (IS_TMP_VAR|IS_VAR)) && in zend_optimize_block()
1090 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1091 VAR_SOURCE(opline->op1)->opcode == ZEND_CAST && in zend_optimize_block()
1092 VAR_SOURCE(opline->op1)->extended_value == IS_STRING) { in zend_optimize_block()
1094 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1095 VAR_UNSET(opline->op1); in zend_optimize_block()
1096 COPY_NODE(opline->op1, src->op1); in zend_optimize_block()
1099 if ((ZEND_OP2_TYPE(opline) & (IS_TMP_VAR|IS_VAR)) && in zend_optimize_block()
1100 VAR_SOURCE(opline->op2) && in zend_optimize_block()
1101 VAR_SOURCE(opline->op2)->opcode == ZEND_CAST && in zend_optimize_block()
1102 VAR_SOURCE(opline->op2)->extended_value == IS_STRING) { in zend_optimize_block()
1104 zend_op *src = VAR_SOURCE(opline->op2); in zend_optimize_block()
1105 VAR_UNSET(opline->op2); in zend_optimize_block()
1106 COPY_NODE(opline->op2, src->op1); in zend_optimize_block()
1109 if (ZEND_OP1_TYPE(opline) == IS_CONST && in zend_optimize_block()
1110 Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_STRING && in zend_optimize_block()
1111 Z_STRLEN(ZEND_OP1_LITERAL(opline)) == 0) { in zend_optimize_block()
1113 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
1114 opline->opcode = ZEND_CAST; in zend_optimize_block()
1115 opline->extended_value = IS_STRING; in zend_optimize_block()
1116 COPY_NODE(opline->op1, opline->op2); in zend_optimize_block()
1117 opline->op2_type = IS_UNUSED; in zend_optimize_block()
1118 opline->op2.var = 0; in zend_optimize_block()
1119 } else if (ZEND_OP2_TYPE(opline) == IS_CONST && in zend_optimize_block()
1120 Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_STRING && in zend_optimize_block()
1121 Z_STRLEN(ZEND_OP2_LITERAL(opline)) == 0) { in zend_optimize_block()
1123 literal_dtor(&ZEND_OP2_LITERAL(opline)); in zend_optimize_block()
1124 opline->opcode = ZEND_CAST; in zend_optimize_block()
1125 opline->extended_value = IS_STRING; in zend_optimize_block()
1126 opline->op2_type = IS_UNUSED; in zend_optimize_block()
1127 opline->op2.var = 0; in zend_optimize_block()
1128 } else if (opline->opcode == ZEND_CONCAT && in zend_optimize_block()
1129 (opline->op1_type == IS_CONST || in zend_optimize_block()
1130 (opline->op1_type == IS_TMP_VAR && in zend_optimize_block()
1131 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1132 (VAR_SOURCE(opline->op1)->opcode == ZEND_FAST_CONCAT || in zend_optimize_block()
1133 VAR_SOURCE(opline->op1)->opcode == ZEND_ROPE_END || in zend_optimize_block()
1134 VAR_SOURCE(opline->op1)->opcode == ZEND_FETCH_CONSTANT))) && in zend_optimize_block()
1135 (opline->op2_type == IS_CONST || in zend_optimize_block()
1136 (opline->op2_type == IS_TMP_VAR && in zend_optimize_block()
1137 VAR_SOURCE(opline->op2) && in zend_optimize_block()
1138 (VAR_SOURCE(opline->op2)->opcode == ZEND_FAST_CONCAT || in zend_optimize_block()
1139 VAR_SOURCE(opline->op2)->opcode == ZEND_ROPE_END || in zend_optimize_block()
1140 VAR_SOURCE(opline->op2)->opcode == ZEND_FETCH_CONSTANT)))) { in zend_optimize_block()
1141 opline->opcode = ZEND_FAST_CONCAT; in zend_optimize_block()
1143 } else if (opline->opcode == ZEND_QM_ASSIGN && in zend_optimize_block()
1144 ZEND_OP1_TYPE(opline) == ZEND_RESULT_TYPE(opline) && in zend_optimize_block()
1145 ZEND_OP1(opline).var == ZEND_RESULT(opline).var) { in zend_optimize_block()
1147 MAKE_NOP(opline); in zend_optimize_block()
1148 } else if (opline->opcode == ZEND_BOOL && in zend_optimize_block()
1149 ZEND_OP1_TYPE(opline) == IS_TMP_VAR && in zend_optimize_block()
1150 VAR_SOURCE(opline->op1) && in zend_optimize_block()
1151 (VAR_SOURCE(opline->op1)->opcode == ZEND_IS_EQUAL || in zend_optimize_block()
1152 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_NOT_EQUAL || in zend_optimize_block()
1153 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_SMALLER || in zend_optimize_block()
1154 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_SMALLER_OR_EQUAL || in zend_optimize_block()
1155 VAR_SOURCE(opline->op1)->opcode == ZEND_BOOL || in zend_optimize_block()
1156 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_IDENTICAL || in zend_optimize_block()
1157 VAR_SOURCE(opline->op1)->opcode == ZEND_IS_NOT_IDENTICAL || in zend_optimize_block()
1158 VAR_SOURCE(opline->op1)->opcode == ZEND_ISSET_ISEMPTY_VAR || in zend_optimize_block()
1159 VAR_SOURCE(opline->op1)->opcode == ZEND_ISSET_ISEMPTY_DIM_OBJ) && in zend_optimize_block()
1160 !zend_bitset_in(used_ext, VAR_NUM(ZEND_OP1(opline).var))) { in zend_optimize_block()
1162 zend_op *src = VAR_SOURCE(opline->op1); in zend_optimize_block()
1163 COPY_NODE(src->result, opline->result); in zend_optimize_block()
1165 MAKE_NOP(opline); in zend_optimize_block()
1168 if (RESULT_USED(opline)) { in zend_optimize_block()
1169 SET_VAR_SOURCE(opline); in zend_optimize_block()
1171 if (opline->opcode != ZEND_NOP) { in zend_optimize_block()
1172 last_op = opline; in zend_optimize_block()
1174 opline++; in zend_optimize_block()
1185 zend_op *opline = new_opcodes; in assemble_code_blocks() local
1191 memcpy(opline, cur_block->start_opline, cur_block->len * sizeof(zend_op)); in assemble_code_blocks()
1192 cur_block->start_opline = opline; in assemble_code_blocks()
1193 opline += cur_block->len; in assemble_code_blocks()
1194 if ((opline - 1)->opcode == ZEND_JMP) { in assemble_code_blocks()
1204 MAKE_NOP((opline - 1)); in assemble_code_blocks()
1205 opline--; in assemble_code_blocks()
1225 op_array->last = opline-new_opcodes; in assemble_code_blocks()
1255 opline = cur_block->start_opline + cur_block->len - 1; in assemble_code_blocks()
1256 if (opline->opcode == ZEND_OP_DATA) { in assemble_code_blocks()
1257 opline--; in assemble_code_blocks()
1260 ZEND_OP1(opline).opline_num = cur_block->op1_to->start_opline - new_opcodes; in assemble_code_blocks()
1263 ZEND_OP2(opline).opline_num = cur_block->op2_to->start_opline - new_opcodes; in assemble_code_blocks()
1266 opline->extended_value = cur_block->ext_to->start_opline - new_opcodes; in assemble_code_blocks()
1278 opline = op_array->opcodes; in assemble_code_blocks()
1279 end = opline + op_array->last; in assemble_code_blocks()
1280 while (opline < end) { in assemble_code_blocks()
1281 if (opline->opcode == ZEND_DECLARE_INHERITED_CLASS_DELAYED) { in assemble_code_blocks()
1282 *opline_num = opline - op_array->opcodes; in assemble_code_blocks()
1283 opline_num = &ZEND_RESULT(opline).opline_num; in assemble_code_blocks()
1285 ++opline; in assemble_code_blocks()
1827 #define RES_NEVER_USED(opline) (opline->result_type == IS_UNUSED || NEVER_USED(opline->result)) argument
1851 zend_op *opline = next_block->start_opline; in zend_t_usage() local
1852 zend_op *end = opline + next_block->len; in zend_t_usage()
1860 while (opline<end) { in zend_t_usage()
1861 T_USAGE(opline->op1); in zend_t_usage()
1862 if (opline->op2_type & (IS_VAR | IS_TMP_VAR)) { in zend_t_usage()
1863 if (opline->opcode == ZEND_FE_FETCH_R || opline->opcode == ZEND_FE_FETCH_RW) { in zend_t_usage()
1865 zend_bitset_incl(defined_here, VAR_NUM(ZEND_OP2(opline).var)); in zend_t_usage()
1867 T_USAGE(opline->op2); in zend_t_usage()
1871 if (RESULT_USED(opline)) { in zend_t_usage()
1872 …tset_in(defined_here, VAR_NUM(ZEND_RESULT(opline).var)) && !zend_bitset_in(used_ext, VAR_NUM(ZEND_… in zend_t_usage()
1873 opline->opcode == ZEND_ADD_ARRAY_ELEMENT) { in zend_t_usage()
1875 zend_bitset_incl(used_ext, VAR_NUM(ZEND_RESULT(opline).var)); in zend_t_usage()
1877 zend_bitset_incl(defined_here, VAR_NUM(ZEND_RESULT(opline).var)); in zend_t_usage()
1879 opline++; in zend_t_usage()
1894 zend_op *opline = block->start_opline + block->len - 1; in zend_t_usage() local
1903 while (opline >= block->start_opline) { in zend_t_usage()
1905 if (RES_NEVER_USED(opline)) { in zend_t_usage()
1906 switch (opline->opcode) { in zend_t_usage()
1929 if (ZEND_RESULT_TYPE(opline) == IS_VAR) { in zend_t_usage()
1930 ZEND_RESULT_TYPE(opline) |= EXT_TYPE_UNUSED; in zend_t_usage()
1936 if (ZEND_OP1_TYPE(opline) == IS_TMP_VAR) { in zend_t_usage()
1937 opline->opcode = ZEND_FREE; in zend_t_usage()
1939 if (ZEND_OP1_TYPE(opline) == IS_CONST) { in zend_t_usage()
1940 literal_dtor(&ZEND_OP1_LITERAL(opline)); in zend_t_usage()
1942 MAKE_NOP(opline); in zend_t_usage()
1947 opline->opcode -= 3; in zend_t_usage()
1948 SET_UNUSED(opline->result); in zend_t_usage()
1953 if (opline->opcode == ZEND_ADD_ARRAY_ELEMENT) { in zend_t_usage()
1954 if (ZEND_OP1_TYPE(opline) == IS_VAR || ZEND_OP1_TYPE(opline) == IS_TMP_VAR) { in zend_t_usage()
1955 zend_bitset_incl(usage, VAR_NUM(ZEND_RESULT(opline).var)); in zend_t_usage()
1958 if (RESULT_USED(opline)) { in zend_t_usage()
1959 zend_bitset_excl(usage, VAR_NUM(ZEND_RESULT(opline).var)); in zend_t_usage()
1963 if (ZEND_OP1_TYPE(opline) == IS_VAR || ZEND_OP1_TYPE(opline) == IS_TMP_VAR) { in zend_t_usage()
1964 zend_bitset_incl(usage, VAR_NUM(ZEND_OP1(opline).var)); in zend_t_usage()
1967 if (ZEND_OP2_TYPE(opline) == IS_VAR || ZEND_OP2_TYPE(opline) == IS_TMP_VAR) { in zend_t_usage()
1968 zend_bitset_incl(usage, VAR_NUM(ZEND_OP2(opline).var)); in zend_t_usage()
1971 if ((ZEND_RESULT_TYPE(opline) & IS_VAR) && in zend_t_usage()
1972 (ZEND_RESULT_TYPE(opline) & EXT_TYPE_UNUSED) && in zend_t_usage()
1973 zend_bitset_in(usage, VAR_NUM(ZEND_RESULT(opline).var))) { in zend_t_usage()
1974 ZEND_RESULT_TYPE(opline) &= ~EXT_TYPE_UNUSED; in zend_t_usage()
1977 opline--; in zend_t_usage()