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

            Bug ID: 119705
           Summary: Massive memory use when building Flang (10GB+)
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: compile-time-hog, memory-hog
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sjames at gcc dot gnu.org
                CC: amonakov at gcc dot gnu.org, mgorny at gentoo dot org,
                    ppalka at gcc dot gnu.org
  Target Milestone: ---

Originally reported by Michał Górny downstream at
https://bugs.gentoo.org/953484: "As discussed on IRC, when compiling
llvm-core/flang, GCC may end up using ~10G for some files (effectively capping
the package at -j3 on systems with 32G RAM)" with GCC 14. Trunk doesn't fare
much better.


At r15-9352-g6284f555e877c7 with --enable-checking=release:
```
$ g++ -c DataSharingProcessor.cpp.ii -fsyntax-only

real    0m46.318s
user    0m42.178s
sys     0m3.983s
```

With that, perf report says:
```
   6.11%  cc1plus  cc1plus               [.] gt_ggc_mx_lang_tree_node
   5.51%  cc1plus  cc1plus               [.] ggc_set_mark
   3.07%  cc1plus  cc1plus               [.] find_substitution
   3.02%  cc1plus  cc1plus               [.] variably_modified_type_p
   2.16%  cc1plus  cc1plus               [.] ggc_internal_alloc_no_dtor
   2.06%  cc1plus  cc1plus               [.] hash_tree_cons
   1.98%  cc1plus  cc1plus               [.] walk_tree_1
   1.45%  cc1plus  cc1plus               [.] cp_fold
   1.33%  cc1plus  cc1plus               [.] tsubst
   0.86%  cc1plus  cc1plus               [.] add_candidates
   0.82%  cc1plus  cc1plus               [.] spec_hasher::equal
   0.76%  cc1plus  cc1plus               [.] cp_type_quals
   0.76%  cc1plus  cc1plus               [.] member_vec_binary_search
[...]
```

That find_substitution was mentioned by richi at
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119387#c19.

With `-ftime-report -ftime-report-details -fsyntax-only`:
```
Time variable                                  wall           GGC
 phase setup                        :   0.00 (  0%)  1948k (  0%)
 phase parsing                      :  15.20 ( 31%)  2436M ( 42%)
 phase lang. deferred               :  33.60 ( 69%)  3430M ( 58%)
 |name lookup                       :   2.42 (  5%)   129M (  2%)
 |overload resolution               :  19.78 ( 41%)  2216M ( 38%)
 garbage collection                 :   6.51 ( 13%)     0  (  0%)
 preprocessing                      :   0.20 (  0%)  3799k (  0%)
 parser (global)                    :   0.97 (  2%)   164M (  3%)
 `- garbage collection              :   4.43 (  9%)     0  (  0%)
 `- parser struct body              :   0.01 (  0%)  1832k (  0%)
 `- template instantiation          :   7.29 ( 15%)   958M ( 16%)
 `- preprocessing                   :   0.20 (  0%)  3799k (  0%)
 `- constant expression evaluation  :   0.01 (  0%)  1565k (  0%)
 `- parser function body            :   0.05 (  0%)  4351k (  0%)
 `- parser inl. func. body          :   0.07 (  0%)    14M (  0%)
 parser struct body                 :   1.76 (  4%)   342M (  6%)
 `- template instantiation          :   0.06 (  0%)  7177k (  0%)
 `- varconst                        :   0.01 (  0%)     0  (  0%)
 `- parser struct body              :   0.01 (  0%)  2315k (  0%)
 `- parser inl. meth. body          :   0.92 (  2%)   119M (  2%)
 `- constant expression evaluation  :   0.01 (  0%)  1434k (  0%)
 parser function body               :   0.10 (  0%)  8264k (  0%)
 parser inl. func. body             :   0.15 (  0%)    22M (  0%)
 `- template instantiation          :   0.01 (  0%)   587k (  0%)
 `- constant expression evaluation  :   0.02 (  0%)  2697k (  0%)
 parser inl. meth. body             :   2.09 (  4%)   235M (  4%)
 `- template instantiation          :   0.08 (  0%)    10M (  0%)
 `- garbage collection              :   2.08 (  4%)     0  (  0%)
 `- constant expression evaluation  :   0.05 (  0%)  4740k (  0%)
 template instantiation             :  35.92 ( 74%)  5051M ( 86%)
 `- template instantiation          :   5.34 ( 11%)   715M ( 12%)
 `- constant expression evaluation  :   0.86 (  2%)    21M (  0%)
 `- symout                          :   0.02 (  0%)     0  (  0%)
 `- varconst                        :   0.02 (  0%)     0  (  0%)
 constant expression evaluation     :   1.04 (  2%)    36M (  1%)
 `- template instantiation          :   0.50 (  1%)    58M (  1%)
 varconst                           :   0.04 (  0%)    82k (  0%)
 symout                             :   0.02 (  0%)     0  (  0%)
 TOTAL                              :  48.81         5868M
```

Reply via email to