Commit Graph

381 Commits

Author SHA1 Message Date
bors
1f9a018fa3 Auto merge of #130446 - durin42:llvm-20-fix-CommandLineArgs, r=workingjubilee
rustc_llvm: adapt to flattened CLI args in LLVM

This changed in
llvm/llvm-project@e190d074a0. I decided to stick with more duplication between the ifdef blocks to make the code easier to read for the next two years before we can plausibly drop LLVM 19.

`@rustbot` label: +llvm-main

try-job: x86_64-msvc
2024-09-22 05:26:41 +00:00
Josh Stone
6fd8a50680 Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
Krasimir Georgiev
3a352884f8 llvm-wrapper: adapt for LLVM API changes, second try 2024-09-18 13:23:42 +00:00
Matthias Krüger
f8090dda64
Rollup merge of #130477 - tmandry:revert-llvm-20-lto, r=tmandry
Revert #129749 to fix segfault in LLVM

This reverts commit 8c7a7e346b, reversing changes made to a00bd75b6c.

Reported in https://github.com/rust-lang/rust/pull/129749#issuecomment-2354417960. `@nikic's` theory is that the LLVM API changed in a way that makes it impossible to use concurrently from multiple threads (https://github.com/llvm/llvm-project/pull/106427#issuecomment-2354783802). I pinged `@krasimirgg` who was fine with reverting.

r? `@rust-lang/wg-llvm`
2024-09-17 20:45:51 +02:00
Tyler Mandry
472fef6a70 Revert "Rollup merge of #129749 - krasimirgg:llvm-20-lto, r=nikic"
This reverts commit 8c7a7e346b, reversing
changes made to a00bd75b6c.
2024-09-16 17:11:02 -07:00
Augie Fackler
86d67b7933 PassWrapper: clang-format has spoken 2024-09-16 20:06:50 -04:00
Augie Fackler
ad0ecebf43 rustc_llvm: adapt to flattened CLI args in LLVM
This changed in
llvm/llvm-project@e190d074a0. I decided to
stick with more duplication between the ifdef blocks to make the code
easier to read for the next two years before we can plausibly drop LLVM
19.

@rustbot label: +llvm-main
2024-09-16 19:58:05 -04:00
Augie Fackler
1e68f05109 rustc_llvm: update for llvm/llvm-project@2ae968a0d9
Just a simple header move.

@rustbot label: +llvm-main
2024-09-16 19:53:13 -04:00
Matthias Krüger
8c7a7e346b
Rollup merge of #129749 - krasimirgg:llvm-20-lto, r=nikic
llvm-wrapper: adapt for LLVM API changes

No functional changes intended.

Updates the wrapper for 21eddfac3d.

````@rustbot```` label: +llvm-main
r? ````@nikic````
2024-08-31 14:46:09 +02:00
Guillaume Gomez
d5c40d03dc
Rollup merge of #128970 - DianQK:lint-llvm-ir, r=nikic
Add `-Zlint-llvm-ir`

This flag is similar to `-Zverify-llvm-ir` and allows us to lint the generated IR.

r? compiler
2024-08-29 16:21:47 +02:00
Krasimir Georgiev
9c910e81a4 llvm-wrapper: adapt for LLVM API changes
Updates the wrapper for 21eddfac3d.
2024-08-29 14:08:58 +00:00
DianQK
9589eb95d2
Add -Zlint-llvm-ir 2024-08-29 18:12:31 +08:00
Trevor Gross
9c26ebe32e
Rollup merge of #126985 - Mrmaxmeier:dwarf-embed-source, r=davidtwco
Implement `-Z embed-source` (DWARFv5 source code embedding extension)

Implement https://github.com/rust-lang/compiler-team/issues/764 MCP which adds an unstable flag that exposes LLVM's [DWARFv5 source code embedding](https://dwarfstd.org/issues/180201.1.html) support.
2024-08-27 01:46:49 -05:00
Krasimir Georgiev
b509b4226b llvm-wrapper: adapt for LLVM 20 API changes
No functional changes intended.

Adapts llvm-wrapper for the LLVM commits 0f22d47a7a and d6d8243dcd.
2024-08-21 16:27:31 +00:00
bors
d2b5aa6552 Auto merge of #128936 - bjorn3:fix_thin_archive_reading, r=jieyouxu
Support reading thin archives in ArArchiveBuilder

And switch to using ArArchiveBuilder with the LLVM backend too now that all regressions are fixed.

