use crate::records::ir_block::IrBlock;
use crate::records::ir_function::IrFunction;
use crate::records::remove_dead_store_state::RemoveDeadStoreState;
use crate::records::store_reg_info::StoreRegInfo;
impl RemoveDeadStoreState {
pub fn check_live_outs(&mut self, block: &IrBlock) {
let function: *mut IrFunction = self.function;
let index = unsafe { (*function).get_block_index(block) };
if (index as usize) < unsafe { (*function).cfg.out.len() } {
let max_reg = self.max_reg;
for i in 0..=max_reg {
let out = unsafe { &(&(*function).cfg.out)[index as usize] };
let is_out = (out.regs[i as usize / 64] & (1u64 << (i as usize % 64))) != 0
|| (out.vararg_seq && i >= out.vararg_start as i32);
if !is_out {
let captured = (unsafe { (*function).cfg.captured.regs[i as usize / 64] }
& (1u64 << (i as usize % 64)))
!= 0;
if !captured {
let reg_info: &mut StoreRegInfo =
unsafe { &mut *(&mut self.info[i as usize] as *mut StoreRegInfo) };
self.kill_tag_and_value_store_pair(reg_info);
self.kill_t_value_store(reg_info);
}
}
}
}
}
}