Lines Matching refs:phi

83 	zend_ssa_phi *phi;  in add_pi()  local
88 phi = zend_arena_calloc(arena, 1, in add_pi()
92 phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi))); in add_pi()
93 memset(phi->sources, 0xff, sizeof(int) * ssa->cfg.blocks[to].predecessors_count); in add_pi()
94phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa-… in add_pi()
96 phi->pi = from; in add_pi()
97 phi->var = var; in add_pi()
98 phi->ssa_var = -1; in add_pi()
99 phi->next = ssa->blocks[to].phis; in add_pi()
100 ssa->blocks[to].phis = phi; in add_pi()
114 return phi; in add_pi()
119 zend_ssa_phi *phi, int min_var, int max_var, zend_long min, zend_long max, in pi_range() argument
122 zend_ssa_range_constraint *constraint = &phi->constraint.range; in pi_range()
132 phi->has_range_constraint = 1; in pi_range()
136 static inline void pi_range_equals(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_equals() argument
137 pi_range(phi, var, var, val, val, 0, 0, 0); in pi_range_equals()
139 static inline void pi_range_not_equals(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_not_equals() argument
140 pi_range(phi, var, var, val, val, 0, 0, 1); in pi_range_not_equals()
142 static inline void pi_range_min(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_min() argument
143 pi_range(phi, var, -1, val, ZEND_LONG_MAX, 0, 1, 0); in pi_range_min()
145 static inline void pi_range_max(zend_ssa_phi *phi, int var, zend_long val) { in pi_range_max() argument
146 pi_range(phi, -1, var, ZEND_LONG_MIN, val, 1, 0, 0); in pi_range_max()
149 static void pi_type_mask(zend_ssa_phi *phi, uint32_t type_mask) { in pi_type_mask() argument
150 phi->has_range_constraint = 0; in pi_type_mask()
151 phi->constraint.type.ce = NULL; in pi_type_mask()
152 phi->constraint.type.type_mask = MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN; in pi_type_mask()
153 phi->constraint.type.type_mask |= type_mask; in pi_type_mask()
155 phi->constraint.type.type_mask |= MAY_BE_UNDEF; in pi_type_mask()
158 static inline void pi_not_type_mask(zend_ssa_phi *phi, uint32_t type_mask) { in pi_not_type_mask() argument
160 pi_type_mask(phi, ~type_mask & relevant); in pi_not_type_mask()
548 zend_ssa_phi *phi = ssa_blocks[n].phis; in zend_ssa_rename() local
550 if (phi->ssa_var < 0) { in zend_ssa_rename()
551 phi->ssa_var = ssa_vars_count; in zend_ssa_rename()
552 var[phi->var] = ssa_vars_count; in zend_ssa_rename()
555 var[phi->var] = phi->ssa_var; in zend_ssa_rename()
557 phi = phi->next; in zend_ssa_rename()
558 } while (phi); in zend_ssa_rename()
863 zend_bitset def, in, phi; in zend_build_ssa() local
902 phi = dfg.use; in zend_build_ssa()
903 zend_bitset_clear(phi, set_size * blocks_count); in zend_build_ssa()
913 zend_bitset def_j = def + j * set_size, phi_j = phi + j * set_size; in zend_build_ssa()
952 if (!zend_bitset_empty(phi + j * set_size, set_size)) { in zend_build_ssa()
953 ZEND_BITSET_REVERSE_FOREACH(phi + j * set_size, set_size, i) { in zend_build_ssa()
954 zend_ssa_phi *phi = zend_arena_calloc(arena, 1, in zend_build_ssa() local
959 phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi))); in zend_build_ssa()
960 memset(phi->sources, 0xff, sizeof(int) * blocks[j].predecessors_count); in zend_build_ssa()
961phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa-… in zend_build_ssa()
963 phi->pi = -1; in zend_build_ssa()
964 phi->var = i; in zend_build_ssa()
965 phi->ssa_var = -1; in zend_build_ssa()
976 phi->next = *pp; in zend_build_ssa()
977 *pp = phi; in zend_build_ssa()
1062 zend_ssa_phi *phi = ssa->blocks[i].phis; in zend_ssa_compute_use_def_chains() local
1063 while (phi) { in zend_ssa_compute_use_def_chains()
1064 phi->block = i; in zend_ssa_compute_use_def_chains()
1065 ssa_vars[phi->ssa_var].var = phi->var; in zend_ssa_compute_use_def_chains()
1066 ssa_vars[phi->ssa_var].definition_phi = phi; in zend_ssa_compute_use_def_chains()
1067 if (phi->pi >= 0) { in zend_ssa_compute_use_def_chains()
1070 ZEND_ASSERT(phi->sources[0] >= 0); in zend_ssa_compute_use_def_chains()
1071 p = ssa_vars[phi->sources[0]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1072 while (p && p != phi) { in zend_ssa_compute_use_def_chains()
1073 p = zend_ssa_next_use_phi(ssa, phi->sources[0], p); in zend_ssa_compute_use_def_chains()
1076 phi->use_chains[0] = ssa_vars[phi->sources[0]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1077 ssa_vars[phi->sources[0]].phi_use_chain = phi; in zend_ssa_compute_use_def_chains()
1079 if (phi->has_range_constraint) { in zend_ssa_compute_use_def_chains()
1081 zend_ssa_range_constraint *constraint = &phi->constraint.range; in zend_ssa_compute_use_def_chains()
1083 phi->sym_use_chain = ssa_vars[constraint->min_ssa_var].sym_use_chain; in zend_ssa_compute_use_def_chains()
1084 ssa_vars[constraint->min_ssa_var].sym_use_chain = phi; in zend_ssa_compute_use_def_chains()
1086 phi->sym_use_chain = ssa_vars[constraint->max_ssa_var].sym_use_chain; in zend_ssa_compute_use_def_chains()
1087 ssa_vars[constraint->max_ssa_var].sym_use_chain = phi; in zend_ssa_compute_use_def_chains()
1096 ZEND_ASSERT(phi->sources[j] >= 0); in zend_ssa_compute_use_def_chains()
1097 p = ssa_vars[phi->sources[j]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1098 while (p && p != phi) { in zend_ssa_compute_use_def_chains()
1099 p = zend_ssa_next_use_phi(ssa, phi->sources[j], p); in zend_ssa_compute_use_def_chains()
1102 phi->use_chains[j] = ssa_vars[phi->sources[j]].phi_use_chain; in zend_ssa_compute_use_def_chains()
1103 ssa_vars[phi->sources[j]].phi_use_chain = phi; in zend_ssa_compute_use_def_chains()
1107 phi = phi->next; in zend_ssa_compute_use_def_chains()
1222 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
1225 while (*cur && *cur != phi) { in zend_ssa_remove_use_of_phi_source()
1234 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
1237 FOREACH_PHI_SOURCE(phi, source) { in zend_ssa_remove_uses_of_phi_sources()
1238 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()
1243 static void zend_ssa_remove_phi_from_block(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */ in zend_ssa_remove_phi_from_block() argument
1245 zend_ssa_block *block = &ssa->blocks[phi->block]; in zend_ssa_remove_phi_from_block()
1247 while (*cur != phi) { in zend_ssa_remove_phi_from_block()
1272 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
1274 int j, var_num = phi->sources[pred_offset]; in zend_ssa_remove_phi_source()
1275 zend_ssa_phi *next_phi = phi->use_chains[pred_offset]; in zend_ssa_remove_phi_source()
1279 …memmove(phi->sources + pred_offset, phi->sources + pred_offset + 1, (predecessors_count - pred_off… in zend_ssa_remove_phi_source()
1280 …memmove(phi->use_chains + pred_offset, phi->use_chains + pred_offset + 1, (predecessors_count - pr… in zend_ssa_remove_phi_source()
1286 if (phi->sources[j] == var_num) { in zend_ssa_remove_phi_source()
1289 next_phi = phi->use_chains[pred_offset]; in zend_ssa_remove_phi_source()
1291 ZEND_ASSERT(phi->use_chains[pred_offset] == NULL); in zend_ssa_remove_phi_source()
1294 phi->use_chains[j] = next_phi; in zend_ssa_remove_phi_source()
1301 zend_ssa_remove_use_of_phi_source(ssa, phi, var_num, next_phi); in zend_ssa_remove_phi_source()
1305 void zend_ssa_remove_phi(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */ in zend_ssa_remove_phi() argument
1307 ZEND_ASSERT(phi->ssa_var >= 0); in zend_ssa_remove_phi()
1308 ZEND_ASSERT(ssa->vars[phi->ssa_var].use_chain < 0 in zend_ssa_remove_phi()
1309 && ssa->vars[phi->ssa_var].phi_use_chain == NULL); in zend_ssa_remove_phi()
1310 zend_ssa_remove_uses_of_phi_sources(ssa, phi); in zend_ssa_remove_phi()
1311 zend_ssa_remove_phi_from_block(ssa, phi); in zend_ssa_remove_phi()
1312 ssa->vars[phi->ssa_var].definition_phi = NULL; in zend_ssa_remove_phi()
1313 phi->ssa_var = -1; in zend_ssa_remove_phi()
1320 zend_ssa_phi *phi; in zend_ssa_remove_uses_of_var() local
1322 FOREACH_PHI_USE(var, phi) { in zend_ssa_remove_uses_of_var()
1323 int i, end = NUM_PHI_SOURCES(phi); in zend_ssa_remove_uses_of_var()
1325 if (phi->sources[i] == var_num) { in zend_ssa_remove_uses_of_var()
1326 phi->use_chains[i] = NULL; in zend_ssa_remove_uses_of_var()
1354 zend_ssa_phi *phi; in zend_ssa_remove_predecessor() local
1375 for (phi = next_ssa_block->phis; phi; phi = phi->next) { in zend_ssa_remove_predecessor()
1376 if (phi->pi >= 0) { in zend_ssa_remove_predecessor()
1377 if (phi->pi == from) { in zend_ssa_remove_predecessor()
1378 zend_ssa_remove_uses_of_var(ssa, phi->ssa_var); in zend_ssa_remove_predecessor()
1379 zend_ssa_remove_phi(ssa, phi); in zend_ssa_remove_predecessor()
1382 ZEND_ASSERT(phi->sources[pred_offset] >= 0); in zend_ssa_remove_predecessor()
1383 zend_ssa_remove_phi_source(ssa, phi, pred_offset, next_block->predecessors_count); in zend_ssa_remove_predecessor()
1401 zend_ssa_phi *phi; in zend_ssa_remove_block() local
1407 for (phi = ssa_block->phis; phi; phi = phi->next) { in zend_ssa_remove_block()
1408 zend_ssa_remove_uses_of_var(ssa, phi->ssa_var); in zend_ssa_remove_block()
1409 zend_ssa_remove_phi(ssa, phi); in zend_ssa_remove_block()
1474 zend_ssa_phi *phi; in propagate_phi_type_widening() local
1475 FOREACH_PHI_USE(&ssa->vars[var], phi) { in propagate_phi_type_widening()
1476 if (ssa->var_info[var].type & ~ssa->var_info[phi->ssa_var].type) { in propagate_phi_type_widening()
1477 ssa->var_info[phi->ssa_var].type |= ssa->var_info[var].type; in propagate_phi_type_widening()
1478 propagate_phi_type_widening(ssa, phi->ssa_var); in propagate_phi_type_widening()
1489 zend_ssa_phi *phi; in zend_ssa_rename_var_uses() local
1553 FOREACH_PHI_USE(old_var, phi) { in zend_ssa_rename_var_uses()
1560 for (j = 0; j < ssa->cfg.blocks[phi->block].predecessors_count; j++) { in zend_ssa_rename_var_uses()
1561 if (phi->sources[j] == new) { in zend_ssa_rename_var_uses()
1562 existing_use_chain_ptr = &phi->use_chains[j]; in zend_ssa_rename_var_uses()
1567 for (j = 0; j < ssa->cfg.blocks[phi->block].predecessors_count; j++) { in zend_ssa_rename_var_uses()
1568 if (phi->sources[j] == new) { in zend_ssa_rename_var_uses()
1570 } else if (phi->sources[j] == old) { in zend_ssa_rename_var_uses()
1571 phi->sources[j] = new; in zend_ssa_rename_var_uses()
1577 phi->use_chains[j] = *existing_use_chain_ptr; in zend_ssa_rename_var_uses()
1580 phi->use_chains[j] = new_var->phi_use_chain; in zend_ssa_rename_var_uses()
1581 new_var->phi_use_chain = phi; in zend_ssa_rename_var_uses()
1592 if (update_types && (ssa->var_info[new].type & ~ssa->var_info[phi->ssa_var].type)) { in zend_ssa_rename_var_uses()
1593 ssa->var_info[phi->ssa_var].type |= ssa->var_info[new].type; in zend_ssa_rename_var_uses()
1594 propagate_phi_type_widening(ssa, phi->ssa_var); in zend_ssa_rename_var_uses()