cxxrtl: disable optimization of debug_items().
authorwhitequark <whitequark@whitequark.org>
Sun, 13 Dec 2020 18:16:55 +0000 (18:16 +0000)
committerwhitequark <whitequark@whitequark.org>
Tue, 15 Dec 2020 11:02:38 +0000 (11:02 +0000)
commitf75bc6c7aac92c7c1c8954ec7fe5325a94e6e491
tree3470df22d68e3e847981b3413827edaf4981f461
parent4d40595d644cfe58425a3de023c712641c429010
cxxrtl: disable optimization of debug_items().

Implementing outlining has greatly increased the amount of debug
information in a typical build, and consequently exposed performance
issues in C++ compilers, which are similar for both GCC and Clang;
the compile time of Minerva SoC SRAM increased almost twofold.

Although one would expect the slowdown to be caused by the increased
use of templates in `debug_eval()`, it is actually almost entirely
attributable to optimizations and codegen for `debug_items()`.

Fortunately, it is neither possible nor desirable to optimize
`debug_items()`: in most cases it is called exactly once, and its
body is a linear sequence of calls with unique arguments.

This commit turns off optimizations for `debug_items()` on GCC and
Clang, improving -Os compile time of Minerva SoC SRAM by ~40% (!)
backends/cxxrtl/cxxrtl.h
backends/cxxrtl/cxxrtl_backend.cc