Hi. The patch compares type attributes for gimple_call_fntypes in IPA ICF. Note that we were unable to find a generic function attribute that can be used on a function type definition.
For a one which is allowed assume_aligned(16) I get affects_type_identity == false which seems suspicious to me. Note that we currently use comp_type_attributes in ICF for both variable and function declarations. Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Ready to be installed? Thanks, Martin gcc/ChangeLog: 2020-04-02 Martin Liska <mli...@suse.cz> PR ipa/94445 * ipa-icf-gimple.c (func_checker::compare_gimple_call): Compare type attributes for gimple_call_fntypes. --- gcc/ipa-icf-gimple.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c index 3e5b2d4bd6d..fa02809defd 100644 --- a/gcc/ipa-icf-gimple.c +++ b/gcc/ipa-icf-gimple.c @@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-eh.h" #include "builtins.h" #include "cfgloop.h" +#include "attribs.h" #include "ipa-icf-gimple.h" @@ -568,6 +569,9 @@ func_checker::compare_gimple_call (gcall *s1, gcall *s2) || (fntype1 && !types_compatible_p (fntype1, fntype2))) return return_false_with_msg ("call function types are not compatible"); + if (fntype1 && fntype2 && comp_type_attributes (fntype1, fntype2) != 1) + return return_false_with_msg ("different fntype attributes"); + tree chain1 = gimple_call_chain (s1); tree chain2 = gimple_call_chain (s2); if ((chain1 && !chain2)