* lto-symtab.c (lto_symtab_entry_def) Add vnode.
[gcc.git] / gcc / ipa-cp.c
index ce5051fe24215ca447168a777fd8718ee7e6e4c1..6e83b899b439647568a1f2abc19a335a23decc41 100644 (file)
@@ -227,10 +227,14 @@ ipcp_lats_are_equal (struct ipcp_lattice *lat1, struct ipcp_lattice *lat2)
   if (lat1->type != lat2->type)
     return false;
 
-  if (operand_equal_p (lat1->constant, lat2->constant, 0))
-    return true;
-
-  return false;
+  if (TREE_CODE (lat1->constant) ==  ADDR_EXPR
+      && TREE_CODE (lat2->constant) ==  ADDR_EXPR
+      && TREE_CODE (TREE_OPERAND (lat1->constant, 0)) == CONST_DECL
+      && TREE_CODE (TREE_OPERAND (lat2->constant, 0)) == CONST_DECL)
+    return operand_equal_p (DECL_INITIAL (TREE_OPERAND (lat1->constant, 0)),
+                           DECL_INITIAL (TREE_OPERAND (lat2->constant, 0)), 0);
+  else
+    return operand_equal_p (lat1->constant, lat2->constant, 0);
 }
 
 /* Compute Meet arithmetics:
@@ -386,8 +390,16 @@ ipcp_print_all_lattices (FILE * f)
          fprintf (f, "    param [%d]: ", i);
          if (lat->type == IPA_CONST_VALUE)
            {
+             tree cst = lat->constant;
              fprintf (f, "type is CONST ");
-             print_generic_expr (f, lat->constant, 0);
+             print_generic_expr (f, cst, 0);
+             if (TREE_CODE (cst) == ADDR_EXPR
+                 && TREE_CODE (TREE_OPERAND (cst, 0)) == CONST_DECL)
+               {
+                 fprintf (f, " -> ");
+                 print_generic_expr (f, DECL_INITIAL (TREE_OPERAND (cst, 0)),
+                                                      0);
+               }
              fprintf (f, "\n");
            }
          else if (lat->type == IPA_TOP)
@@ -1270,7 +1282,7 @@ ipcp_driver (void)
       ipcp_print_profile_data (dump_file);
     }
   /* Free all IPCP structures.  */
-  free_all_ipa_structures_after_ipa_cp ();
+  ipa_free_all_structures_after_ipa_cp ();
   if (dump_file)
     fprintf (dump_file, "\nIPA constant propagation end\n");
   return 0;
@@ -1292,7 +1304,8 @@ ipcp_generate_summary (void)
 
 /* Write ipcp summary for nodes in SET.  */
 static void
-ipcp_write_summary (cgraph_node_set set)
+ipcp_write_summary (cgraph_node_set set,
+                   varpool_node_set vset ATTRIBUTE_UNUSED)
 {
   ipa_prop_write_jump_functions (set);
 }
@@ -1332,8 +1345,9 @@ struct ipa_opt_pass_d pass_ipa_cp =
  ipcp_generate_summary,                        /* generate_summary */
  ipcp_write_summary,                   /* write_summary */
  ipcp_read_summary,                    /* read_summary */
- NULL,                                 /* function_read_summary */
- lto_ipa_fixup_call_notes,             /* stmt_fixup */
+ NULL,                                 /* write_optimization_summary */
+ NULL,                                 /* read_optimization_summary */
+ NULL,                                 /* stmt_fixup */
  0,                                    /* TODOs */
  NULL,                                 /* function_transform */
  NULL,                                 /* variable_transform */