Commit Graph

1081 Commits

Author SHA1 Message Date
bjorn3
dbee13661e Rustfmt 2020-12-25 12:48:19 +01:00
bjorn3
3f6a3b5ebe Implement lazy compilation in JIT mode
Lazy compilation has the potential to significantly improve the startup
time of a program. While functions have to be codegened when called, it
is expected that a significant amount of all code is only required when
an error occurs or only when the program is used in certain ways.

The basic approach is to first codegen a shim for each function. This
shim calls the `__cg_clif_jit` function of cg_clif with a pointer to the
`Instance` corresponding to the function for which it is a shim.
`__cg_clif_jit` function then codegens this function and uses the hot
code swapping support of SimpleJIT to redirect future calls to the
function to the real version. Finally it calls the newly codegened
function.
2020-12-25 12:08:21 +01:00
bjorn3
0b9b2532d2 Move finalize CodegenCx timer out of codegen mono items timer 2020-12-25 11:49:50 +01:00
bjorn3
20ffea6b8a Change the way JIT mode is selected 2020-12-25 11:31:33 +01:00
bjorn3
c556e4dd35 Use PIC in JIT mode too 2020-12-25 10:55:11 +01:00
bjorn3
dfe6495b60 Sync from rust 28d73a3ee3 2020-12-23 12:27:58 +01:00
Jack Huey
6c1fc324b2 Make BoundRegion have a kind of BoungRegionKind 2020-12-18 15:27:28 -05:00
bjorn3
54ba238a6d Remove implementation of intrinsics that are now lowered
See rust-lang/rust#80040
2020-12-18 11:12:52 +01:00
bjorn3
06e77b979f Sync from rust fee693d08e 2020-12-18 11:06:23 +01:00
bors
a921a476c8 Auto merge of #79945 - jackh726:existential_trait_ref, r=nikomatsakis
Move binder for dyn to each list item

This essentially changes `ty::Binder<&'tcx List<ExistentialTraitRef>>` to `&'tcx List<ty::Binder<ExistentialTraitRef>>`.

This is a first step in moving the `dyn Trait` representation closer to Chalk, which we've talked about in `@rust-lang/wg-traits.`

r? `@nikomatsakis`
2020-12-17 18:21:20 +00:00
bjorn3
0f57e1cf9b Sync from rust caeb3335c0 2020-12-17 16:40:10 +01:00
David Wood
5f6c32af15 cg_clif: fix build with split dwarf
This commit makes minor changes to the cranelift backend so that it can
build given changes in cg_ssa for Split DWARF.

Signed-off-by: David Wood <david@davidtw.co>
2020-12-16 10:33:48 +00:00
bjorn3
44b331047d Also emit vcode when emitting clif ir while using new style backends 2020-12-14 12:54:18 +01:00
bjorn3
3f47f938ba Enable Cranelift optimizations when optimizing
LICM in Cranelift has been fixed recently
2020-12-12 10:38:46 +01:00
bjorn3
f8e22bfb1b Update Cranelift 2020-12-12 10:37:10 +01:00
Jack Huey
42b267d221 Move binder for dyn to each list item 2020-12-11 15:02:46 -05:00
bors
aec0fc58ad Auto merge of #77611 - oli-obk:atomic_miri_leakage, r=nagisa
Directly use raw pointers in `AtomicPtr` store/load

