22 Commits

Author SHA1 Message Date
Fangrui Song
963d7b4b2a [ELF] Improve --thinlto-index-only and --thinlto-emit-index-files tests 2024-01-19 22:02:21 -08:00
Teresa Johnson
3adc6e0308 [ThinLTO] Remove BlockCount for non partial sample profile builds
As pointed out in
https://discourse.llvm.org/t/undeterministic-thin-index-file/69985, the
block count added to distributed ThinLTO index files breaks incremental
builds on ThinLTO - if any linked file has a different number of BBs,
then the accumulated sum placed in the index files will change, causing
all ThinLTO backend compiles to be redone.

The block count is only used for scaling of partial sample profiles, and
was added in D80403 for D79831.

This patch simply removes this field from the index files of non partial
sample profile compiles, which is NFC on the output of the compiler.

We subsequently need to see if this can be removed for partial sample
profiles without signficant performance loss, or redesigned in a way
that does not destroy caching.

Differential Revision: https://reviews.llvm.org/D148746
2023-04-20 11:45:15 -07:00
Nico Weber
aa0883b59a [lld/mac] Add support for distributed ThinLTO
Adds support for the following flags:

* --thinlto-index-only, --thinlto-index-only=
* --thinlto-emit-imports-files
* --thinlto-emit-index-files
* --thinlto-object-suffix-replace=
* --thinlto-prefix-replace=

See https://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html
for some words on --thinlto-index-only.

I don't really need the other flags, but they were in the vicinity
and _someone_ might need them, so I figured I'd add them too.

`-object_path_lto` now sets `c.AlwaysEmitRegularLTOObj` as in the other ports,
which means it can now only point to a filename for non-thin LTO.
I think that was the intent of D129705 anyways, so update
test/MachO/lto-object-path.ll to use a non-thin bitcode file for that test.

Differential Revision: https://reviews.llvm.org/D138451
2023-01-12 20:54:18 -05:00
Fangrui Song
b5ab42af84 [ELF] Simplify --thinlto-index-only tests 2023-01-03 15:06:43 -08:00
Wei Wang
5529a7524a [ELF][Distributed ThinLTO] Do not generate empty index when bitcode object is linked
When the same bitcode object file is given multiple times from the Command-line
as lazy object file, empty index is generated which overwrites the one from thinlink.
This could cause undefined symbols during final link.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D133740
2022-09-13 14:34:41 -07:00
Fangrui Song
4512dda6af [ELF][test] Clean up thinlto* 2022-06-22 16:19:17 -07:00
Fangrui Song
b114e134bd [ELF] Fix --thinlto-index-only regression after D79300
After D79300, we don't rewrite InputFile::mb to an empty buffer.
In thinLTOCreateEmptyIndexFiles(), we should check LazyObjFile::fetched
as well as checking whether mb is a bitcode, otherwise we would overwrite (path + .thinlto.bc) with an empty index.
2020-06-09 23:10:30 -07:00
Hiroshi Yamauchi
a7fa35a629 [ThinLTO] Compute the basic block count across modules.
Summary:
Count the per-module number of basic blocks when the module summary is computed
and sum them up during Thin LTO indexing.

This is used to estimate the working set size under the partial sample PGO.

This is split off of D79831.

Reviewers: davidxl, espindola

Subscribers: emaste, inglorion, hiraditya, MaskRay, steven_wu, dexonsmith, arphaman, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D80403
2020-05-28 10:33:05 -07:00
Amy Huang
7b1d793713 Reland "Change the X86 datalayout to add three address spaces
for 32 bit signed, 32 bit unsigned, and 64 bit pointers."
This reverts 57076d3199fc2b0af4a3736b7749dd5462cacda5.

Original review at https://reviews.llvm.org/D64931.
Review for added fix at https://reviews.llvm.org/D66843.

llvm-svn: 371568
2019-09-10 23:15:38 +00:00
Vlad Tsyrklevich
57076d3199 Revert "Change the X86 datalayout to add three address spaces for 32 bit signed,"
This reverts commit r370083 because it caused check-lld failures on
sanitizer-x86_64-linux-fast.

