> gcc/ChangeLog:
> 
> 2024-11-01  Martin Jambor  <mjam...@suse.cz>
> 
>       * ipa-prop.cc (skip_a_conversion_op): New function.
>       (ipa_compute_jump_functions_for_edge): Use it.
> 
> gcc/testsuite/ChangeLog:
> 
> 2024-11-01  Martin Jambor  <mjam...@suse.cz>
> 
>       * gcc.dg/ipa/vrp9.c: New test.
> ---
>  gcc/ipa-prop.cc                 | 20 ++++++++++++++
>  gcc/testsuite/gcc.dg/ipa/vrp9.c | 48 +++++++++++++++++++++++++++++++++
>  2 files changed, 68 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.dg/ipa/vrp9.c
> 
> diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc
> index db8eda8c361..9bd2e4bc60c 100644
> --- a/gcc/ipa-prop.cc
> +++ b/gcc/ipa-prop.cc
> @@ -2305,6 +2305,25 @@ ipa_set_jfunc_vr (ipa_jump_func *jf, const ipa_vr &vr)
>    ipa_set_jfunc_vr (jf, tmp);
>  }
>  
> +
> +/* If T is an SSA_NAME that is a result of a simple type conversion 
> statement,
> +   return the operand of that conversion, otherwise treturn T. */
> +
> +static tree
> +skip_a_conversion_op (tree t)
> +{
> +  if (TREE_CODE (t) != SSA_NAME
> +      || SSA_NAME_IS_DEFAULT_DEF (t))
> +    return t;
> +
> +  gimple *def = SSA_NAME_DEF_STMT (t);
> +  if (!is_gimple_assign (def)
> +      || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def)))
> +    return t;

I was wonderinf if we do not want to skip chains of conversions, but I
guess in the testcase:
void test(double);
void
test2(long double a)
{
        test ((float)a);
}

We can skip float->double but not long double->float.  The types stored
to summaries are known to match the types of parameters passed to the
funtion?  I am kind of worried about hose implicit C conversions, like
float->double...

Honza

Reply via email to