Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ssa): Basic control dependent LICM #7660

Draft
wants to merge 31 commits into
base: mv/post-dominator-tree
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b550828
control dependent LICM, only checking whether there are any condition…
vezenovm Mar 11, 2025
f386653
Merge branch 'mv/post-dominator-tree' into mv/control-dep-licm
vezenovm Mar 11, 2025
0d8a0b2
revert test change
vezenovm Mar 11, 2025
38e12f2
Merge remote-tracking branch 'origin/mv/control-dep-licm' into mv/con…
vezenovm Mar 11, 2025
5def442
fixup do_not_hoist_unsafe_div test
vezenovm Mar 11, 2025
2ec7af9
block checking licm control dependence in acir
vezenovm Mar 11, 2025
aa22e24
Merge branch 'mv/post-dominator-tree' into mv/control-dep-licm
vezenovm Mar 11, 2025
3b657b2
store map of predecessors which have been marked control dependent as…
vezenovm Mar 11, 2025
e6e7df6
Merge remote-tracking branch 'origin/mv/control-dep-licm' into mv/con…
vezenovm Mar 11, 2025
2c03c57
Merge branch 'mv/post-dominator-tree' into mv/control-dep-licm
vezenovm Mar 11, 2025
86a391b
still block control dep checks on acir and add comments
vezenovm Mar 11, 2025
73e84eb
move where current_block_control_dependent is set to false
vezenovm Mar 11, 2025
f67e288
current_block_control_dependent always true for acir
vezenovm Mar 11, 2025
e084871
ugh bumping noir_bigcurve timeout
vezenovm Mar 11, 2025
60a01ba
more
vezenovm Mar 11, 2025
57f2864
Merge branch 'mv/post-dominator-tree' into mv/control-dep-licm
vezenovm Mar 11, 2025
536e1a5
rev order we check blocks between preheader and block that may be con…
vezenovm Mar 12, 2025
ae69d80
try to reduce bigcurve timeout
vezenovm Mar 12, 2025
bbee154
Merge branch 'mv/post-dominator-tree' into mv/control-dep-licm
vezenovm Mar 12, 2025
4e9a828
use reverse dom frontiers to move from n^2 control dep check to n
vezenovm Mar 12, 2025
870b669
clippy
vezenovm Mar 12, 2025
1bc58e8
just check dom frontiers and not control dep blocks map
vezenovm Mar 12, 2025
571fa37
one more clippy
vezenovm Mar 12, 2025
5784c62
big curve timeout back to 250
vezenovm Mar 12, 2025
c4e7937
expand instructions that can be hoisted with same predicate in licm
vezenovm Mar 12, 2025
90e9a99
fix licm unit tests
vezenovm Mar 12, 2025
fbebe85
bump timeout
vezenovm Mar 12, 2025
14c8632
dom ffrontier tests
vezenovm Mar 12, 2025
b33626f
improve comments for dom frontiers
vezenovm Mar 12, 2025
096dcb3
add doc comments regarding licm control dep and start checking contro…
vezenovm Mar 12, 2025
61e5f0e
fixup dom frontiers
vezenovm Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions compiler/noirc_evaluator/src/ssa/ir/cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,6 @@ impl ControlFlowGraph {
/// Add a directed edge making `from` a predecessor of `to`.
fn add_edge(&mut self, from: BasicBlockId, to: BasicBlockId) {
let predecessor_node = self.data.entry(from).or_default();
assert!(
predecessor_node.successors.len() < 2,
"ICE: A cfg node cannot have more than two successors"
);
predecessor_node.successors.insert(to);
let successor_node = self.data.entry(to).or_default();
successor_node.predecessors.insert(from);
Expand Down Expand Up @@ -125,7 +121,6 @@ impl ControlFlowGraph {
}

/// Reverse the control flow graph
#[cfg(test)]
pub(crate) fn reverse(&self) -> Self {
let mut reversed_cfg = ControlFlowGraph::default();

Expand Down
8 changes: 4 additions & 4 deletions compiler/noirc_evaluator/src/ssa/ir/dom.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,10 @@ impl DominatorTree {
/// "Simple, Fast Dominator Algorithm."
fn compute_dominator_tree(&mut self, cfg: &ControlFlowGraph, post_order: &PostOrder) {
// We'll be iterating over a reverse post-order of the CFG, skipping the entry block.
let (entry_block_id, entry_free_post_order) = post_order
.as_slice()
.split_last()
.expect("ICE: functions always have at least one block");
let Some((entry_block_id, entry_free_post_order)) = post_order.as_slice().split_last()
else {
return;
};

// Do a first pass where we assign reverse post-order indices to all reachable nodes. The
// entry block will be the only node with no immediate dominator.
Expand Down
Loading
Loading