Commit Graph

4431 Commits

Author SHA1 Message Date
Mark Rousskov
9ddcc59411 Omit non-needs_drop drop_in_place in vtables
This replaces the drop_in_place reference with null in vtables. On
librustc_driver.so, this drops about ~17k dynamic relocations from the
output, since many vtables can now be placed in read-only memory, rather
than having a relocated pointer included.

This makes a tradeoff by adding a null check at vtable call sites.
That's hard to avoid without changing the vtable format (e.g., to use a
pc-relative relocation instead of an absolute address, and avoid the
dynamic relocation that way). But it seems likely that the check is
cheap at runtime.
2024-05-27 16:26:56 -04:00
Guillaume Gomez
05b1415f18 Rollup merge of #125345 - durin42:thin-link-bitcode, r=bjorn3
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-23 23:39:26 +02:00
bjorn3
ba8c695326 Stop passing --check-cfg to rustc
The standard library now has the right configs in it's Cargo.toml
2024-05-23 12:40:09 +00:00
bjorn3
8bb463ae11 Rustup to rustc 1.80.0-nightly (9cdfe285c 2024-05-22) 2024-05-23 12:25:11 +00:00
bjorn3
cc6c5ecf58 Sync from rust 9cdfe285ca 2024-05-23 12:19:06 +00:00
Augie Fackler
715f2264a9 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
Matthias Krüger
2c219ceb6b Rollup merge of #125266 - workingjubilee:stream-plastic-love, r=RalfJung,nikic
compiler: add simd_ctpop intrinsic

Fairly straightforward addition.

cc `@rust-lang/opsem` new (extremely boring) intrinsic
2024-05-21 12:47:06 +02:00
bjorn3
39daa5a182 Update to Cranelift 0.108 2024-05-20 20:29:45 +00:00
Matthias Krüger
14134c1482 Rollup merge of #125173 - scottmcm:never-checked, r=davidtwco
Remove `Rvalue::CheckedBinaryOp`

Zulip conversation: <https://rust-lang.zulipchat.com/#narrow/stream/189540-t-compiler.2Fwg-mir-opt/topic/intrinsics.20vs.20binop.2Funop/near/438729996>
cc `@RalfJung`

