This is the mail archive of the gcc@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]

regression in C++ parsing performance between 4.9.3 and 5.3.1


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.

thanks,
PÃdraig

Attachment: cstrcmp.sh
Description: Bourne shell script


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