operand_equal_p: add support for OBJ_TYPE_REF.
authorMartin Liska <mliska@suse.cz>
Wed, 30 Oct 2019 11:56:58 +0000 (12:56 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 30 Oct 2019 11:56:58 +0000 (11:56 +0000)
2019-10-30  Martin Liska  <mliska@suse.cz>

* fold-const.c (operand_equal_p): Support OBJ_TYPE_REF.
* tree.c (add_expr): Hash parts of OBJ_TYPE_REF.

From-SVN: r277612

gcc/ChangeLog
gcc/fold-const.c
gcc/tree.c

index 89ddfce..6b32d1f 100644 (file)
@@ -1,5 +1,10 @@
 2019-10-30  Martin Liska  <mliska@suse.cz>
 
+       * fold-const.c (operand_equal_p): Support OBJ_TYPE_REF.
+       * tree.c (add_expr): Hash parts of OBJ_TYPE_REF.
+
+2019-10-30  Martin Liska  <mliska@suse.cz>
+
        PR lto/91393
        PR lto/88220
        * cgraph.c (cgraph_node::get_create): Overwrite node->order
index 58b967e..8c6e510 100644 (file)
@@ -3325,6 +3325,24 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
          flags &= ~OEP_ADDRESS_OF;
          return OP_SAME (1) && OP_SAME (2);
 
+       /* Virtual table call.  */
+       case OBJ_TYPE_REF:
+         {
+           if (!operand_equal_p (OBJ_TYPE_REF_EXPR (arg0),
+                                 OBJ_TYPE_REF_EXPR (arg1), flags))
+             return false;
+           if (tree_to_uhwi (OBJ_TYPE_REF_TOKEN (arg0))
+               != tree_to_uhwi (OBJ_TYPE_REF_TOKEN (arg1)))
+             return false;
+           if (!operand_equal_p (OBJ_TYPE_REF_OBJECT (arg0),
+                                 OBJ_TYPE_REF_OBJECT (arg1), flags))
+             return false;
+           if (!types_same_for_odr (obj_type_ref_class (arg0),
+                                    obj_type_ref_class (arg1)))
+             return false;
+           return true;
+         }
+
        default:
          return false;
        }
index 23fe5bf..7540506 100644 (file)
@@ -8027,6 +8027,12 @@ add_expr (const_tree t, inchash::hash &hstate, unsigned int flags)
              inchash::add_expr (TARGET_EXPR_SLOT (t), hstate, flags);
              return;
 
+           /* Virtual table call.  */
+           case OBJ_TYPE_REF:
+             inchash::add_expr (OBJ_TYPE_REF_EXPR (t), hstate, flags);
+             inchash::add_expr (OBJ_TYPE_REF_TOKEN (t), hstate, flags);
+             inchash::add_expr (OBJ_TYPE_REF_OBJECT (t), hstate, flags);
+             return;
            default:
              break;
            }