Hi,
as Richard noticed in my port of the code to operand_equal_p, the checking of
CONSTURCTOR in ipa-icf-gimple is incomplete missing the index checks.
It is also unnecesary since non-empty ctors does not happen as gimple
operands.  This patch thus removes the unnecesary code.
Bootstrapped/regtested x86_64-linux, comitted.

Honza

        * ipa-icf-gimple.c (func_checker::compare_operand): Compare only
        empty constructors.
Index: ipa-icf-gimple.c
===================================================================
--- ipa-icf-gimple.c    (revision 228851)
+++ ipa-icf-gimple.c    (working copy)
@@ -415,20 +415,9 @@ func_checker::compare_operand (tree t1,
   switch (TREE_CODE (t1))
     {
     case CONSTRUCTOR:
-      {
-       unsigned length1 = vec_safe_length (CONSTRUCTOR_ELTS (t1));
-       unsigned length2 = vec_safe_length (CONSTRUCTOR_ELTS (t2));
-
-       if (length1 != length2)
-         return return_false ();
-
-       for (unsigned i = 0; i < length1; i++)
-         if (!compare_operand (CONSTRUCTOR_ELT (t1, i)->value,
-                               CONSTRUCTOR_ELT (t2, i)->value))
-           return return_false();
-
-       return true;
-      }
+      gcc_assert (!vec_safe_length (CONSTRUCTOR_ELTS (t1))
+                 && !vec_safe_length (CONSTRUCTOR_ELTS (t2)));
+      return true;
     case ARRAY_REF:
     case ARRAY_RANGE_REF:
       /* First argument is the array, second is the index.  */

Reply via email to