> Am 12.12.2022 um 22:59 schrieb Jan Hubicka via Gcc-patches > <gcc-patches@gcc.gnu.org>: > > >> >>> 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. > Looking at: > > static inline bool > gimple_assign_load_p (const gimple *gs) > { > tree rhs; > if (!gimple_assign_single_p (gs)) > return false; > rhs = gimple_assign_rhs1 (gs); > if (TREE_CODE (rhs) == WITH_SIZE_EXPR) > return true; > rhs = get_base_address (rhs); > return (DECL_P (rhs) > || TREE_CODE (rhs) == MEM_REF || TREE_CODE (rhs) == TARGET_MEM_REF); > } > > I wonder if we don't want to avoid get_base_address (which is loopy) and > use same check and move it into a new predicate that is more convenient > to use? We can simplify the above to a single stripping of a handled component and considering another handled component as load (register ops are always single) Richard > > Honza >> >> Honza >>> + >>> base = get_ref_base_and_extent (expr, &poffset, &psize, &pmax_size, >>> &reverse); >>> >>> if (TREE_CODE (base) == MEM_REF) >>> -- >>> 2.38.1 >>>
Re: [PATCH 8/9] ipa-sra: Make scan_expr_access bail out on uninteresting expressions
Richard Biener via Gcc-patches Tue, 13 Dec 2022 00:41:04 -0800
- [PATCH 8/9] ipa-sra: Make scan_expr_access ... Martin Jambor
- Re: [PATCH 8/9] ipa-sra: Make scan_exp... Jan Hubicka via Gcc-patches
- Re: [PATCH 8/9] ipa-sra: Make scan... Jan Hubicka via Gcc-patches
- Re: [PATCH 8/9] ipa-sra: Make ... Richard Biener via Gcc-patches
- Re: [PATCH 8/9] ipa-sra: Make ... Richard Biener via Gcc-patches
- Re: [PATCH 8/9] ipa-sra: M... Martin Jambor