In DCEInst, it is possible that the same instruction ends up in the
queue multiple times, if the same id is used multiple times in the
same instruction.
The solution is to keep the ids in a set, to ensure no duplication in
the list.
}
void MemPass::DCEInst(ir::Instruction* inst,
- const function<void(ir::Instruction * )>& call_back) {
+ const function<void(ir::Instruction*)>& call_back) {
std::queue<ir::Instruction*> deadInsts;
deadInsts.push(inst);
while (!deadInsts.empty()) {
continue;
}
// Remember operands
- std::vector<uint32_t> ids;
- di->ForEachInId([&ids](uint32_t* iid) { ids.push_back(*iid); });
+ std::set<uint32_t> ids;
+ di->ForEachInId([&ids](uint32_t* iid) { ids.insert(*iid); });
uint32_t varId = 0;
// Remember variable if dead load
if (di->opcode() == SpvOpLoad) (void)GetPtr(di, &varId);