Lines Matching refs:phi

96 	zend_ssa_phi *phi;  in add_pi()  local
101 phi = zend_arena_calloc(arena, 1, in add_pi()
105 phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi))); in add_pi()
106 memset(phi->sources, 0xff, sizeof(int) * ssa->cfg.blocks[to].predecessors_count); in add_pi()
107phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa-… in add_pi()
109 phi->pi = from; in add_pi()
110 phi->var = var; in add_pi()
111 phi->ssa_var = -1; in add_pi()
112 phi->next = ssa->blocks[to].phis; in add_pi()
113 ssa->blocks[to].phis = phi; in add_pi()
127 return phi; in add_pi()
132 zend_ssa_phi *phi, int min_var, int max_var, zend_long min, zend_long max, in pi_range() argument
135 zend_ssa_range_constraint *constraint = &phi->constraint.range; in pi_range()
145 phi->has_range_constraint = true; in pi_range()
149 static inline void pi_range_equals(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_equals() argument
150 pi_range(phi, var, var, val, val, 0, 0, 0); in pi_range_equals()
152 static inline void pi_range_not_equals(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_not_equals() argument
153 pi_range(phi, var, var, val, val, 0, 0, 1); in pi_range_not_equals()
155 static inline void pi_range_min(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_min() argument
156 pi_range(phi, var, -1, val, ZEND_LONG_MAX, 0, 1, 0); in pi_range_min()
158 static inline void pi_range_max(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_max() argument
159 pi_range(phi, -1, var, ZEND_LONG_MIN, val, 1, 0, 0); in pi_range_max()
162 static void pi_type_mask(zend_ssa_phi *phi, uint32_t type_mask) { in pi_type_mask() argument
163 phi->has_range_constraint = false; in pi_type_mask()
164 phi->constraint.type.ce = NULL; in pi_type_mask()
165 phi->constraint.type.type_mask = MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN; in pi_type_mask()
166 phi->constraint.type.type_mask |= type_mask; in pi_type_mask()
168 phi->constraint.type.type_mask |= MAY_BE_UNDEF; in pi_type_mask()
171 static inline void pi_not_type_mask(zend_ssa_phi *phi, uint32_t type_mask) { in pi_not_type_mask() argument
173 pi_type_mask(phi, ~type_mask & relevant); in pi_not_type_mask()
809 zend_ssa_phi *phi = ssa_blocks[n].phis; in zend_ssa_rename() local
811 if (phi->ssa_var < 0) { in zend_ssa_rename()
812 phi->ssa_var = ssa_vars_count; in zend_ssa_rename()
813 var[phi->var] = ssa_vars_count; in zend_ssa_rename()
816 var[phi->var] = phi->ssa_var; in zend_ssa_rename()
818 phi = phi->next; in zend_ssa_rename()
819 } while (phi); in zend_ssa_rename()
913 zend_bitset def, in, phi; in zend_build_ssa() local
948 phi = dfg.use; in zend_build_ssa()
949 zend_bitset_clear(phi, set_size * blocks_count); in zend_build_ssa()
959 zend_bitset def_j = def + j * set_size, phi_j = phi + j * set_size; in zend_build_ssa()
998 if (!zend_bitset_empty(phi + j * set_size, set_size)) { in zend_build_ssa()
999 ZEND_BITSET_REVERSE_FOREACH(phi + j * set_size, set_size, i) { in zend_build_ssa()
1000 zend_ssa_phi *phi = zend_arena_calloc(arena, 1, in zend_build_ssa() local
1005 phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi))); in zend_build_ssa()
1006 memset(phi->sources, 0xff, sizeof(int) * blocks[j].predecessors_count); in zend_build_ssa()
1007phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa-… in zend_build_ssa()
1009 phi->pi = -1; in zend_build_ssa()
1010 phi->var = i; in zend_build_ssa()
1011 phi->ssa_var = -1; in zend_build_ssa()
1022 phi->next = *pp; in zend_build_ssa()
1023 *pp = phi; in zend_build_ssa()
1108 zend_ssa_phi *phi = ssa->blocks[i].phis; in zend_ssa_compute_use_def_chains() local
1109 while (phi) { in zend_ssa_compute_use_def_chains()
1110 phi->block = i; in zend_ssa_compute_use_def_chains()
1111 ssa_vars[phi->ssa_var].var = phi->var; in zend_ssa_compute_use_def_chains()
1112 ssa_vars[phi->ssa_var].definition_phi = phi; in zend_ssa_compute_use_def_chains()
1113 if (phi->pi >= 0) { in zend_ssa_compute_use_def_chains()
1116 ZEND_ASSERT(phi->sources[0] >= 0); in zend_ssa_compute_use_def_chains()
1117 p = ssa_vars[phi->sources[0]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1118 while (p && p != phi) { in zend_ssa_compute_use_def_chains()
1119 p = zend_ssa_next_use_phi(ssa, phi->sources[0], p); in zend_ssa_compute_use_def_chains()
1122 phi->use_chains[0] = ssa_vars[phi->sources[0]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1123 ssa_vars[phi->sources[0]].phi_use_chain = phi; in zend_ssa_compute_use_def_chains()
1125 if (phi->has_range_constraint) { in zend_ssa_compute_use_def_chains()
1127 zend_ssa_range_constraint *constraint = &phi->constraint.range; in zend_ssa_compute_use_def_chains()
1129 phi->sym_use_chain = ssa_vars[constraint->min_ssa_var].sym_use_chain; in zend_ssa_compute_use_def_chains()
1130 ssa_vars[constraint->min_ssa_var].sym_use_chain = phi; in zend_ssa_compute_use_def_chains()
1132 phi->sym_use_chain = ssa_vars[constraint->max_ssa_var].sym_use_chain; in zend_ssa_compute_use_def_chains()
1133 ssa_vars[constraint->max_ssa_var].sym_use_chain = phi; in zend_ssa_compute_use_def_chains()
1142 ZEND_ASSERT(phi->sources[j] >= 0); in zend_ssa_compute_use_def_chains()
1143 p = ssa_vars[phi->sources[j]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1144 while (p && p != phi) { in zend_ssa_compute_use_def_chains()
1145 p = zend_ssa_next_use_phi(ssa, phi->sources[j], p); in zend_ssa_compute_use_def_chains()
1148 phi->use_chains[j] = ssa_vars[phi->sources[j]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1149 ssa_vars[phi->sources[j]].phi_use_chain = phi; in zend_ssa_compute_use_def_chains()
1153 phi = phi->next; in zend_ssa_compute_use_def_chains()
1302 static inline void zend_ssa_remove_use_of_phi_source(zend_ssa *ssa, zend_ssa_phi *phi, int source, … in zend_ssa_remove_use_of_phi_source() argument
1305 while (*cur && *cur != phi) { in zend_ssa_remove_use_of_phi_source()
1314 static void zend_ssa_remove_uses_of_phi_sources(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */ in zend_ssa_remove_uses_of_phi_sources() argument
1317 FOREACH_PHI_SOURCE(phi, source) { in zend_ssa_remove_uses_of_phi_sources()
1318 zend_ssa_remove_use_of_phi_source(ssa, phi, source, zend_ssa_next_use_phi(ssa, source, phi)); in zend_ssa_remove_uses_of_phi_sources()
1323 static void zend_ssa_remove_phi_from_block(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */ in zend_ssa_remove_phi_from_block() argument
1325 zend_ssa_block *block = &ssa->blocks[phi->block]; in zend_ssa_remove_phi_from_block()
1327 while (*cur != phi) { in zend_ssa_remove_phi_from_block()
1352 static inline void zend_ssa_remove_phi_source(zend_ssa *ssa, zend_ssa_phi *phi, int pred_offset, in… in zend_ssa_remove_phi_source() argument
1354 int j, var_num = phi->sources[pred_offset]; in zend_ssa_remove_phi_source()
1355 zend_ssa_phi *next_phi = phi->use_chains[pred_offset]; in zend_ssa_remove_phi_source()
1359 …memmove(phi->sources + pred_offset, phi->sources + pred_offset + 1, (predecessors_count - pred_off… in zend_ssa_remove_phi_source()
1360 …memmove(phi->use_chains + pred_offset, phi->use_chains + pred_offset + 1, (predecessors_count - pr… in zend_ssa_remove_phi_source()
1366 if (phi->sources[j] == var_num) { in zend_ssa_remove_phi_source()
1370 phi->use_chains[j] = next_phi; in zend_ssa_remove_phi_source()
1377 zend_ssa_remove_use_of_phi_source(ssa, phi, var_num, next_phi); in zend_ssa_remove_phi_source()
1381 void zend_ssa_remove_phi(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */ in zend_ssa_remove_phi() argument
1383 ZEND_ASSERT(phi->ssa_var >= 0); in zend_ssa_remove_phi()
1384 ZEND_ASSERT(ssa->vars[phi->ssa_var].use_chain < 0 in zend_ssa_remove_phi()
1385 && ssa->vars[phi->ssa_var].phi_use_chain == NULL); in zend_ssa_remove_phi()
1386 zend_ssa_remove_uses_of_phi_sources(ssa, phi); in zend_ssa_remove_phi()
1387 zend_ssa_remove_phi_from_block(ssa, phi); in zend_ssa_remove_phi()
1388 ssa->vars[phi->ssa_var].definition_phi = NULL; in zend_ssa_remove_phi()
1389 phi->ssa_var = -1; in zend_ssa_remove_phi()
1396 zend_ssa_phi *phi; in zend_ssa_remove_uses_of_var() local
1398 FOREACH_PHI_USE(var, phi) { in zend_ssa_remove_uses_of_var()
1399 int i, end = NUM_PHI_SOURCES(phi); in zend_ssa_remove_uses_of_var()
1401 if (phi->sources[i] == var_num) { in zend_ssa_remove_uses_of_var()
1402 phi->use_chains[i] = NULL; in zend_ssa_remove_uses_of_var()
1430 zend_ssa_phi *phi; in zend_ssa_remove_predecessor() local
1451 for (phi = next_ssa_block->phis; phi; phi = phi->next) { in zend_ssa_remove_predecessor()
1452 if (phi->pi >= 0) { in zend_ssa_remove_predecessor()
1453 if (phi->pi == from) { in zend_ssa_remove_predecessor()
1454 zend_ssa_rename_var_uses(ssa, phi->ssa_var, phi->sources[0], /* update_types */ 0); in zend_ssa_remove_predecessor()
1455 zend_ssa_remove_phi(ssa, phi); in zend_ssa_remove_predecessor()
1458 ZEND_ASSERT(phi->sources[pred_offset] >= 0); in zend_ssa_remove_predecessor()
1459 zend_ssa_remove_phi_source(ssa, phi, pred_offset, next_block->predecessors_count); in zend_ssa_remove_predecessor()
1476 zend_ssa_phi *phi; in zend_ssa_remove_block() local
1482 for (phi = ssa_block->phis; phi; phi = phi->next) { in zend_ssa_remove_block()
1483 zend_ssa_remove_uses_of_var(ssa, phi->ssa_var); in zend_ssa_remove_block()
1484 zend_ssa_remove_phi(ssa, phi); in zend_ssa_remove_block()
1556 zend_ssa_phi *phi; in propagate_phi_type_widening() local
1557 FOREACH_PHI_USE(&ssa->vars[var], phi) { in propagate_phi_type_widening()
1558 if (ssa->var_info[var].type & ~ssa->var_info[phi->ssa_var].type) { in propagate_phi_type_widening()
1559 ssa->var_info[phi->ssa_var].type |= ssa->var_info[var].type; in propagate_phi_type_widening()
1560 propagate_phi_type_widening(ssa, phi->ssa_var); in propagate_phi_type_widening()
1571 zend_ssa_phi *phi; in zend_ssa_rename_var_uses() local
1635 FOREACH_PHI_USE(old_var, phi) { in zend_ssa_rename_var_uses()
1642 for (j = 0; j < ssa->cfg.blocks[phi->block].predecessors_count; j++) { in zend_ssa_rename_var_uses()
1643 if (phi->sources[j] == new) { in zend_ssa_rename_var_uses()
1644 existing_use_chain_ptr = &phi->use_chains[j]; in zend_ssa_rename_var_uses()
1649 for (j = 0; j < ssa->cfg.blocks[phi->block].predecessors_count; j++) { in zend_ssa_rename_var_uses()
1650 if (phi->sources[j] == new) { in zend_ssa_rename_var_uses()
1652 } else if (phi->sources[j] == old) { in zend_ssa_rename_var_uses()
1653 phi->sources[j] = new; in zend_ssa_rename_var_uses()
1659 phi->use_chains[j] = *existing_use_chain_ptr; in zend_ssa_rename_var_uses()
1662 phi->use_chains[j] = new_var->phi_use_chain; in zend_ssa_rename_var_uses()
1663 new_var->phi_use_chain = phi; in zend_ssa_rename_var_uses()
1667 phi->use_chains[j] = NULL; in zend_ssa_rename_var_uses()
1676 if (update_types && (ssa->var_info[new].type & ~ssa->var_info[phi->ssa_var].type)) { in zend_ssa_rename_var_uses()
1677 ssa->var_info[phi->ssa_var].type |= ssa->var_info[new].type; in zend_ssa_rename_var_uses()
1678 propagate_phi_type_widening(ssa, phi->ssa_var); in zend_ssa_rename_var_uses()