https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77633
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Looking at ICC 16.0.2, it uses the same prototypes though, again with _MM_PERM_ENUM as the type of this argument. It is true the AVX512 manual states int rather than _MM_PERM_ENUM, so I don't know what is right. The reason it "works" with -O0 is that for -O0 it uses preprocessor macros rather than inline functions, so there is no type checking whatsoever in that case.