Fixes https://github.com/rust-lang/rust/issues/107407
Fixes https://github.com/rust-lang/rust/issues/107162
https://github.com/rust-lang/rust/issues/107495 has been fixed in a previous PR already.
2024-08-15 14:13:52 +00:00
bjorn3
901c9daa05 Fix null pointer dereference when a file is not an object file 2024-08-14 19:37:14 +00:00
bjorn3
7c972d75dc Use toString instead of raw_svector_ostream for error messages 2024-08-14 19:26:00 +00:00
Andreas Jonson
cfadfabfcd Add range attribute to scalar function results and arguments 2024-08-11 19:40:44 +02:00
Krasimir Georgiev
00bfd702dc Disable MC/DC tests on LLVM 19
Disable the tests and generate an error if MC/DC is used on LLVM 19.
The support will be ported separately, as it is substantially
different on LLVM 19, and there are no plans to support both
versions.
2024-07-30 10:22:48 +02:00
Mrmaxmeier
0b87af9d4f Add -Z embed-source=yes to embed source code in DWARF debug info 2024-07-29 12:35:36 +02:00
Matthew Maurer
38931cd227 LLVM: LLVM-20.0 removes MMX types
See llvm/llvm-project#98505
2024-07-25 17:58:37 +00:00
Trevor Gross
63f239c89f
Rollup merge of #124033 - bjorn3:ar_archive_writer_0_3_0, r=davidtwco
Sync ar_archive_writer to LLVM 18.1.3

