• Home
  • Raw
  • Download

Lines Matching refs:inst

42   for (auto& inst : get_module()->types_values()) {  in FindLiveMembers()  local
43 if (inst.opcode() == SpvOpSpecConstantOp) { in FindLiveMembers()
44 switch (inst.GetSingleWordInOperand(kSpecConstOpOpcodeIdx)) { in FindLiveMembers()
46 MarkMembersAsLiveForExtract(&inst); in FindLiveMembers()
60 } else if (inst.opcode() == SpvOpVariable) { in FindLiveMembers()
61 switch (inst.GetSingleWordInOperand(0)) { in FindLiveMembers()
64 MarkPointeeTypeAsFullUsed(inst.type_id()); in FindLiveMembers()
79 [this](const Instruction* inst) { FindLiveMembers(inst); }); in FindLiveMembers() argument
82 void EliminateDeadMembersPass::FindLiveMembers(const Instruction* inst) { in FindLiveMembers() argument
83 switch (inst->opcode()) { in FindLiveMembers()
85 MarkMembersAsLiveForStore(inst); in FindLiveMembers()
89 MarkMembersAsLiveForCopyMemory(inst); in FindLiveMembers()
92 MarkMembersAsLiveForExtract(inst); in FindLiveMembers()
98 MarkMembersAsLiveForAccessChain(inst); in FindLiveMembers()
104 MarkOperandTypeAsFullyUsed(inst, 0); in FindLiveMembers()
107 MarkMembersAsLiveForArrayLength(inst); in FindLiveMembers()
118 MarkStructOperandsAsFullyUsed(inst); in FindLiveMembers()
124 const Instruction* inst) { in MarkMembersAsLiveForStore() argument
129 assert(inst->opcode() == SpvOpStore); in MarkMembersAsLiveForStore()
130 uint32_t object_id = inst->GetSingleWordInOperand(1); in MarkMembersAsLiveForStore()
161 const Instruction* inst) { in MarkMembersAsLiveForCopyMemory() argument
162 uint32_t target_id = inst->GetSingleWordInOperand(0); in MarkMembersAsLiveForCopyMemory()
171 const Instruction* inst) { in MarkMembersAsLiveForExtract() argument
172 assert(inst->opcode() == SpvOpCompositeExtract || in MarkMembersAsLiveForExtract()
173 (inst->opcode() == SpvOpSpecConstantOp && in MarkMembersAsLiveForExtract()
174 inst->GetSingleWordInOperand(kSpecConstOpOpcodeIdx) == in MarkMembersAsLiveForExtract()
177 uint32_t first_operand = (inst->opcode() == SpvOpSpecConstantOp ? 1 : 0); in MarkMembersAsLiveForExtract()
178 uint32_t composite_id = inst->GetSingleWordInOperand(first_operand); in MarkMembersAsLiveForExtract()
182 for (uint32_t i = first_operand + 1; i < inst->NumInOperands(); ++i) { in MarkMembersAsLiveForExtract()
184 uint32_t member_idx = inst->GetSingleWordInOperand(i); in MarkMembersAsLiveForExtract()
203 const Instruction* inst) { in MarkMembersAsLiveForAccessChain() argument
204 assert(inst->opcode() == SpvOpAccessChain || in MarkMembersAsLiveForAccessChain()
205 inst->opcode() == SpvOpInBoundsAccessChain || in MarkMembersAsLiveForAccessChain()
206 inst->opcode() == SpvOpPtrAccessChain || in MarkMembersAsLiveForAccessChain()
207 inst->opcode() == SpvOpInBoundsPtrAccessChain); in MarkMembersAsLiveForAccessChain()
209 uint32_t pointer_id = inst->GetSingleWordInOperand(0); in MarkMembersAsLiveForAccessChain()
219 uint32_t i = (inst->opcode() == SpvOpAccessChain || in MarkMembersAsLiveForAccessChain()
220 inst->opcode() == SpvOpInBoundsAccessChain in MarkMembersAsLiveForAccessChain()
223 for (; i < inst->NumInOperands(); ++i) { in MarkMembersAsLiveForAccessChain()
228 const_mgr->FindDeclaredConstant(inst->GetSingleWordInOperand(i)) in MarkMembersAsLiveForAccessChain()
249 const Instruction* inst, uint32_t in_idx) { in MarkOperandTypeAsFullyUsed() argument
250 uint32_t op_id = inst->GetSingleWordInOperand(in_idx); in MarkOperandTypeAsFullyUsed()
256 const Instruction* inst) { in MarkMembersAsLiveForArrayLength() argument
257 assert(inst->opcode() == SpvOpArrayLength); in MarkMembersAsLiveForArrayLength()
258 uint32_t object_id = inst->GetSingleWordInOperand(0); in MarkMembersAsLiveForArrayLength()
263 used_members_[type_id].insert(inst->GetSingleWordInOperand(1)); in MarkMembersAsLiveForArrayLength()
270 get_module()->ForEachInst([&modified, this](Instruction* inst) { in RemoveDeadMembers() argument
271 switch (inst->opcode()) { in RemoveDeadMembers()
273 modified |= UpdateOpTypeStruct(inst); in RemoveDeadMembers()
281 get_module()->ForEachInst([&modified, this](Instruction* inst) { in RemoveDeadMembers() argument
282 switch (inst->opcode()) { in RemoveDeadMembers()
284 modified |= UpdateOpMemberNameOrDecorate(inst); in RemoveDeadMembers()
287 modified |= UpdateOpMemberNameOrDecorate(inst); in RemoveDeadMembers()
290 modified |= UpdateOpGroupMemberDecorate(inst); in RemoveDeadMembers()
295 modified |= UpdateConstantComposite(inst); in RemoveDeadMembers()
301 modified |= UpdateAccessChain(inst); in RemoveDeadMembers()
304 modified |= UpdateCompsiteExtract(inst); in RemoveDeadMembers()
307 modified |= UpdateCompositeInsert(inst); in RemoveDeadMembers()
310 modified |= UpdateOpArrayLength(inst); in RemoveDeadMembers()
313 switch (inst->GetSingleWordInOperand(kSpecConstOpOpcodeIdx)) { in RemoveDeadMembers()
315 modified |= UpdateCompsiteExtract(inst); in RemoveDeadMembers()
318 modified |= UpdateCompositeInsert(inst); in RemoveDeadMembers()
337 bool EliminateDeadMembersPass::UpdateOpTypeStruct(Instruction* inst) { in UpdateOpTypeStruct() argument
338 assert(inst->opcode() == SpvOpTypeStruct); in UpdateOpTypeStruct()
340 const auto& live_members = used_members_[inst->result_id()]; in UpdateOpTypeStruct()
341 if (live_members.size() == inst->NumInOperands()) { in UpdateOpTypeStruct()
347 new_operands.emplace_back(inst->GetInOperand(idx)); in UpdateOpTypeStruct()
350 inst->SetInOperands(std::move(new_operands)); in UpdateOpTypeStruct()
351 context()->UpdateDefUse(inst); in UpdateOpTypeStruct()
355 bool EliminateDeadMembersPass::UpdateOpMemberNameOrDecorate(Instruction* inst) { in UpdateOpMemberNameOrDecorate() argument
356 assert(inst->opcode() == SpvOpMemberName || in UpdateOpMemberNameOrDecorate()
357 inst->opcode() == SpvOpMemberDecorate); in UpdateOpMemberNameOrDecorate()
359 uint32_t type_id = inst->GetSingleWordInOperand(0); in UpdateOpMemberNameOrDecorate()
365 uint32_t orig_member_idx = inst->GetSingleWordInOperand(1); in UpdateOpMemberNameOrDecorate()
369 context()->KillInst(inst); in UpdateOpMemberNameOrDecorate()
377 inst->SetInOperand(1, {new_member_idx}); in UpdateOpMemberNameOrDecorate()
381 bool EliminateDeadMembersPass::UpdateOpGroupMemberDecorate(Instruction* inst) { in UpdateOpGroupMemberDecorate() argument
382 assert(inst->opcode() == SpvOpGroupMemberDecorate); in UpdateOpGroupMemberDecorate()
387 new_operands.emplace_back(inst->GetInOperand(0)); in UpdateOpGroupMemberDecorate()
388 for (uint32_t i = 1; i < inst->NumInOperands(); i += 2) { in UpdateOpGroupMemberDecorate()
389 uint32_t type_id = inst->GetSingleWordInOperand(i); in UpdateOpGroupMemberDecorate()
390 uint32_t member_idx = inst->GetSingleWordInOperand(i + 1); in UpdateOpGroupMemberDecorate()
398 new_operands.emplace_back(inst->GetOperand(i)); in UpdateOpGroupMemberDecorate()
404 new_operands.emplace_back(inst->GetOperand(i + 1)); in UpdateOpGroupMemberDecorate()
413 context()->KillInst(inst); in UpdateOpGroupMemberDecorate()
417 inst->SetInOperands(std::move(new_operands)); in UpdateOpGroupMemberDecorate()
418 context()->UpdateDefUse(inst); in UpdateOpGroupMemberDecorate()
422 bool EliminateDeadMembersPass::UpdateConstantComposite(Instruction* inst) { in UpdateConstantComposite() argument
423 assert(inst->opcode() == SpvOpSpecConstantComposite || in UpdateConstantComposite()
424 inst->opcode() == SpvOpConstantComposite || in UpdateConstantComposite()
425 inst->opcode() == SpvOpCompositeConstruct); in UpdateConstantComposite()
426 uint32_t type_id = inst->type_id(); in UpdateConstantComposite()
430 for (uint32_t i = 0; i < inst->NumInOperands(); ++i) { in UpdateConstantComposite()
435 new_operands.emplace_back(inst->GetInOperand(i)); in UpdateConstantComposite()
438 inst->SetInOperands(std::move(new_operands)); in UpdateConstantComposite()
439 context()->UpdateDefUse(inst); in UpdateConstantComposite()
443 bool EliminateDeadMembersPass::UpdateAccessChain(Instruction* inst) { in UpdateAccessChain() argument
444 assert(inst->opcode() == SpvOpAccessChain || in UpdateAccessChain()
445 inst->opcode() == SpvOpInBoundsAccessChain || in UpdateAccessChain()
446 inst->opcode() == SpvOpPtrAccessChain || in UpdateAccessChain()
447 inst->opcode() == SpvOpInBoundsPtrAccessChain); in UpdateAccessChain()
449 uint32_t pointer_id = inst->GetSingleWordInOperand(0); in UpdateAccessChain()
458 new_operands.emplace_back(inst->GetInOperand(0)); in UpdateAccessChain()
461 if (inst->opcode() == SpvOpPtrAccessChain || in UpdateAccessChain()
462 inst->opcode() == SpvOpInBoundsPtrAccessChain) { in UpdateAccessChain()
463 new_operands.emplace_back(inst->GetInOperand(1)); in UpdateAccessChain()
467 i < inst->NumInOperands(); ++i) { in UpdateAccessChain()
472 const_mgr->FindDeclaredConstant(inst->GetSingleWordInOperand(i)) in UpdateAccessChain()
481 context(), inst, in UpdateAccessChain()
489 new_operands.emplace_back(inst->GetInOperand(i)); in UpdateAccessChain()
499 new_operands.emplace_back(inst->GetInOperand(i)); in UpdateAccessChain()
511 inst->SetInOperands(std::move(new_operands)); in UpdateAccessChain()
512 context()->UpdateDefUse(inst); in UpdateAccessChain()
532 bool EliminateDeadMembersPass::UpdateCompsiteExtract(Instruction* inst) { in UpdateCompsiteExtract() argument
533 assert(inst->opcode() == SpvOpCompositeExtract || in UpdateCompsiteExtract()
534 (inst->opcode() == SpvOpSpecConstantOp && in UpdateCompsiteExtract()
535 inst->GetSingleWordInOperand(kSpecConstOpOpcodeIdx) == in UpdateCompsiteExtract()
539 if (inst->opcode() == SpvOpSpecConstantOp) { in UpdateCompsiteExtract()
542 uint32_t object_id = inst->GetSingleWordInOperand(first_operand); in UpdateCompsiteExtract()
549 new_operands.emplace_back(inst->GetInOperand(i)); in UpdateCompsiteExtract()
551 for (uint32_t i = first_operand + 1; i < inst->NumInOperands(); ++i) { in UpdateCompsiteExtract()
552 uint32_t member_idx = inst->GetSingleWordInOperand(i); in UpdateCompsiteExtract()
582 inst->SetInOperands(std::move(new_operands)); in UpdateCompsiteExtract()
583 context()->UpdateDefUse(inst); in UpdateCompsiteExtract()
587 bool EliminateDeadMembersPass::UpdateCompositeInsert(Instruction* inst) { in UpdateCompositeInsert() argument
588 assert(inst->opcode() == SpvOpCompositeInsert || in UpdateCompositeInsert()
589 (inst->opcode() == SpvOpSpecConstantOp && in UpdateCompositeInsert()
590 inst->GetSingleWordInOperand(kSpecConstOpOpcodeIdx) == in UpdateCompositeInsert()
594 if (inst->opcode() == SpvOpSpecConstantOp) { in UpdateCompositeInsert()
598 uint32_t composite_id = inst->GetSingleWordInOperand(first_operand + 1); in UpdateCompositeInsert()
606 new_operands.emplace_back(inst->GetInOperand(i)); in UpdateCompositeInsert()
608 for (uint32_t i = first_operand + 2; i < inst->NumInOperands(); ++i) { in UpdateCompositeInsert()
609 uint32_t member_idx = inst->GetSingleWordInOperand(i); in UpdateCompositeInsert()
612 context()->KillInst(inst); in UpdateCompositeInsert()
643 inst->SetInOperands(std::move(new_operands)); in UpdateCompositeInsert()
644 context()->UpdateDefUse(inst); in UpdateCompositeInsert()
648 bool EliminateDeadMembersPass::UpdateOpArrayLength(Instruction* inst) { in UpdateOpArrayLength() argument
649 uint32_t struct_id = inst->GetSingleWordInOperand(0); in UpdateOpArrayLength()
655 uint32_t member_idx = inst->GetSingleWordInOperand(1); in UpdateOpArrayLength()
663 inst->SetInOperand(1, {new_member_idx}); in UpdateOpArrayLength()
664 context()->UpdateDefUse(inst); in UpdateOpArrayLength()
669 const Instruction* inst) { in MarkStructOperandsAsFullyUsed() argument
670 if (inst->type_id() != 0) { in MarkStructOperandsAsFullyUsed()
671 MarkTypeAsFullyUsed(inst->type_id()); in MarkStructOperandsAsFullyUsed()
674 inst->ForEachInId([this](const uint32_t* id) { in MarkStructOperandsAsFullyUsed()