diff options
author | whitequark <whitequark@whitequark.org> | 2020-12-13 07:03:16 +0000 |
---|---|---|
committer | whitequark <whitequark@whitequark.org> | 2020-12-14 01:27:27 +0000 |
commit | ece25a45d4b12f0436be238a13e622b58282036e (patch) | |
tree | 28ffff0e325e2dd9f9df3c3edbc017619ec85633 /CodeOfConduct | |
parent | 3b5a1314cd02d093cb1328d7c2f7abced876a514 (diff) | |
download | yosys-ece25a45d4b12f0436be238a13e622b58282036e.tar.gz yosys-ece25a45d4b12f0436be238a13e622b58282036e.tar.bz2 yosys-ece25a45d4b12f0436be238a13e622b58282036e.zip |
cxxrtl: implement debug information outlining.
Aggressive wire localization and inlining is necessary for CXXRTL to
achieve high performance. However, that comes with a cost: reduced
debug information coverage. Previously, as a workaround, the `-Og`
option could have been used to guarantee complete coverage, at a cost
of a significant performance penalty.
This commit introduces debug information outlining. The main eval()
function is compiled with the user-specified optimization settings.
In tandem, an auxiliary debug_eval() function, compiled from the same
netlist, can be used to reconstruct the values of localized/inlined
signals on demand. To the extent that it is possible, debug_eval()
reuses the results of computations performed by eval(), only filling
in the missing values.
Benchmarking a representative design (Minerva SoC SRAM) shows that:
* Switching from `-O4`/`-Og` to `-O6` reduces runtime by ~40%.
* Switching from `-g1` to `-g2`, both used with `-O6`, increases
compile time by ~25%.
* Although `-g2` increases the resident size of generated modules,
this has no effect on runtime.
Because the impact of `-g2` is minimal and the benefits of having
unconditional 100% debug information coverage (and the performance
improvement as well) are major, this commit removes `-Og` and changes
the defaults to `-O6 -g2`.
We'll have our cake and eat it too!
Diffstat (limited to 'CodeOfConduct')
0 files changed, 0 insertions, 0 deletions