From a29174904bb1b005e16bd9d498b2aa380b6999f8 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 14 Nov 2021 12:01:41 +0100 Subject: Cleanup tree-ssa-alias and tree-ssa-dse use of modref summary Move code getting tree op from access_node and stmt to a common place. I also commonized logic to build ao_ref. While I was on it I also replaced FOR_EACH_* by range for since they reads better. gcc/ChangeLog: 2021-11-14 Jan Hubicka * ipa-modref-tree.c (modref_access_node::get_call_arg): New member function. (modref_access_node::get_ao_ref): Likewise. * ipa-modref-tree.h (modref_access_node::get_call_arg): Declare. (modref_access_node::get_ao_ref): Declare. * tree-ssa-alias.c (modref_may_conflict): Use new accessors. * tree-ssa-dse.c (dse_optimize_call): Use new accessors. gcc/testsuite/ChangeLog: 2021-11-14 Jan Hubicka * c-c++-common/asan/null-deref-1.c: Update template. * c-c++-common/tsan/free_race.c: Update template. * c-c++-common/tsan/free_race2.c: Update template. * gcc.dg/ipa/ipa-sra-4.c: Update template. --- gcc/tree-ssa-dse.c | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'gcc/tree-ssa-dse.c') diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c index 0e8c4ed..ce0083a 100644 --- a/gcc/tree-ssa-dse.c +++ b/gcc/tree-ssa-dse.c @@ -1079,35 +1079,25 @@ dse_optimize_call (gimple_stmt_iterator *gsi, sbitmap live_bytes) if (!summary || !summary->try_dse) return false; - modref_base_node *base_node; - modref_ref_node *ref_node; - modref_access_node *access_node; - size_t i, j, k; bool by_clobber_p = false; /* Walk all memory writes and verify that they are dead. */ - FOR_EACH_VEC_SAFE_ELT (summary->stores->bases, i, base_node) - FOR_EACH_VEC_SAFE_ELT (base_node->refs, j, ref_node) - FOR_EACH_VEC_SAFE_ELT (ref_node->accesses, k, access_node) + for (auto base_node : summary->stores->bases) + for (auto ref_node : base_node->refs) + for (auto access_node : ref_node->accesses) { - gcc_checking_assert (access_node->parm_offset_known); + tree arg = access_node.get_call_arg (stmt); - tree arg; - if (access_node->parm_index == MODREF_STATIC_CHAIN_PARM) - arg = gimple_call_chain (stmt); - else - arg = gimple_call_arg (stmt, access_node->parm_index); + if (!arg) + return false; + + if (integer_zerop (arg) && flag_delete_null_pointer_checks) + continue; ao_ref ref; - poly_offset_int off = (poly_offset_int)access_node->offset - + ((poly_offset_int)access_node->parm_offset - << LOG2_BITS_PER_UNIT); - poly_int64 off2; - if (!off.to_shwi (&off2)) + + if (!access_node.get_ao_ref (stmt, &ref)) return false; - ao_ref_init_from_ptr_and_range - (&ref, arg, true, off2, access_node->size, - access_node->max_size); ref.ref_alias_set = ref_node->ref; ref.base_alias_set = base_node->base; -- cgit v1.1