This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/70452] New: regression in C++ parsing performance between 4.9.3 and 5.3.1
- From: "P at draigBrady dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 30 Mar 2016 11:25:16 +0000
- Subject: [Bug c++/70452] New: regression in C++ parsing performance between 4.9.3 and 5.3.1
- Auto-submitted: auto-generated
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.