> Hi, > > I'm re-posting patches which I have posted at the end of stage 1 but > which have not passed review yet. > > 8<-------------------------------------------------------------------- > > I have noticed that scan_expr_access passes all the expressions it > gets to get_ref_base_and_extent even when we are really only > interested in memory accesses. So bail out when the expression is > something clearly uninteresting. > > Bootstrapped and tested individually when I originally posted it and > now bootstrapped and LTO-bootstrapped and tested as part of the whole > series. OK for master? > > > gcc/ChangeLog: > > 2021-12-14 Martin Jambor <mjam...@suse.cz> > > * ipa-sra.c (scan_expr_access): Bail out early if expr is something we > clearly do not need to pass to get_ref_base_and_extent. > --- > gcc/ipa-sra.cc | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/gcc/ipa-sra.cc b/gcc/ipa-sra.cc > index 93fceeafc73..3646d71468c 100644 > --- a/gcc/ipa-sra.cc > +++ b/gcc/ipa-sra.cc > @@ -1748,6 +1748,11 @@ scan_expr_access (tree expr, gimple *stmt, > isra_scan_context ctx, > || TREE_CODE (expr) == REALPART_EXPR) > expr = TREE_OPERAND (expr, 0); > > + if (!handled_component_p (expr) > + && !DECL_P (expr) > + && TREE_CODE (expr) != MEM_REF) > + return; Is this needed because get_ref_base_and_extend crashes if given SSA_NAME or something else or is it just optimization? Perhaps Richi will know if there is better test for this.
Honza > + > base = get_ref_base_and_extent (expr, &poffset, &psize, &pmax_size, > &reverse); > > if (TREE_CODE (base) == MEM_REF) > -- > 2.38.1 >