On Fri, Jan 31, 2025 at 02:19:28PM +0100, Richard Biener wrote:
> > For internal calls gimple_call_fndecl (s1) will be NULL, so
> > !gimple_call_fndecl (s1) will be true and so the new checks aren't done.
> 
> Yes, but also fntype1/2 will be NULL then.
> 
> > > if (gimple_call_internal_p (s1) (with gimple_call_internal_fn compare
> > > in a conditiona if) would be a lot clearer?
> > 
> > What the patch does is just trying to avoid the comparison in the common
> > case (direct calls from the beginning and there what the comment says
> > applies, if there would be a mismatch, we'd already knew that).
> > 
> > If you want to compare unconditionally, it would be about just removing the
> >   if (!gimple_call_fndecl (s1))
> >     {
> > and
> >     }
> > and reindenting + rewriting the comment above it.  Shall I do that?
> 
> That's what I suggested, or rather
> 
>   if (gimple_call_internal_p (s1))
>     {
>       if (gimple_call_internal_fn (s1) != gimple_call_internal_fn (s2))
>          return false;
>     }
>   else
>     {
>       tree fntype1 = gimple_call_fntype (s1);
>       tree fntype2 = gimple_call_fntype (s2);
> 
>       if ((fntype1 && !fntype2)
>           || (!fntype1 && fntype2)
>           || (fntype1 && !types_compatible_p (fntype1, fntype2)))
>         return return_false_with_msg ("call function types are not 
> compatible");
>     }
> 
> I think in the else { fntype1 and fntype2 should never be NULL and thus
> this should simplify even more.

This isn't possible because fntype{1,2} are used later on in the function;
sure, that
  if (fntype1 && fntype2 && comp_type_attributes (fntype1, fntype2) != 1)
    return return_false_with_msg ("different fntype attributes");
can be moved into the else, but the new checks to determine which args to
check still use that.

        Jakub

Reply via email to