MCPcopy Create free account
hub / github.com/KhronosGroup/SPIRV-Tools / RemoveLoop

Method RemoveLoop

source/opt/loop_descriptor.cpp:1002–1026  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1000}
1001
1002void LoopDescriptor::RemoveLoop(Loop* loop) {
1003 Loop* parent = loop->GetParent() ? loop->GetParent() : &placeholder_top_loop_;
1004 parent->nested_loops_.erase(std::find(parent->nested_loops_.begin(),
1005 parent->nested_loops_.end(), loop));
1006 std::for_each(
1007 loop->nested_loops_.begin(), loop->nested_loops_.end(),
1008 [loop](Loop* sub_loop) { sub_loop->SetParent(loop->GetParent()); });
1009 parent->nested_loops_.insert(parent->nested_loops_.end(),
1010 loop->nested_loops_.begin(),
1011 loop->nested_loops_.end());
1012 for (uint32_t bb_id : loop->GetBlocks()) {
1013 Loop* l = FindLoopForBasicBlock(bb_id);
1014 if (l == loop) {
1015 SetBasicBlockToLoop(bb_id, l->GetParent());
1016 } else {
1017 ForgetBasicBlock(bb_id);
1018 }
1019 }
1020
1021 LoopContainerType::iterator it =
1022 std::find(loops_.begin(), loops_.end(), loop);
1023 assert(it != loops_.end());
1024 delete loop;
1025 loops_.erase(it);
1026}
1027
1028} // namespace opt
1029} // namespace spvtools

Callers 1

FuseMethod · 0.80

Calls 7

findFunction · 0.85
GetParentMethod · 0.45
eraseMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
SetParentMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected