This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug bootstrap/80838] PGO/LTO bootstrapped compiler 5% slower than pure PGO bootstrapped one
- From: "hubicka at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 05 Jul 2017 13:16:17 +0000
- Subject: [Bug bootstrap/80838] PGO/LTO bootstrapped compiler 5% slower than pure PGO bootstrapped one
- Auto-submitted: auto-generated
- References: <bug-80838-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80838
--- Comment #5 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
OK, found the problem. LTO binary is built with -fPIC because of the way we
merge options. I saw the same problem previously on Firefox. It is easy
mistake to do. I think we should
1) warn in this case
2) downgrade options, i.e. linking non-PIC onject to PIC leads to non-PIC
binary.
I don't think it makes sense to support mixed binaries because I see no benefit
in that.
With hack to lto-wrapper:
Index: lto-wrapper.c
===================================================================
--- lto-wrapper.c (revision 249928)
+++ lto-wrapper.c (working copy)
@@ -238,10 +238,12 @@ merge_and_complain (struct cl_decoded_op
case OPT_fdiagnostics_show_option:
case OPT_fdiagnostics_show_location_:
case OPT_fshow_column:
+#if 0
case OPT_fPIC:
case OPT_fpic:
case OPT_fPIE:
case OPT_fpie:
+#endif
case OPT_fcommon:
case OPT_fexceptions:
case OPT_fnon_call_exceptions:
@@ -501,10 +503,12 @@ append_compiler_options (obstack *argv_o
case OPT_fdiagnostics_show_option:
case OPT_fdiagnostics_show_location_:
case OPT_fshow_column:
+#if 0
case OPT_fPIC:
case OPT_fpic:
case OPT_fPIE:
case OPT_fpie:
+#endif
case OPT_fcommon:
case OPT_fexceptions:
case OPT_fnon_call_exceptions:
I now get:
$ perf_4.3 stat ./xgcc -B ./ -O2 -S ~/combine.ii
Performance counter stats for './xgcc -B ./ -O2 -S /aux/hubicka/combine.ii':
5664.950671 task-clock (msec) # 0.998 CPUs utilized
581 context-switches # 0.103 K/sec
5 cpu-migrations # 0.001 K/sec
45,008 page-faults # 0.008 M/sec
16,882,004,890 cycles # 2.980 GHz
2,818,057,410 stalled-cycles-frontend # 16.69% frontend cycles
idle
5,462,286,464 stalled-cycles-backend # 32.36% backend cycles
idle
13,279,784,844 instructions # 0.79 insns per cycle
# 0.41 stalled cycles per
insn
2,919,823,112 branches # 515.419 M/sec
141,311,318 branch-misses # 4.84% of all branches
5.674328322 seconds time elapsed
Which is nice improvement over non-LTO binary.