This is a common pattern from HLSL->SPIRV translation and supported in HW by all current NIR backends. vkpipeline-db results anv (SKL): total instructions in shared programs:tags/19.1-branchpoint6403130
->6402380
(-0.01%) instructions in affected programs: 204084 -> 203334 (-0.37%) helped: 208 HURT: 0 total cycles in shared programs:1915629582
->1918198408
(0.13%) cycles in affected programs:1158892682
->1161461508
(0.22%) helped: 107 HURT: 86 shader-db results on i965 (KBL): total instructions in shared programs:15284592
->15284568
(<.01%) instructions in affected programs: 81683 -> 81659 (-0.03%) helped: 24 HURT: 0 total cycles in shared programs:375013622
->375013932
(<.01%) cycles in affected programs:40169618
->40169928
(<.01%) helped: 13 HURT: 9 Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
@@ -552,6 +552,11 @@ optimizations = [ | |||
(('ine', ('ineg', ('b2i', 'a@1')), -1), ('inot', a)), | |||
(('iand', ('ineg', ('b2i', a)), 1.0), ('b2f', a)), | |||
# SM5 32-bit shifts are defined to use the 5 least significant bits | |||
(('ishl', 'a@32', ('iand', 31, b)), ('ishl', a, b)), | |||
(('ishr', 'a@32', ('iand', 31, b)), ('ishr', a, b)), | |||
(('ushr', 'a@32', ('iand', 31, b)), ('ushr', a, b)), | |||
# Conversions | |||
(('i2b32', ('b2i', 'a@32')), a), | |||
(('f2i', ('ftrunc', a)), ('f2i', a)), |