I was unable to find any reason for this limitation in the latest source of LLVM or in the documentation [here](http://llvm.org/docs/Atomics.html#libcalls-atomic).

fixes https://github.com/rust-lang/miri/issues/1574
2020-12-09 19:53:23 +00:00
bjorn3
994b91ac73 Optimize branches when the target is statically known to a jump
This can happen in generic code
2020-12-09 19:55:11 +01:00
bjorn3
5f21ff20b3 Inline codegen_mono_item 2020-12-04 10:19:50 +01:00
bjorn3
d95d03ae8a Support #[repr(simd)] on array wrappers
Complement to rust-lang/rust#78863
2020-12-03 12:59:36 +01:00
oli
7760894d3f Allow cranelift to handle atomic pointers 2020-11-29 14:56:19 +00:00
bjorn3
d404840788 Merge commit '5988bbd24aa87732bfa1d111ba00bcdaa22c481a' into sync_cg_clif-2020-11-27 2020-11-27 20:48:53 +01:00
bjorn3
41047de9e2 Rustfmt 2020-11-23 11:49:06 +01:00
bjorn3
e99f78af08 Make simd_extract panic at runtime on non-const index again
This is necessary to compile packed_simd
2020-11-23 11:48:53 +01:00
bjorn3
d2eeed4ff5 Implement more simd_reduce_* intrinsics 2020-11-23 11:45:41 +01:00
bjorn3
47ff2e0932 Implement float simd comparisons 2020-11-23 11:21:15 +01:00
bjorn3
22c9623604 Implement simd_reduce_{add,mul}_{,un}ordered 2020-11-23 11:09:19 +01:00
bjorn3
c3179bc44b Rustup to rustc 1.50.0-nightly (593fe977a 2020-11-20) 2020-11-21 19:49:51 +01:00
bjorn3
77e90f1cb5 Sync from rust 539402cb0b 2020-11-21 18:43:51 +01:00
Bastian Kauschke
56e63805be update cg_clif 2020-11-16 22:42:09 +01:00
bjorn3
bf94b3819c Rustfmt 2020-11-13 19:02:24 +01:00
bjorn3
753e6bcd5f Sync from rust f2a11a2537 2020-11-13 18:47:37 +01:00
bjorn3
4e547b942d Move some things from codegen_mono_item to trans_fn 2020-11-12 17:08:51 +01:00
bjorn3
db8fa0edfa Inline codegen_mono_items and outline predefine_mono_items 2020-11-12 17:07:02 +01:00
bjorn3
6eaa502049 Update Cranelift for SimpleJIT changes 2020-11-12 11:56:09 +01:00
bjorn3
96c4542dc3 Avoid muliplications by 1
```
Benchmark #1: ./raytracer_cg_clif_pre
  Time (mean ± σ):      9.553 s ±  0.129 s    [User: 9.543 s, System: 0.008 s]
  Range (min … max):    9.438 s …  9.837 s    10 runs

Benchmark #2: ./raytracer_cg_clif_post
  Time (mean ± σ):      9.463 s ±  0.055 s    [User: 9.452 s, System: 0.008 s]
  Range (min … max):    9.387 s …  9.518 s    10 runs

Summary
  './raytracer_cg_clif_post' ran
    1.01 ± 0.01 times faster than './raytracer_cg_clif_pre'
```
2020-11-12 11:09:58 +01:00
Nicholas-Baron
a5ec85758b Changed unwrap_or to unwrap_or_else in some places.
The discussion seems to have resolved that this lint is a bit "noisy" in
that applying it in all places would result in a reduction in
readability.

A few of the trivial functions (like `Path::new`) are fine to leave
outside of closures.

The general rule seems to be that anything that is obviously an
allocation (`Box`, `Vec`, `vec![]`) should be in a closure, even if it
is a 0-sized allocation.
2020-11-10 20:07:47 -08:00
Jonas Schievink
65ae469f8d Rollup merge of #78875 - petrochenkov:cleantarg, r=Mark-Simulacrum
rustc_target: Further cleanup use of target options

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

Implements items 2 and 4 from the list in https://github.com/rust-lang/rust/pull/77729#issue-500228243.

The first commit collapses uses of `target.options.foo` into `target.foo`.

The second commit renames some target options to avoid tautology:
`target.target_endian` -> `target.endian`
`target.target_c_int_width` -> `target.c_int_width`
`target.target_os` -> `target.os`
`target.target_env` -> `target.env`
`target.target_vendor` -> `target.vendor`
`target.target_family` -> `target.os_family`
`target.target_mcount` -> `target.mcount`

r? `@Mark-Simulacrum`
2020-11-10 14:45:21 +01:00
bjorn3
1a32c542ff Update Cranelift 2020-11-09 18:16:08 +01:00
Dylan DPC
806538fa78 Rollup merge of #78674 - tmiasko:inline-substs-for-mir-body, r=oli-obk
inliner: Use substs_for_mir_body

Changes from 68965 extended the kind of instances that are being
inlined. For some of those, the `instance_mir` returns a MIR body that
is already expressed in terms of the types found in substitution array,
and doesn't need further substitution.

Use `substs_for_mir_body` to take that into account.

Resolves #78529.
Resolves #78560.
2020-11-09 01:13:42 +01:00
bjorn3
cf3aa64c66 Better build dir layout
It now matches the layout used by rustc itself
2020-11-08 17:35:59 +01:00
Vadim Petrochenkov
e9c34b3cf8 Collapse all uses of target.options.foo into target.foo
with an eye on merging `TargetOptions` into `Target`.

`TargetOptions` as a separate structure is mostly an implementation detail of `Target` construction, all its fields logically belong to `Target` and available from `Target` through `Deref` impls.
2020-11-08 17:29:13 +03:00
bjorn3
9e1ac29cc9 Fix ICE (part 2) 2020-11-06 21:29:11 +01:00
bjorn3
4da67855f1 Rustfmt 2020-11-06 19:50:30 +01:00
bjorn3
509054d4de Fix ICE 2020-11-06 19:49:33 +01:00
Tomasz Miąsko
f7e11cba36 inliner: Use substs_for_mir_body
Changes from 68965 extended the kind of instances that are being
inlined. For some of those, the `instance_mir` returns a MIR body that
is already expressed in terms of the types found in substitution array,
and doesn't need further substitution.

Use `substs_for_mir_body` to take that into account.
2020-11-06 00:00:00 +00:00
Guillaume Gomez
d6f457d835 Fix even more URLs 2020-11-05 20:11:29 +01:00
oli
6e96e10f93 u64::try_from will now fail if ScalarInt isn't exactly 64 bits, thus we use to_bits with the correct size 2020-11-04 13:59:11 +00:00
oli
5fa1c8f91a u128 truncation and sign extension are not just interpreter related 2020-11-04 13:41:58 +00:00
oli
0dcf78ba87 s/Scalar::Raw/Scalar::Int 2020-11-04 10:11:31 +00:00