Commit Graph

80251 Commits

Author SHA1 Message Date
Nicholas Nethercote
7cc527770d Avoid most allocations in Canonicalizer.
Extra allocations are a significant cost of NLL, and the most common
ones come from within `Canonicalizer`. In particular, `canonical_var()`
contains this code:

    indices
	.entry(kind)
	.or_insert_with(|| {
	    let cvar1 = variables.push(info);
	    let cvar2 = var_values.push(kind);
	    assert_eq!(cvar1, cvar2);
	    cvar1
	})
	.clone()

`variables` and `var_values` are `Vec`s. `indices` is a `HashMap` used
to track what elements have been inserted into `var_values`. If `kind`
hasn't been seen before, `indices`, `variables` and `var_values` all get
a new element. (The number of elements in each container is always the
same.) This results in lots of allocations.

In practice, most of the time these containers only end up holding a few
elements. This PR changes them to avoid heap allocations in the common
case, by changing the `Vec`s to `SmallVec`s and only using `indices`
once enough elements are present. (When the number of elements is small,
a direct linear search of `var_values` is as good or better than a
hashmap lookup.)

The changes to `variables` are straightforward and contained within
`Canonicalizer`. The changes to `indices` are more complex but also
contained within `Canonicalizer`. The changes to `var_values` are more
intrusive because they require defining a new type
`SmallCanonicalVarValues` -- which is to `CanonicalVarValues` as
`SmallVec` is to `Vec -- and passing stack-allocated values of that type
in from outside.

All this speeds up a number of NLL "check" builds, the best by 2%.
2018-07-17 13:42:11 +10:00
bors
960f6046c6 Auto merge of #52152 - fabric-and-ink:edit-file-open-example, r=frewsxcv
Edit code example for File::open

It looked kinda strange and is now aligned with the other examples for `File`.
2018-07-08 16:08:54 +00:00
bors
0e6b713dd5 Auto merge of #52106 - PramodBisht:issue/52049, r=oli-obk
Don't suggest `let` bindings if they don't help with borrows

@oli-obk I have added a condition to address #52049, right now, this is on WIP because I think code change is also required on `error_reporting.rs`. Plus I need to check if any test cases fail.
I will ping you again if everything passes

r? @oli-obk
2018-07-08 14:08:36 +00:00
Fabian Drinck
f580b983b1 Edit code example for File::open 2018-07-08 16:07:09 +02:00
bors
0c0315cfd9 Auto merge of #51955 - zackmdavis:item_semi, r=oli-obk
clarify why we're suggesting removing semicolon after braced items

Previously (issue #46186, pull-request #46258), a suggestion was added
to remove the semicolon after we fail to parse an item, but issue #51603
complains that it's still insufficiently obvious why. Let's add a note.

Resolves #51603.
2018-07-08 02:51:54 +00:00
bors
9342f293e9 Auto merge of #51590 - bjorn3:codegen_llvm_extract, r=alexcrichton
Mostly fix metadata_only backend and extract some code out of rustc_codegen_llvm

Removes dependency on the `ar` crate and removes the `llvm.enabled` config option in favour of setting `rust.codegen-backends` to `[]`.
2018-07-08 00:52:36 +00:00
bors
9fd3d7899a Auto merge of #52132 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 3 pull requests

Successful merges:

 - #52087 (Update musl to 1.1.19 and add patch to fix tls issue)
 - #52107 (removed redundant header file import in rustllvm.h)
 - #52131 (Ship clippy in manifests)

Failed merges:

r? @ghost
2018-07-07 16:21:28 +00:00
Mark Rousskov
cea56a109d
Rollup merge of #52131 - Mark-Simulacrum:ship-clippy, r=kennytm
Ship clippy in manifests

cc @Manishearth
r? @kennytm
2018-07-07 08:27:02 -06:00
Mark Rousskov
f532daa2e5
Rollup merge of #52107 - PramodBisht:feature/52105, r=rkruppe
removed redundant header file import in rustllvm.h

fix #52105
removed redundant header file import in rustllvm.h
cc @wqweto
2018-07-07 08:27:01 -06:00
Mark Rousskov
6cc38a599a
Rollup merge of #52087 - malbarbo:musl-1.1.19, r=alexcrichton
Update musl to 1.1.19 and add patch to fix tls issue

This fixes https://github.com/rust-lang/rust/issues/48967
2018-07-07 08:27:00 -06:00
Mark Rousskov
c98f25b373 Ship clippy in manifests 2018-07-07 08:17:24 -06:00
bors
e44906e80c Auto merge of #52109 - michaelwoerister:ir-objs, r=alexcrichton
When doing linker-plugin based LTO, write LLVM bitcode obj-files instead of embedding the bitcode into the regular object file.

This PR makes the compiler emit LLVM bitcode object files instead of regular object files with the IR embed when compiling for linker-plugin-based LTO. The reasoning for switching the strategy is this:
- Embedding bitcode in a section of the object file actually makes us save bitcode twice in rlibs and Rust dylibs, once for linker-based LTO and once for rustc-based LTO. That's a waste of space.
- When compiling for plugin-based LTO, one usually has no use for the machine code also present in the object file. Generating it is a waste of time.
- When compiling for plugin-based LTO, `rustc` will skip running ThinLTO because the linker will do that anyway. This has the side effect of then generating poorly optimized machine code, which makes it even less useful (and may lead to users not knowing why their code is slow instead of getting an error).
- Not having machine code available makes it impossible for the linker to silently fall back to not inlining stuff across language boundaries.
- This is what Clang does and according to [the documentation](https://llvm.org/docs/BitCodeFormat.html#native-object-file-wrapper-format) is the better supported option.
- The current behavior (minus the runtime performance problems) is still available via `-Z embed-bitcode` (we might want to do this for `libstd` at some point).

r? @alexcrichton
2018-07-07 14:09:49 +00:00
Pramod Bisht
ab767eecb0 Added UI testcases for #52049 2018-07-07 15:51:50 +05:30
bors
5a7e0f8764 Auto merge of #51993 - TheDarkula:master, r=oli-obk
Omitted the walks in visit_expr() and visit_stmt()

@oli-obk
2018-07-07 09:09:43 +00:00
bjorn3
23c0b3b75c Update Cargo.lock 2018-07-07 11:05:21 +02:00
bjorn3
ff12beb875 Revert changes to bootstrap, rustc_driver and fix {core,std}simd 2018-07-07 10:56:07 +02:00
bjorn3
163cb572a4 Hopefully fix it 2018-07-07 10:56:06 +02:00
bjorn3
a5330415aa Only use coresimd when codegen_backend is LLVM 2018-07-07 10:56:06 +02:00
bjorn3
c7c534fa0e Move llvm_target_features back to llvm_util 2018-07-07 10:55:47 +02:00
bjorn3
679743646e Add missing ) to comment 2018-07-07 10:52:32 +02:00
bjorn3
c504d26c1c Move time_graph.rs to rustc/util 2018-07-07 10:52:31 +02:00
bjorn3
c5a6b51e44 Update Cargo.lock and move size_and_align_of_dst back 2018-07-07 10:52:29 +02:00
bjorn3
c61531dc55 Remove unused rustc_driver dependency on ar 2018-07-07 10:52:19 +02:00
bjorn3
b723bc1fa9 Change comment on setting codegen-backend empty 2018-07-07 10:52:19 +02:00
bjorn3
b95ef95776 Add comment about disabling LLVM by setting codegen-backends empty 2018-07-07 10:52:19 +02:00
bjorn3
cd4989ee94 Leave fixme comment 2018-07-07 10:52:18 +02:00
bjorn3
e65db8161d Fix test 2018-07-07 10:52:18 +02:00
bjorn3
097de536e4 Fix metadata_only metadata encoding 2018-07-07 10:52:15 +02:00
bjorn3
d7bc293746 Solve review comment 2018-07-07 10:51:54 +02:00
bjorn3
f44ec6439b Undo unnecessary change 2018-07-07 10:51:54 +02:00
bjorn3
edd6ed571f Fix some errors 2018-07-07 10:51:54 +02:00
bjorn3
95ed511514 Mostly fix compiling without LLVM (with metadata_only backend) 2018-07-07 10:51:51 +02:00
bjorn3
6ceb1637b2 Move some functions out of rustc_codegen_llvm and fix metadata_only backend 2018-07-07 10:47:22 +02:00
bors
599d2c01e0 Auto merge of #52037 - lqd:skipping-regionless-types, r=nikomatsakis
NLL Liveness: Skip regionless types when visiting free regions

The tuple-stress benchmark exercises the liveness constraint generation code for types which do not have regions

Closes #52027
2018-07-07 07:06:14 +00:00
Pramod Bisht
63c3fddc96 removed redundant header file import in rustllvm.h 2018-07-07 09:37:41 +05:30
Pramod Bisht
d5f443d81d Addresses #52049 2018-07-07 09:32:41 +05:30
bors
4f0ca9248f Auto merge of #52123 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 9 pull requests

Successful merges:

 - #51901 (Rc: remove unused allocation and fix segfault in Weak::new())
 - #52058 (Use of unimplemented!() causing ICE with NLL)
 - #52067 (Visit the mir basic blocks in reverse-postfix order)
 - #52083 (Dont run ast borrowck on mir mode)
 - #52099 (fix typo in stable `--edition` error message)
 - #52103 (Stabilize rc_downcast)
 - #52104 (Remove unnecessary feature gate.)
 - #52117 (Dedupe filetime)
 - #52120 (ARM: expose the "mclass" target feature)

Failed merges:

r? @ghost
2018-07-07 03:55:28 +00:00
Mark Rousskov
cd7ddae695
Rollup merge of #52120 - japaric:mclass, r=alexcrichton
ARM: expose the "mclass" target feature

This let us differentiate, in conditional compilation context, between ARM Cortex-M targets, like
the `thumbv*` targets, and other ARM targets, like the ARM Cortex-A Linux targets.

r? @alexcrichton
cc @gnzlbg
cc rust-lang-nursery/stdsimd#437
2018-07-06 21:29:20 -06:00
Mark Rousskov
4784883e52
Rollup merge of #52117 - Eijebong:filetime, r=alexcrichton
Dedupe filetime
2018-07-06 21:29:19 -06:00
Mark Rousskov
f69baa92e4
Rollup merge of #52104 - tmccombs:repr_trans_stable, r=Mark-Simulacrum
Remove unnecessary feature gate.

To fix a warning.
2018-07-06 21:29:18 -06:00
Mark Rousskov
e3823388a8
Rollup merge of #52103 - tmccombs:rc_downcast, r=Mark-Simulacrum
Stabilize rc_downcast

Fixes #44608
2018-07-06 21:29:17 -06:00
Mark Rousskov
9672933639
Rollup merge of #52099 - zackmdavis:and_the_case_of_the_typ, r=oli-obk
fix typo in stable `--edition` error message

(diff is self-explanatory)
2018-07-06 21:29:16 -06:00
Mark Rousskov
54a440b469
Rollup merge of #52083 - spastorino:dont-run-ast-borrowck-on-mir-mode, r=nikomatsakis
Dont run ast borrowck on mir mode

r? @nikomatsakis
2018-07-06 21:29:14 -06:00
Mark Rousskov
ec6bba319b
Rollup merge of #52067 - csmoe:issue-51167, r=nikomatsakis
Visit the mir basic blocks in reverse-postfix order

cc #51167
r? @nikomatsakis
2018-07-06 21:29:13 -06:00
Mark Rousskov
b71b92199c
Rollup merge of #52058 - davidtwco:issue-51345, r=nikomatsakis
Use of unimplemented!() causing ICE with NLL

Fixes #51345.

r? @nikomatsakis
2018-07-06 21:29:12 -06:00
Mark Rousskov
9b3ec57c16
Rollup merge of #51901 - rust-lang:weak-unboxing, r=alexcrichton
Rc: remove unused allocation and fix segfault in Weak::new()

Same as https://github.com/rust-lang/rust/pull/50357 did for `Arc`.

Fixes https://github.com/rust-lang/rust/issues/48493
2018-07-06 21:29:11 -06:00
bors
99b0ddb88a Auto merge of #51656 - soc:topic/fix-home-dir, r=SimonSapin
Deprecate `std::env::home_dir` and fix incorrect documentation

Compare `std::env::home_dir`s claim:

> Returns the value of the 'HOME' environment variable if it is set and not equal to the empty string.

... with its actual behavior:

```
std::env::set_var("HOME", "");
println!("{:?}", std::env::var_os("HOME")); // Some("")
println!("{:?}", std::env::home_dir());     // Some("")
```

The implementation is incorrect in two cases:
- `$HOME` is set, but empty.
- An entry for the user exists in `/etc/passwd`, but it's `pw_dir` is empty.

In both cases Rust considers an empty string to be a valid home directory. This contradicts the documentation, and is wrong in general.
2018-07-07 01:51:08 +00:00
Meade Kincke
f629eb3595 General fixes and cleanup. 2018-07-07 01:09:09 +01:00
Meade Kincke
75bc0649b8 Omitted the walk in visit_expr() 2018-07-07 01:09:09 +01:00
Simon Sapin
67202b8b68 Fix is_dangling import when Arc is #[cfg]’ed out 2018-07-07 01:44:57 +02:00