[PATCH] Remove static marker for range in alloca pass.
Richard Biener
richard.guenther@gmail.com
Mon Oct 4 08:15:09 GMT 2021
On Mon, Oct 4, 2021 at 8:55 AM Aldy Hernandez via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> The m_ranges[] field in int_range<N> are trees, so they live in GC
> space. Since invalid_range is static, it must be marked with GTY
> magic. However, calculating invalid_range is not particularly slow,
> or on a critical path, so we can just put it in local scope and
> recalculate every time.
>
> Tested on x86-64 Linux.
>
> Since this is more of a GC thing than a range thing, I'd like a nod from
> a global reviewer.
>
> OK?
OK, but can we somehow make int_range<>::intersect work
with non-tree as well? That is, can we somehow make this
operation w/o constructing temporary trees?
Thanks,
Richard.
> gcc/ChangeLog:
>
> PR tree-optimization/102560
> * gimple-ssa-warn-alloca.c (alloca_call_type): Remove static
> marker for invalid_range.
>
> gcc/testsuite/ChangeLog:
>
> * g++.dg/Walloca2.C: New test.
> ---
> gcc/gimple-ssa-warn-alloca.c | 7 +++----
> gcc/testsuite/g++.dg/Walloca2.C | 6 ++++++
> 2 files changed, 9 insertions(+), 4 deletions(-)
> create mode 100644 gcc/testsuite/g++.dg/Walloca2.C
>
> diff --git a/gcc/gimple-ssa-warn-alloca.c b/gcc/gimple-ssa-warn-alloca.c
> index 4fc7125d378..d59cea8d4ec 100644
> --- a/gcc/gimple-ssa-warn-alloca.c
> +++ b/gcc/gimple-ssa-warn-alloca.c
> @@ -221,10 +221,9 @@ alloca_call_type (gimple *stmt, bool is_vla)
> && !r.varying_p ())
> {
> // The invalid bits are anything outside of [0, MAX_SIZE].
> - static int_range<2> invalid_range (build_int_cst (size_type_node, 0),
> - build_int_cst (size_type_node,
> - max_size),
> - VR_ANTI_RANGE);
> + int_range<2> invalid_range (build_int_cst (size_type_node, 0),
> + build_int_cst (size_type_node, max_size),
> + VR_ANTI_RANGE);
>
> r.intersect (invalid_range);
> if (r.undefined_p ())
> diff --git a/gcc/testsuite/g++.dg/Walloca2.C b/gcc/testsuite/g++.dg/Walloca2.C
> new file mode 100644
> index 00000000000..b6992d08bf3
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/Walloca2.C
> @@ -0,0 +1,6 @@
> +// { dg-do compile }
> +// { dg-options "-Walloca-larger-than=4207115063 -Wvla-larger-than=1233877270 -O2 --param ggc-min-heapsize=0 --param ggc-min-expand=0 -w" }
> +// { dg-require-effective-target alloca }
> +
> +int a;
> +char *b = static_cast<char *>(__builtin_alloca (a));
> --
> 2.31.1
>
More information about the Gcc-patches
mailing list