From LLVM 15.0.0-rc3. This adds support for COFF archives containing Arm64EC object files and has various fixes for AIX big archive files.
2024-07-16 16:15:13 -05:00
Nikita Popov
8dfd3a455d Remove LLVMRustDIBuilderInsertDeclareAtEnd return value
The return value changed from an Instruction to a DbgRecord in
LLVM 19. As we don't actually use the result, drop the return
value entirely to support both.
2024-07-12 22:15:10 +02:00
bjorn3
cd3f2f68c0 Fix review comments 2024-07-07 17:08:55 +00:00
bjorn3
72223e205d Fix building on LLVM 17 2024-07-07 17:08:42 +00:00
bjorn3
58e551433d Sync ar_archive_writer to LLVM 18.1.3
From LLVM 15.0.0-rc3. This adds support for COFF archives containing
Arm64EC object files and has various fixes for AIX big archive files.
2024-07-07 16:56:35 +00:00
Trevor Gross
c15a698f56 Rename the asm-comments compiler flag to verbose-asm
Since this codegen flag now only controls LLVM-generated comments rather than
all assembly comments, make the name more accurate (and also match Clang).
2024-07-02 21:42:01 -04:00
Trevor Gross
64a3bd84d8 Always preserve user-written comments in assembly 2024-07-02 21:41:59 -04:00
DianQK
e17c16d55b
Format C++ files in llvm-wrapper 2024-06-26 20:18:49 +08:00
Scott Mabin
b37a448616 Teach rustc about the Xtensa arch. 2024-05-29 13:47:57 +01:00
Augie Fackler
de8200c5a4 thinlto: only build summary file if needed
If we don't do this, some versions of LLVM (at least 17, experimentally)
will double-emit some error messages, which is how I noticed this. Given
that it seems to be costing some extra work, let's only request the
summary bitcode production if we'll actually bother writing it down,
otherwise skip it.
2024-05-23 14:58:30 -04:00
Augie Fackler
aa91871539 rustc_codegen_llvm: add support for writing summary bitcode
Typical uses of ThinLTO don't have any use for this as a standalone
file, but distributed ThinLTO uses this to make the linker phase more
efficient. With clang you'd do something like `clang -flto=thin
-fthin-link-bitcode=foo.indexing.o -c foo.c` and then get both foo.o
(full of bitcode) and foo.indexing.o (just the summary or index part of
the bitcode). That's then usable by a two-stage linking process that's
more friendly to distributed build systems like bazel, which is why I'm
working on this area.

I talked some to @teresajohnson about naming in this area, as things
seem to be a little confused between various blog posts and build
systems. "bitcode index" and "bitcode summary" tend to be a little too
ambiguous, and she tends to use "thin link bitcode" and "minimized
bitcode" (which matches the descriptions in LLVM). Since the clang
option is thin-link-bitcode, I went with that to try and not add a new
spelling in the world.

Per @dtolnay, you can work around the lack of this by using `lld
--thinlto-index-only` to do the indexing on regular .o files of
bitcode, but that is a bit wasteful on actions when we already have all
the information in rustc and could just write out the matching minimized
bitcode. I didn't test that at all in our infrastructure, because by the
time I learned that I already had this patch largely written.
2024-05-22 14:04:22 -04:00
bors
284f94f9c0 Auto merge of #121298 - nikic:writable, r=cuviper
Set writable and dead_on_unwind attributes for sret arguments

Set the `writable` and `dead_on_unwind` attributes for `sret` arguments. This allows call slot optimization to remove more memcpy's.

See https://llvm.org/docs/LangRef.html#parameter-attributes for the specification of these attributes. In short, the statement we're making here is that:

 * The return slot is writable.
 * The return slot will not be read if the function unwinds.

Fixes https://github.com/rust-lang/rust/issues/90595.
2024-04-25 04:31:56 +00:00
Nikita Popov
3695af697e Set writable and dead_on_unwind attributes for sret arguments 2024-04-25 11:43:47 +09:00
许杰友 Jieyou Xu (Joe)
726361caf4
Rollup merge of #124132 - RalfJung:OpBundlesIndirect, r=Mark-Simulacrum
llvm RustWrapper: explain OpBundlesIndirect argument type

Follow-up to https://github.com/rust-lang/rust/pull/123941

r? ``@Mark-Simulacrum``
2024-04-20 21:45:37 +01:00
zhuyunxing
439dbfa1ec coverage. Lowering MC/DC statements to llvm-ir 2024-04-20 00:34:40 +08:00
zhuyunxing
cf6b6cb2b4 coverage. Generate Mappings of decisions and conditions for MC/DC 2024-04-19 17:09:26 +08:00
Ralf Jung
61def018c1 llvm RustWrapper: explain OpBundlesIndirect argument type 2024-04-18 21:43:52 +02:00
Daniel Paoliello
32f5ca4be7 Add support for Arm64EC to the Standard Library 2024-04-15 16:05:16 -07:00
Mark Rousskov
bf3deccdad Fix UB in LLVM FFI when passing zero or >1 bundle
Rust passes a *const &OperandBundleDef to these APIs, usually from a
Vec<&OperandBundleDef> or so. Previously we were dereferencing that
pointer and passing it to the ArrayRef constructor with some length (N).

This meant that if the length was 0, we were dereferencing a pointer to
nowhere, and if the length was >1 then loading the *second* element
somewhere in LLVM would've been reading past the end.

Since Rust can't hold OperandBundleDef by-value we're forced to indirect
through a vector that copies out the OperandBundleDefs from the
by-reference list on the Rust side in order to match the LLVM expected
API.
2024-04-14 22:18:33 -04:00
Matthias Krüger
2ddf984594
Rollup merge of #123612 - kxxt:riscv-target-abi, r=jieyouxu,nikic,DianQK
Set target-abi module flag for RISC-V targets

Fixes cross-language LTO on RISC-V targets (Fixes #121924)
2024-04-10 04:27:40 +02:00
Levi Zim
33db20978e Pass value and valueLen to create a StringRef
Instead of creating a cstring.

Co-authored-by: LoveSy <shana@zju.edu.cn>
2024-04-09 08:53:11 +02:00
kxxt
f19c48e7a8 Set target-abi module flag for RISC-V targets
Fixes cross-language LTO on RISC-V targets (Fixes #121924)
2024-04-09 05:25:51 +02:00
Matthias Krüger
a38911a876
Rollup merge of #123591 - Zalathar:useless-cast, r=cuviper
Remove unnecessary cast from `LLVMRustGetInstrProfIncrementIntrinsic`

(Noticed while reviewing #123409.)

This particular cast appears to have been copied over from clang, but there are plenty of other call sites in clang that don't bother with a cast here, and it works fine without one.

For context, `llvm::Intrinsic::ID` is a typedef for `unsigned`, and `llvm::Intrinsic::instrprof_increment` is a member of `enum IndependentIntrinsics : unsigned`.

---

The formatting change in `unwrap(M)` is the result of manually running `clang-format` on this file, and then reverting all changes other than the ones affecting these lines.
2024-04-08 22:06:23 +02:00
Matthias Krüger
98fbf86af9
Rollup merge of #122807 - danielhuang:fix-1, r=davidtwco
Add consistency with phrases "meantime" and "mean time"

"mean time" is used in a few places while "meantime" is used everywhere else; this would make usage consistent throughout the codebase.
2024-04-08 14:31:10 +02:00
Zalathar
e38dfc4961 Remove unnecessary cast from LLVMRustGetInstrProfIncrementIntrinsic
This particular cast appears to have been copied over from clang, but there are
plenty of other call sites in clang that don't bother with a cast here, and it
works fine without one.

For context, `llvm::Intrinsic::ID` is a typedef for `unsigned`, and
`llvm::Intrinsic::instrprof_increment` is a member of
`enum IndependentIntrinsics : unsigned`.
2024-04-07 21:27:53 +10:00
Jacob Pratt
daef0fd878
Rollup merge of #123437 - Zalathar:clang-format, r=cuviper
Manually run `clang-format` on `CoverageMappingWrapper.cpp`

In the current version of #123409, there are several unrelated changes to `CoverageMappingWrapper.cpp` that seem to be the result of running `clang-format` on that file.

Instead of asking for those changes to be undone, I figure it's easier to just make them myself as a separate PR, since I was vaguely intending to do that at some point anyway.

In a few cases I've strategically added comments to make the grouping of parameters a little nicer, but mostly it doesn't matter much.
2024-04-04 21:16:57 -04:00
Zalathar
f6b97ef5e5 Manually run clang-format on CoverageMappingWrapper.cpp 2024-04-04 10:55:20 +11:00
Dan
19758714ca
update messages 2024-04-03 19:03:12 -04:00
Zalathar
8289dadfbc coverage: Correctly report and check LLVM's coverage mapping version 2024-04-03 09:53:49 +11:00