bool is_dead(const std::vector<uint16_t>& uses, Instruction *instr)
{
- if (instr->definitions.empty())
+ if (instr->definitions.empty() || instr->format == Format::PSEUDO_BRANCH)
return false;
if (std::any_of(instr->definitions.begin(), instr->definitions.end(),
[&uses] (const Definition& def) { return uses[def.tempId()];}))
return false;
- return instr_info.is_atomic[(int)instr->opcode];
+ return !(get_sync_info(instr).semantics & (semantic_volatile | semantic_acqrel));
}
std::vector<uint16_t> dead_code_analysis(Program *program) {