August 30, 2015 [dmd-internals] [D-Programming-Language/dmd] 6c14fa: fix Issue 14431 - huge slowdown of compilation spe... | ||||
---|---|---|---|---|
| ||||
Attachments:
| Branch: refs/heads/stable Home: https://github.com/D-Programming-Language/dmd Commit: 6c14fadca403a61a578795ec0fb71f9340c7b543 https://github.com/D-Programming-Language/dmd/commit/6c14fadca403a61a578795ec0fb71f9340c7b543 Author: k-hara <k.hara.pg@gmail.com> Date: 2015-08-25 (Tue, 25 Aug 2015) Changed paths: M src/struct.c M src/template.c M src/template.h M test/runnable/extra-files/test14198.d M test/runnable/link14198b.sh Log Message: ----------- fix Issue 14431 - huge slowdown of compilation speed In the pull request #4384, all instance has been changed to invoke semantic3(). It was for the link-failure issue in specific case, but it was too excessive. 1. Semantic analysis strategy for template instances: We cannot determine which instance does not need to be placed in object file until semantic analysis completed. Therefore, for all templates instantiated in root module, compiler should invoke their semantic3 -- regardless of whether those are also instantiated in non-root module. If a template is _only_ instantiated in non-root module, we can elide its semantic3 (and for the compilation speed we should do that). 2. Code generation strategy for template instances: If a template is instantiated in non-root module, compiler usually does not have to put it in object file. But if a template is instantiated in both of root and non-root modules which mutually import each other, it needs to placed in objfile. Commit: 5b464f3393980a0229c079ff6e646ef843681996 https://github.com/D-Programming-Language/dmd/commit/5b464f3393980a0229c079ff6e646ef843681996 Author: k-hara <k.hara.pg@gmail.com> Date: 2015-08-25 (Tue, 25 Aug 2015) Changed paths: A test/runnable/imports/test14901a.d A test/runnable/imports/test14901b.d A test/runnable/imports/test14901c.d A test/runnable/imports/test14901d.d A test/runnable/test14901.d Log Message: ----------- fix Issue 14901 - template static shared this() run multiple times with separate compilation Commit: 7cced26789de95e2e14c1452c7334d50f68f9deb https://github.com/D-Programming-Language/dmd/commit/7cced26789de95e2e14c1452c7334d50f68f9deb Author: k-hara <k.hara.pg@gmail.com> Date: 2015-08-28 (Fri, 28 Aug 2015) Changed paths: M src/template.c Log Message: ----------- (will be squashed later) Better appendToModuleMember implementation and update comments Commit: a587c3d6a49c198822a0629071c401e62d592787 https://github.com/D-Programming-Language/dmd/commit/a587c3d6a49c198822a0629071c401e62d592787 Author: k-hara <k.hara.pg@gmail.com> Date: 2015-08-28 (Fri, 28 Aug 2015) Changed paths: M src/template.c A test/runnable/extra-files/linkdebug.d A test/runnable/extra-files/linkdebug_primitives.d A test/runnable/extra-files/linkdebug_range.d A test/runnable/extra-files/linkdebug_uni.d A test/runnable/linkdebug.sh Log Message: ----------- Prefer instantiations from root modules when -debug/-unittest is specified Commit: cf56e5ad84164276f31f1d567ded97738a42191d https://github.com/D-Programming-Language/dmd/commit/cf56e5ad84164276f31f1d567ded97738a42191d Author: k-hara <k.hara.pg@gmail.com> Date: 2015-08-28 (Fri, 28 Aug 2015) Changed paths: M src/aggregate.h M src/expression.c M src/magicport.json M src/struct.c M src/toobj.c M src/typinf.c Log Message: ----------- Elide codegen if TypeInfo is speculative Even if a struct is defined as non-root symbol, some built-in operations request its TypeInfo. For those, today TypeInfo_Struct is generated in COMDAT. On the other hand, TypeInfoDeclaration is always generated when the TypeInfo is requested, even if the code exists in speculative scope. By that, some unneeded TypeInfo objects had excessively generated. If a TypeInfo is not actually used, we should stop its generation. To satisfy two requirements, I added "speculative TypeInfo" concept associated with template instances. By this change, when a TypeInfo is *requested*, the codegen pass still visit it always. But if the corresponding type is instantiated struct or its derived, and is definitely speculative, the TypeInfo code also won't be emit into object file. Commit: 0b45d187c8ddb7442e4f7a9fc8780bb1ac58dbbc https://github.com/D-Programming-Language/dmd/commit/0b45d187c8ddb7442e4f7a9fc8780bb1ac58dbbc Author: k-hara <k.hara.pg@gmail.com> Date: 2015-08-28 (Fri, 28 Aug 2015) Changed paths: M src/inline.c M src/struct.c Log Message: ----------- More TypeInfo objects would be requested from inlined functions 1. When a non-root function is succeeded to expand for inlining, the additional TypeInfo requests should be handled properly. 2. When a function's semantic3 pass will get called from `canInline`, it would generate more speculative instances when -debug/-unittest is specified. If the additionally instantiated function succeeds to expand, it should be changed to non-speculative, because its code is reachable from the final executable. Commit: cd29d5f34cbacebd83ecdb9727ab1b93f7fa6af1 https://github.com/D-Programming-Language/dmd/commit/cd29d5f34cbacebd83ecdb9727ab1b93f7fa6af1 Author: Rainer Schuetze <r.sagitario@gmx.de> Date: 2015-08-28 (Fri, 28 Aug 2015) Changed paths: M src/template.c A test/runnable/imports/link14541traits.d A test/runnable/link14541.d Log Message: ----------- Merge pull request #4814 from 9rnsr/fix14541 Issue 14541 - "duplicate COMDAT" linker error with the template forward reference in Tuple.opAssign Commit: 083ea4a15049a25c4837d4720173d7b609d27916 https://github.com/D-Programming-Language/dmd/commit/083ea4a15049a25c4837d4720173d7b609d27916 Author: k-hara <k.hara.pg@gmail.com> Date: 2015-08-30 (Sun, 30 Aug 2015) Changed paths: M src/typinf.c Log Message: ----------- Fix isSpeculativeType logic Commit: 92fcc9da72e2889406031a34d9a5d22b075f7d50 https://github.com/D-Programming-Language/dmd/commit/92fcc9da72e2889406031a34d9a5d22b075f7d50 Author: Martin Nowak <code@dawg.eu> Date: 2015-08-30 (Sun, 30 Aug 2015) Changed paths: M src/aggregate.h M src/expression.c M src/inline.c M src/magicport.json M src/struct.c M src/template.c M src/template.h M src/toobj.c M src/typinf.c A test/runnable/extra-files/linkdebug.d A test/runnable/extra-files/linkdebug_primitives.d A test/runnable/extra-files/linkdebug_range.d A test/runnable/extra-files/linkdebug_uni.d M test/runnable/extra-files/test14198.d A test/runnable/imports/link14541traits.d A test/runnable/imports/test14901a.d A test/runnable/imports/test14901b.d A test/runnable/imports/test14901c.d A test/runnable/imports/test14901d.d M test/runnable/link14198b.sh A test/runnable/link14541.d A test/runnable/linkdebug.sh A test/runnable/test14901.d Log Message: ----------- Merge pull request #4944 from 9rnsr/fix14431 [REG 2.067.0] Issue 14431 - huge slowdown of compilation speed Compare: https://github.com/D-Programming-Language/dmd/compare/b30556bf2ce1...92fcc9da72e2 |
Copyright © 1999-2021 by the D Language Foundation