https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70894
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- This specific builtin was removed in GCC 12 by r12-2848. But here is a testcase which still ICEs on the trunk: typedef __simd64_int8_t int8x8_t; int8x8_t g (signed char __a, int8x8_t __b, const int __c) { return (int8x8_t)__builtin_neon_vset_lanev8qi ((__builtin_neon_qi) __a, __b, __c); } The problem is obvious the char (QImode) argument gets prompoted to int (SImode) and copy_to_mode_reg is used without the change of the mode back down to QImode.