use crate::functions::is_gco::is_gco;
use crate::macros::codegen_assert::CODEGEN_ASSERT;
use crate::records::remove_dead_store_state::RemoveDeadStoreState;
use crate::records::store_reg_info::StoreRegInfo;
impl RemoveDeadStoreState {
pub fn flush_gco_regs(&mut self) {
let max_reg = self.max_reg;
for i in 0..=max_reg {
let reg_info: &mut StoreRegInfo =
unsafe { &mut *(&mut self.info[i as usize] as *mut StoreRegInfo) };
if reg_info.maybe_gco {
CODEGEN_ASSERT!(reg_info.known_tag == 0xff || is_gco(reg_info.known_tag));
let tag_used_after = reg_info.tag_inst_idx != !0u32
&& self.has_remaining_uses(reg_info.tag_inst_idx);
let value_used_after = reg_info.value_inst_idx != !0u32
&& self.has_remaining_uses(reg_info.value_inst_idx);
let tvalue_used_after = reg_info.tvalue_inst_idx != !0u32
&& self.has_remaining_uses(reg_info.tvalue_inst_idx);
if tag_used_after || value_used_after || tvalue_used_after {
reg_info.tag_inst_idx = !0u32;
reg_info.value_inst_idx = !0u32;
reg_info.tvalue_inst_idx = !0u32;
}
if luaur_common::FFlag::LuauCodegenVmExitSync.get() {
self.invalidate_value_propagation_store_reg_info(reg_info);
}
reg_info.maybe_gco = false;
}
}
self.has_gco_to_clear = false;
}
}