- 05 12月, 2017 5 次提交
-
-
由 bors 提交于
incr.comp.: Incorporate the stable commandline arg hash and SVHs of upstream crates into the SVH. So far the SVH detected changes in the HIR, which is already very sensitive, but in order for `eval_always` queries to also be sensitive to changes in upstream crates, the SVH also needs to capture changes there. This PR fixes [rust-icci/crossbeam](https://travis-ci.org/rust-icci/crossbeam/builds/308936448), but I have not yet been able to come up with a minimal regression test. r? @nikomatsakis
-
由 bors 提交于
NLL: improve inference with flow results, represent regions with bitsets, and more This PR begins with a number of edits to the NLL code and then includes a large number of smaller refactorings (these refactorings ought not to change behavior). There are a lot of commits here, but each is individually simple. The goal is to land everything up to but not including the changes to how we handle closures, which are conceptually more complex. The NLL specific changes are as follows (in order of appearance): **Modify the region inferencer's approach to free regions.** Previously, for each free region (lifetime parameter) `'a`, it would compute the set of other free regions that `'a` outlives (e.g., if we have `where 'a: 'b`, then this set would be `{'a, 'b}`). Then it would mark those free regions as "constants" and report an error if inference tried to extend `'a` to include any other region (e.g., `'c`) that is not in that outlives set. In this way, the value of `'a` would never grow beyond the maximum that could type check. The new approach is to allow `'a` to grow larger. Then, after the fact, we check over the value of `'a` and see what other free regions it is required to outlive, and we check that those outlives relationships are justified by the where clauses in scope etc. **Modify constraint generation to consider maybe-init.** When we have a "drop-live" variable `x` (i.e., a variable that will be dropped but will not be otherwise used), we now consider whether `x` is "maybe initialized" at that point. If not, then we know the drop is a no-op, and we can allow its regions to be dead. Due to limitations in the fragment code, this currently only works at the level of entire variables. **Change representation of regions to use a `BitMatrix`.** We used to use a `BTreeSet`, which was rather silly. We now use a MxN matrix of bits, where `M` is the number of variables and `N` is the number of possible elements in each set (size of the CFG + number of free regions). The remaining commits (starting from extract the `implied_bounds` code into a helper function ") are all "no-op" refactorings, I believe. ~~One concern I have is with the commit "with -Zverbose, print all details of closure substs"; this commit seems to include some "internal" stuff in the mir-dump files, such as internal interner numbers, that I fear may vary by platform. Annoying. I guess we will see.~~ (I removed this commit.) As for reviewer, @arielb1 has been reviewing the PRs, and they are certainly welcome to review this one too. But I figured it'd maybe be good to have more people taking a look and being familiar with this code, so I'll "nominate" @pnkfelix . r? @pnkfelix
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 bors 提交于
Fix invalid docs path for compiler plugins The path to the docs `src/doc/guide-plugin.md` moved to `src/doc/unstable-book/src/language-features/plugin.md`. This patch updates it in the comment of WARNING message of the test code.
-
- 04 12月, 2017 35 次提交
-
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
This has been bugging me. All the regions appear free in the source; the real difference is that some of them are universally quantified (those in the function signature) and some are existentially quantified (those for which we are inferring values).
-
由 Niko Matsakis 提交于
Previously the code was somewhat duplicated.
-
由 Niko Matsakis 提交于
No reason for it to live on `Inherited`.
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
We now visit just the stuff in the CFG, and we add liveness constraints for all the random types, regions etc that appear within rvalues and statements.
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
Now it can be reused by the NLL code.
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
This revealed some shortcomings, one of which is fixed. Fixes #45937.
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
-
由 Zack M. Davis 提交于
This should be more efficient than allocating two BTreeSets for every region variable?—as it is written in #45670.
-
由 Paul Daniel Faria 提交于
In particular, if we see a variable is DROP-LIVE, but it is not MAYBE-INIT, then we can ignore the drop. This leavess attempt to use more complex refinements of the idea (e.g., for subpaths or subfields) to future work.
-
由 Niko Matsakis 提交于
-
由 Kenjiro Nakayama 提交于
-
由 Niko Matsakis 提交于
Rather than declaring some region variables to be constant, and reporting errors when they would have to change, we instead populate each free region X with a minimal set of points (the CFG plus end(X)), and then we let inference do its thing. This may add other `end(Y)` points into X; we can then check after the fact that indeed `X: Y` holds. This requires a bit of "blame" detection to find where the bad constraint came from: we are currently using a pretty dumb algorithm. Good place for later expansion.
-
由 Niko Matsakis 提交于
It will be useful later for diagnostics to be able to remember where things were live.
-
由 bors 提交于
Add an i128_lowering flag in TargetOptions Not actually enabled by default anywhere yet. r? @nagisa cc #45676 @est31
-
由 bors 提交于
Add a specialization of read_exact for Cursor. The read_exact implementation for &[u8] is optimized and usually allows LLVM to reduce a read_exact call for small numbers of bytes to a bounds check and a register load instead of a generic memcpy. On a workload I have that decompresses, deserializes (via bincode), and processes some data, this leads to a 40% speedup by essentially eliminating the deserialization overhead entirely.
-
由 Scott McMurray 提交于
Not actually enabled by default anywhere yet.
-
由 Kyle Huey 提交于
The read_exact implementation for &[u8] is optimized and usually allows LLVM to reduce a read_exact call for small numbers of bytes to a bounds check and a register load instead of a generic memcpy. On a workload I have that decompresses, deserializes (via bincode), and processes some data, this leads to a 40% speedup by essentially eliminating the deserialization overhead entirely.
-
由 bors 提交于
Rollup of 8 pull requests - Successful merges: #45957, #46260, #46432, #46442, #46454, #46462, #46465, #46473 - Failed merges:
-
由 Corey Farwell 提交于
Consistent parameter name for numeric ‘checked’ operations. Some checked operations use `rhs` as a parameter name, and some use `other`. For the sake of consistency, unify everything under the `rhs` name. Fixes https://github.com/rust-lang/rust/issues/46308.
-