Speed up dict_hash
authorTom Tromey <tom@tromey.com>
Wed, 1 Nov 2017 17:15:06 +0000 (11:15 -0600)
committerTom Tromey <tom@tromey.com>
Thu, 9 Nov 2017 15:31:40 +0000 (08:31 -0700)
This speeds up dict_hash a bit, by moving the "TKB" check into the
switch in the loop.

For "gdb -nx -readnow -batch gdb", this improves the time from ~9.8s
before to ~8.5s afterward.

gdb/ChangeLog
2017-11-09  Tom Tromey  <tom@tromey.com>

* dictionary.c (dict_hash): Move "TKB" check into the "switch".

gdb/ChangeLog
gdb/dictionary.c

index cc38854e442d50542d6ecad3ad70198f4ab0b31c..f3c77cd28d7bb6f379c2c84c58aba584b068d071 100644 (file)
@@ -1,3 +1,7 @@
+2017-11-09  Tom Tromey  <tom@tromey.com>
+
+       * dictionary.c (dict_hash): Move "TKB" check into the "switch".
+
 2017-11-08  Joel Brobecker  <brobecker@adacore.com>
 
        * ada-exp.y (write_var_from_sym): Remove parameter
index 8277c5d7263d61d6e6fbc081347c71376ec71de1..fb307538ae1c09f432813bae696701a46595d58e 100644 (file)
@@ -790,17 +790,6 @@ default_search_name_hash (const char *string0)
   hash = 0;
   while (*string)
     {
-      /* Ignore "TKB" suffixes.
-
-        These are used by Ada for subprograms implementing a task body.
-        For instance for a task T inside package Pck, the name of the
-        subprogram implementing T's body is `pck__tTKB'.  We need to
-        ignore the "TKB" suffix because searches for this task body
-        subprogram are going to be performed using `pck__t' (the encoded
-        version of the natural name `pck.t').  */
-      if (strcmp (string, "TKB") == 0)
-       return hash;
-
       switch (*string)
        {
        case '$':
@@ -822,14 +811,25 @@ default_search_name_hash (const char *string0)
                return hash;
              hash = 0;
              string += 2;
-             break;
+             continue;
            }
-         /* FALL THROUGH */
-       default:
-         hash = SYMBOL_HASH_NEXT (hash, *string);
-         string += 1;
+         break;
+       case 'T':
+         /* Ignore "TKB" suffixes.
+
+            These are used by Ada for subprograms implementing a task body.
+            For instance for a task T inside package Pck, the name of the
+            subprogram implementing T's body is `pck__tTKB'.  We need to
+            ignore the "TKB" suffix because searches for this task body
+            subprogram are going to be performed using `pck__t' (the encoded
+            version of the natural name `pck.t').  */
+         if (strcmp (string, "TKB") == 0)
+           return hash;
          break;
        }
+
+      hash = SYMBOL_HASH_NEXT (hash, *string);
+      string += 1;
     }
   return hash;
 }