This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/70452] New: regression in C++ parsing performance between 4.9.3 and 5.3.1


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70452

            Bug ID: 70452
           Summary: regression in C++ parsing performance between 4.9.3
                    and 5.3.1
           Product: gcc
           Version: 5.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: P at draigBrady dot com
  Target Milestone: ---

Created attachment 38130
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38130&action=edit
test source generator

The attached shell script will generate a larger version
of the following:

constexpr bool static_str_equal(const char* x, const char* y) {
   return (*x == 0 || *y == 0) ?
     (*x == *y) :
     ((*x == *y) && static_str_equal(x + 1, y + 1));
}
int main(void)
{
  static_assert( !static_str_equal("unspecified1", "unspecified"), "");
}

There is a significant slow down and increase in ram usage
compiling that, between gcc 4.9.3 and 5.3.1 (20151207):

$ sh cstrcmp.sh > cstrcmp.cpp
$ ~/gcc-4.9.3/g++ -ftime-report --std=gnu++11 cstrcmp.cpp

Execution times (seconds)
  phase setup             :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.01 ( 1%) wall
   1445 kB ( 1%) ggc
  phase parsing           :   0.91 (100%) usr   0.16 (100%) sys   1.08 (99%)
wall  149089 kB (99%) ggc
  |name lookup            :   0.03 ( 3%) usr   0.00 ( 0%) sys   0.02 ( 2%) wall
     89 kB ( 0%) ggc
  |overload resolution    :   0.01 ( 1%) usr   0.00 ( 0%) sys   0.02 ( 2%) wall
    628 kB ( 0%) ggc
  preprocessing           :   0.02 ( 2%) usr   0.05 (31%) sys   0.04 ( 4%) wall
   2048 kB ( 1%) ggc
  parser (global)         :   0.02 ( 2%) usr   0.03 (19%) sys   0.08 ( 7%) wall
  16178 kB (11%) ggc
  parser function body    :   0.87 (96%) usr   0.08 (50%) sys   0.96 (88%) wall
 130855 kB (87%) ggc
  TOTAL                 :   0.91             0.16             1.09            
150594 kB

$ g++ -ftime-report --std=gnu++11 cstrcmp.cpp  # default fedora version

Execution times (seconds)
  phase setup             :   0.00 ( 0%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
   1408 kB ( 0%) ggc
  phase parsing           :   1.90 (99%) usr   0.26 (100%) sys   2.16 (100%)
wall  469089 kB (100%) ggc
  phase opt and generate  :   0.01 ( 1%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall
     53 kB ( 0%) ggc
  |name lookup            :   0.04 ( 2%) usr   0.00 ( 0%) sys   0.05 ( 2%) wall
     93 kB ( 0%) ggc
  |overload resolution    :   0.01 ( 1%) usr   0.00 ( 0%) sys   0.00 ( 0%) wall
    628 kB ( 0%) ggc
  garbage collection      :   0.20 (10%) usr   0.02 ( 8%) sys   0.21 (10%) wall
      0 kB ( 0%) ggc
  preprocessing           :   0.01 ( 1%) usr   0.05 (19%) sys   0.08 ( 4%) wall
   2048 kB ( 0%) ggc
  parser (global)         :   0.02 ( 1%) usr   0.04 (15%) sys   0.05 ( 2%) wall
  16181 kB ( 3%) ggc
  parser function body    :   1.67 (87%) usr   0.15 (58%) sys   1.82 (84%) wall
 450852 kB (96%) ggc
  integrated RA           :   0.01 ( 1%) usr   0.00 ( 0%) sys   0.01 ( 0%) wall
     24 kB ( 0%) ggc
  TOTAL                 :   1.91             0.26             2.17            
470569 kB

Note I compiled the gcc 5 branch at 20160302 with the same results.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]