mirror of
https://github.com/EmbarkStudios/rust-gpu.git
synced 2024-11-21 22:34:34 +00:00
spirt_passes/reduce: fix long-standing bug involving chained replacements.
This commit is contained in:
parent
7f508ba86c
commit
b3670b2303
@ -235,15 +235,23 @@ pub(crate) fn reduce_in_func(cx: &Context, func_def_body: &mut FuncDefBody) {
|
||||
break;
|
||||
}
|
||||
|
||||
func_def_body.inner_in_place_transform_with(&mut ReplaceValueWith(|v| match v {
|
||||
Value::Const(_) => None,
|
||||
_ => value_replacements
|
||||
.get(&HashableValue(v))
|
||||
.copied()
|
||||
.map(|new| {
|
||||
any_changes = true;
|
||||
new
|
||||
}),
|
||||
func_def_body.inner_in_place_transform_with(&mut ReplaceValueWith(|mut v| {
|
||||
let old = v;
|
||||
loop {
|
||||
match v {
|
||||
Value::Const(_) => break,
|
||||
_ => match value_replacements.get(&HashableValue(v)) {
|
||||
Some(&new) => v = new,
|
||||
None => break,
|
||||
},
|
||||
}
|
||||
}
|
||||
if v != old {
|
||||
any_changes = true;
|
||||
Some(v)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user