[PATCH] Fix ICE in ipa-cp due to cost addition overflow (PR 96806)

Martin Jambor mjambor@suse.cz
Mon Aug 31 08:46:20 GMT 2020


Hi,

On Mon, Aug 31 2020, Feng Xue OS wrote:
> This patch is to fix a bug that cost that is used to evaluate clone candidate
> becomes negative due to integer overflow.
>
> Feng
> ---
> 2020-08-31  Feng Xue  <fxue@os.amperecomputing.com>
>
> gcc/
>         PR tree-optimization/96806

the component is "ipa," please change that when you commit the patch.

>         * ipa-cp.c (decide_about_value): Use safe_add to avoid cost addition
>         overflow.

assuming you have bootstrapped and tested it, it is OK for both trunk
and all affected release branches.

Thank you,

Martin

>
> gcc/testsuite/
>         PR tree-optimization/96806
>         * g++.dg/ipa/pr96806.C: New test.
> From 8d92b4ca4be2303a73f0a2441e57564488ca1c23 Mon Sep 17 00:00:00 2001
> From: Feng Xue <fxue@os.amperecomputing.com>
> Date: Mon, 31 Aug 2020 15:00:52 +0800
> Subject: [PATCH] ipa/96806 - Fix ICE in ipa-cp due to integer addition
>  overflow
>
> 2020-08-31  Feng Xue  <fxue@os.amperecomputing.com>
>
> gcc/
>         PR tree-optimization/96806
>         * ipa-cp.c (decide_about_value): Use safe_add to avoid cost addition
> 	overflow.
>
> gcc/testsuite/
>         PR tree-optimization/96806
>         * g++.dg/ipa/pr96806.C: New test.
> ---
>  gcc/ipa-cp.c                       |  8 ++---
>  gcc/testsuite/g++.dg/ipa/pr96806.C | 53 ++++++++++++++++++++++++++++++
>  2 files changed, 57 insertions(+), 4 deletions(-)
>  create mode 100644 gcc/testsuite/g++.dg/ipa/pr96806.C
>
> diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
> index e4910a04ffa..8e5d6e2a393 100644
> --- a/gcc/ipa-cp.c
> +++ b/gcc/ipa-cp.c
> @@ -5480,11 +5480,11 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
>  				   freq_sum, count_sum,
>  				   val->local_size_cost)
>        && !good_cloning_opportunity_p (node,
> -				      val->local_time_benefit
> -				      + val->prop_time_benefit,
> +				      safe_add (val->local_time_benefit,
> +						val->prop_time_benefit),
>  				      freq_sum, count_sum,
> -				      val->local_size_cost
> -				      + val->prop_size_cost))
> +				      safe_add (val->local_size_cost,
> +						val->prop_size_cost)))
>      return false;
>  
>    if (dump_file)

[...]


More information about the Gcc-patches mailing list