How to understand the output of the -ftime-report flag of gcc?

Viewed 41

I profiled the compilation of my code with g++ -ftime-report to try to find a way to speed it up.

Here is the output :

    Time variable                                   usr           sys          wall               GGC
     phase setup                        :   0.00 (  0%)   0.00 (  0%)   0.00 (  0%)    1353 kB (  0%)
     phase parsing                      :   2.06 (  5%)   1.13 ( 50%)   3.30 (  8%)  565836 kB ( 30%)
     phase lang. deferred               :   0.30 (  1%)   0.06 (  3%)   0.36 (  1%)   65727 kB (  4%)
     phase opt and generate             :  37.96 ( 94%)   1.07 ( 47%)  39.03 ( 91%) 1224911 kB ( 66%)
     |name lookup                       :   0.23 (  1%)   0.06 (  3%)   0.34 (  1%)   18602 kB (  1%)
     |overload resolution               :   0.36 (  1%)   0.10 (  4%)   0.41 (  1%)   83103 kB (  4%)
     garbage collection                 :   0.42 (  1%)   0.00 (  0%)   0.43 (  1%)       0 kB (  0%)
     dump files                         :   0.02 (  0%)   0.01 (  0%)   0.06 (  0%)       0 kB (  0%)
     callgraph construction             :   0.18 (  0%)   0.01 (  0%)   0.17 (  0%)   12930 kB (  1%)
     callgraph optimization             :   0.10 (  0%)   0.01 (  0%)   0.05 (  0%)     371 kB (  0%)
     ipa function summary               :   0.07 (  0%)   0.00 (  0%)   0.08 (  0%)    1110 kB (  0%)
     ipa dead code removal              :   0.03 (  0%)   0.00 (  0%)   0.02 (  0%)       0 kB (  0%)
     ipa devirtualization               :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)     134 kB (  0%)
     ipa cp                             :   0.10 (  0%)   0.01 (  0%)   0.12 (  0%)    8595 kB (  0%)
     ipa inlining heuristics            :   3.18 (  8%)   0.00 (  0%)   3.20 (  7%)   19108 kB (  1%)
     ipa function splitting             :   0.21 (  1%)   0.00 (  0%)   0.19 (  0%)     286 kB (  0%)
     ipa reference                      :   0.01 (  0%)   0.00 (  0%)   0.02 (  0%)       0 kB (  0%)
     ipa pure const                     :   0.05 (  0%)   0.01 (  0%)   0.06 (  0%)      17 kB (  0%)
     ipa icf                            :   0.12 (  0%)   0.00 (  0%)   0.12 (  0%)       1 kB (  0%)
     ipa SRA                            :   0.33 (  1%)   0.03 (  1%)   0.27 (  1%)   23892 kB (  1%)
     ipa free inline summary            :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)       0 kB (  0%)
     cfg construction                   :   0.04 (  0%)   0.00 (  0%)   0.03 (  0%)    2185 kB (  0%)
     cfg cleanup                        :   0.63 (  2%)   0.02 (  1%)   0.65 (  2%)    4734 kB (  0%)
     trivially dead code                :   0.16 (  0%)   0.00 (  0%)   0.09 (  0%)       0 kB (  0%)
     df scan insns                      :   0.24 (  1%)   0.01 (  0%)   0.22 (  1%)       8 kB (  0%)
     df multiple defs                   :   0.21 (  1%)   0.01 (  0%)   0.23 (  1%)       0 kB (  0%)
     df reaching defs                   :   0.75 (  2%)   0.00 (  0%)   0.74 (  2%)       0 kB (  0%)
     df live regs                       :   2.00 (  5%)   0.00 (  0%)   2.05 (  5%)       0 kB (  0%)
     df live&initialized regs           :   0.69 (  2%)   0.00 (  0%)   0.76 (  2%)       0 kB (  0%)
     df must-initialized regs           :   0.61 (  2%)   0.24 ( 11%)   0.83 (  2%)       0 kB (  0%)
     df use-def / def-use chains        :   0.25 (  1%)   0.00 (  0%)   0.26 (  1%)       0 kB (  0%)
     df reg dead/unused notes           :   0.87 (  2%)   0.00 (  0%)   0.79 (  2%)   14516 kB (  1%)
     register information               :   0.10 (  0%)   0.00 (  0%)   0.15 (  0%)       0 kB (  0%)
     alias analysis                     :   0.40 (  1%)   0.00 (  0%)   0.34 (  1%)   28831 kB (  2%)
     alias stmt walking                 :   0.72 (  2%)   0.07 (  3%)   0.64 (  1%)    5194 kB (  0%)
     register scan                      :   0.05 (  0%)   0.00 (  0%)   0.05 (  0%)     217 kB (  0%)
     rebuild jump labels                :   0.08 (  0%)   0.00 (  0%)   0.10 (  0%)       0 kB (  0%)
     preprocessing                      :   0.60 (  1%)   0.59 ( 26%)   1.38 (  3%)  194467 kB ( 10%)
     parser (global)                    :   0.22 (  1%)   0.23 ( 10%)   0.38 (  1%)  102668 kB (  6%)
     parser struct body                 :   0.27 (  1%)   0.06 (  3%)   0.35 (  1%)   62614 kB (  3%)
     parser function body               :   0.35 (  1%)   0.09 (  4%)   0.38 (  1%)   70207 kB (  4%)
     parser inl. func. body             :   0.06 (  0%)   0.04 (  2%)   0.07 (  0%)    7795 kB (  0%)
     parser inl. meth. body             :   0.16 (  0%)   0.04 (  2%)   0.22 (  1%)   32985 kB (  2%)
     template instantiation             :   0.64 (  2%)   0.14 (  6%)   0.78 (  2%)  160006 kB (  9%)
     constant expression evaluation     :   0.01 (  0%)   0.00 (  0%)   0.04 (  0%)     348 kB (  0%)
     early inlining heuristics          :   0.12 (  0%)   0.01 (  0%)   0.09 (  0%)   50683 kB (  3%)
     inline parameters                  :   0.16 (  0%)   0.00 (  0%)   0.16 (  0%)    9128 kB (  0%)
     integration                        :   1.01 (  3%)   0.13 (  6%)   1.20 (  3%)  272019 kB ( 15%)
     tree gimplify                      :   0.09 (  0%)   0.02 (  1%)   0.10 (  0%)   43912 kB (  2%)
     tree eh                            :   0.15 (  0%)   0.00 (  0%)   0.17 (  0%)   49453 kB (  3%)
     tree CFG construction              :   0.02 (  0%)   0.00 (  0%)   0.03 (  0%)   24163 kB (  1%)
     tree CFG cleanup                   :   0.77 (  2%)   0.02 (  1%)   0.86 (  2%)     570 kB (  0%)
     tree tail merge                    :   0.10 (  0%)   0.00 (  0%)   0.09 (  0%)    1409 kB (  0%)
     tree VRP                           :   0.68 (  2%)   0.00 (  0%)   0.76 (  2%)   30167 kB (  2%)
     tree Early VRP                     :   0.08 (  0%)   0.00 (  0%)   0.08 (  0%)    4515 kB (  0%)
     tree copy propagation              :   0.19 (  0%)   0.00 (  0%)   0.20 (  0%)     286 kB (  0%)
     tree PTA                           :   0.65 (  2%)   0.00 (  0%)   0.69 (  2%)    5326 kB (  0%)
     tree PHI insertion                 :   0.01 (  0%)   0.00 (  0%)   0.04 (  0%)    5166 kB (  0%)
     tree SSA rewrite                   :   0.29 (  1%)   0.02 (  1%)   0.27 (  1%)   28108 kB (  2%)
     tree SSA other                     :   0.04 (  0%)   0.01 (  0%)   0.05 (  0%)     357 kB (  0%)
     tree SSA incremental               :   0.38 (  1%)   0.02 (  1%)   0.39 (  1%)   13003 kB (  1%)
     tree operand scan                  :   0.27 (  1%)   0.05 (  2%)   0.21 (  0%)   41554 kB (  2%)
     dominator optimization             :   0.62 (  2%)   0.03 (  1%)   0.70 (  2%)   26865 kB (  1%)
     backwards jump threading           :   0.00 (  0%)   0.00 (  0%)   0.01 (  0%)    1082 kB (  0%)
     tree SRA                           :   0.07 (  0%)   0.00 (  0%)   0.03 (  0%)     757 kB (  0%)
     isolate eroneous paths             :   0.02 (  0%)   0.00 (  0%)   0.00 (  0%)       0 kB (  0%)
     tree CCP                           :   0.38 (  1%)   0.01 (  0%)   0.38 (  1%)    6460 kB (  0%)
     tree split crit edges              :   0.01 (  0%)   0.00 (  0%)   0.02 (  0%)    6860 kB (  0%)
     tree reassociation                 :   0.07 (  0%)   0.00 (  0%)   0.06 (  0%)      95 kB (  0%)
     tree PRE                           :   0.49 (  1%)   0.07 (  3%)   0.59 (  1%)   29233 kB (  2%)
     tree FRE                           :   0.31 (  1%)   0.06 (  3%)   0.37 (  1%)    5463 kB (  0%)
     tree code sinking                  :   0.05 (  0%)   0.00 (  0%)   0.05 (  0%)    1998 kB (  0%)
     tree linearize phis                :   0.06 (  0%)   0.00 (  0%)   0.06 (  0%)     235 kB (  0%)
     tree backward propagate            :   0.02 (  0%)   0.00 (  0%)   0.02 (  0%)       0 kB (  0%)
     tree forward propagate             :   0.15 (  0%)   0.00 (  0%)   0.19 (  0%)    3598 kB (  0%)
     tree phiprop                       :   0.00 (  0%)   0.01 (  0%)   0.01 (  0%)     162 kB (  0%)
     tree conservative DCE              :   0.17 (  0%)   0.04 (  2%)   0.18 (  0%)     121 kB (  0%)
     tree aggressive DCE                :   0.09 (  0%)   0.00 (  0%)   0.18 (  0%)    3761 kB (  0%)
     tree buildin call DCE              :   0.01 (  0%)   0.00 (  0%)   0.02 (  0%)      38 kB (  0%)
     tree DSE                           :   0.10 (  0%)   0.01 (  0%)   0.13 (  0%)    2485 kB (  0%)
     PHI merge                          :   0.02 (  0%)   0.00 (  0%)   0.01 (  0%)     202 kB (  0%)
     complete unrolling                 :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)     242 kB (  0%)
     tree slp vectorization             :   0.14 (  0%)   0.00 (  0%)   0.16 (  0%)   40876 kB (  2%)
     tree iv optimization               :   0.02 (  0%)   0.00 (  0%)   0.00 (  0%)     484 kB (  0%)
     tree SSA uncprop                   :   0.02 (  0%)   0.00 (  0%)   0.03 (  0%)       0 kB (  0%)
     tree switch conversion             :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)       0 kB (  0%)
     gimple CSE sin/cos                 :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)       3 kB (  0%)
     gimple widening/fma detection      :   0.04 (  0%)   0.00 (  0%)   0.04 (  0%)       0 kB (  0%)
     tree strlen optimization           :   0.05 (  0%)   0.00 (  0%)   0.04 (  0%)     192 kB (  0%)
     dominance frontiers                :   0.06 (  0%)   0.00 (  0%)   0.04 (  0%)       0 kB (  0%)
     dominance computation              :   0.70 (  2%)   0.00 (  0%)   0.78 (  2%)       0 kB (  0%)
     control dependences                :   0.03 (  0%)   0.00 (  0%)   0.02 (  0%)       0 kB (  0%)
     out of ssa                         :   0.09 (  0%)   0.00 (  0%)   0.09 (  0%)    1047 kB (  0%)
     expand vars                        :   0.61 (  2%)   0.00 (  0%)   0.59 (  1%)   11361 kB (  1%)
     expand                             :   0.24 (  1%)   0.02 (  1%)   0.27 (  1%)  110705 kB (  6%)
     post expand cleanups               :   0.11 (  0%)   0.00 (  0%)   0.09 (  0%)   11138 kB (  1%)
     varconst                           :   0.00 (  0%)   0.00 (  0%)   0.01 (  0%)       9 kB (  0%)
     forward prop                       :   0.28 (  1%)   0.00 (  0%)   0.32 (  1%)    7463 kB (  0%)
     CSE                                :   0.47 (  1%)   0.01 (  0%)   0.50 (  1%)    6406 kB (  0%)
     dead code elimination              :   0.15 (  0%)   0.00 (  0%)   0.16 (  0%)       0 kB (  0%)
     dead store elim1                   :   0.25 (  1%)   0.00 (  0%)   0.25 (  1%)    7807 kB (  0%)
     dead store elim2                   :   0.15 (  0%)   0.01 (  0%)   0.13 (  0%)   12268 kB (  1%)
     loop init                          :   0.30 (  1%)   0.00 (  0%)   0.32 (  1%)    3678 kB (  0%)
     loop invariant motion              :   0.00 (  0%)   0.00 (  0%)   0.01 (  0%)       1 kB (  0%)
     loop fini                          :   0.01 (  0%)   0.00 (  0%)   0.01 (  0%)       0 kB (  0%)
     CPROP                              :   0.49 (  1%)   0.00 (  0%)   0.49 (  1%)   12212 kB (  1%)
     PRE                                :   3.67 (  9%)   0.04 (  2%)   3.69 (  9%)   17514 kB (  1%)
     CSE 2                              :   0.28 (  1%)   0.01 (  0%)   0.29 (  1%)    2791 kB (  0%)
     branch prediction                  :   0.13 (  0%)   0.00 (  0%)   0.13 (  0%)     823 kB (  0%)
     combiner                           :   0.48 (  1%)   0.00 (  0%)   0.51 (  1%)   19027 kB (  1%)
     if-conversion                      :   0.08 (  0%)   0.00 (  0%)   0.07 (  0%)    3838 kB (  0%)
     integrated RA                      :   1.09 (  3%)   0.00 (  0%)   1.14 (  3%)   72103 kB (  4%)
     LRA non-specific                   :   0.52 (  1%)   0.01 (  0%)   0.47 (  1%)    3373 kB (  0%)
     LRA virtuals elimination           :   0.14 (  0%)   0.00 (  0%)   0.11 (  0%)    9546 kB (  1%)
     LRA reload inheritance             :   0.04 (  0%)   0.00 (  0%)   0.04 (  0%)     822 kB (  0%)
     LRA create live ranges             :   0.30 (  1%)   0.00 (  0%)   0.39 (  1%)    1330 kB (  0%)
     LRA hard reg assignment            :   0.01 (  0%)   0.00 (  0%)   0.03 (  0%)       0 kB (  0%)
     LRA rematerialization              :   0.10 (  0%)   0.00 (  0%)   0.05 (  0%)       0 kB (  0%)
     reload CSE regs                    :   0.49 (  1%)   0.00 (  0%)   0.53 (  1%)   15987 kB (  1%)
     load CSE after reload              :   2.73 (  7%)   0.00 (  0%)   2.72 (  6%)   11924 kB (  1%)
     ree                                :   0.07 (  0%)   0.00 (  0%)   0.10 (  0%)      74 kB (  0%)
     thread pro- & epilogue             :   0.18 (  0%)   0.00 (  0%)   0.22 (  1%)     446 kB (  0%)
     if-conversion 2                    :   0.08 (  0%)   0.00 (  0%)   0.06 (  0%)      23 kB (  0%)
     split paths                        :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)      16 kB (  0%)
     combine stack adjustments          :   0.01 (  0%)   0.00 (  0%)   0.03 (  0%)       0 kB (  0%)
     peephole 2                         :   0.09 (  0%)   0.00 (  0%)   0.11 (  0%)     878 kB (  0%)
     hard reg cprop                     :   0.19 (  0%)   0.00 (  0%)   0.15 (  0%)      11 kB (  0%)
     scheduling 2                       :   1.08 (  3%)   0.02 (  1%)   1.13 (  3%)    8034 kB (  0%)
     machine dep reorg                  :   0.09 (  0%)   0.00 (  0%)   0.09 (  0%)    2338 kB (  0%)
     reorder blocks                     :   0.33 (  1%)   0.00 (  0%)   0.31 (  1%)    4597 kB (  0%)
     shorten branches                   :   0.09 (  0%)   0.00 (  0%)   0.10 (  0%)       0 kB (  0%)
     final                              :   0.19 (  0%)   0.00 (  0%)   0.20 (  0%)   21653 kB (  1%)
     tree if-combine                    :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)     386 kB (  0%)
     straight-line strength reduction   :   0.04 (  0%)   0.00 (  0%)   0.03 (  0%)      26 kB (  0%)
     store merging                      :   0.02 (  0%)   0.00 (  0%)   0.01 (  0%)     868 kB (  0%)
     initialize rtl                     :   0.00 (  0%)   0.00 (  0%)   0.01 (  0%)      12 kB (  0%)
     address lowering                   :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)       0 kB (  0%)
     early local passes                 :   0.01 (  0%)   0.00 (  0%)   0.00 (  0%)       0 kB (  0%)
     rest of compilation                :   0.59 (  1%)   0.00 (  0%)   0.55 (  1%)    7917 kB (  0%)
     remove unused locals               :   0.17 (  0%)   0.00 (  0%)   0.16 (  0%)     416 kB (  0%)
     address taken                      :   0.11 (  0%)   0.01 (  0%)   0.14 (  0%)       0 kB (  0%)
     rebuild frequencies                :   0.05 (  0%)   0.00 (  0%)   0.04 (  0%)     138 kB (  0%)
     repair loop structures             :   0.00 (  0%)   0.00 (  0%)   0.01 (  0%)       0 kB (  0%)
     TOTAL                              :  40.32          2.26         42.69        1857845 kB

My problem is that I don't understand a thing about all the terms in this report (ipa cp, tree eh,...). I would like at least to understand what is the phase opt and generate stage because it takes 94% of the compile time so it's definitely what I should tackle.

In gcc documentation, there's almost no information about this command https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html#Developer-Options

-ftime-report

    Makes the compiler print some statistics about the time consumed by each pass when it finishes.

It's a bit surprising to have a description that non exhaustive for a so complicated command.

0 Answers
Related