815 Commits

Author SHA1 Message Date
Tyler Mandry
e5286d9fa6 Convert implied_outlives_bounds to a query 2018-07-21 15:56:44 +03:00
dylan_DPC
a4c0d369b6 add docs 2018-07-21 17:21:04 +05:30
dylan_DPC
dbb756ded7 tidy up 2018-07-20 18:40:52 +05:30
dylan_DPC
4e3339efda move NllLivenessMap and LocalWithRegion to liveness_map 2018-07-20 17:51:34 +05:30
Nicholas Nethercote
798209e78b Speed up SparseBitMatrix.
Using a `BTreeMap` to represent rows in the bit matrix is really slow.
This patch changes things so that each row is represented by a
`BitVector`. This is a less sparse representation, but a much faster
one.

As a result, `SparseBitSet` and `SparseChunk` can be removed.

Other minor changes in this patch.

- It renames `BitVector::insert()` as `merge()`, which matches the
  terminology in the other classes in bitvec.rs.

- It removes `SparseBitMatrix::is_subset()`, which is unused.

- It reinstates `RegionValueElements::num_elements()`, which #52190 had
  removed.

- It removes a low-value `debug!` call in `SparseBitMatrix::add()`.
2018-07-20 15:15:06 +10:00
dylan_DPC
9910dee677 tidy fixes 2018-07-20 00:22:57 +05:30
dylan_DPC
2255786212 left out one field during merge 2018-07-19 23:36:26 +05:30
dylan_DPC
1951a30702 convert LocalWithRegion to Local 2018-07-19 23:18:08 +05:30
dylan_DPC
0819ba9bea mir/mod.rs / visit.rs reverted back to using Local 2018-07-19 23:18:07 +05:30
dylan_DPC
0d847ec1ab add LocalWithRegion NllLivenessMap 2018-07-19 23:18:03 +05:30
Niko Matsakis
43b69c2777 make liveness generic over set of local variables
We used to hardcode that we wanted the liveness of *all* variables.
This can now be configured by selecting an alternative index type
V and providing a (partial) map from locals to that new type V.
2018-07-19 23:15:26 +05:30
dylan_DPC
4b5f0ba8c2 generic shuffle continues 2018-07-19 23:15:25 +05:30
dylan_DPC
d25231f84a use LiveVariableMap as trait bound 2018-07-19 23:15:24 +05:30
dylan_DPC
f2b5583f60 add trait structs and other changes from V to local 2018-07-19 23:15:16 +05:30
dylan_DPC
38c7d1ab7c add generic parameter 2018-07-19 23:14:10 +05:30
bors
025e04e1bc Auto merge of #52190 - davidtwco:issue-52028, r=nikomatsakis
html5ever in the rustc-perf repository is memory-intensive

Part of #52028. Rebased atop of #51987.

r? @nikomatsakis
2018-07-17 11:31:53 +00:00
David Wood
8b94d1605b Generate region values directly to reduce memory usage.
Also modify `SparseBitMatrix` so that it does not require knowing the
dimensions in advance, but instead grows on demand.
2018-07-16 23:46:14 -04:00
csmoe
19730cc996 Fix tidy 2018-07-16 15:09:17 +02:00
csmoe
f12eca47e0 TyKind 2018-07-16 15:09:17 +02:00
bors
bce32b532d Auto merge of #51987 - nikomatsakis:nll-region-infer-scc, r=pnkfelix
nll experiment: compute SCCs instead of iterative region solving

This is an attempt to speed up region solving by replacing the current iterative dataflow with a SCC computation. The idea is to detect cycles (SCCs) amongst region constraints and then compute just one value per cycle. The graph with all cycles removed is of course a DAG, so we can then solve constraints "bottom up" once the liveness values are known.

I kinda ran out of time this morning so the last commit is a bit sloppy but I wanted to get this posted, let travis run on it, and maybe do a perf run, before I clean it up.
2018-07-13 13:28:55 +00:00
Niko Matsakis
6918c17048 nit: fix typo 2018-07-13 01:29:10 -04:00
Niko Matsakis
3f90bbc556 dump scc graphviz too 2018-07-13 01:29:10 -04:00
Niko Matsakis
d5e77a3c75 impl graphviz trait for a newtype of regioncx 2018-07-13 01:29:10 -04:00
Niko Matsakis
ed36698031 compute region values using SCCs not iterative flow
The strategy is this:

- we compute SCCs once all outlives constraints are known
- we allocate a set of values **per region** for storing liveness
- we allocate a set of values **per SCC** for storing the final values
- when we add a liveness constraint to the region R, we also add it
  to the final value of the SCC to which R belongs
