Speedup set_member_is_static
authorDodji Seketeli <dodji@redhat.com>
Wed, 4 Jan 2017 23:57:10 +0000 (00:57 +0100)
committerDodji Seketeli <dodji@redhat.com>
Thu, 5 Jan 2017 11:47:20 +0000 (12:47 +0100)
set_member_is_static dominates some performance profile because that
function compares data members before their types are canonicalizing.
This means the comparison is done structurally.  So it's potentially
super long.

This patch fixes the issue by comparing data members by just looking at
their names, and that should be enough.

* src/abg-ir.cc (set_member_is_static): When comparing data
members, consider only their names.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
src/abg-ir.cc

index 44a6e0f8064917f1db3122d8034e934e1cf876c9..5ca61d6451a2715ca37f17c99d712b48aab4d3c4 100644 (file)
@@ -16899,7 +16899,7 @@ set_member_is_static(decl_base& d, bool s)
                 i != cl->priv_->non_static_data_members_.end();
                 ++i)
              {
-               if (**i == *v)
+               if ((*i)->get_name() == v->get_name())
                  {
                    cl->priv_->non_static_data_members_.erase(i);
                    break;
@@ -16913,7 +16913,7 @@ set_member_is_static(decl_base& d, bool s)
                   i != cl->priv_->non_static_data_members_.end();
                   ++i)
              {
-               if (**i == *v)
+               if ((*i)->get_name() == v->get_name())
                  {
                    is_already_in_non_static_data_members = true;
                    break;
@@ -16928,7 +16928,7 @@ set_member_is_static(decl_base& d, bool s)
                       i != cl->priv_->data_members_.end();
                       ++i)
                    {
-                     if (**i == *v)
+                     if ((*i)->get_name() == v->get_name())
                        {
                          var = *i;
                          break;