LTO: get_section: add new argument
authorMartin Liska <mliska@suse.cz>
Wed, 21 Oct 2020 09:11:03 +0000 (11:11 +0200)
committerMartin Liska <mliska@suse.cz>
Thu, 29 Oct 2020 13:32:48 +0000 (14:32 +0100)
gcc/ChangeLog:

PR lto/97508
* langhooks.c (lhd_begin_section): Call get_section with
not_existing = true.
* output.h (get_section): Add new argument.
* varasm.c (get_section): Fail when NOT_EXISTING is true
and a section already exists.
* ipa-cp.c (ipcp_write_summary): Remove.
(ipcp_read_summary): Likewise.
* ipa-fnsummary.c (ipa_fn_summary_read): Always read jump
functions summary.
(ipa_fn_summary_write): Always stream it.

gcc/ipa-cp.c
gcc/ipa-fnsummary.c
gcc/langhooks.c
gcc/output.h
gcc/varasm.c

index f981366a345a20c7d3aaa2afca4e78301ed31807..028480f6ce43cb57adc88c9b96c1d4f9440e40c6 100644 (file)
@@ -5943,22 +5943,6 @@ ipcp_generate_summary (void)
     ipa_analyze_node (node);
 }
 
-/* Write ipcp summary for nodes in SET.  */
-
-static void
-ipcp_write_summary (void)
-{
-  ipa_prop_write_jump_functions ();
-}
-
-/* Read ipcp summary.  */
-
-static void
-ipcp_read_summary (void)
-{
-  ipa_prop_read_jump_functions ();
-}
-
 namespace {
 
 const pass_data pass_data_ipa_cp =
@@ -5980,8 +5964,8 @@ public:
   pass_ipa_cp (gcc::context *ctxt)
     : ipa_opt_pass_d (pass_data_ipa_cp, ctxt,
                      ipcp_generate_summary, /* generate_summary */
-                     ipcp_write_summary, /* write_summary */
-                     ipcp_read_summary, /* read_summary */
+                     NULL, /* write_summary */
+                     NULL, /* read_summary */
                      ipcp_write_transformation_summaries, /*
                      write_optimization_summary */
                      ipcp_read_transformation_summaries, /*
index f27c5f07fa7ed2b42c3819e4355be605e4308695..ff05ab672385dc5cdbad01d39c647f71938f7470 100644 (file)
@@ -4526,6 +4526,7 @@ ipa_fn_summary_read (void)
   struct lto_file_decl_data *file_data;
   unsigned int j = 0;
 
+  ipa_prop_read_jump_functions ();
   ipa_fn_summary_alloc ();
 
   while ((file_data = file_data_vec[j++]))
@@ -4544,8 +4545,6 @@ ipa_fn_summary_read (void)
                     "ipa inline summary is missing in input file");
     }
   ipa_register_cgraph_hooks ();
-  if (!flag_ipa_cp)
-    ipa_prop_read_jump_functions ();
 
   gcc_assert (ipa_fn_summaries);
   ipa_fn_summaries->enable_insertion_hook ();
@@ -4693,8 +4692,7 @@ ipa_fn_summary_write (void)
   produce_asm (ob, NULL);
   destroy_output_block (ob);
 
-  if (!flag_ipa_cp)
-    ipa_prop_write_jump_functions ();
+  ipa_prop_write_jump_functions ();
 }
 
 
index 8819a8859d422b1ea268af6c5d1d0f4d5f514226..d82f54251fdb7080ef9d658eab56c6056faab9b0 100644 (file)
@@ -790,7 +790,7 @@ lhd_begin_section (const char *name)
     saved_section = text_section;
 
   /* Create a new section and switch to it.  */
-  section = get_section (name, SECTION_DEBUG | SECTION_EXCLUDE, NULL);
+  section = get_section (name, SECTION_DEBUG | SECTION_EXCLUDE, NULL, true);
   switch_to_section (section);
 }
 
index eb253c503299bfba3cbe67afaa5ecb284c17698b..2f2f1697fd898a061acb6e9fa158dafb615adb9b 100644 (file)
@@ -523,7 +523,8 @@ extern GTY(()) bool in_cold_section_p;
 
 extern section *get_unnamed_section (unsigned int, void (*) (const void *),
                                     const void *);
-extern section *get_section (const char *, unsigned int, tree);
+extern section *get_section (const char *, unsigned int, tree,
+                            bool not_existing = false);
 extern section *get_named_section (tree, const char *, int);
 extern section *get_variable_section (tree, bool);
 extern void place_block_symbol (rtx);
index ea0b59cf44af725e16dd0a430bcbba442008c320..435c7b348a507965eff64c66e440235b16303b40 100644 (file)
@@ -277,10 +277,12 @@ get_noswitch_section (unsigned int flags, noswitch_section_callback callback)
 }
 
 /* Return the named section structure associated with NAME.  Create
-   a new section with the given fields if no such structure exists.  */
+   a new section with the given fields if no such structure exists.
+   When NOT_EXISTING, then fail if the section already exists.  */
 
 section *
-get_section (const char *name, unsigned int flags, tree decl)
+get_section (const char *name, unsigned int flags, tree decl,
+            bool not_existing)
 {
   section *sect, **slot;
 
@@ -297,6 +299,9 @@ get_section (const char *name, unsigned int flags, tree decl)
     }
   else
     {
+      if (not_existing)
+       internal_error ("Section already exists: %qs", name);
+
       sect = *slot;
       /* It is fine if one of the sections has SECTION_NOTYPE as long as
          the other has none of the contrary flags (see the logic at the end