Commit graph

363 commits

Author SHA1 Message Date
beetrees
02195f56c7
Enable tests and compiler-builtins for f16/f128 2025-05-24 13:51:53 +01:00
beetrees
27a9590d3d
Add f16/f128 +/-/*///% support 2025-05-24 13:45:19 +01:00
bjorn3
88c48cd308 Sync from rust 74509131e8 2025-04-30 13:12:22 +00:00
Trevor Gross
daaae11f4d Implement the internal feature cfg_target_has_reliable_f16_f128
Support for `f16` and `f128` is varied across targets, backends, and
backend versions. Eventually we would like to reach a point where all
backends support these approximately equally, but until then we have to
work around some of these nuances of support being observable.

Introduce the `cfg_target_has_reliable_f16_f128` internal feature, which
provides the following new configuration gates:

* `cfg(target_has_reliable_f16)`
* `cfg(target_has_reliable_f16_math)`
* `cfg(target_has_reliable_f128)`
* `cfg(target_has_reliable_f128_math)`

`reliable_f16` and `reliable_f128` indicate that basic arithmetic for
the type works correctly. The `_math` versions indicate that anything
relying on `libm` works correctly, since sometimes this hits a separate
class of codegen bugs.

These options match configuration set by the build script at [1]. The
logic for LLVM support is duplicated as-is from the same script. There
are a few possible updates that will come as a follow up.

The config introduced here is not planned to ever become stable, it is
only intended to replace the build scripts for `std` tests and
`compiler-builtins` that don't have any way to configure based on the
codegen backend.

MCP: https://github.com/rust-lang/compiler-team/issues/866
Closes: https://github.com/rust-lang/compiler-team/issues/866

[1]: 555e1d0386/library/std/build.rs (L84-L186)
2025-04-27 19:58:44 +00:00
Folkert de Vries
0103c583fa
support -Zmin-function-alignment (#1572) 2025-04-21 22:19:19 +02:00
bjorn3
62c72fc381 Sync from rust 092a284ba0 2025-04-14 08:30:14 +00:00
bjorn3
6424f0a7ba Replace trap_unimplemented calls with codegen_panic_nounwind
This will show a backtrace. Also added a reference to
rust-lang/rustc_codegen_cranelift#171 in the unimplemented intrinsic
error message.
2025-04-08 10:26:12 +00:00
Michael Goulet
68dd8b344a Prepend temp files with a string per invocation of rustc 2025-04-07 20:48:40 +00:00
bjorn3
15dbafa81e Merge commit 'ba315abda7' into sync_cg_clif-2025-03-30 2025-03-30 15:43:48 +00:00
bjorn3
4811369acc Sync from rust 78948ac259 2025-03-21 09:46:53 +00:00
bjorn3
2133fb94b7 Disable PIC when jitting
This fixes jitting on non-x86_64 targets.
2025-03-20 15:37:38 +00:00
bjorn3
3270d71cec Remove implicit #[no_mangle] for #[rustc_std_internal_symbol] 2025-03-17 14:08:09 +00:00
bjorn3
11565c3471 Sync from rust 6650252439 2025-03-12 13:02:12 +00:00
bjorn3
5d03df9431 Remove support for the lazy jit mode
I might re-implement it in the future, but would probably do so by
replacing cranelift-jit. cranelift-jit's api doesn't quite work well for
lazy jitting. And even so it adds complexity to cranelift-jit and breaks
cranelift-jit outside of x86_64.
2025-03-05 15:37:10 +00:00
bjorn3
0fcd068bec Refactor the cli of cg_clif 2025-03-05 15:12:57 +00:00
Nicholas Nethercote
157137a64a Change signature of target_features_cfg.
Currently it is called twice, once with `allow_unstable` set to true and
once with it set to false. This results in some duplicated work. Most
notably, for the LLVM backend, `LLVMRustHasFeature` is called twice for
every feature, and it's moderately slow. For very short running
compilations on platforms with many features (e.g. a `check` build of
hello-world on x86) this is a significant fraction of runtime.

This commit changes `target_features_cfg` so it is only called once, and
it now returns a pair of feature sets. This halves the number of
`LLVMRustHasFeature` calls.
2025-03-05 09:49:17 +11:00
bjorn3
d27c67c941 Fix FIXME about unversioned macOS target names 2025-02-26 11:24:41 +00:00
clubby789
66bcca11ed Make -O mean -C opt-level=3 2025-02-13 19:47:55 +00:00
bjorn3
04e580fcc5 Merge commit '8332329f83' into sync_cg_clif-2025-02-07 2025-02-07 20:58:27 +00:00
bjorn3
a2d78f77f4 Merge commit '918acafef6' into sync_cg_clif-2025-01-05 2025-01-05 15:44:46 +00:00
Matthias Krüger
884dcee945 Rollup merge of #134251 - bjorn3:various_cleanups2, r=oli-obk
A bunch of cleanups (part 2)

Just like https://github.com/rust-lang/rust/pull/133567 these were all found while looking at the respective code, but are not blocking any other changes I want to make in the short term.
2024-12-14 03:54:35 +01:00
bjorn3
37b47f9542 Remove jobserver from Session
It is effectively a global resource and the jobserver::Client in Session
was a clone of GLOBAL_CLIENT anyway.
2024-12-13 10:21:22 +00:00
Ralf Jung
8d3a263c79 generalize 'forbidden feature' concept so that even (un)stable feature can be invalid to toggle
Also rename some things for extra clarity
2024-12-11 22:11:15 +01:00
bjorn3
e7e58f4505 Move some timers around 2024-12-06 18:42:30 +00:00
bjorn3
e8ad19987d Merge commit '57845a397e' into sync_cg_clif-2024-12-06 2024-12-06 12:10:30 +00:00
clubby789
a2e9aac905 Replace Symbol::intern calls with preinterned symbols 2024-11-28 15:45:27 +00:00
lcnr
19a8eb2a7f use TypingEnv when no infcx is available
the behavior of the type system not only depends on the current
assumptions, but also the currentnphase of the compiler. This is
mostly necessary as we need to decide whether and how to reveal
opaque types. We track this via the `TypingMode`.
2024-11-18 10:38:56 +01:00
bjorn3
995ccb684b Add a default implementation for CodegenBackend::link
As a side effect this should add raw-dylib support to cg_gcc as the
default ArchiveBuilderBuilder that is used implements
create_dll_import_lib. I haven't tested if the raw-dylib support
actually works however.
2024-11-09 20:42:56 +00:00
bjorn3
df983ce470 Merge commit '1fa693ca44' into sync_cg_clif-2024-11-09 2024-11-09 13:48:06 +00:00
bjorn3
e2a5108657 Merge commit '5b1246bb4b' into sync_cg_clif-2024-11-02 2024-11-02 14:53:30 +00:00
Mads Marquart
322d392d90 Move versioned LLVM target creation to rustc_codegen_ssa
The OS version depends on the deployment target environment variables,
the access of which we want to move to later in the compilation pipeline
that has access to more information, for example `env_depinfo`.
2024-11-01 17:07:18 +01:00
Jubilee Young
e3c154705c cg_clif: rustc_abi::Abi => BackendRepr 2024-10-29 15:01:01 -07:00
Jubilee Young
48504415cf cg_clif: Factor out rustc_target::abi 2024-10-08 18:24:56 -07:00
Michael Goulet
02b0f3b5ab Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
Chris Denton
d7198a541d Always use ar_archive_writer for import libs 2024-08-17 19:10:46 +00:00
bjorn3
0174cb1932 Use ar_archive_writer from sysroot for cg_clif 2024-08-09 17:23:50 +00:00
bjorn3
3ea9313de3 Merge commit '69b3f5a426' into sync_cg_clif-2024-08-09 2024-08-09 17:18:46 +00:00
Nicholas Nethercote
ea9f491696 Reformat use declarations.
The previous commit updated `rustfmt.toml` appropriately. This commit is
the outcome of running `x fmt --all` with the new formatting options.
2024-07-29 08:26:52 +10:00
Mohammad Omidvar
c01fe3ceac Move compiler_builtin check to the use case 2024-07-15 23:43:52 +00:00
bjorn3
5adaed06a0 Merge commit '49cd5dd454' into sync_cg_clif-2024-06-30 2024-06-30 11:28:14 +00:00
Jubilee Young
f1052eb253 cg_clif: Define build opts from FramePointer 2024-06-23 00:36:33 -07:00
Michael Goulet
54aa510c32 Rename InstanceDef -> InstanceKind 2024-06-16 21:35:21 -04:00
Nicholas Nethercote
0b7375f2a0 Use tidy to sort crate attributes for all compiler crates.
We already do this for a number of crates, e.g. `rustc_middle`,
`rustc_span`, `rustc_metadata`, `rustc_span`, `rustc_errors`.

For the ones we don't, in many cases the attributes are a mess.
- There is no consistency about order of attribute kinds (e.g.
  `allow`/`deny`/`feature`).
- Within attribute kind groups (e.g. the `feature` attributes),
  sometimes the order is alphabetical, and sometimes there is no
  particular order.
- Sometimes the attributes of a particular kind aren't even grouped
  all together, e.g. there might be a `feature`, then an `allow`, then
  another `feature`.

This commit extends the existing sorting to all compiler crates,
increasing consistency. If any new attribute line is added there is now
only one place it can go -- no need for arbitrary decisions.

Exceptions:
- `rustc_log`, `rustc_next_trait_solver` and `rustc_type_ir_macros`,
  because they have no crate attributes.
- `rustc_codegen_gcc`, because it's quasi-external to rustc (e.g. it's
  ignored in `rustfmt.toml`).
2024-06-12 15:49:10 +10:00
bjorn3
ed7d97e4c8 Merge commit '3270432f4b' into sync_cg_clif-2024-05-13 2024-05-13 13:26:33 +00:00
Michael Goulet
0a67bf1b8a Make builtin_deref just return a Ty 2024-05-09 22:55:00 -04:00
bjorn3
4ad6c6c581 Merge commit 'de5d652373' into sync_cg_clif-2024-04-23 2024-04-23 09:37:28 +00:00
bjorn3
c5c31447a7 Merge commit '09fae60a86' into sync_cg_clif-2024-03-28 2024-03-28 11:43:35 +00:00
Ben Kimock
e46114fdc8 Handle calls to upstream monomorphizations in compiler_builtins 2024-03-16 15:22:05 -04:00
Nicholas Nethercote
0fd329b96a Make CodegenBackend::join_codegen infallible.
Because they all are, in practice.
2024-02-17 10:51:35 +11:00
Nicholas Nethercote
515ee70efa Invert diagnostic lints.
That is, change `diagnostic_outside_of_impl` and
`untranslatable_diagnostic` from `allow` to `deny`, because more than
half of the compiler has be converted to use translated diagnostics.

This commit removes more `deny` attributes than it adds `allow`
attributes, which proves that this change is warranted.
2024-02-06 13:12:33 +11:00