Nicholas Nethercote
55b6ff8e41
Remove extern crate tracing.
...
`use` is a nicer way of doing things.
2024-05-08 12:52:31 +10:00
Maybe Waffle
523fe2b67b
Add tests for predecessor-aware VecGraph mode
2024-04-18 17:32:42 +00:00
Maybe Waffle
fa134b5e0f
Add graph::depth_first_search_as_undirected
2024-04-15 23:20:52 +00:00
Maybe Waffle
7d2cb3dda7
Make graph::DepthFirstSearch accept G by value
...
It's required for the next commit.
Note that you can still have `G = &H`, since there are implementations of all
the graph traits for references.
2024-04-15 23:20:52 +00:00
Maybe Waffle
86a576528c
Add an opt-in to store incoming edges in VecGraph + some docs
2024-04-15 23:20:52 +00:00
许杰友 Jieyou Xu (Joe)
5580ae9795
Rollup merge of #123934 - WaffleLapkin:graph-mini-refactor, r=fmease
...
`rustc_data_structures::graph` mini refactor
Who doesn't love to breathe dust from the ancient times?
2024-04-15 16:56:18 +01:00
Maybe Waffle
435db9b9bd
Use RPITIT for Successors and Predecessors traits
...
Now with RPITIT instead of GAT!
2024-04-15 13:34:08 +00:00
Maybe Waffle
e8d2221e3b
Make depth_first_search into a standalone function
...
Does not necessarily change much, but we never overwrite it, so I see no reason
for it to be in the `Successors` trait. (+we already have a similar `is_cyclic`)
2024-04-14 16:03:08 +00:00
Maybe Waffle
3124fa9310
Document ControlFlowGraph
2024-04-14 15:53:38 +00:00
Maybe Waffle
f5144938bd
Rename WithNumEdges => NumEdges and WithStartNode => StartNode
2024-04-14 15:51:29 +00:00
Maybe Waffle
0d5fc9bf58
Merge {With,Graph}{Successors,Predecessors} into {Successors,Predecessors}
...
Now with GAT!
2024-04-14 15:48:53 +00:00
Maybe Waffle
398da593a5
Merge WithNumNodes into DirectedGraph
2024-04-14 15:46:40 +00:00
Vadim Petrochenkov
b40ea03f8a
rustc_index: Add a ZERO constant to index types
...
It is commonly used.
2024-04-03 19:06:22 +03:00
Camille GILLOT
f83468c89b
Inline dominator check.
2023-12-31 00:37:45 +00:00
surechen
40ae34194c
remove redundant imports
...
detects redundant imports that can be eliminated.
for #117772 :
In order to facilitate review and modification, split the checking code and
removing redundant imports code into two PR.
2023-12-10 10:56:22 +08:00
Nicholas Nethercote
b12851ce5d
Avoid an unnecessary by_ref.
2023-11-28 14:32:40 +11:00
Nicholas Nethercote
7060fc8327
Replace no_ord_impl with orderable.
...
Similar to the previous commit, this replaces `newtype_index`'s opt-out
`no_ord_impl` attribute with the opt-in `orderable` attribute.
2023-11-22 18:38:17 +11:00
Tomasz Miąsko
b61a6d59e4
Remove unused dominator iterator
2023-10-10 21:39:59 +02:00
Tomasz Miąsko
0528d378b6
Optimize dominators for small path graphs
...
Generalizes the small dominators approach from #107449 .
2023-10-05 23:45:59 +02:00
Tomasz Miąsko
ba694e301c
Remove redundant Dominators::start_node field
2023-10-05 23:45:58 +02:00
Tomasz Miąsko
a8ec7ddf0e
Test immediate dominators using public API
2023-10-05 23:45:58 +02:00
Zalathar
01b67f4b26
coverage: Simplify sorting of coverage spans extracted from MIR
...
Switching to `Ordering::then_with` makes control-flow less complicated, and
there is no need to use `partial_cmp` here.
2023-09-18 23:15:25 +10:00
klensy
3b26b3d1d2
don't use SnapshotVec in Graph implementation, as it looks unused; use Vec instead
2023-08-28 18:59:55 +03:00
Mark Rousskov
cc907f80b9
Re-format let-else per rustfmt update
2023-07-12 21:49:27 -04:00
bors
97d328012b
Auto merge of #111673 - cjgillot:dominator-preprocess, r=cjgillot,tmiasko
...
Preprocess and cache dominator tree
Preprocessing dominators has a very strong effect for https://github.com/rust-lang/rust/pull/111344 .
That pass checks that assignments dominate their uses repeatedly. Using the unprocessed dominator tree caused a quadratic runtime (number of bbs x depth of the dominator tree).
This PR also caches the dominator tree and the pre-processed dominators in the MIR cfg cache.
Rebase of https://github.com/rust-lang/rust/pull/107157
cc `@tmiasko`
2023-05-24 16:18:21 +00:00
Camille GILLOT
7c8f29f02c
Revert spurious changes.
2023-05-18 14:36:13 +00:00
Camille GILLOT
fa8598cb50
Merge DominatorTree and Dominators.
2023-05-17 10:37:29 +00:00
Camille GILLOT
4bbdb64016
Typo.
2023-05-17 10:29:12 +00:00
Camille GILLOT
ae318e3444
Remove outdated comment.
2023-05-17 10:26:04 +00:00
Tomasz Miąsko
aa1267f630
Preprocess dominator tree to answer queries in O(1)
2023-05-17 09:36:12 +00:00
Camille GILLOT
84339a6f05
Process current bucket instead of parent's bucket when starting loop for dominators.
2023-05-15 16:16:34 +00:00
Tomasz Miąsko
f16d2b1629
Start node has no immediate dominator
...
Change the immediate_dominator return type to Option, and use None to
indicate that node has no immediate dominator.
Also fix the issue where the start node would be returned as its own
immediate dominator.
2023-05-14 16:09:58 +02:00
Maybe Waffle
e496fbec92
Split {Idx, IndexVec, IndexSlice} into their own modules
2023-04-24 13:53:35 +00:00
Nilstrieb
81c320ea77
Fix some clippy::complexity
2023-04-09 23:22:14 +02:00
Scott McMurray
a2ee7592d6
Use &IndexSlice instead of &IndexVec where possible
...
All the same reasons as for `[T]`: more general, less pointer chasing, and `&mut IndexSlice` emphasizes that it doesn't change *length*.
2023-04-02 17:35:37 -07:00
John Kåre Alsaker
f60d2eb6c1
Add -Z time-passes-format to allow specifying a JSON output for -Z time-passes
2023-03-21 18:18:25 +01:00
b-naber
8252a6eddf
address review
2023-02-21 21:54:53 +00:00
b-naber
e2bf960fe1
sccs info
2023-02-19 22:12:12 +00:00
Bryan Garza
1bbd655888
Improve efficiency of has_back_edge(...)
2023-01-24 00:01:37 +00:00
Bryan Garza
f9982ea24a
Add comment on cause of panic in dominators algorithm
2023-01-23 23:56:22 +00:00
Yuki Okushi
eae7f947b5
Rollup merge of #107153 - tmiasko:dominates, r=oli-obk
...
Consistently use dominates instead of is_dominated_by
There is a number of APIs that answer dominance queries. Previously they were named either "dominates" or "is_dominated_by". Consistently use the "dominates" form.
No functional changes.
2023-01-23 19:30:02 +09:00
Tomasz Miąsko
955e7fbb16
Consistently use dominates instead of is_dominated_by
...
There is a number of APIs that answer dominance queries. Previously they
were named either "dominates" or "is_dominated_by". Consistently use the
"dominates" form.
No functional changes.
2023-01-21 12:15:02 +01:00
bors
21f6839352
Auto merge of #106976 - tmiasko:borrowck-lazy-dominators, r=cjgillot
...
Lazy dominator tree construction in borrowck
Motivated by the observation that sometimes constructed dominator tree was never queried.
2023-01-21 11:02:29 +00:00
bors
56ee85274e
Auto merge of #106090 - WaffleLapkin:dereffffffffff, r=Nilstrieb
...
Remove some `ref` patterns from the compiler
Previous PR: https://github.com/rust-lang/rust/pull/105368
r? `@Nilstrieb`
2023-01-20 04:52:28 +00:00
Guillaume Gomez
dee88e0fa2
Rollup merge of #107037 - tmiasko:rank, r=oli-obk
...
Fix Dominators::rank_partial_cmp to match documentation
The only use site is also updated accordingly and there is no change in end-to-end behaviour.
2023-01-19 11:19:36 +01:00
Tomasz Miąsko
b8c5821ad8
Fix Dominators::rank_partial_cmp to match documentation
...
The only use site is also updated accordingly and there is no change in
end-to-end behaviour.
2023-01-18 17:11:43 +01:00
Scott McMurray
925dc37313
Stop using BREAK & CONTINUE in compiler
...
Switching them to `Break(())` and `Continue(())` instead.
libs-api would like to remove these constants, so stop using them in compiler to make the removal PR later smaller.
2023-01-17 23:17:51 -08:00
Tomasz Miąsko
7fe68571fa
Lazy dominator tree construction in borrowck
...
Motivated by the observation that sometimes constructed dominator tree
was never queried.
2023-01-17 22:00:41 +01:00
Matthias Krüger
68f12338af
Rollup merge of #104505 - WaffleLapkin:no-double-spaces-in-comments, r=jackh726
...
Remove double spaces after dots in comments
Most of the comments do not have double spaces, so I assume these are typos.
2023-01-17 20:21:25 +01:00
Maybe Waffle
6a28fb42a8
Remove double spaces after dots in comments
2023-01-17 08:09:33 +00:00