Drop unused INIT_STRING opcode

INIT_STRING has been implemented as an UNUSED op1 to ADD_* for
some time now.
This commit is contained in:
Nikita Popov 2014-09-29 22:59:57 +02:00
parent 290d71de75
commit 67a11b61cd
5 changed files with 26 additions and 85 deletions

View file

@ -1985,17 +1985,6 @@ ZEND_VM_HANDLER(70, ZEND_FREE, TMP|VAR, ANY)
ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(53, ZEND_INIT_STRING, ANY, ANY)
{
USE_OPLINE
zval *tmp = EX_VAR(opline->result.var);
SAVE_OPLINE();
ZVAL_EMPTY_STRING(tmp);
/*CHECK_EXCEPTION();*/
ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(54, ZEND_ADD_CHAR, TMP|UNUSED, CONST)
{
USE_OPLINE

View file

@ -488,17 +488,6 @@ static int ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
ZEND_VM_CONTINUE();
}
static int ZEND_FASTCALL ZEND_INIT_STRING_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *tmp = EX_VAR(opline->result.var);
SAVE_OPLINE();
ZVAL_EMPTY_STRING(tmp);
/*CHECK_EXCEPTION();*/
ZEND_VM_NEXT_OPCODE();
}
static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@ -44619,31 +44608,31 @@ void zend_init_opcodes_handlers(void)
ZEND_BOOL_SPEC_CV_HANDLER,
ZEND_BOOL_SPEC_CV_HANDLER,
ZEND_BOOL_SPEC_CV_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_INIT_STRING_SPEC_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,

View file

@ -75,7 +75,7 @@ const char *zend_vm_opcodes_map[170] = {
"ZEND_BRK",
"ZEND_CONT",
"ZEND_BOOL",
"ZEND_INIT_STRING",
NULL,
"ZEND_ADD_CHAR",
"ZEND_ADD_STRING",
"ZEND_ADD_VAR",

View file

@ -75,7 +75,6 @@ ZEND_API const char *zend_get_opcode_name(zend_uchar opcode);
#define ZEND_BRK 50
#define ZEND_CONT 51
#define ZEND_BOOL 52
#define ZEND_INIT_STRING 53
#define ZEND_ADD_CHAR 54
#define ZEND_ADD_STRING 55
#define ZEND_ADD_VAR 56

View file

@ -1054,25 +1054,6 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
VAR_UNSET(opline->op1);
COPY_NODE(opline->op1, src->op1);
MAKE_NOP(src);
} else if ((opline->opcode == ZEND_ADD_STRING ||
opline->opcode == ZEND_ADD_CHAR) &&
ZEND_OP1_TYPE(opline) == IS_TMP_VAR &&
VAR_SOURCE(opline->op1) &&
VAR_SOURCE(opline->op1)->opcode == ZEND_INIT_STRING) {
/* convert T = INIT_STRING(), T = ADD_STRING(T, X) to T = QM_ASSIGN(X) */
/* CHECKME: Remove ZEND_ADD_VAR optimization, since some conversions -
namely, BOOL(false)->string - don't allocate memory but use empty_string
and ADD_CHAR fails */
zend_op *src = VAR_SOURCE(opline->op1);
VAR_UNSET(opline->op1);
COPY_NODE(opline->op1, opline->op2);
if (opline->opcode == ZEND_ADD_CHAR) {
char c = (char)Z_LVAL(ZEND_OP2_LITERAL(opline));
ZVAL_STRINGL(&ZEND_OP1_LITERAL(opline), &c, 1);
}
SET_UNUSED(opline->op2);
MAKE_NOP(src);
opline->opcode = ZEND_QM_ASSIGN;
} else if ((opline->opcode == ZEND_ADD_STRING ||
opline->opcode == ZEND_ADD_CHAR ||
opline->opcode == ZEND_ADD_VAR ||
@ -1094,23 +1075,6 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
opline->opcode = ZEND_CONCAT;
literal_dtor(&ZEND_OP2_LITERAL(src)); /* will take care of empty_string too */
MAKE_NOP(src);
//??? This optimization can't work anymore because ADD_VAR returns IS_TMP_VAR
//??? and ZEND_CAST returns IS_VAR.
//??? BTW: it wan't used for long time, because we don't use INIT_STRING
#if 0
} else if (opline->opcode == ZEND_ADD_VAR &&
ZEND_OP1_TYPE(opline) == IS_TMP_VAR &&
VAR_SOURCE(opline->op1) &&
VAR_SOURCE(opline->op1)->opcode == ZEND_INIT_STRING) {
/* convert T = INIT_STRING(), T = ADD_VAR(T, X) to T = CAST(STRING, X) */
zend_op *src = VAR_SOURCE(opline->op1);
VAR_UNSET(opline->op1);
COPY_NODE(opline->op1, opline->op2);
SET_UNUSED(opline->op2);
MAKE_NOP(src);
opline->opcode = ZEND_CAST;
opline->extended_value = IS_STRING;
#endif
} else if ((opline->opcode == ZEND_ADD_STRING ||
opline->opcode == ZEND_ADD_CHAR ||
opline->opcode == ZEND_ADD_VAR ||