mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-29 22:41:03 +00:00
1b6cfd3409
Pass now paints live blocks and fixes constant branches and switches as it goes. No longer requires structured control flow. It also removes unreachable blocks as a side effect. It fixes the IR (phis) before doing any code removal (other than terminator changes). Added several unit tests for updated/new functionality. Does not remove dead edge from a phi node: * Checks that incoming edges are live in order to retain them * Added BasicBlock::IsSuccessor * added test Fixing phi updates in the presence of extra backedge blocks * Added tests to catch bug Reworked how phis are updated * Instead of creating a new Phi and RAUW'ing the old phi with it, I now replace the phi operands, but maintain the def/use manager correctly. For unreachable merge: * When considering unreachable continue blocks the code now properly checks whether the incoming edge will continue to be live. Major refactoring for review * Broke into 4 major functions * marking live blocks * marking structured targets * fixing phis * deleting blocks |
||
---|---|---|
.. | ||
spirv-tools |