Lines Matching refs:ssa

45 static zend_bool needs_pi(const zend_op_array *op_array, zend_dfg *dfg, zend_ssa *ssa, int from, in…  in needs_pi()  argument
55 to_block = &ssa->cfg.blocks[to]; in needs_pi()
63 from_block = &ssa->cfg.blocks[from]; in needs_pi()
66 return !dominates_other_predecessors(&ssa->cfg, to_block, other_successor, from); in needs_pi()
71 zend_arena **arena, const zend_op_array *op_array, zend_dfg *dfg, zend_ssa *ssa, in add_pi() argument
75 if (!needs_pi(op_array, dfg, ssa, from, to, var)) { in add_pi()
81 ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa->cfg.blocks[to].predecessors_count) + in add_pi()
82 sizeof(void*) * ssa->cfg.blocks[to].predecessors_count); in add_pi()
84 memset(phi->sources, 0xff, sizeof(int) * ssa->cfg.blocks[to].predecessors_count); in add_pi()
85 …phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa-… in add_pi()
90 phi->next = ssa->blocks[to].phis; in add_pi()
91 ssa->blocks[to].phis = phi; in add_pi()
101 if (ssa->cfg.blocks[to].predecessors_count > 1) { in add_pi()
232 uint32_t build_flags, zend_ssa *ssa, zend_dfg *dfg) /* {{{ */ { in place_essa_pis() argument
233 zend_basic_block *blocks = ssa->cfg.blocks; in place_essa_pis()
234 int j, blocks_count = ssa->cfg.blocks_count; in place_essa_pis()
342 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) { in place_essa_pis()
345 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) { in place_essa_pis()
349 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) { in place_essa_pis()
352 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) { in place_essa_pis()
357 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) { in place_essa_pis()
361 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) { in place_essa_pis()
365 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) { in place_essa_pis()
369 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) { in place_essa_pis()
377 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) { in place_essa_pis()
380 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) { in place_essa_pis()
384 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) { in place_essa_pis()
387 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) { in place_essa_pis()
392 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) { in place_essa_pis()
396 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) { in place_essa_pis()
400 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) { in place_essa_pis()
404 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) { in place_essa_pis()
418 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) { in place_essa_pis()
421 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) { in place_essa_pis()
425 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) { in place_essa_pis()
428 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) { in place_essa_pis()
439 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) { in place_essa_pis()
443 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) { in place_essa_pis()
450 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) { in place_essa_pis()
456 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) { in place_essa_pis()
485 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) { in place_essa_pis()
488 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) { in place_essa_pis()
492 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) { in place_essa_pis()
495 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) { in place_essa_pis()
512 if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) { in place_essa_pis()
521 static int zend_ssa_rename(const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa, int … in zend_ssa_rename() argument
523 zend_basic_block *blocks = ssa->cfg.blocks; in zend_ssa_rename()
524 zend_ssa_block *ssa_blocks = ssa->blocks; in zend_ssa_rename()
525 zend_ssa_op *ssa_ops = ssa->ops; in zend_ssa_rename()
526 int ssa_vars_count = ssa->vars_count; in zend_ssa_rename()
804 if (ssa->cfg.predecessors[blocks[succ].predecessor_offset + j] == n) { in zend_ssa_rename()
817 if (ssa->cfg.predecessors[blocks[succ].predecessor_offset + j] == n) { in zend_ssa_rename()
831 ssa->vars_count = ssa_vars_count; in zend_ssa_rename()
836 if (zend_ssa_rename(op_array, build_flags, ssa, var, j) != SUCCESS) in zend_ssa_rename()
849 …pt *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa, uint32_t *func_fla… in zend_build_ssa() argument
851 zend_basic_block *blocks = ssa->cfg.blocks; in zend_build_ssa()
853 int blocks_count = ssa->cfg.blocks_count; in zend_build_ssa()
867 ssa->rt_constants = (build_flags & ZEND_RT_CONSTANTS); in zend_build_ssa()
872 ssa->blocks = ssa_blocks; in zend_build_ssa()
884 if (zend_build_dfg(op_array, &ssa->cfg, &dfg, build_flags) != SUCCESS) { in zend_build_ssa()
890 zend_dump_dfg(op_array, &ssa->cfg, &dfg); in zend_build_ssa()
902 place_essa_pis(arena, script, op_array, build_flags, ssa, &dfg); in zend_build_ssa()
920 i = ssa->cfg.predecessors[blocks[j].predecessor_offset + k]; in zend_build_ssa()
956 …zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa->cfg.blocks[j].pred… in zend_build_ssa()
979 zend_dump_phi_placement(op_array, ssa); in zend_build_ssa()
983 ssa->ops = zend_arena_calloc(arena, op_array->last, sizeof(zend_ssa_op)); in zend_build_ssa()
984 memset(ssa->ops, 0xff, op_array->last * sizeof(zend_ssa_op)); in zend_build_ssa()
990 ssa->vars_count = op_array->last_var; in zend_build_ssa()
991 if (zend_ssa_rename(op_array, build_flags, ssa, var, 0) != SUCCESS) { in zend_build_ssa()
1004 …_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */ in zend_ssa_compute_use_def_chains() argument
1009 if (!ssa->vars) { in zend_ssa_compute_use_def_chains()
1010 ssa->vars = zend_arena_calloc(arena, ssa->vars_count, sizeof(zend_ssa_var)); in zend_ssa_compute_use_def_chains()
1012 ssa_vars = ssa->vars; in zend_ssa_compute_use_def_chains()
1020 for (i = op_array->last_var; i < ssa->vars_count; i++) { in zend_ssa_compute_use_def_chains()
1028 zend_ssa_op *op = ssa->ops + i; in zend_ssa_compute_use_def_chains()
1056 for (i = 0; i < ssa->cfg.blocks_count; i++) { in zend_ssa_compute_use_def_chains()
1057 zend_ssa_phi *phi = ssa->blocks[i].phis; in zend_ssa_compute_use_def_chains()
1066 p = zend_ssa_next_use_phi(ssa, phi->sources[0], p); in zend_ssa_compute_use_def_chains()
1087 for (j = 0; j < ssa->cfg.blocks[i].predecessors_count; j++) { in zend_ssa_compute_use_def_chains()
1091 p = zend_ssa_next_use_phi(ssa, phi->sources[j], p); in zend_ssa_compute_use_def_chains()
1108 int zend_ssa_unlink_use_chain(zend_ssa *ssa, int op, int var) /* {{{ */ in zend_ssa_unlink_use_chain() argument
1110 if (ssa->vars[var].use_chain == op) { in zend_ssa_unlink_use_chain()
1111 ssa->vars[var].use_chain = zend_ssa_next_use(ssa->ops, var, op); in zend_ssa_unlink_use_chain()
1114 int use = ssa->vars[var].use_chain; in zend_ssa_unlink_use_chain()
1117 if (ssa->ops[use].result_use == var) { in zend_ssa_unlink_use_chain()
1118 if (ssa->ops[use].res_use_chain == op) { in zend_ssa_unlink_use_chain()
1119 ssa->ops[use].res_use_chain = zend_ssa_next_use(ssa->ops, var, op); in zend_ssa_unlink_use_chain()
1122 use = ssa->ops[use].res_use_chain; in zend_ssa_unlink_use_chain()
1124 } else if (ssa->ops[use].op1_use == var) { in zend_ssa_unlink_use_chain()
1125 if (ssa->ops[use].op1_use_chain == op) { in zend_ssa_unlink_use_chain()
1126 ssa->ops[use].op1_use_chain = zend_ssa_next_use(ssa->ops, var, op); in zend_ssa_unlink_use_chain()
1129 use = ssa->ops[use].op1_use_chain; in zend_ssa_unlink_use_chain()
1131 } else if (ssa->ops[use].op2_use == var) { in zend_ssa_unlink_use_chain()
1132 if (ssa->ops[use].op2_use_chain == op) { in zend_ssa_unlink_use_chain()
1133 ssa->ops[use].op2_use_chain = zend_ssa_next_use(ssa->ops, var, op); in zend_ssa_unlink_use_chain()
1136 use = ssa->ops[use].op2_use_chain; in zend_ssa_unlink_use_chain()