diff options
Diffstat (limited to 'gcc/tree-flow-inline.h')
-rw-r--r-- | gcc/tree-flow-inline.h | 76 |
1 files changed, 64 insertions, 12 deletions
diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h index 0507921..e3c955e 100644 --- a/gcc/tree-flow-inline.h +++ b/gcc/tree-flow-inline.h @@ -267,14 +267,25 @@ get_vuse_op_ptr(vuse_optype vuses, unsigned int index) return op; } -/* Return a def_operand_p that is the V_MUST_DEF_OP for the +/* Return a def_operand_p that is the V_MUST_DEF_RESULT for the V_MUST_DEF at INDEX in the V_MUST_DEFS array. */ static inline def_operand_p -get_v_must_def_op_ptr (v_must_def_optype v_must_defs, unsigned int index) +get_v_must_def_result_ptr (v_must_def_optype v_must_defs, unsigned int index) { def_operand_p op; gcc_assert (index < v_must_defs->num_v_must_defs); - op.def = &(v_must_defs->v_must_defs[index]); + op.def = &(v_must_defs->v_must_defs[index].def); + return op; +} + +/* Return a use_operand_p that is the V_MUST_DEF_KILL for the + V_MUST_DEF at INDEX in the V_MUST_DEFS array. */ +static inline use_operand_p +get_v_must_def_kill_ptr (v_must_def_optype v_must_defs, unsigned int index) +{ + use_operand_p op; + gcc_assert (index < v_must_defs->num_v_must_defs); + op.use = &(v_must_defs->v_must_defs[index].use); return op; } @@ -670,7 +681,12 @@ op_iter_next_use (ssa_op_iter *ptr) if (ptr->v_mayu_i < ptr->num_v_mayu) { return V_MAY_DEF_OP_PTR (ptr->ops->v_may_def_ops, - (ptr->v_mayu_i)++); + (ptr->v_mayu_i)++); + } + if (ptr->v_mustu_i < ptr->num_v_mustu) + { + return V_MUST_DEF_KILL_PTR (ptr->ops->v_must_def_ops, + (ptr->v_mustu_i)++); } ptr->done = true; return NULL_USE_OPERAND_P; @@ -684,10 +700,10 @@ op_iter_next_def (ssa_op_iter *ptr) { return DEF_OP_PTR (ptr->ops->def_ops, (ptr->def_i)++); } - if (ptr->v_must_i < ptr->num_v_must) + if (ptr->v_mustd_i < ptr->num_v_mustd) { - return V_MUST_DEF_OP_PTR (ptr->ops->v_must_def_ops, - (ptr->v_must_i)++); + return V_MUST_DEF_RESULT_PTR (ptr->ops->v_must_def_ops, + (ptr->v_mustd_i)++); } if (ptr->v_mayd_i < ptr->num_v_mayd) { @@ -714,14 +730,18 @@ op_iter_next_tree (ssa_op_iter *ptr) { return V_MAY_DEF_OP (ptr->ops->v_may_def_ops, (ptr->v_mayu_i)++); } + if (ptr->v_mustu_i < ptr->num_v_mustu) + { + return V_MUST_DEF_KILL (ptr->ops->v_must_def_ops, (ptr->v_mustu_i)++); + } if (ptr->def_i < ptr->num_def) { return DEF_OP (ptr->ops->def_ops, (ptr->def_i)++); } - if (ptr->v_must_i < ptr->num_v_must) + if (ptr->v_mustd_i < ptr->num_v_mustd) { - return V_MUST_DEF_OP (ptr->ops->v_must_def_ops, - (ptr->v_must_i)++); + return V_MUST_DEF_RESULT (ptr->ops->v_must_def_ops, + (ptr->v_mustd_i)++); } if (ptr->v_mayd_i < ptr->num_v_mayd) { @@ -749,14 +769,17 @@ op_iter_init (ssa_op_iter *ptr, tree stmt, int flags) ? NUM_V_MAY_DEFS (ops->v_may_def_ops) : 0; ptr->num_v_mayd = (flags & SSA_OP_VMAYDEF) ? NUM_V_MAY_DEFS (ops->v_may_def_ops) : 0; - ptr->num_v_must = (flags & SSA_OP_VMUSTDEF) + ptr->num_v_mustu = (flags & SSA_OP_VMUSTDEFKILL) + ? NUM_V_MUST_DEFS (ops->v_must_def_ops) : 0; + ptr->num_v_mustd = (flags & SSA_OP_VMUSTDEF) ? NUM_V_MUST_DEFS (ops->v_must_def_ops) : 0; ptr->def_i = 0; ptr->use_i = 0; ptr->vuse_i = 0; ptr->v_mayu_i = 0; ptr->v_mayd_i = 0; - ptr->v_must_i = 0; + ptr->v_mustu_i = 0; + ptr->v_mustd_i = 0; } /* Initialize iterator PTR to the use operands in STMT based on FLAGS. Return @@ -786,6 +809,25 @@ op_iter_init_tree (ssa_op_iter *ptr, tree stmt, int flags) return op_iter_next_tree (ptr); } +/* Get the next iterator mustdef value for PTR, returning the mustdef values in + KILL and DEF. */ +static inline void +op_iter_next_mustdef (use_operand_p *kill, def_operand_p *def, ssa_op_iter *ptr) +{ + if (ptr->v_mustu_i < ptr->num_v_mustu) + { + *def = V_MUST_DEF_RESULT_PTR (ptr->ops->v_must_def_ops, ptr->v_mustu_i); + *kill = V_MUST_DEF_KILL_PTR (ptr->ops->v_must_def_ops, (ptr->v_mustu_i)++); + return; + } + else + { + *def = NULL_DEF_OPERAND_P; + *kill = NULL_USE_OPERAND_P; + } + ptr->done = true; + return; +} /* Get the next iterator maydef value for PTR, returning the maydef values in USE and DEF. */ static inline void @@ -815,4 +857,14 @@ op_iter_init_maydef (ssa_op_iter *ptr, tree stmt, use_operand_p *use, op_iter_init (ptr, stmt, SSA_OP_VMAYUSE); op_iter_next_maydef (use, def, ptr); } + +/* Initialize iterator PTR to the operands in STMT. Return the first operands + in KILL and DEF. */ +static inline void +op_iter_init_mustdef (ssa_op_iter *ptr, tree stmt, use_operand_p *kill, + def_operand_p *def) +{ + op_iter_init (ptr, stmt, SSA_OP_VMUSTDEFKILL); + op_iter_next_mustdef (kill, def, ptr); +} #endif /* _TREE_FLOW_INLINE_H */ |