std::vector<Instruction*> DefUseManager::GetAnnotations(uint32_t id) const { std::vector<Instruction*> annos; const Instruction* def = GetDef(id); if (!def) return annos; ForEachUser(def, [&annos](Instruction* user) { if (IsAnnotationInst(user->opcode())) { annos.push_back(user); } }); return annos; }
bool AggressiveDCEPass::IsTargetDead(Instruction* inst) { const uint32_t tId = inst->GetSingleWordInOperand(0); Instruction* tInst = get_def_use_mgr()->GetDef(tId); if (IsAnnotationInst(tInst->opcode())) { // This must be a decoration group. We go through annotations in a specific // order. So if this is not used by any group or group member decorates, it // is dead. assert(tInst->opcode() == SpvOpDecorationGroup); bool dead = true; get_def_use_mgr()->ForEachUser(tInst, [&dead](Instruction* user) { if (user->opcode() == SpvOpGroupDecorate || user->opcode() == SpvOpGroupMemberDecorate) dead = false; }); return dead; } return IsDead(tInst); }