While it's a draft,
r? ghost
2024-05-20 18:13:48 +02:00
Jubilee Young
7a53ba2e76 cg_clif: support simd_ctpop 2024-05-19 18:50:42 -07:00
bjorn3
8cea8a7840 Fix rustc test suite 2024-05-19 13:37:01 +00:00
bjorn3
bff31bdcbc Rustup to rustc 1.80.0-nightly (b1ec1bd65 2024-05-18) 2024-05-19 13:22:06 +00:00
bjorn3
0c204c3a37 Sync from rust b1ec1bd65f 2024-05-19 13:16:07 +00:00
Scott McMurray
6965b4a8bd Remove Rvalue::CheckedBinaryOp 2024-05-17 20:33:02 -07:00
Santiago Pastorino
8aa7112c82 Rename Unsafe to Safety 2024-05-17 18:33:37 -03:00
bjorn3
f0dffd9fab Merge branch 'sync_from_rust' 2024-05-13 13:28:07 +00:00
bjorn3
ed7d97e4c8 Merge commit '3270432f4b0583104c8b9b6f695bf97d6bbf3ac2' into sync_cg_clif-2024-05-13 2024-05-13 13:26:33 +00:00
bjorn3
3270432f4b Rustup to rustc 1.80.0-nightly (ef0027897 2024-05-12) 2024-05-13 13:22:02 +00:00
bjorn3
df88c11867 Use the target cpu from the target spec on x86_64 when -Ctarget-cpu isn't used
Fixes rust-lang/rustc_codegen_cranelift#1148
2024-05-12 18:57:24 +02:00
bjorn3
cba05a7a14 Support naked functions
Fixes rust-lang/rustc_codegen_cranelift#1203
2024-05-12 18:20:14 +02:00
bjorn3
0627c63ad9 Remove polymorphize calls for statics in a couple more places 2024-05-12 18:20:14 +02:00
bjorn3
6db27529dd Significantly reduce check cfg warnings 2024-05-12 12:59:10 +00:00
bjorn3
cfc919f532 Use cargo in y.sh
This will allow adding dependencies to the build system in the future.
2024-05-12 12:59:10 +00:00
bjorn3
2df34f9091
Merge pull request #1490 from folkertdev/add-llvm-x86-crc32
add all `llvm.x86.sse42.crc32.*.*` intrinsics
2024-05-11 22:39:21 +02:00
Folkert
9059a74fd0
test x86 crc intrinsics 2024-05-11 22:23:55 +02:00
bjorn3
1a2c489a93
Merge pull request #1489 from rust-lang/parallel_rustc
Translate MIR to clif ir in parallel with parallel rustc
2024-05-11 22:13:39 +02:00
bjorn3
893ba536bc
Merge pull request #1491 from folkertdev/add-llvm-avx2-permd
add `llvm.x86.avx2.permd` intrinsic
2024-05-11 22:11:53 +02:00
Folkert
4a4535a57c
add llvm.x86.avx2.permd intrinsic 2024-05-11 21:58:25 +02:00
Folkert
e7b6662464
support crc32 with 8-bit and 16-bit inputs, and add crc64 support 2024-05-11 21:44:08 +02:00
Folkert de Vries
7b50189dce
add the llvm.x86.sse42.crc32.32.32 intrinsic (#1488)
* add the `llvm.x86.sse42.crc32.32.32` intrinsic
2024-05-11 21:38:25 +02:00
bjorn3
a167142946 Translate MIR to clif ir in parallel with parallel rustc
On dev-desktop the advantage of cg_clif over cg_llvm on simple-raytracer
is 15% when parallel rustc is disabled. With -Zthreads=16 the advantage
goes from 5% to 22% with this change.
2024-05-11 18:51:59 +00:00
bjorn3
50b34279c3 Split cgus into todo and done before the main module codegen loop 2024-05-11 17:39:51 +00:00
bjorn3
9ee010cc34 Try to workaround gha issue with the caching action 2024-05-11 17:19:46 +00:00
bjorn3
9e4e805488 Avoid ICE on transmuting invalid bools
Fixes rust-lang/rustc_codegen_cranelift#1433
2024-05-11 17:06:43 +00:00
bjorn3
906db0229f Avoid CValue::const_val for discriminants 2024-05-11 17:03:34 +00:00
bjorn3
8cf40c46b2 Don't attempt to polymorphize statics
Fixes rust-lang/rust#124319
2024-05-11 16:36:12 +00:00
bjorn3
f437815d91 Compile for x86_64 on macOS even with an arm64 host
We don't support arm64 on macOS yet.
2024-05-11 14:11:53 +00:00
bjorn3
8fe6e74047 Fix rustc tests 2024-05-11 14:01:29 +00:00
bjorn3
250d0832a1 Rustup to rustc 1.80.0-nightly (6e1d94708 2024-05-10) 2024-05-11 13:51:22 +00:00
bjorn3
6633d66954 Sync from rust 6e1d94708a 2024-05-11 13:37:51 +00:00
Matthias Krüger
80e2a7868e Rollup merge of #124957 - compiler-errors:builtin-deref, r=michaelwoerister
Make `Ty::builtin_deref` just return a `Ty`

Nowhere in the compiler are we using the mutability part of the `TyAndMut` that we used to return.
2024-05-10 16:10:47 +02:00
Michael Goulet
0a67bf1b8a Make builtin_deref just return a Ty 2024-05-09 22:55:00 -04:00
beetrees
617c3f6360 Refactor float Primitives to a separate Float type 2024-05-06 14:56:10 +01:00
bjorn3
4d6ac059e5 Add missing arg for the jit.std_example test 2024-05-03 11:11:58 +00:00
bjorn3
b1ebc55240 Correctly handle missing CG_CLIF_JIT_ARGS 2024-05-03 11:11:39 +00:00
bjorn3
88d10687b0 Remove special case in maybe_create_entry_wrapper 2024-05-03 11:05:31 +00:00
bjorn3
c41a7db24f Fix rustc test suite 2024-05-03 10:15:38 +00:00
bjorn3
18d2fb6e8c Rustup to rustc 1.80.0-nightly (79734f1db 2024-05-02) 2024-05-03 10:01:25 +00:00
bjorn3
05367c5b9e Downgrade XCode to workaround a bug in ld prime 2024-04-28 18:57:28 +00:00
bjorn3
1e485f1bd4 Fix rustc tests 2024-04-28 17:56:08 +00:00