- then we can apply the constraints by just walking the DAG for the
  SCCs and union'ing the children (which have their liveness
  constraints within)

There are a few intermediate refactorings that I really ought to have
broken out into their own commits:

- reverse the constraint graph so that `R1: R2` means `R1 -> R2` and
  not `R2 -> R1`. This fits better with the SCC computation and new
  style of inference (`->` now means "take value from" and not "push
  value into")
  - this does affect some of the UI tests, since they traverse the
    graph, but mostly the artificial ones and they don't necessarily
    seem worse
- put some things (constraint set, etc) into `Rc`. This lets us root
  them to permit mutation and iteration. It also guarantees they don't
  change, which is critical to the correctness of the algorithm.
- Generalize various helpers that previously operated only on points
  to work on any sort of region element.
2018-07-13 01:29:10 -04:00
Niko Matsakis
862c0dd851 make RegionValues generic over its domain
We used to store one value per RegionVid; we will soon be storing one
value per SCC.
2018-07-12 00:38:40 -04:00
Niko Matsakis
90c90ba542 rename control_flow_graph to graph 2018-07-12 00:38:40 -04:00
Niko Matsakis
5fa240e96a rename constraint_set to constraints
also promote to its own directory, make local to nll
2018-07-12 00:38:40 -04:00
Niko Matsakis
d54e7e32b2 introduce ConstraintGraph, stop mutating constraints in place
Encapsulate the dependencies more cleanly.
2018-07-12 00:38:38 -04:00
Niko Matsakis
8fa24bbc57 generate reborrow constraints at type check time 2018-07-12 00:32:42 -04:00
Niko Matsakis
fbb7306347 fix debug! 2018-07-12 00:28:34 -04:00
Niko Matsakis
a6adb1ebff find and highlight the & or '_ in region_name 2018-07-09 00:20:36 -04:00
Niko Matsakis
727f01700b write code to extract region names and emit new style message 2018-07-04 05:09:33 -04:00
Niko Matsakis
fa02d68eec universal_regions: rustfmt 2018-07-03 18:10:08 -04:00
Niko Matsakis
8b3ce9ca68 always create a category, even it is just "boring" 2018-07-03 18:10:08 -04:00
Niko Matsakis
aae177e005 promote error-reporting to a module 2018-07-03 18:10:08 -04:00
Niko Matsakis
dddd4075b1 generalize find_constraint_paths_between_regions 2018-07-03 18:10:08 -04:00
Niko Matsakis
09f431fad5 simplify and cleanup error-reporting walk code 2018-07-03 18:10:08 -04:00
Niko Matsakis
ea0224f5ab error_report: rustfmt 2018-07-03 18:10:08 -04:00
bors
64f8ae08fd Auto merge of #51889 - spastorino:make-causal-tracking-lazy, r=nikomatsakis
Make causal tracking lazy

Closes #51710

r? @nikomatsakis
2018-07-03 09:08:58 +00:00
bors
9363342be9 Auto merge of #51896 - nikomatsakis:nll-liveness-dirty-list, r=Zoxc
introduce dirty list to liveness, eliminate `ins` vector

At least in my measurements, this seems to knock much of the liveness computation off the profile.

r? @Zoxc
cc @nnethercote
2018-07-02 18:09:20 +00:00
Santiago Pastorino
71f25b408d
Run rustfmt 2018-07-01 20:46:07 -03:00
Santiago Pastorino
0957ede502
Make causal tracking lazy 2018-07-01 20:46:07 -03:00
Santiago Pastorino
24f91e8782
Move find_use stuff to it's own file 2018-07-01 20:46:07 -03:00
Santiago Pastorino
b2d16f3b96
let add_element return by itself 2018-07-01 20:46:07 -03:00
David Wood
15aad83560
Fix infinite loops when regions are self-referential. 2018-07-01 16:14:26 +01:00
Niko Matsakis
f334a9e8dd
WIP boring() long line 2018-07-01 16:14:26 +01:00
David Wood
a11245f80e
Ensure that changed errors are lower case. 2018-07-01 16:14:25 +01:00
David Wood
e01e883e4f
Introduce new categories and show a reasonable error message. 2018-07-01 16:14:25 +01:00
David Wood
27ce0cca8e
Moved region inference error reporting into own module. 2018-07-01 16:14:21 +01:00
David Wood
58a723209d
Switched to while let in DFS and deriving Ord on ConstraintCategory. 2018-07-01 15:34:47 +01:00