-
Timothy Arceri authored
When I implemented opt_if_loop_last_continue() I had restricted this pass from moving other if-statements inside the branch opposite the continue. At the time it was causing extra regisiter pressure in some shaders, however that no longer seems to be an issue. Samuel Pitoiset noticed that making this pass more aggressive significantly improved the performance of Doom on RADV. Below are the statistics he gathered. 28717 shaders in 14931 tests Totals: SGPRS: 1267317 -> 1267549 (0.02 %) VGPRS: 896876 -> 895920 (-0.11 %) Spilled SGPRs: 24701 -> 26367 (6.74 %) Code Size: 48379452 -> 48507880 (0.27 %) bytes Max Waves: 241159 -> 241190 (0.01 %) Totals from affected shaders: SGPRS: 23584 -> 23816 (0.98 %) VGPRS: 25908 -> 24952 (-3.69 %) Spilled SGPRs: 503 -> 2169 (331.21 %) Code Size: 2471392 -> 2599820 (5.20 %) bytes Max Waves: 586 -> 617 (5.29 %) The codesize increases is related to Wolfenstein II. This gives +10% FPS with Doom on my Vega56. Rhys Perry also benchmarked Doom on his VEGA64: Before: 72.53 FPS After: 80.77 FPS shader-db results i965 (SKL): total instructions in shared programs: 15029076 -> 15029877 (<.01%) instructions in affected programs: 493251 -> 494052 (0.16%) helped: 3 HURT: 374 total cycles in shared programs: 263387688 -> 263401720 (<.01%) cycles in affected programs: 30658226 -> 30672258 (0.05%) helped: 3 HURT: 374 total spills in shared programs: 9691 -> 9748 (0.59%) spills in affected programs: 88 -> 145 (64.77%) helped: 0 HURT: 4 total fills in shared programs: 22076 -> 22133 (0.26%) fills in affected programs: 128 -> 185 (44.53%) helped: 0 HURT: 4 LOST: 0 GAINED: 2 Both the gain and spill hurt are in Doom shaders which is similiar to what we see on radeonsi ironically the Doom Vulkan shaders are the most helped by this change. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
0c8b394d