Use 'location_hash' for 'seen_locations' in 'gcc/profile.c:branch_prob'
authorThomas Schwinge <thomas@codesourcery.com>
Tue, 31 Aug 2021 21:34:23 +0000 (23:34 +0200)
committerThomas Schwinge <thomas@codesourcery.com>
Mon, 15 Nov 2021 16:56:49 +0000 (17:56 +0100)
Follow-up to commit 102fcf94e625a2016a65829c73a42bd6c2420376
"Fix GCOV CFG related issues": considering the current
'int_hash <location_t, 0, 2>', per 'libcpp/include/line-map.h':

      Actual     | Value                         | Meaning
      -----------+-------------------------------+-------------------------------
      0x00000000 | UNKNOWN_LOCATION (gcc/input.h)| Unknown/invalid location.
      -----------+-------------------------------+-------------------------------
      0x00000001 | BUILTINS_LOCATION             | The location for declarations
                 |   (gcc/input.h)               | in "<built-in>"
      -----------+-------------------------------+-------------------------------
      0x00000002 | RESERVED_LOCATION_COUNT       | The first location to be
                 | (also                         | handed out, and the
                 |  ordmap[0]->start_location)   | first line in ordmap 0

... this currently uses value '0' ('UNKNOWN_LOCATION') as spare values for
'Empty', and value '2' ('RESERVED_LOCATION_COUNT') as spare values for
'Deleted', which is questionable?

What actually does get put into 'seen_locations' is (mostly...)
restricted/gated by '!RESERVED_LOCATION_P' (which is true unless
'UNKNOWN_LOCATION' or 'BUILTINS_LOCATION'), thus we may simply use
'location_hash'.

gcc/
* profile.c (branch_prob): Use 'location_hash' for
'seen_locations'.

gcc/profile.c

index c33c833..d07002d 100644 (file)
@@ -1375,7 +1375,7 @@ branch_prob (bool thunk)
       /* Initialize the output.  */
       output_location (&streamed_locations, NULL, 0, NULL, NULL);
 
-      hash_set<int_hash <location_t, 0, 2> > seen_locations;
+      hash_set<location_hash> seen_locations;
 
       FOR_EACH_BB_FN (bb, cfun)
        {
@@ -1385,6 +1385,7 @@ branch_prob (bool thunk)
          if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb)
            {
              location_t loc = DECL_SOURCE_LOCATION (current_function_decl);
+             gcc_checking_assert (!RESERVED_LOCATION_P (loc));
              seen_locations.add (loc);
              expanded_location curr_location = expand_location (loc);
              output_location (&streamed_locations, curr_location.file,