aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2021-03-24 17:48:27 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2021-04-07 12:49:12 +0100
commit5e18990f1f2957e59fa4b62d64ed0cb683b65b58 (patch)
tree015550c82dc9c03756111ce968335798b474d872
parentefd86e5b0f756b04675e2ef7e26a64508300d9a8 (diff)
downloadgdb-5e18990f1f2957e59fa4b62d64ed0cb683b65b58.zip
gdb-5e18990f1f2957e59fa4b62d64ed0cb683b65b58.tar.gz
gdb-5e18990f1f2957e59fa4b62d64ed0cb683b65b58.tar.bz2
gdb: move cheap pointer equality check earlier in types_equal
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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/gdbtypes.c8
2 files changed, 9 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b418b75..d8b3313 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 5a20e7e..84c4f34 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -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)