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 <[email protected]>
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)