Skip to content
Snippets Groups Projects
Commit 34f9cfcf authored by rarbore2's avatar rarbore2
Browse files

Merge branch 'fix_fork_split' into 'main'

Possible fix to fork split

See merge request !132
parents 3b491c96 401e1d36
No related branches found
No related tags found
1 merge request!132Possible fix to fork split
Pipeline #201218 passed
......@@ -248,6 +248,14 @@ pub fn reduce_cycles(
for reduce in reduces {
let (join, _, reduct) = function.nodes[reduce.idx()].try_reduce().unwrap();
let fork = join_fork_map[&join];
let isnt_outside_fork_join = |id: NodeID| {
let node = &function.nodes[id.idx()];
node.try_phi()
.map(|(control, _)| control)
.or(node.try_reduce().map(|(control, _, _)| control))
.map(|control| fork_join_nest[&fork].contains(&control))
.unwrap_or(true)
};
// First, find all data nodes that are used by the `reduct` input of the
// reduce, including the `reduct` itself.
......@@ -258,10 +266,7 @@ pub fn reduce_cycles(
for u in get_uses(&function.nodes[item.idx()]).as_ref() {
if !function.nodes[u.idx()].is_control()
&& !use_reachable.contains(u)
&& function.nodes[u.idx()]
.try_phi()
.map(|(control, _)| fork_join_nest[&fork].contains(&control))
.unwrap_or(true)
&& isnt_outside_fork_join(*u)
{
use_reachable.insert(*u);
worklist.push(*u);
......@@ -274,7 +279,10 @@ pub fn reduce_cycles(
let mut worklist = vec![reduce];
while let Some(item) = worklist.pop() {
for u in def_use.get_users(item) {
if !function.nodes[u.idx()].is_control() && !user_reachable.contains(u) {
if !function.nodes[u.idx()].is_control()
&& !user_reachable.contains(u)
&& isnt_outside_fork_join(*u)
{
user_reachable.insert(*u);
worklist.push(*u);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment