use crate::{Inst, Optimizer};
impl Optimizer {
pub(in crate::optimization) fn elim_store_load(&mut self, insts: Vec<Inst>) -> Vec<Inst> {
let mut new_insts = Vec::with_capacity(insts.len());
let mut iter = insts.into_iter().peekable();
while let Some(inst) = iter.next() {
if let Inst::Store {
src,
dst_ptr,
dst_offset,
} = &inst
&& let Some(Inst::Load {
src_ptr,
src_offset,
dst,
..
}) = iter.peek()
&& dst_ptr == src_ptr
&& dst_offset == src_offset
{
self.value_replace_map.insert(*dst, *src);
iter.next();
}
new_insts.push(inst);
}
new_insts
}
}