[Bug target/95524] Subtimal codegen for shift by constant for v16qi/v32qi under -march=skylake
crazylht at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Jun 15 13:16:02 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95524
--- Comment #3 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Hongtao.liu from comment #0)
> icc has
> ---
> ashift(char __vector(16)):
> vpsllw xmm1, xmm0, 5 #9.16
> vpand xmm0, xmm1, XMMWORD PTR .L_2il0floatpacket.0[rip] #9.16
> ret #9.16
> ashift2(char __vector(32), char __vector(32)):
> vpsllw ymm2, ymm0, 5 #15.16
> vpand ymm0, ymm2, YMMWORD PTR .L_2il0floatpacket.1[rip] #15.16
> ret #15.16
> ashiftrt(char __vector(16)):
> vpsrlw xmm1, xmm0, 5 #21.16
> vpand xmm0, xmm1, XMMWORD PTR .L_2il0floatpacket.2[rip] #21.16
> ret #21.16
> arshiftrt2(char __vector(32)):
> vpsrlw ymm1, ymm0, 5 #27.16
> vpand ymm0, ymm1, YMMWORD PTR .L_2il0floatpacket.3[rip] #27.16
> ret #27.16
> .long
>
ICC seems to generate inaccurate instructions for ashiftrt, but clang is right,
still better than gcc, refer to https://godbolt.org/z/ttV5xY
More information about the Gcc-bugs
mailing list