Skip to content

Commit b979e03

Browse files
committed
Remove dead type narrowing code
Rename handle_type_narrowing() to clarify what it does, and remove dead code for resetting dependent vars.
1 parent 78b64bd commit b979e03

File tree

1 file changed

+6
-81
lines changed

1 file changed

+6
-81
lines changed

ext/opcache/Optimizer/zend_inference.c

Lines changed: 6 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1849,7 +1849,7 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) {
18491849
} \
18501850
if (ssa_var_info[__var].type != __type) { \
18511851
if (ssa_var_info[__var].type & ~__type) { \
1852-
handle_type_narrowing(op_array, ssa, worklist, \
1852+
emit_type_narrowing_warning(op_array, ssa, worklist,\
18531853
__var, ssa_var_info[__var].type, __type); \
18541854
return FAILURE; \
18551855
} \
@@ -1924,87 +1924,12 @@ static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset
19241924
}
19251925
}
19261926

1927-
static void reset_dependent_vars(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset worklist, int var)
1927+
static void emit_type_narrowing_warning(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset worklist, int var, uint32_t old_type, uint32_t new_type)
19281928
{
1929-
zend_ssa_op *ssa_ops = ssa->ops;
1930-
zend_ssa_var *ssa_vars = ssa->vars;
1931-
zend_ssa_var_info *ssa_var_info = ssa->var_info;
1932-
zend_ssa_phi *p;
1933-
int use;
1934-
1935-
p = ssa_vars[var].phi_use_chain;
1936-
while (p) {
1937-
if (ssa_var_info[p->ssa_var].type) {
1938-
ssa_var_info[p->ssa_var].type = 0;
1939-
zend_bitset_incl(worklist, p->ssa_var);
1940-
reset_dependent_vars(op_array, ssa, worklist, p->ssa_var);
1941-
}
1942-
p = zend_ssa_next_use_phi(ssa, var, p);
1943-
}
1944-
use = ssa_vars[var].use_chain;
1945-
while (use >= 0) {
1946-
if (ssa_ops[use].op1_def >= 0 && ssa_var_info[ssa_ops[use].op1_def].type) {
1947-
ssa_var_info[ssa_ops[use].op1_def].type = 0;
1948-
zend_bitset_incl(worklist, ssa_ops[use].op1_def);
1949-
reset_dependent_vars(op_array, ssa, worklist, ssa_ops[use].op1_def);
1950-
}
1951-
if (ssa_ops[use].op2_def >= 0 && ssa_var_info[ssa_ops[use].op2_def].type) {
1952-
ssa_var_info[ssa_ops[use].op2_def].type = 0;
1953-
zend_bitset_incl(worklist, ssa_ops[use].op2_def);
1954-
reset_dependent_vars(op_array, ssa, worklist, ssa_ops[use].op2_def);
1955-
}
1956-
if (ssa_ops[use].result_def >= 0 && ssa_var_info[ssa_ops[use].result_def].type) {
1957-
ssa_var_info[ssa_ops[use].result_def].type = 0;
1958-
zend_bitset_incl(worklist, ssa_ops[use].result_def);
1959-
reset_dependent_vars(op_array, ssa, worklist, ssa_ops[use].result_def);
1960-
}
1961-
if (op_array->opcodes[use+1].opcode == ZEND_OP_DATA) {
1962-
if (ssa_ops[use+1].op1_def >= 0 && ssa_var_info[ssa_ops[use+1].op1_def].type) {
1963-
ssa_var_info[ssa_ops[use+1].op1_def].type = 0;
1964-
zend_bitset_incl(worklist, ssa_ops[use+1].op1_def);
1965-
reset_dependent_vars(op_array, ssa, worklist, ssa_ops[use+1].op1_def);
1966-
}
1967-
if (ssa_ops[use+1].op2_def >= 0 && ssa_var_info[ssa_ops[use+1].op2_def].type) {
1968-
ssa_var_info[ssa_ops[use+1].op2_def].type = 0;
1969-
zend_bitset_incl(worklist, ssa_ops[use+1].op2_def);
1970-
reset_dependent_vars(op_array, ssa, worklist, ssa_ops[use+1].op2_def);
1971-
}
1972-
if (ssa_ops[use+1].result_def >= 0 && ssa_var_info[ssa_ops[use+1].result_def].type) {
1973-
ssa_var_info[ssa_ops[use+1].result_def].type = 0;
1974-
zend_bitset_incl(worklist, ssa_ops[use+1].result_def);
1975-
reset_dependent_vars(op_array, ssa, worklist, ssa_ops[use+1].result_def);
1976-
}
1977-
}
1978-
use = zend_ssa_next_use(ssa_ops, var, use);
1979-
}
1980-
#ifdef SYM_RANGE
1981-
/* Process symbolic control-flow constraints */
1982-
p = ssa->vars[var].sym_use_chain;
1983-
while (p) {
1984-
ssa_var_info[p->ssa_var].type = 0;
1985-
zend_bitset_incl(worklist, p->ssa_var);
1986-
reset_dependent_vars(op_array, ssa, worklist, p->ssa_var);
1987-
p = p->sym_use_chain;
1988-
}
1989-
#endif
1990-
}
1991-
1992-
static void handle_type_narrowing(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset worklist, int var, uint32_t old_type, uint32_t new_type)
1993-
{
1994-
if (1) {
1995-
/* Right now, this is always a bug */
1996-
int def_op_num = ssa->vars[var].definition;
1997-
const zend_op *def_opline = def_op_num >= 0 ? &op_array->opcodes[def_op_num] : NULL;
1998-
const char *def_op_name = def_opline ? zend_get_opcode_name(def_opline->opcode) : "PHI";
1999-
zend_error(E_WARNING, "Narrowing occurred during type inference of %s. Please file a bug report on bugs.php.net", def_op_name);
2000-
} else {
2001-
/* if new_type set resets some bits from old_type set
2002-
* We have completely recalculate types of some dependent SSA variables
2003-
* (this may occurs mainly because of incremental inter-precudure
2004-
* type inference)
2005-
*/
2006-
reset_dependent_vars(op_array, ssa, worklist, var);
2007-
}
1929+
int def_op_num = ssa->vars[var].definition;
1930+
const zend_op *def_opline = def_op_num >= 0 ? &op_array->opcodes[def_op_num] : NULL;
1931+
const char *def_op_name = def_opline ? zend_get_opcode_name(def_opline->opcode) : "PHI";
1932+
zend_error(E_WARNING, "Narrowing occurred during type inference of %s. Please file a bug report on bugs.php.net", def_op_name);
20081933
}
20091934

20101935
uint32_t zend_array_element_type(uint32_t t1, int write, int insert)

0 commit comments

Comments
 (0)