gdb: move cheap pointer equality check earlier in types_equal
authorAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 24 Mar 2021 17:48:27 +0000 (17:48 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 7 Apr 2021 11:49:12 +0000 (12:49 +0100)
I noticed that in types equal we start with a cheap pointer equality
check, then resolve typedefs, then do a series of (semi-)expensive
checks, including checking type names, before, finally performing
another pointer equality check.

We should hoist the second pointer equality check to immediately after
we have resolved typedefs.  This would save performing the more
expensive checks.

This isn't going to give any noticable performance improvement, I just
spotted this in passing and figured I might as well commit the fix.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* gdbtypes.c (types_equal): Move pointer equality check earlier in
the function.

gdb/ChangeLog
gdb/gdbtypes.c

index b418b755aa42ab486194f1b34bba7383ac1ff400..d8b3313030a993313f4ffeffd338d2a85244874c 100644 (file)
@@ -1,3 +1,8 @@
+2021-04-07  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdbtypes.c (types_equal): Move pointer equality check earlier in
+       the function.
+
 2021-04-07  Caroline Tice  <cmtice@google.com>
 
        * dwarf2/read.c (try_open_dwop_file): Add path for the binary to
index 5a20e7e16ca1da0ed7fa06a1ea40f37fc74aded7..84c4f34cf30f0780f74608e5aa7968f99a51c97e 100644 (file)
@@ -4075,6 +4075,10 @@ types_equal (struct type *a, struct type *b)
   if (b->code () == TYPE_CODE_TYPEDEF)
     b = check_typedef (b);
 
+  /* Check if identical after resolving typedefs.  */
+  if (a == b)
+    return true;
+
   /* If after resolving typedefs a and b are not of the same type
      code then they are not equal.  */
   if (a->code () != b->code ())
@@ -4097,10 +4101,6 @@ types_equal (struct type *a, struct type *b)
       && strcmp (a->name (), b->name ()) == 0)
     return true;
 
-  /* Check if identical after resolving typedefs.  */
-  if (a == b)
-    return true;
-
   /* Two function types are equal if their argument and return types
      are equal.  */
   if (a->code () == TYPE_CODE_FUNC)