-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[cxxmodules] Enable the semantic global module index to boost performance. #5884
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Starting build on |
|
Build failed on ROOT-performance-centos7-multicore/default. Errors:
|
5990f40 to
e665422
Compare
|
Starting build on |
|
Build failed on ROOT-performance-centos7-multicore/default. Failing tests:
|
e665422 to
9d8618a
Compare
|
Starting build on |
|
Build failed on ROOT-fedora30/cxx14. Failing tests:
|
|
Build failed on mac1015/cxx17. Failing tests:
|
|
Build failed on ROOT-performance-centos7-multicore/default. Failing tests:
|
|
Build failed on ROOT-fedora31/noimt. Failing tests: |
|
Build failed on mac1014/python3. Failing tests: |
|
@phsft-bot build with flags -DCTEST_TEST_EXCLUDE_NONE=On |
|
Starting build on |
|
Build failed on ROOT-fedora31/noimt. Failing tests: |
|
Build failed on mac1015/cxx17. Failing tests:
And 9 more |
|
Build failed on ROOT-fedora30/cxx14. Failing tests:
|
9d8618a to
d3e1314
Compare
|
Starting build on |
d3e1314 to
544812c
Compare
|
Starting build on |
|
Build failed on ROOT-fedora31/noimt. Failing tests: |
|
Build failed on ROOT-fedora30/cxx14. Failing tests: |
|
Starting build on |
|
Build failed on ROOT-fedora31/noimt. Failing tests: |
|
Build failed on ROOT-performance-centos7-multicore/default. Failing tests: |
|
Build failed on ROOT-ubuntu16/nortcxxmod. Failing tests: |
|
Build failed on ROOT-debian10-i386/cxx14. Failing tests: |
|
Build failed on mac1015/cxx17. Failing tests:
|
Environment variables can be set to 1, On, TRUE and 0, Off, FALSE to set a bool value. Implement a FoundationUtils facility to check for it.
…ance. The global module index (GMI) is an optimization which hides the introduced by clang overhead when pre-loading the C++ modules at startup. The GMI represents a mapping between an identifier and a set of modules which contain this indentifier. This mean that if we TH1 is undeclared the GMI will load all modules which contain this identifier which is usually suboptimal, too. The semantic GMI maps identifiers only to modules which contain a definition of the entity behind the identifier. For cases such as typedefs where the entity introduces a synonym (rather than declaration) we map the first module we encounter. For namespaces we add all modules which has a namespace partition. The namespace case is still suboptimal and further improved by inspecting what exactly is being looked up in the namespace by the qualified lookup facilities.
e006e9a to
8a70b4e
Compare
|
Starting build on |
|
@phsft-bot build with flags -DCTEST_TEST_EXCLUDE_NONE=On |
|
Starting build on |
|
Build failed on ROOT-fedora31/noimt. Failing tests: |
|
Build failed on mac1014/python3. Failing tests:
|
|
Build failed on ROOT-fedora30/cxx14. Failing tests: |
|
Build failed on ROOT-performance-centos7-multicore/default. Failing tests: |
|
Starting build on |
|
Build failed on ROOT-fedora31/noimt. Failing tests: |
|
Build failed on ROOT-fedora30/cxx14. Failing tests: |
|
Closing in favor of #5847 |
The global module index (GMI) is an optimization which hides the introduced by clang overhead when pre-loading the C++ modules at startup.
The GMI represents a mapping between an identifier and a set of modules which contain this indentifier. This mean that if we TH1 is undeclared the GMI will load all modules which contain this identifier which is usually suboptimal, too.
The semantic GMI maps identifiers only to modules which contain a definition of the entity behind the identifier. For cases such as typedefs where the entity introduces a synonym (rather than declaration) we map the first module we encounter. For namespaces we add all modules which has a namespace partition. The namespace case is still suboptimal and further improved by inspecting what exactly is being looked up in the namespace by the qualified lookup facilities.