llvm-svn: 370142
2019-08-28 01:08:54 +00:00
Amy Huang
1299945b81 Change the X86 datalayout to add three address spaces for 32 bit signed,
32 bit unsigned, and 64 bit pointers.

llvm-svn: 370083
2019-08-27 17:46:53 +00:00
Alexander Kornienko
8b92ec521d [lld] A better version of the fix in r359942.
Thanks to George Rimar for the suggestion.

llvm-svn: 360040
2019-05-06 12:11:30 +00:00
Alexander Kornienko
3f796f974d [lld] Specify output file explicitly
The test shouldn't try to create `a.out` in the current directory, which can be
read-only (and it is in our test setup).

llvm-svn: 359942
2019-05-03 23:11:32 +00:00
Fangrui Song
0178cff279 [ELF] --plugin-opt=thinlto-index-only: create empty index files even if all bitcode files are lazy
Summary:
The gold plugin behavior (creating empty index files for lazy bitcode
files) was added in D46034, but it missed the case when there is no
non-lazy bitcode files, e.g.

    ld.lld -shared crti.o crtbeginS.o --start-lib bitcode.o --end-lib ...

crti.o crtbeginS.o are not bitcode, but our distributed build system
wants bitcode.o.thinlto.bc to confirm all expected outputs are created
based on all of the modules provided to the linker.

Differential Revision: https://reviews.llvm.org/D61420

llvm-svn: 359788
2019-05-02 14:05:20 +00:00
Fangrui Song
d8c2fa99c1 [ELF] Delete a cant-write test from test/lto/thinlto-index-only.ll
The test is performed by thinlto-cant-write-index.ll

llvm-svn: 359769
2019-05-02 09:29:24 +00:00
George Rimar
889a161b4f [ELF] - Test LLD creates empty .imports file.
This covers the following code line with a test:
https://github.com/llvm-mirror/lld/blob/master/ELF/LTO.cpp#L213

After that, coverage of LTO.cpp is 100%.

llvm-svn: 336342
2018-07-05 12:23:37 +00:00
George Rimar
72ceddab7b [ELF] - Add test to check we produce an error if unable to write an empty index file.
Test case ensures lld generates an error if unable to
write an empty index file for lazy object file that is not added to link.

This covers the following line with a test:
https://github.com/llvm-mirror/lld/blob/master/ELF/LTO.cpp#L206

llvm-svn: 336340
2018-07-05 12:12:30 +00:00
George Rimar
6906f4ec9c [ELF] - LTO: add test for createEmptyIndex.
We have a following comment for createEmptyIndex caller code:

// If LazyObjFile has not been added to link, emit empty index files.
// This is needed because this is what GNU gold plugin does and we have a
// distributed build system that depends on that behavior.
  
Though createEmptyIndex() itself
(https://github.com/llvm-mirror/lld/blob/master/ELF/LTO.cpp#L202)
is never called in our test cases. 

Patch adds a test.

llvm-svn: 336270
2018-07-04 13:36:45 +00:00
Sam Clegg
3d63a409a0 [ELF] Remove -m argument to lld in test files. NFC.
This should be correctly implied by the linker.

This also makes the tests slightly easier to maintain and compare
with the equivalent tests under for other platforms.

Differential Revision: https://reviews.llvm.org/D47513

llvm-svn: 333567
2018-05-30 17:57:08 +00:00
Rumeet Dhindsa
ebb7f5c71a Update input file in test
llvm-svn: 332139
2018-05-11 20:50:27 +00:00
Rumeet Dhindsa
2ef385e150 Update test to not check for output file
Differential Revision: https://reviews.llvm.org/D46771

llvm-svn: 332134
2018-05-11 20:28:45 +00:00
Rumeet Dhindsa
304d0d5560 Splitting thinlto.ll test file and renaming other test files.
Differential Revision: https://reviews.llvm.org/D46731

llvm-svn: 332128
2018-05-11 19:37:08 +00:00